假設我寫一個策略 進場是突破進場, 假設20天高
出場條件有兩個 跌破當初進場的高點3%就出場 假設行情繼續上漲 那就跌破20均線出場
但我不能寫成
HighPoint = highest(high[1], 20);
PriceThreshold = HighPoint * (1 - 3/ 100);
因為行情如果再創高 那們原本的高就會變成新創的高
那只要一回3%就被砍了
如果我定義一開始的60高為新變數 那基準就被錨定了, 那我要怎麼再出場雷達偵測他?
策略雷達回測失準 , 創高策略 要怎麼記憶進場點? 否則再創高 基數就會改變
- 336
- 最後發表 蓬蘇王杜 2024 十月 09
跌破當初進場的高點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);
但是策略雷達的進出場 腳本 要分開寫
那我在進場腳本紀錄的進場價,要怎麼讓出場腳本知道。謝謝教授
目前不同腳本,變數是無法溝通的。若你是當沖策略,建議用交易腳本處理,將進出場寫在同一個腳本。若是波段策略,則出場腳本用BarsLast函數賦予當初進場時的條件,以獲得相對距離K棒數,再透過相對K棒獲得當根K棒的最高價,最後計算出場價。若將來版更提供查詢建立庫存日期的功能,則可用getBarOffset賦予進場日期,以獲取進場當天的最高價。
教授 那這樣繼續創高 相對k棒位置不就會一直變動
那我波段 也可以直接全寫到交易腳本嗎
直接用變數記憶進場價格
上述程式碼只有在“空手”且創高時才會進場且記錄高點。有部位的時候不會記錄。波段策略可以寫在交易腳本,但考慮到可能部位有舊部位及今天進場的部位,所以一般我會將策略分為進場策略及出場策略,各自監控不同的股票。變數一經重啟策略就會歸零,所以記憶進場價格是沒有意義的。
謝謝教授 看來目前xs語法還沒辦法實現這樣的步驟
Hello 蓬蘇王杜,
小編補充,警示腳本進場出場需分成兩個腳本,故若出場的部分需要取用進場的資訊,則需要把進場邏輯一併寫到出場的腳本中,這樣出場腳本才能取用到對應的資訊。
交易腳本在回測時可以跨日,但即時在執行時每次啟動都會重新計算,故變數不會延續。
建議可以將所需資訊print出來,這樣在下次啟動時可以用input參數的方式來手動設定。
8 評論