選股中心顯示近期觸發次數,但不要 Print 出過往記錄的方法

  •   215 
  • 最後發表   iker  2023 三月 13
iker 發文於   2023/03/08

我在選股策略裡,因為想要在選股中心每日選出標的時,顯示該標的過去10天內觸發過幾次訊號,所以按以下寫法處理: 

SetTotalBar(10); 

if Condition1 and Condition2 then begin
    print(xxxxx);
    ret = 1;
end;

OutputField1(Countif(Condition1 and Condition2, 10), "近期觸發次數");


但當我跑指定一天的選股時(例如 2023/03/08),如果該標的過去 10 天內有滿足過觸發條件,就會一次把 10 天有觸發過條件的都印出來。用 SetTotalbar(1) 能避免印出過去 10 天觸發的結果,但沒辦法做到顯示 Count。不用 Countif 改用 value1 自己手動去 count 也無法改變打印出 10 天有觸發過條件的問題。

另外也試過 filter 功能,跑回測看起來有確實的過濾掉短期內觸發的次數,但 print 還是會印出那些被忽略的觸發記錄

if Filter(Condition1 and Condition2, 10) then begin
    print(xxxx);
    ret = 1;
end;


我期待的是只需要印出我所選擇日期的觸發記錄,而不是把所有日期都印出,想請問該怎麼改才能做到呢?

排序方式: 標準 | 最新
XQ小幫手 發文於   2023/03/10

 Hello iker,

 

您可以使用 islastbar 函數,這樣就只會印出最後一根Bar的資訊。

 

iker 發文於   2023/03/10

Hi 小幫手

您的意思是要寫成這樣嗎?

if Condition1 and Condition2 then begin
    if IsLastBar then print(xxx);
    ret = 1;
end;


如果我希望回測的時候能把觸發的訊號都印出,只有單純在選股中心點擊指定日期查詢才是只印出該日期的訊號,是不是還需要透過另一個參數來做控制,例如下面這樣:

input: IsBacktesting(1, "是否為回測模式");

if Condition1 and Condition2 then begin
    if IsBacktesting = 1 or isLastBar then print(xxx);
    ret = 1;
end;

還是這個自定參數 IsBacktesting 可以改用 GetInfo("FilterMode") = 2 還是 3 取代?
(看了 GetInfo Help 裡的說明不太明白 2 跟 3 的差異,尤其是 2 寫是回溯、3 寫是回測(進場)...) 

iker 發文於   2023/03/10

另想請問回測容易print超過回測區間的歷史觸發資料,例如預期要回測 2023/01/01-2023/03/10,print 指令卻會印出大量在 2023/01/01 以前的訊號。

推測是因為資料讀取筆數造成,但由於腳本裡面沒有指定 SetBackBar,不太確定系統是怎麼判斷會多讀取幾期的資料。

想知道應該怎麼避免印出回測範圍以外的資料?

 

 

 

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

Hello iker,

 

回溯是選股中心在策略上點選往前的日期,跟回測不同。(參考附圖)

所以您這邊應該是要使用 getinfo("FilterMode") = 3 來判斷是否為回測才對。

 

就小幫手所知目前沒有函數可以判斷選股執行區間是否為資料讀取筆數。

setbackbar 是資料引用筆數, settotalbar 才會是資料讀取筆數。

若在腳本中沒有設定的話,就會是在策略/回測中設定。(參考附圖)

若不希望印出預讀筆數中的運算,建議您可以在腳本中撰寫回測的開始結束日期當作條件來判斷。

發表回覆
Close