策略雷達回測失準 , 創高策略 要怎麼記憶進場點? 否則再創高 基數就會改變

  •   336 
  • 最後發表   蓬蘇王杜  2024 十月 09
蓬蘇王杜 發文於   2024/10/02

假設我寫一個策略 進場是突破進場, 假設20天高
出場條件有兩個 跌破當初進場的高點3%就出場 假設行情繼續上漲 那就跌破20均線出場
但我不能寫成  

HighPoint = highest(high[1], 20);
PriceThreshold = HighPoint * (1 - 3/ 100);

因為行情如果再創高  那們原本的高就會變成新創的高
那只要一回3%就被砍了

如果我定義一開始的60高為新變數 那基準就被錨定了,    那我要怎麼再出場雷達偵測他?

排序方式: 標準 | 最新
虎科大許教授 發文於   2024/10/02

跌破當初進場的高點3%就出場,你需要記錄進場時候的高點。

if position=0 and c cross over highest(high[1], 20) then

   begin

      setPosition(1);      

      HighPoint=h; //進場當下K棒的最高價

   end;

if c < HighPoint * (1 - 3/ 100) then setPosition(0);

蓬蘇王杜 發文於   2024/10/02

但是策略雷達的進出場 腳本 要分開寫

那我在進場腳本紀錄的進場價,要怎麼讓出場腳本知道。謝謝教授

虎科大許教授 發文於   2024/10/02

目前不同腳本,變數是無法溝通的。若你是當沖策略,建議用交易腳本處理,將進出場寫在同一個腳本。若是波段策略,則出場腳本用BarsLast函數賦予當初進場時的條件,以獲得相對距離K棒數,再透過相對K棒獲得當根K棒的最高價,最後計算出場價。若將來版更提供查詢建立庫存日期的功能,則可用getBarOffset賦予進場日期,以獲取進場當天的最高價。

蓬蘇王杜 發文於   2024/10/02

教授 那這樣繼續創高 相對k棒位置不就會一直變動

蓬蘇王杜 發文於   2024/10/02

那我波段 也可以直接全寫到交易腳本嗎
直接用變數記憶進場價格

虎科大許教授 發文於   2024/10/02

上述程式碼只有在“空手”且創高時才會進場且記錄高點。有部位的時候不會記錄。波段策略可以寫在交易腳本,但考慮到可能部位有舊部位及今天進場的部位,所以一般我會將策略分為進場策略及出場策略,各自監控不同的股票。變數一經重啟策略就會歸零,所以記憶進場價格是沒有意義的。

蓬蘇王杜 發文於   2024/10/02

謝謝教授 看來目前xs語法還沒辦法實現這樣的步驟

XS小編 發文於   2024/10/09

 Hello 蓬蘇王杜,

 

小編補充,警示腳本進場出場需分成兩個腳本,故若出場的部分需要取用進場的資訊,則需要把進場邏輯一併寫到出場的腳本中,這樣出場腳本才能取用到對應的資訊。

交易腳本在回測時可以跨日,但即時在執行時每次啟動都會重新計算,故變數不會延續。

建議可以將所需資訊print出來,這樣在下次啟動時可以用input參數的方式來手動設定。

發表回覆
Close