不知道為什麼,我刻意用closed(i)跟close[i] 分別跑出場的回測,但會得到不同的結果。
我沒有用逐筆洗價,出場設定當日收盤,對大持股日設240天。
settotalbar(260); --> 這應該已設夠大了
判斷式子的僅單純做以下替換,卻會出現不同結果
if closed(i) < average(closed(i),20)
if close[i] < average(close[i],20)
** 以上i可能會設在1~10之間
不知道為什麼,我刻意用closed(i)跟close[i] 分別跑出場的回測,但會得到不同的結果。
我沒有用逐筆洗價,出場設定當日收盤,對大持股日設240天。
settotalbar(260); --> 這應該已設夠大了
判斷式子的僅單純做以下替換,卻會出現不同結果
if closed(i) < average(closed(i),20)
if close[i] < average(close[i],20)
** 以上i可能會設在1~10之間
補充一下~
假設您用日頻率跑的話,
closed(1) 跟 close[1] 就會是同一條了!
不過我只有用日的頻率去跑回測,我看了一下明細,買進跟賣出也都是"日"的收盤價
目前從一些明細看起來,close[1]好像才是正確的(但我沒有100%把握),closed(1)感覺就是怪怪的有問題
小豪大 您好
如果您是要使用日頻率的話,建議您使用close[1],就可以了。
假設這個困擾困在您心中,讓您日有所思,夜有所夢XD
那您可以把您有疑問的點,截圖下來
並提供小幫手您的策略匯出檔(記得幫我勾選下 匯出選股策略所含的自訂腳本)
讓我們一起化解您的疑問!
程式碼如下,可以直接跑進場策略的回測
input:day(8); setinputname(1,"跌破的第幾天");
input:length(20); setinputname(2,"移動平均線期別");
settotalbar(260);
variable: i(1);
if close[0] < average(close[0], length) then
begin // 尋找今天是跌破的第幾天
i = 1;
while close[i] < average(close[i],length)
begin
i = i + 1;
end; //得到今天是跌破第第i天
if i = day then //當今天是跌破的第day天,則return
begin
ret = 1;
end;
end;
跑完再把改成close[]的地方改成closed(),會發現closed()的進場次數明顯少很多,
除此之外,去看交易分析查看明細,會發現兩種的進場方式很多地方不同
請問這個問題後來有解決了嗎? 我現在也是遇到類似的問題, 例如在策略雷達內的頻率設定為30分鐘, 想要取得開盤後前一日的5日均線值average(closed(0),5), 但卻得到錯誤的數值, 為何會這樣??
Hello maymay,
小幫手會建議您在跨頻率時改用 GetField("Close", "D") 來取代 CloseD。
依您的需要,開盤時要取前一日的5日收盤價平均值的話,可以這樣寫:
Average(GetField("Close", "D")[1], 5)
如此就不會有錯誤。
10 評論