xs小台 多空策略 請教高手如何加入停損~ 我設定的會衝突到 麻煩了'

  •   455 
  • 最後發表   桂桂  2022 十二月 29
桂桂 發文於   2022/11/25

 

我想要的是atr策略跑多空

但多加一個停損100點的條件~

停利就依造atr策略

但我寫這樣變成停損停利都100點...: (

麻煩大家了

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

input: loss_point(100, "停損(點)");

 

// 宣告參數

input:period(20,"計算TrueRange的區間"),N(2,"N倍通道");

 

// 資料讀取筆數設定

settotalbar(period + 3);

 

value1=average(truerange,period);

value2=average(close,period);

value3=value2+N*value1;

value4=value2-N*value1;

 

 

// 多方進場策略:向上突破上通道。出場策略:向下跌破下通道。

if close crosses over value3 then setposition(4);

if close crosses below value4 then setposition(-4);

 

if close crosses below value4 then setposition(0);

if close crosses over value3 then setposition(0);

 

 

if Position = 4 and Filled = 4 OR  Position = -4 and Filled = -4 then begin

{ 依照成本價格設定停損/停利 }

 

if loss_point > 0 and Close <= FilledAvgPrice - loss_point then begin

 

SetPosition(0); 

 

end else IF  loss_point > 0 and Close >= FilledAvgPrice + loss_point then begin

 

SetPosition(0);

 

end;

end;

 

排序方式: 標準 | 最新
XQ小幫手 發文於   2022/11/29

Hello 桂桂,

 

setposition 只會執行第一個觸發的,所以會建議您使用 position 和 filled 來控制。

Position = 4 and Filled = 4 OR  Position = -4 and Filled = -4 這邊會建議您用 () 來控制,如 (Position = 4 and Filled = 4) OR  (Position = -4 and Filled = -4)。

如果您不想要用停利出場的話,只要將停利的部分刪掉即可。

舉例來說,將下面停損停利的部分修改為:

IF  loss_point > 0 and Close >= FilledAvgPrice + loss_point then begin

    SetPosition(0);

    end;

這樣就只會停損出場。

 

網站上有教學區,裡面有XS與法的基礎和應用可以閱覽。

桂桂 發文於   2022/12/01

小幫手~

應該說~

因為是多空的策略

多單的停損會變成空單的停利~

而空單停損變多方停利

我沒解釋得很詳細,不好意思

我的困擾是不知道怎麼讓它區方

如果我打這樣

IF  loss_point > 0 and Close >= FilledAvgPrice + loss_point then begin

    SetPosition(0);

    end;

 

空方停策略最大停損,"會停損",但買多時會變成無法設最大損,然後把空單停損變成多方停利100點

 

腦筋打結了: (

XQ小幫手 發文於   2022/12/02

 Hello 桂桂,

 

您可以用部位庫存來判斷是要執行多單還空單的停損停利。

舉例來說:

 

if position > 0 and filled > 0 then begin

    多單停損;

    多單停利;

    end

else if position < 0 and filled < 0 then begin

    空單停損;

    空單停利;

    end;

桂桂 發文於   2022/12/07

 

input: loss_point(100, "停損(點)");

 

// 宣告參數

input:period(20,"計算TrueRange的區間"),N(2,"N倍通道");

 

var: long_condition(false);

 

// 資料讀取筆數設定

settotalbar(period + 3);

 

value1=average(truerange,period);

value2=average(close,period);

value3=value2+N*value1;

value4=value2-N*value1;

 

 

// 多方進場策略:向上突破上通道。出場策略:向下跌破下通道。

if close crosses over value3 then setposition(2);

if close crosses below value4 then setposition(-2);

 

if close crosses below value4 then setposition(0);

if close crosses over value3 then setposition(0);

 

 

 

if position > 0 and filled > 0 then begin

        if loss_point > 0 and Close <= FilledAvgPrice - loss_point then begin

SetPosition(0); 

 

end

 

else if position < 0 and filled < 0 then begin

if  loss_point > 0 and Close >= FilledAvgPrice + loss_point then begin

SetPosition(0);

 

小幫手你好~

這樣修改後,還是無法執行停損~

請問是不是還有哪邊錯誤?

XQ小幫手 發文於   2022/12/08

Hello 桂桂,

 

您可以使用 print 函數將相關數值印出,檢查看相關數值如您所想的運作。

 

上面的腳本,如果進出場條件符合的話,會優先執行進出場,而不會執行停損。

因為如同小幫手之前所說,setposition 只會執行第一個觸發的。

所以使用回測或是實際執行時,您應該會看到前一筆的出場時間和後一筆的進場時間相同。

 

另外需注意,

if close crosses over value3 then setposition(2);

if close crosses below value4 then setposition(-2);

 

if close crosses below value4 then setposition(0);

if close crosses over value3 then setposition(0);

您這種寫法會造成策略不會平倉,只要條件符合庫存就會在 2 和 -2 間變動,因為進場的條件和出場的條件相同。

且停損也不一定會剛好是 loss_point 的數值,而是價格有觸碰到停損執行的條件時,策略會出場。

而實際出場價格是視當時的價格而定,所以很有可能會略大於小於loss_point 的數值。

小幫手這邊使用日頻率作測試,是會執行停損的。

 

若希望小幫手幫您檢查,麻煩您提供使用的商品、有問題的日期時間、使用的頻率和設定的參數,讓小幫手用回測測試。

桂桂 發文於   2022/12/08

小幫手你好~ 第一次接觸,謝謝耐心的解說!

1:優先執行進出場,而不會執行停損

2:策略不會平倉

3:停損也不一定會剛好是 loss_point 的數值,可能會略大於小於loss_point 的數值。

 

您說的上述3點我知道~

我有慢慢測試觀察過,但我接受上述3點的發生,在停損方面會有K棒收完落差,但

我有使用交易分析裡面的K棒去觀察,不是因為停損點當下K幫收完差太多,而是沒真的執行!

商品:小台近月

頻率:1分鐘

不知道小幫手指的參數是什麼

 

但腳本是上面最後一次詢問您那樣

謝謝~

XQ小幫手 發文於   2022/12/09

Hello 桂桂,

 

參數是指您的 input 數值有沒有作調整。

如果沒有的話,您可以觀察回測報表,前一個出場時間都會是下一個進場的時間。(參考附圖)

為什麼沒有停損?因為還沒有到停損,就已經觸發了反方向的進場。

 

您可以把停損點 loss_point 調為1,這樣就會進場後下根Bar就出場。(觸發停損)

少部分不會這樣的是因為您停損的條件為 position > 0 and filled > 0 ,所以只要反方向進場有觸發過導致position變動過,停損就無法被觸發。

另外建議您在回測的時候用 market 市價單會比較容易理解。

附加文件

桂桂 發文於   2022/12/09

"前一個出場時間都會是下一個進場的時間。(參考附圖)

為什麼沒有停損?因為還沒有到停損,就已經觸發了反方向的進場。""

 

上述我理解,我會提問是  ~ 在還沒觸發反方向時候停損點已到達沒觸發我才會覺得疑惑! 是否自己打錯

比如策略進場到策略出場停損是200點!  我不想那麼多所以我設100點停損

我遇到的問題是~ 還沒達到策略出場停損先到達卻不會出場!

我回測有使用"市價單",但目前這樣寫的腳本1分鐘頻率小台還是無法執行停損: (

XQ小幫手 發文於   2022/12/12

Hello 桂桂,

 

小幫手這邊測試,會發生價格超過您設定的100點的狀況大多為跳空的狀況,出場的時間在 08:46 (早上開盤) 和 15:01 (下午開盤)。

另外就是一根長黑棒,像小幫手截圖中的序號 1458 的交易。

其在 2022/09/13 20:27 的時候進場,在2022/09/13 20:30 長黑直接跌破100點,所以下根Bar的時候 2022/09/13 20:31 時出場。

您可以參考小幫手附上的截圖、回測報告和腳本,如果有那裡有疑問的話,麻煩告知是哪筆交易(交易序號),讓小幫手確認。

感謝。

 

您也可以自行加上print確認看是否有觸發。

ex:

if position > 0 and filled > 0 then begin

    if loss_point > 0 and Close <= FilledAvgPrice - loss_point then begin

        SetPosition(0, market); 

        print(date, time, "多方停損");

        end;

    end

else if position < 0 and filled < 0 then begin

    if  loss_point > 0 and Close >= FilledAvgPrice + loss_point then begin

        SetPosition(0, market);

        print(date, time, "空方停損");

        end;

    end;

附加文件

桂桂 發文於   2022/12/28

小幫手您好~ 我有反覆測試一下~ 

我放我的XS數據  跟我發生無法停損的那筆交易給您,謝謝 : (

 

 

 

input: loss_point(100, "停損(點)");

 

// 宣告參數

input:period(30,"計算TrueRange的區間"),N(5,"N倍通道");

 

var: long_condition(false);

 

// 資料讀取筆數設定

settotalbar(period + 3);

 

value1=average(truerange,period);

value2=average(close,period);

value3=value2+N*value1;

value4=value2-N*value1;

 

 

// 多方進場策略:向上突破上通道。出場策略:向下跌破下通道。

if close crosses over value3 then setposition(1);

if close crosses below value4 then setposition(-1);

 

if close crosses below value4 then setposition(0);

if close crosses over value3 then setposition(0);

 

 

 

if position > 0 and filled > 0 then begin

    IF loss_point > 0 and Close <= FilledAvgPrice - loss_point then begin

SetPosition(0); 

 

end

 

elsE if position < 0 and filled < 0 then begin

IF  loss_point > 0 and Close >= FilledAvgPrice + loss_point then begin

SetPosition(0);

 

 

 

   

end;

end;

end;

~~~~~~~~~~~~~

都是做空無法執行停損(以下是無法停損的交易)

2022/1/10 09:00  賣出 18038   買進 18281

2022/1/10 01:50  賣出 18379   買進 18526

2022/1/10 09:00  賣出 17564   買進 17777

再麻煩您幫我看一下是哪邊錯誤~

 

顯示更多回應 發表回覆
Close