回測跨商品相關問題

  •   114 
  • 最後發表   richardchien6  2023 三月 06
richardchien6 發文於   2023/03/01

小弟最近在試著寫策略跑回測,碰到一些卡住的點想不通

策略是針對台指期的

條件:

1. 1分鐘線60WMA均線和1分鐘線240WMA均線黃金交叉

2. 60分鐘線60WMA均線和1分鐘線240WMA均線黃金交叉

2種條件都符合才會進場

程式碼如下

var: WMA60(0), WMA240(0);

var:longWMA60(0), longWMA240(0);

 

 

WMA60 = WMA(close, 60);

WMA240 = WMA(close, 240);

 

value2 = getsymbolField("FITX*1.TF", "收盤價", "60");

longWMA60 = WMA(value2, 60);

longWMA240 = WMA(value2, 240);

 

if longWMA60 > longWMA240 then condition1 = true

else condition1 = false;

 

if WMA60 > WMA240 and condition1 then

ret = 1;

 

現在碰到的問題是,不知道程式是不是沒吃到60分鐘線的資料,即使60分鐘線的60WMA在240WMA下面仍然會進場,請大神解惑

以下附上60分鐘線圖及回測設定還有回測部分資料

粉色線為60WMA,紅色線為240WMA

很明顯的2023/1/3的線圖60分鐘線的60WMA在240WMA下,但回測數據中仍然進場了,想了解其中原因。謝謝解惑

附加文件

XQ小幫手 發文於   2023/03/06

 Hello richardchien6,

 

變數的執行頻率的跟著腳本的執行頻率。

value2 = getsymbolField("FITX*1.TF", "收盤價", "60"); 這邊 value2[1] 不會是上一根60分鐘Bar的收盤價,而是上一根1分鐘Bar的60分鐘收盤價。 (若執行頻率為1分鐘的話)

所以 longWMA60 這邊計算出來的值和圖上看到的應該會不一樣,您可以 print 出來確認。

 

WMA要跨頻率計算的話,可以使用 WMA(getsymbolField("FITX*1.TF", "收盤價", "60"), 60) 來計算。

需注意要有足夠的引用筆數,可以參考 SetBackBar 函數和裡面的說明。 

發表回覆
Close