停利停損計算

  •   417 
  • 最後發表   大A  2025 四月 01
大A 發文於   2025/03/26

請問網上各位,我的停利停損是要以符合進場條件的那根K棒為基準點,假設停利價格是設定符合進場條件K棒的高點減低點的價差,觸發後以市價出場,請問一下「符合進場條件的K棒」這個語法要怎麼表達?

進場條件 Close>close[1] and close > open[1] 及 GetField("成交量")>100

目前得到的資訊是這樣寫  

符合進場條件K棒  value1=barslast(進場條件);

進場K棒高點  value2=h[value];

進場K棒低點  value3=L[value];

停利價if filled > 0 then value4=FilledAvgPrice + value2 - value3

停利出場條件 if filled>0 and q_last>value4 then setposition(0,market);

停損價設if q_last < value3 

停損出場條件 if filled>0 and q_last<value3 then setposition(0,market);

我用小台測試的時候,完全不會觸發停利停損價,請問一下,以上語法需要怎麼修正?

以及要以進場的K棒的高低點價差做為停利停損的價位,應該要怎麼寫?  

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

value1=barslast(Close>close[1] and close > open[1] and GetField("成交量")>100);
value2=h[value1];
value3=L[value1];
if position>0 and filled>0 then 
    begin
        value4=FilledAvgPrice+value2-value3;//停利價位
        value5=FilledAvgPrice-(value2-value3);//停損價位
        if q_last>value4 or q_last<value5 then setposition(0,market);
    end;

大A 發文於   2025/03/26

感謝教授的說明,但目前用小台指來測試,始終不會觸發停利停損出場。這有可能會是什麼因素?

虎科大許教授 發文於   2025/03/26

你使用的頻率是什麼?還有,完整的程式碼是上面我提供的程式碼嗎?

大A 發文於   2025/03/27

1分鐘,是的,我也是想不通

虎科大許教授 發文於   2025/03/27

加上防呆機制(限用1分鐘頻率)、跑歷史K棒時return及Print每次洗價的5個value數值,應該就看得出是否有問題。

if barfreq<>"Min" or barinterval<>1 then raiseRunTimeError("限用1分鐘");
if getInfo("IsRealTime")=0 then return;
value1=barslast(Close>close[1] and close>open[1] and GetField("成交量")>100);
value2=h[value1];
value3=L[value1];
if position>0 and filled>0 then 
    begin
        value4=FilledAvgPrice+value2-value3;//停利價位
        value5=FilledAvgPrice-(value2-value3);//停損價位
        if q_last>value4 or q_last<value5 then setposition(0,market);
    end;
print(date,time,value1,value2,value3,value4,value5);

XS小編 發文於   2025/03/28

Hello 大A,

 

小編補充,您的條件算是不難達成的條件,所以隨著時間經過,可能會在尚未出場的情況下再度觸發。

舉例來說,策略在 9:30 進場,但 9:35, 9:40 都符合條件的話,barslast 取到的位置就會是最新的那一個 (9:40) 而非進場的 (9:30)。

建議可以嘗試在進場交易指令下出時用變數保存當下的高低點。

若因為逐筆洗價該根K棒尚未結束的話,可以改紀錄 CurrentBar 來算相對位置。

大A 發文於   2025/03/28

感謝教授跟管理員的回覆說明,我現在卡到的是在跑回測的時候,進出場條件都不會觸發,所以不知道要從何下手去找問題在哪?

虎科大許教授 發文於   2025/03/28

q_Last不能用來回測。這種報價資料不會被保留,所以無法回測。把q_Last改成 c 即可。

XS小編 發文於   2025/04/01

Hello 大A,

 

小編補充,若有發生錯誤的話,可以在回測報告中的回測執行商品確認 (參考附圖)。

附加文件

發表回覆
Close