請高手幫忙解決求解~ 針對我的策略讓回測更精準一些

  •   84 
  • 最後發表   桂桂  5 天前
桂桂 發文於   2024/07/03

我的策略在下方,使用5分K,回測商品(8104),日期為2024/7/3

勾選,觸發極判斷成交及逐筆交易 ~ 這樣的策略及條件下7/3去回測商品(8104)不會交易到!

但用一樣的方式改用1分K就會判斷有交易到!

猜想是用5分K回測他判定 {close[1] cross over value1 }的時候下一刻漲幅大於3%了所以不會交易{and getField("收盤價", "D")<= getField("參考價", "D")*1.03}

但實際上實跑程式交易時候選擇逐筆交易,卻是會成交的,因為9:15分判定條件成立後下一秒是沒有大於3%所以會下單

想問各位大神跟小幫手~ 要怎麼讓回測再貼近一點實際交易? 針對這個策略如何讓他在精準一點!

畢竟我回測也有選逐筆交易了~~

 

 

 

if getfielddate("Date","5") <> getfielddate("Date","5")[1]   

then begin 

    value1 = high; 

value2 = low;   

end;         

if  time>091000      

and getField("收盤價", "D")>=getField("參考價", "D") 

and getField("收盤價", "D")<= getField("參考價", "D")*1.03

and close[1] cross over value1 

then setposition(-1,market);

排序方式: 標準 | 最新
虎科大許教授 發文於   2024/07/03

回測時,勾逐筆洗價,並非每個TICK洗價一次,而是將5分K分成5個1分K洗價。8104在091500的第一分鐘收盤已經超過3%,所以不會下單。實際交易時,C是即時成交價,091500開盤時47.4,漲幅還沒有超過3%,所以會下單。

  • 按讚來自於
  • ddh090101
桂桂 發文於   2024/07/04

謝謝教授幫忙解答~  想請問我這策略有沒有什麼方式優化讓回測更精準?

應該說更貼近實際交易~

虎科大許教授 發文於   2024/07/04

XQ的回測有一定的侷限,要與真實的情況相同,除非真的用逐筆洗價跑回測,但這又不可行(因為再好的硬體都負荷不來)。我會建議你用模擬單測試。它會比較接近真實情況。

桂桂 發文於   2024/07/04

謝謝教授~

有些策略一年交易次數少,回測的優點就是可以驗證過去長時間績效好不好~ 如果用模擬單去測試難道要測試一年.. 發現跟回測誤差太大然後又測試其他的~  感覺太不切實際 

自學到寫出好的回測績效,卻與實單不同又無法解決滿讓人沮喪的XD

虎科大許教授 發文於   2024/07/04

其實還有一種方式可以讓回測更接近真實一些,那就是撰寫專門測試用的交易腳本,以Print交易訊號,只是這種方法程式寫起來,落落長。一方面要Print買賣訊號,要記錄損益,及勝率(報酬率及勝率是最基本的兩項績效指標,當然要加入其他績效指標也是可以,只是程式會更複雜)。以突破而言,XQ回測的逐筆洗價,突破的買賣點在價格波動大的商品,例如期貨,進出場價格與實際該有的價格往往差很多。以下擷取專門測試用的交易腳本部份的程式碼供你參考。

if condition1 and condition2 then

begin

setposition(1,market);

count+=1;

ProfitCount+=1;

OutPrice=myH+1;

myPos=1;

mytime=time;

InPrice=myH+1;

Msg="(向上突破-買進)";

end;

if condition11 and condition2 then

begin

setposition(-1,market);

count+=1;

ProfitCount+=1;

OutPrice=myL-1;

Profit=Profit+OutPrice-InPrice;

if OutPrice-InPrice>0 then WinTimes+=1 else LossTimes+=1;

print("賣出成交價格",numtoStr(OutPrice,0),"買進庫存成本",

numtoStr(InPrice,0),"本期損益",numtoStr(OutPrice-InPrice,0),

"累積損益",numtoStr(Profit,0),

"報酬率",numtoStr(100*(profit-(Profitcount-1))/2500,2),"%",

"勝率",iff(Profitcount-1>0,100*WinTimes/(Profitcount-1),0),"%",

"總交易次數",numtoStr(Profitcount-1,0));

桂桂 發文於   2024/07/06

謝謝教授~  

我需要時間慢慢消化XD~  

 

再次感謝你即時的回覆!!

XS小編 發文於   2024/07/10

Hello 桂桂,

 

小編補充,回測運算因為許多因素導致無法和實際執行相同。

關於回測運算的執行方式討論區裡已經有許多回覆是在講解這一塊,或是可以參考教學區的文章。

 

若要讓回測和實際執行兩者盡量相近的話,建議可以使用非逐筆洗價會比較適合,這樣兩者都會在 Bar 結束的時候才運算。

  • 按讚來自於
  • Pingzz0719
發表回覆
Close