XS 自動轉換方向

  •   438 
  • 最後發表   *G  2022 二月 16
*G 發文於   2021/10/14

小編你好   

不知道XS 自動交易語法裡有無超過停損點時馬上同樣金額或同樣張數的換手方向的寫法

換手後仍能執行停損或停利    嘗試了好幾種寫法    始終無法達到預期效果  

以下個人寫出的語法是依庫存方式執行的   懇請小幫手賜教

input: profit_percent(15, "停利(%)");

input: loss_percent(7, "停損(%)");

 

if Position >= 1 then begin

 

if close >= FilledAvgPrice*(1+0.01*profit_percent) then begin

{ 停利 }

SetPosition(0);

end else if close <= FilledAvgPrice*(1-0.01*loss_percent)  then begin

{ 停損 }

SetPosition(0);

end;

end;

 

if Position <= -1 then begin

 

if close <= FilledAvgPrice*(1-0.01*profit_percent) then begin

{ 停利 }

SetPosition(0);

end else if close >= FilledAvgPrice*(1+0.01*loss_percent)  then begin

{ 停損 }

SetPosition(0);

end;

 

end;

 

排序方式: 標準 | 最新
XQ小幫手 發文於   2021/10/19

Hello *G,

 

您可以先參考 SetPosition 的說明。

SetPosition 是將部位調整成指定數值。

所以您在停損時用0的話就是單純的清空,而不是反手。

如果您要反手作相同的部位的話,可以使用 SetPosition(-1 * position);

附上交易腳本供您作參考。

附加文件

*G 發文於   2022/02/06

之前感謝小幫手賜教    目前反手後停利沒問題   但如果又超出停損又會反手一次  

遇到膠著情況  會一直反手   有點懊惱

如果我想讓反手只執行一次   後續停利停損也正常的話  應該修改哪個部份呢??

再麻煩小幫手賜教

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

Hello *G,

 

您可以多設一個變數來記錄反手的次數。

舉例來說:

var: count(0);

if Position >= 1 then begin

    if close >= FilledAvgPrice*(1+0.01*profit_percent) then begin

    { 停利 }

        if count = 0 then SetPosition(-1) else setposition(0);

        count += 1;

    end else if close <= FilledAvgPrice*(1-0.01*loss_percent) then begin

    { 停損 }

        if count = 0 then SetPosition(-1) else setposition(0);

        count += 1;

        end;

    end;

這樣的話只會有一次反手,後面就會改為平倉。

*G 發文於   2022/02/14

目前有按照小幫手的教學 去寫看看邏輯  但這幾天測試  還是會一直反手 

請問我是否有哪邊有問題呢  再麻煩你幫忙看看

var: count(0);

if Position > 0 then begin

if close >= FilledAvgPrice*(1+0.01*profit_percent) then begin

{ 停利 }

 SetPosition(0) ;

end else if close <= FilledAvgPrice*(1-0.01*loss_percent)  then begin

{ 停損且反手作空 }

        if count = 0 then SetPosition(-1*position) else setposition(0);

        count += 1;

end;

 

end; 

 

if Position < 0 then begin

if close <= FilledAvgPrice*(1-0.01*profit_percent) then begin

{ 停利 }

 SetPosition(0) ;

end else if close >= FilledAvgPrice*(1+0.01*loss_percent)  then begin

{ 停損且反手作多 }

        if count = 0 then SetPosition(-1*position) else setposition(0);

        count += 1;

end;

end;

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

Hello *G,

 

小幫手猜測您使用的頻率為日頻率,這樣的話在宣告變數時需要加上intrabarpersist讓變數在洗價時可以保持。

var: intrabarpersist  count(0);

如果還是有問題的話,需要麻煩您提供 交易中心匯出檔 勾選 交易腳本 以及 XQ log 來檢驗。

Log資料夾(預設路徑:C:\SysJust\XQLite\LOG)直接壓縮後提供即可。

您可以直接將檔案上傳,如果檔案過大的話也可以Mail至客服信箱 XQservice@XQ.com.tw 且務必附上 討論文章連結網址(小幫手才能盡早處理)。

感謝。

 

發表回覆
Close