Closed(i) 跟close 出現不同的結果

  •   1.4K 
  • 最後發表   小小小小小小小豪  2021 六月 02
小小小小小小小豪 發文於   2020/07/15

不知道為什麼,我刻意用closed(i)跟close[i] 分別跑出場的回測,但會得到不同的結果。

我沒有用逐筆洗價,出場設定當日收盤,對大持股日設240天。

settotalbar(260);  --> 這應該已設夠大了

判斷式子的僅單純做以下替換,卻會出現不同結果

if closed(i) < average(closed(i),20)

if close[i] < average(close[i],20)

** 以上i可能會設在1~10之間

排序方式: 標準 | 最新
dean60061 發文於   2020/07/16

小豪 您好:
closed(i)語法只能使用在日頻率以下的線圖,在包括日以上的頻率是無法使用的,它會記錄前一「日」的收盤價。
close[1]則是前一根k棒的收盤價。
我們舉個例子 今天7/16 9:56 2330在5分k情況下,closed(1)會等於363(昨天收盤),close[1]=358前一根收盤價。

plot2(CloseD(1));
plot1(close[1]);
您可以把上面腳本放入指標,拿五分k的線圖看一下,就能更有畫面感囉!

 

以下網址為closed的介紹,提供給您參考,謝謝您
closed

dean60061 發文於   2020/07/16

補充一下~

假設您用日頻率跑的話, 

closed(1) 跟 close[1] 就會是同一條了!

 

小小小小小小小豪 發文於   2020/07/17

不過我只有用日的頻率去跑回測,我看了一下明細,買進跟賣出也都是"日"的收盤價

目前從一些明細看起來,close[1]好像才是正確的(但我沒有100%把握),closed(1)感覺就是怪怪的有問題

dean60061 發文於   2020/07/17

小豪大 您好

如果您是要使用日頻率的話,建議您使用close[1],就可以了。
假設這個困擾困在您心中,讓您日有所思,夜有所夢XD
那您可以把您有疑問的點,截圖下來
並提供小幫手您的策略匯出檔(記得幫我勾選下 匯出選股策略所含的自訂腳本)
讓我們一起化解您的疑問!

小小小小小小小豪 發文於   2020/07/17

程式碼如下,可以直接跑進場策略的回測

 

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()的進場次數明顯少很多,

除此之外,去看交易分析查看明細,會發現兩種的進場方式很多地方不同

 

 

XQ小幫手 發文於   2020/07/20

小豪 您好

小幫手幫您測試過了,

主要的問題並非在close 跟 closed兩個語法上,兩者皆可取得相同過往的數字

而是在於您的策略所使用到的迴圈while上面,

( [ i ] 並不會隨著迴圈的累積,而改變他的數值,使得close[i]數字不會改變)

這可能需要請您在思考一下,您想要怎麼建構您的策略並撰寫。 謝謝您

  • 按讚來自於
  • 徐小豪
小小小小小小小豪 發文於   2020/07/21

謝謝你熱心的回答

我試了一下,發現問題不是出在while迴圈,而是出在average()的函數,以下結果:

1. 當程式碼全部用close[ ]來寫,則結果完全正確,close[i]數值會改變  (否則迴圈會跳不出來)

2. 當我把average()括號裡面的close[]維持不變,其餘部分所有close[]都改成closed()來寫,則結果完全跟1.一樣也是正確

3. 只有當我將average()括號裡的close[]改成closed()時,才出現不同的結果! 

 

看起來應該是average()函數這樣使用上的問題,但是我還在研究為什麼average搭配這樣使用會有問題

 

 

 

 

 

 

 

  • 按讚來自於
  • b24524658
XQ小幫手 發文於   2020/07/22

小豪 您好

謝謝您的指點,

小幫手會再幫您測試看看,

有找到原因會再向您報告 謝謝您

  • 按讚來自於
  • 徐小豪
maymay 發文於   2021/06/01

請問這個問題後來有解決了嗎? 我現在也是遇到類似的問題, 例如在策略雷達內的頻率設定為30分鐘, 想要取得開盤後前一日的5日均線值average(closed(0),5), 但卻得到錯誤的數值, 為何會這樣??

XQ小幫手 發文於   2021/06/02

Hello maymay,

 

小幫手會建議您在跨頻率時改用 GetField("Close", "D") 來取代 CloseD。

依您的需要,開盤時要取前一日的5日收盤價平均值的話,可以這樣寫:

Average(GetField("Close", "D")[1], 5)

如此就不會有錯誤。

 

發表回覆
Close