新手一問(回測用1minDATA好還是Tick-DATA好)?
本帖最後由 ncygrvgp 於 15-10-21 02:39 編輯由於在下是一位新人,首先謝謝進來參與問題討論的人。{:4_199:}
題目如上, 目前在youtube上學到了一套海龜交易法,其代碼如下
SetOption("MAXOpenPositions",50); \SetPositionSize (70,spsPercentOfEquity);
HighestValue = HHV(Close,85);
LowestValue = LLV(Close,35);
LowestValue1 = LLV(Close,85);
HighestValue1 = HHV(Close,35);
Buy = Close >= HighestValue;
Sell = Close <= LowestValue;
Short= Close <= LowestValue1;
Cover= Close >= HighestValue1;
Buy = ExRem(Buy,Sell);
Sell = ExRem(Sell,Buy);
Plot (HighestValue, "85High",colorGreen,styleLine,0,0,0,0);
Plot (LowestValue, "35Low",colorRed,styleLine,0,0,0,0);
資料分別使用群益的十年數據中的期貨 1分 數據,
以及 Tick 數據卻得到了兩個不同的結果,
現在苦惱到底哪個比較有參考價值?
Backtester settings 中的Periodicity 設定為3-minute
附圖左邊用的是1分鐘的數據,右邊用的是Tick的數據。
光看結果,當然是TICK的數據比較好,
可是總不能那麼主觀,
所以想問問大家意見
希望有前輩能指教指教,
小弟不勝感激{:4_662:}
注意 Close,因為分k用的是那個k的close,tick就是當下的
設定 buyprice, sellprice, shortprice, coverprice
設定得好,理當回得到差不多的結果
謝謝你,我會再研究看看{:4_186:}
想說還是回一下好了,可以省下你很多寶貴的時間
先不管分K 還是 tick
如果你的進出場條件是 close 大於或小於某值
buyprice/sellprice/shortprice/coverprice
必須是當根K的收盤價或是次根K的開盤價
不然你這個策略的回測是不能參考的 (無論手動或是自動交易)
因為 close 這個價位在K線(即時報價)還沒收完時,是不固定的
它可能這一秒大於某值、下一秒小於某值、或是等於某值
那你的訊號只會跳來跳去
參考看看吧~~
kilroy 發表於 15-10-22 13:04 static/image/common/back.gif
想說還是回一下好了,可以省下你很多寶貴的時間
先不管分K 還是 tick
謝謝版主回覆~~
現在先看buyprice/sellprice/shortprice/coverprice 怎麼設定~
然後再修改看看~~{:9_634:}
你可以把 close改成high,就會觸價成交,就不會有跳來跳去的問題
當然還是要看你的策略理念 如果要寫類似像...
buy = high > 某值
short = low < 某值
要留意當根K同時符合這兩個條件的BUG
這也會讓訊號出現又不見
---
回測報表是看不出來這個問題的
參考看看了 kilroy 發表於 15-10-22 19:48 static/image/common/back.gif
如果要寫類似像...
buy = high > 某值
明白明白, 己經像版主說的那樣
用High 跟Low來寫了,目前在測試中。
想請教一下如果寫成 訊號出現後,
下一根K 才進行買賣 會不會很難?{:4_144:}
爬文參考了版主的其中一篇後目前加入了兩句。
Buyprice=sellprice=O;
Shortprice=coverprice=O;
這個意思就是買在下根K的開盤價是吧?
本帖最後由 lwhuang 於 15-10-22 21:25 編輯
你要等收k就不需要用high low取代close了,但是這就是分k跟tick的差別所在
要等收k就這樣
Buy = Ref(Close, -1) >= HighestValue;
Buyprice=O;若你要等收k的high
Buy = Ref(High, -1) >= HighestValue;
Buyprice=O;但是以你的原始問題,這樣意義不大,因為1分鐘後價都不知道到那裡去了,要用分k接近tick的效果,就要當k下單,不然你就用tick,但是這樣資料庫很快就會爆掉
一切還是要看你的策略精神,在實盤時細節很多要注意,儘量做到回測跟實盤一樣的條件
嗯,謝謝前輩指導。
目前還沒敢去實盤操作,到非常有把握才會去跑。{:4_186:}
估計還要學習半年到一年才會熟悉{:4_208:}
本帖最後由 lwhuang 於 15-10-23 07:40 編輯
反過來說也成立
回測時就要想好實盤怎麼做,不然可能會測到無法交易的回測
想像一下你完全不知道後面的價是什麼,因為報價還沒來,跟歷史資料什麼都有不同
回測到績效超好的,就要懷疑可能是程式寫錯了
建議先把部位管理拿掉SetOption("MAXOpenPositions",50);
SetPositionSize (70,spsPercentOfEquity); 用單口回測,有績效後再加SetPositionSize( 1, spsShares );
SetOption("FuturesMode", 1);
討論而已,我也不一定對,版上大大評論一下,若有誤請指正 本帖最後由 ncygrvgp 於 15-10-23 18:45 編輯
我也懷疑過是不是程式問題, 曾經把口數限制為1口。
然後就賺不了錢了,還一直虧到本金都沒了才停止。
也不知道是什麼原因{:4_186:}
目前寫了一個時間控制的語法,目的在於控制倉位在中午不過巿,和收盤前平掉所有倉位。
可是還是會看到有持倉過夜的情況,真的不知道哪裡有錯了
tn = TimeNum();
startTime = 103000; // start in HHMMSS format
endTime = 115500;// end in HHMMSS format
timeOK = tn >= startTime AND tn <= endTime;
tm = TimeNum();
startTm = 130000; // start in HHMMSS format
endTm = 160000;// end in HHMMSS format
timeOk1 = tm >= startTm AND tm <= endTm;
Buy = H >= HighestValue AND (timeOK OR timeOk1);
Sell = L <= LowestValue or Cross(tn,endtime) OR Cross (tm,endtm);
Short= L <= LowestValue1 AND (timeOK OR timeOk1);
Cover= H >= HighestValue1 or Cross(tn,endtime) OR Cross (tm,endtm);
多用plot在Data window裡印出資料debug,只是Data window有個數限制Plot( Sell, "Sell", colorCycle, styleDots | styleNoLine | styleOwnScale | stylenodraw); 海龜應該是波段的吧~一分K就夠了~~
TICK會漏K
頁:
[1]