COCO研究院

 找回密碼
 註冊
搜索
查看: 3915|回復: 10

請教一個 Multicharts 的問題

[複製鏈接]
發表於 13-11-2 21:06 | 顯示全部樓層 |閱讀模式
我正在開發一策略,只有兩個變數,
一個是起始時間 STARTTIME, 和一個普通數值變數MH.

12345.png


問題來了, 我給它 3D最佳化時,發現時間變數出了問題
9:50之後,不是 10:00, 而是9:60,  9:70  …….
請問, 要如何處理才正確?  Thanks.





 樓主| 發表於 13-11-2 21:37 | 顯示全部樓層
補充說明: 回測時間 間隔是 10分.
發表於 13-11-2 21:57 | 顯示全部樓層
要用時間函數去轉換,程式有點麻煩,不過是可以做到的

評分

參與人數 1金錢 +2 收起 理由
googleandy + 2 太強了

查看全部評分

 樓主| 發表於 13-11-2 22:05 | 顯示全部樓層
comewish 發表於 13-11-2 21:57
要用時間函數去轉換,程式有點麻煩,不過是可以做到的

有道理, 我花點時間去轉換看看. thanks.
發表於 13-11-2 22:16 | 顯示全部樓層
本帖最後由 sangi 於 13-11-2 22:19 編輯

C 大已經點出重點了...

我的作法如下:

訊號:
Inputs: BeginOffset(0)  , EndOffset(30) ;
Vars: FirstBarTime(845),EODTime(1345),BeginTime(0),EndTime(0) ;

BeginTime = ELTimeAdd(FirstBarTime,BeginOffset,"MM") ;
EndTime = ELTimeAdd(BeginTime,EndOffset,"MM") ;

Condition1 =  (EndTime > BeginTime) AND (EndTime < EODTime) ;
Condition2 = (Time >= BeginTime) AND (Time < EndTime) ;
If (Condition1 AND Condition2) Then
Begin
{交易訊號}
End ;

我的想法是,先由當天第一根Bar的時間Offset 一段時間當作開始交易時間,

再由開始交易時間Offset 一段時間當作停止交易時間,要來最佳化就方便多了..

-----------------------
函數: ELTimeAdd

Inputs: ELTime(NumericSimple) , NumberAdd(NumericSimple) , Interval(StringSimple) ;

Switch (Interval)
Begin
  Case "HH" :
    Begin
      Value1 = 60 * IntPortion(ELTime * 0.01) + 100 * FracPortion(ELTime * 0.01) + NumberAdd * 60 ;
      ELTimeAdd = 100* Mod(IntPortion(Value1 * 1/60) ,24) + (Value1 - 60 * IntPortion(Value1 * 1/60)) ;
    End ;
  Case "MM" :
    Begin
      Value1 = 60 * IntPortion(ELTime * 0.01) + 100 * FracPortion(ELTime * 0.01) + NumberAdd ;
      ELTimeAdd = 100 * Mod(IntPortion(Value1 * 1/60) ,24) + (Value1 - 60 * IntPortion(Value1 * 1/60));
    End ;
  Case "SS" :
    Begin
      Value1 = IntPortion(ELTime / 10000) ;
      Value2 = IntPortion((ELTime - Value1 * 10000) / 100) ;
      Value3 = 60 * 60 * Value1 + 60 * Value2 + IntPortion(FracPortion(ELTime / 100) * 100) + NumberAdd;
      Value4 = IntPortion(Value3 /(60*60)) ;
      Value5 = IntPortion((Value3 - 60 * 60 * Value4 )/60) ;
      ELTimeAdd = 10000 * Mod(Value4,24) + 100 * Value5 + Value3 - (60 * 60 * Value4 + 60 * Value5);
    End ;
End ;  


評分

參與人數 1金錢 +2 收起 理由
googleandy + 2 太強了

查看全部評分

 樓主| 發表於 13-11-2 22:19 | 顯示全部樓層
sangi 發表於 13-11-2 22:16
C 大已經點出重點了...

我的作法如下:

謝謝 Snagi大花時間寫那麼長的程式碼.
我慢慢消化看看.
 樓主| 發表於 13-11-2 22:23 | 顯示全部樓層

如果懶惰的話,

我們是否可以這麼說---
電腦幫我們算 9:60, 9:70, 9:80, 9:90....是多餘的.

不要理會多餘的部份,
我們只看我們想要的範圍就好.
反正3D也只是看看參考而已.


發表於 13-11-2 22:25 | 顯示全部樓層
EL 處理時間的形式有分 DateTime 與ELTime...

一般845 這種ELTime的形式是沒辦法做運算的,要轉成DateTime...

所以我才需要上面那個自訂函數來轉換時間做運算..

評分

參與人數 1金錢 +2 收起 理由
googleandy + 2 是的,ELTime直接運算可能出狀況..

查看全部評分

發表於 13-11-2 22:32 | 顯示全部樓層
googleandy 發表於 13-11-2 22:23
如果懶惰的話,

我們是否可以這麼說---

這樣的表示在圖形上會有一塊不符定義的區間佔住,

自然也就會影響判讀圖形...

評分

參與人數 1金錢 +2 收起 理由
googleandy + 2 沒錯,所以我說,懶惰的話.....

查看全部評分

發表於 13-11-2 22:38 | 顯示全部樓層
A大是要測試 哪個時間進場或出場的效果比較吧?

很簡單
var : dbarcnt(0);
if d>d[1] then dbarcnt=0;
dbarcnt=dbarcnt+1;

dbarcnt就是當天的第幾根。用當天的第幾根來測,就沒有問題了。

評分

參與人數 2金錢 +4 收起 理由
Acer2266 + 2 正解 算K棒就好了
googleandy + 2 太強了

查看全部評分

 樓主| 發表於 13-11-2 22:44 | 顯示全部樓層
wldtw2008 發表於 13-11-2 22:38
A大是要測試 哪個時間進場或出場的效果比較吧?

很簡單

吔, 這是好主意,
反正時間軸也想當於第幾根K棒,
而且省事很大.
我試試看. thanks.
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

手機版|Archiver|站長信箱|廣告洽詢|COCO研究院

GMT+8, 24-11-25 12:23

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回復 返回頂部 返回列表
理財討論網站 |