OutputField 產出的資料異常

  •   83 
  • 最後發表   yoson  2023 十二月 15
yoson 發文於   2023/11/27

以下程式碼,OutputField 產出的資料異常 {請看圖檔的紅框處,資料不應是0}

 input:  enddate(20231109,"結束日期"); 

variable:rss(0),end_date(0);

 

end_date=HYS_getbaroffset(enddate) ; 

setfirstBarDate(20230601); 

value1=GetSymbolField("TSE.TW","收盤價","D");

if value1<>0 then  rss=CLOSE/value1*10000; 

 

if close[end_date]<lowest(close[end_date+50],3) and rss[end_date]>highest(rss[end_date+20],3)

then ret=1;

 

OutputField(7,  round(rss[end_date],2),"rss>");

OutputField(9,  round(highest(rss[end_date+20],3),2),"highest rss"); 

 

 

XQ小幫手 發文於   2023/12/15

Hello, yoson.

小幫手這邊沒有您HYS_getbaroffset(...)這個自定函式的內容,沒辦法幫您確認問題在哪裡,

但是,這邊有個小建議,lowest(close[end_date+50],3)您這邊使用的end_date是變動的,

所以Lowest這次計算完下次會取最低的那筆直接與變動的那筆做計算,當end_date與前次計算時有變動,會造成K棒漏計算,

 

所以當您的計算是有下列幾種情況時,

1. 呼叫Highest(<計算式>,<期別>)時,<計算式>是一個跨頻率的函數時。

{ 假設執行頻率是分鐘頻率, GetField(“Low”, “D”)抓的則是日線序列 }
value2 = Highest(GetField(“Low”, “D”), 10);

2. 呼叫Highest(<計算式>,<期別>)時,<計算式>在不同bar會抓取不同的序列資料的話。

value1 = mod(currentbar, 5); 
value2 = Highest(Close[value1], 10); 
{ Close[value1]在每根bar都會抓到不同的前10筆序列 } 

3. 呼叫Highest(<計算式>,<期別>)[<往前筆數>]時,而這個[<往前筆數>]在每一根bar不一樣的話的話。

value1 = mod(currentbar, 5); 
value2 = Highest(Close, 10)[value1]; 
{ value1每根bar都不一樣 } 

建議您使用Simplelowest(...)及SimpleHishest(...),謝謝。

發表回覆
Close