停利停損腳本

  •   790 
  • 最後發表   里歐  2022 五月 17
里歐 發文於   2022/05/02

想請教,有辦法區間停利停損嗎
不知是否有範例

例如:

EX:

A

跌破前一日收盤價停損,漲5%賣一半

漲到5%套用B觸價單

 

B(漲到5%以上時)

漲到8%剩下全賣,若跌到4%剩下全賣

-------------------------
就是想要在不同價位時,使用不同基準停利停損

-------------------------

概念可能有點像這樣
雖然還有頗多瑕疵....例如如何知道剩餘庫存量,然後要賣出多少

if(庫存>0)

{

    if(目前市價<前日收盤價)

    return; //庫存全賣出 停損

 

    if(目前市價 > 漲2% && < 漲4%)

    {  

       if(lock!=0){

           賣1/4庫存; //這邊停利只會執行一次

           lock=0;

       }

       if(目前市價<漲1%){  //這邊用if不太對..只是想表示進入條件後,遇到下跌情況。

           賣剩餘所有庫存

       }

    }

 

    if(目前市價 > 漲4% && <漲6%)

    {

       if(lock!=0){

       賣 1/4庫存; //這邊停利只會執行一次

       lock=0;

      

       if(目前市價<漲4%)

       {

         賣剩餘所有庫存

       }  

    }     

}

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

Hello 里歐,

 

您可以使用交易腳本,這樣就可以在腳本中抓取部位庫存和進場價格等資訊。

細節可以參考 XSHelp 裡的 position, filled, filledavgprice

至於部位的調整,可以參考 SetPosition

舉例來說:

var: intrabarpersist _con(0);

if position <> 0 and filled <> 0 then begin

    if (filledavgprice < getfield("Close", "D")[1] or (100 * (close - filledavgprice) / filledavgprice) >= 5) and _con = 0 then begin

        _con = 1;

        setposition(filled/2, market);

        end

    else if _con = 1 and ((100 * (close - filledavgprice) / filledavgprice) >= 8 or (100 * (close - filledavgprice) / filledavgprice) <= 4) then begin

        _con = 0;

        setposition(0, market);

        end;

    end;

        

里歐 發文於   2022/05/08

想請問

針對"剩餘"庫存的部分,有辦法控制嗎?
我的大概flow如下:
1.在"賣all 剩餘庫存" 這個行為有直接的function 可以使用嗎?

2.還有時間的部分是否可以做到?

   if(time == 1:20)

    目前市價全賣

3.有辦法回測確認腳本是否合預期運作嗎?
 
====================================================

if(庫存 > 0)

{

if(value(市價) < pre_prevalue(前日收盤)- 1 tick)

{

賣all 庫存

}

 

if(value > cur_value2% (漲2%) && 2%_lock_on != true)

{

賣1/4庫存

2%_lock_on=true; //只進行一次停利

}

if(value < cur_value1%  && 2%_lock_on==true) //曾漲到2%或以上,現在壓回1%賣出

{

賣all 剩餘庫存

}

//--------------------------------------------------------

if(value > cur_value3_5% (漲3.5%) && 3_5%_lock_on != true ) //不直接停利,但拉高停損門檻

{

3_5%_lock_on=true;

}

if(value < cur_value2%  && 3_5%_lock_on==true) //曾漲到3.5%或以上,現在壓回2%賣出

{

賣all 剩餘庫存

}

//-------------------------------------------------------

if(value > cur_value4_5% (漲4.5%))

{

賣1/4庫存

4_5%_lock_on=true; //只進行一次停利

}

if(value < cur_value3_5%  && 4_5%_lock_on==true) //曾漲到4.5%或以上,現在壓回3.5%賣出

{

賣all 剩餘庫存

}

 

 

}

if(time == 1:20)

 

目前市價全賣

XQ小幫手 發文於   2022/05/11

Hello 里歐,

 

1. setposition(0, market);

就會把所有庫存給賣掉,細節您可以閱讀 setposition的說明。

 

2.time函數會回傳當根Bar的時間,所以如果您使用分鐘頻率,且有120000這根Bar的話,是可以用這樣的條件沒錯。

if time = 120000 then ...;

 

3.可以,您只需要加上進場的部分即可。

舉例來說:

var: intrabarpersist _con(0);

if position = 0 and filled = 0 then setposition(2, market);

 

if position <> 0 and filled <> 0 then begin

    if (filledavgprice < getfield("Close", "D")[1] or (100 * (close - filledavgprice) / filledavgprice) >= 5) and _con = 0 then begin

        _con = 1;

        setposition(filled/2, market);

        end

    else if _con = 1 and ((100 * (close - filledavgprice) / filledavgprice) >= 8 or (100 * (close - filledavgprice) / filledavgprice) <= 4) then begin

        _con = 0;

        setposition(0, market);

        end;

    end;

 

這樣用在回測上就會進出場。

 

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

 

里歐 發文於   2022/05/14

Dear 小幫手大大,

1.請問,我上述範例中,

ex:曾經漲到2.5%,但又跌到低於1%漲幅時,才賣出

(震盪沒漲到2.5%,那即使跌到低於1%也不會發動)

有辦法做到嗎?? 我看教學區有看到有看到各種function,但自己這樣寫條件不知是否能做到這樣


2.另外想請教下...有沒有範例是ㄧ些預防機制阿?(目前還沒想到)
像是如上例,符合條件低於1%時,市價賣出,但跌太快,該出價賣不出去
可能要再設定....若幾1分鐘k棒沒賣出又跌,改單的賣出價?之類的(亂舉例)

再麻煩開示了...

XQ小幫手 發文於   2022/05/17

Hello 里歐,

 

1.您可以設變數作開關。

舉例來說,多方:

var: intrabarpersist controller(False);

 

if filled > 0 and  (100 * (close - filledavgprice) / filledavgprice) >= 2.5 then controller = True;   //只要庫存大於0且有收盤價漲超過2.5%時controller 就為 True。(有需要的話可以改為high)

if filled > 0 and controller = True and (100 * (close - filledavgprice) / filledavgprice) <= 1 then begin    //曾漲超過2.5%,現在只剩下1%以下時

    setposition(0, market);    //出場

    controller = False;   //將controller改回False

    end;

只要運用變數,大部分的條件都可以達成。

您可以實際測試,並將相關數值print出來看是否有符合預期的運算。

 

2. 市價基本上不會有賣不出去,只會有滑價太多疑慮。

或是沒有人作對手方的時候,例如跌停時全部人都在賣,沒有人要買時就會賣不出去。

限價單才會有賣不出去的狀況,比較常見的是如果過幾根Bar都持續賣不出去的話就改價或改市價單。

可以利用 TrueAll 搭配 position <> filled 的條件來判斷。

發表回覆
Close