ncygrvgp 發表於 15-10-21 02:32

新手一問(回測用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:}





lwhuang 發表於 15-10-21 09:00

注意 Close,因為分k用的是那個k的close,tick就是當下的
設定 buyprice, sellprice, shortprice, coverprice
設定得好,理當回得到差不多的結果

ncygrvgp 發表於 15-10-21 13:01

謝謝你,我會再研究看看{:4_186:}

kilroy 發表於 15-10-22 13:04

想說還是回一下好了,可以省下你很多寶貴的時間

先不管分K 還是 tick

如果你的進出場條件是 close 大於或小於某值

buyprice/sellprice/shortprice/coverprice

必須是當根K的收盤價或是次根K的開盤價

不然你這個策略的回測是不能參考的 (無論手動或是自動交易)

因為 close 這個價位在K線(即時報價)還沒收完時,是不固定的
它可能這一秒大於某值、下一秒小於某值、或是等於某值

那你的訊號只會跳來跳去


參考看看吧~~

ncygrvgp 發表於 15-10-22 17:22

kilroy 發表於 15-10-22 13:04 static/image/common/back.gif
想說還是回一下好了,可以省下你很多寶貴的時間

先不管分K 還是 tick


謝謝版主回覆~~
現在先看buyprice/sellprice/shortprice/coverprice 怎麼設定~
然後再修改看看~~{:9_634:}



lwhuang 發表於 15-10-22 18:15

你可以把 close改成high,就會觸價成交,就不會有跳來跳去的問題
當然還是要看你的策略理念

kilroy 發表於 15-10-22 19:48

如果要寫類似像...

buy = high > 某值
short = low < 某值

要留意當根K同時符合這兩個條件的BUG

這也會讓訊號出現又不見

---
回測報表是看不出來這個問題的

參考看看了

ncygrvgp 發表於 15-10-22 21:07

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:18

本帖最後由 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,但是這樣資料庫很快就會爆掉

一切還是要看你的策略精神,在實盤時細節很多要注意,儘量做到回測跟實盤一樣的條件

ncygrvgp 發表於 15-10-23 02:29

嗯,謝謝前輩指導。
目前還沒敢去實盤操作,到非常有把握才會去跑。{:4_186:}

估計還要學習半年到一年才會熟悉{:4_208:}

lwhuang 發表於 15-10-23 06:57

本帖最後由 lwhuang 於 15-10-23 07:40 編輯

反過來說也成立
回測時就要想好實盤怎麼做,不然可能會測到無法交易的回測
想像一下你完全不知道後面的價是什麼,因為報價還沒來,跟歷史資料什麼都有不同
回測到績效超好的,就要懷疑可能是程式寫錯了
建議先把部位管理拿掉SetOption("MAXOpenPositions",50);
SetPositionSize (70,spsPercentOfEquity); 用單口回測,有績效後再加SetPositionSize( 1, spsShares );
SetOption("FuturesMode", 1);
討論而已,我也不一定對,版上大大評論一下,若有誤請指正

ncygrvgp 發表於 15-10-23 17:11

本帖最後由 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);

lwhuang 發表於 15-10-24 09:20

多用plot在Data window裡印出資料debug,只是Data window有個數限制Plot( Sell, "Sell", colorCycle, styleDots | styleNoLine | styleOwnScale | stylenodraw);

f70537111 發表於 15-10-26 09:15

海龜應該是波段的吧~一分K就夠了~~
TICK會漏K
頁: [1]
查看完整版本: 新手一問(回測用1minDATA好還是Tick-DATA好)?