警示出場腳本想設定收盤前再判斷是否符合條件

  •   38 
  • 最後發表   looneqza  2025 九月 04
looneqza 發文於   2025/08/30

因為交易回測只能回測到2019左右,我想做更長時間的回測,所以改用警示腳本進行回測,

在警示腳本日頻率回測時,我的出場腳本都是寫月均線> close,

回測出來的結果,有K棒下影線跌破 (應該是當日盤中有符合腳本的條件),他就出場了,

但收盤是站回月線未符合條件的,

我在使用交易回測時,可以設定 condition1 = currentTime>132800 and currentTime<134500;//限制尾盤再開始執行,

但警示設定加入這一個條件,他就不會有出場,

請問警示腳本該如何寫才能讓出場都是在接近收盤價的位置 ??

排序方式: 標準 | 最新
虎科大許教授 發文於   2025/08/31

(1)你限制最後17分鐘才判斷日K收盤價有沒有跌破20日均線。若收盤價沒在這17分鐘之內跌破20日均線,當然不會出場。

(2)回測的程式寫法與真實交易的程式寫法可能不同。希望在跌破當下就出場與尾盤跌破才出場或尾盤判斷今天曾經跌破才出場,寫法也不一樣,績效當然也會不同。

(a)你目前的寫法close < avergae(close,20)是跌破月線當下就出場。

(b)要在最後17分鐘判斷今天是否曾經跌破月線,若跌破才出場,由於均線數值隨著盤中價格改變而改變,我們無從得知盤中跌破當下的均線值,因此需要設定一個變數幫忙記錄。

var: intrabarpersist hasRet(false);

if isFirstCall("Date") then hasRet=false; //每天恢復變數預設值

if close <  avergae(close,20) then hasRet=true; //盤中價格若有低於月線,則設定變數為true

if currentTime>132800 and currentTime<134500 and hasRet=true then 

   begin

      hasRet=false; //只警示一次

      ret=1;

   end;

looneqza 發文於   2025/08/31

感謝回覆,

我可能沒有說清楚,上面寫的不會有出場,

指的是到最後都沒有出場的紀錄,

也就是我加入時間條件後,回測出來,

只有進場訊號並持有到最後,沒有出場訊號,

我回測的標的是流動性好的期貨,

而且我是希望不管盤中有沒有跌破月線,

都只要在收盤前再進行判斷,

並有符合就在收盤前成交。

虎科大許教授 發文於   2025/08/31

進入時間條件之所以沒有出場,是因為那17分鐘,價格沒有低於月線。

looneqza 發文於   2025/08/31

我是用警示回測日頻率交易,因為現在我回測在進場腳本下,都會是在日收盤價成交,但出場腳本會在盤中跌破就出場,

而且我使用的出場條件是價格只要是月線下就出場,也不是一定要K棒穿過月線這種條件,

因為盤中就會停損或停利出場,所以我之前只在出場腳本加入時間條件去做測試,

但加入後,即使我回去看日K是有跌破月線下,但還是沒有出場,

 

如果我把時間改為開盤開始 condition1 = currentTime>084500 and currentTime<134500;

並將這一條件加入進場及出場腳本,結果會是完全沒有交易紀錄,

但我在交易腳本的回測中使用以下這個限制尾盤再執行是沒有問題的。

 condition1 = currentTime>132800 and currentTime<134500;//限制尾盤再開始執行,

虎科大許教授 發文於   2025/08/31

(1)你在尋求協助,若盤中曾經低於均線,接近收盤時就出場。我已提供協助。你是否有嘗試測試看看我建議的程式寫法是否有符合預期?若沒有符合預期,你應該提供回饋,讓我知道問題並沒有解決且詳細敘述問題的樣態。

(2)盤中的均線會隨著即時成交價的改變一直改變,從收盤情況,並無法解讀收盤前17分鐘是否有跌破月線。

(3)進出場最好寫在同一個腳本,建議改用交易腳本處理你的問題。

XS小編 發文於   2025/09/04

Hello looneqza,

 

小編補充,分鐘頻率的資料長度不會因使用警示腳本或交易腳本作回測而有所差別。

 

若您使用日頻率非逐筆洗價的話,則currenttime都會回0。

 

若使用日頻率逐筆洗價的話,則沒有分鐘頻率部分的K棒會洗四次(OHLC),標示的 currenttime 則會是090000。

有分鐘頻率部分的K棒則會用1分鐘頻率K棒來模擬。

 

故您使用 currenttime 的條件很有可能都不符合,建議可以用 print 函數印出相關資訊來確認腳本運作。

發表回覆
Close