虎大救命! 自動交易會自行停損,但是會多買,讓我從作空變作多。問題很大!!

  •   386 
  • 最後發表   sl55ianhuang  2025 四月 30
sl55ianhuang 發文於   2025/04/22

 

4月17日 我09:09卷賣2471x5

系統幫我於 09:17損出

我09:18 再一次卷賣 2471x5

 

系統於09:18自己幫我買15張 這樣真的挺恐怖。

    4/22 類似的情況又發生了。 09:17:10 卷賣4977x1 09:17:14 卷賣4977x1 09:17:18 卷賣4977x1 截至目前庫存為-3 09:17:50 停損出 資買  直接買了6張...............  到底是哪有問題? 頭痛   虎大可以幫我看看 拜託!     //多單停損(%) input: profit_percent(5.0, "停利(%)"); input: loss_percent(1.2, "停損(%)"); if Position > 0 and Filled > 0 then begin  { 依照成本價格設定停損/停利 }   if profit_percent > 0 and   Close >= FilledAvgPrice*(1+0.01*profit_percent) then begin  { 停利 }  SetPosition(0, label:="停利出場");  end else if loss_percent > 0 and   Close <= FilledAvgPrice*(1-0.01*loss_percent) then begin   { 停損 }  SetPosition(0,getField("跌停價","D"), label:="停損出場");  end; end; //空單停損(%) if Position < 0 and Filled < 0 then begin  { 依照成本價格設定停損/停利 }   if profit_percent > 0 and   Close <= FilledAvgPrice*(1-0.01*profit_percent) then begin  { 停利 }  SetPosition(0, label:="停利出場");  end else if loss_percent > 0 and   Close >= FilledAvgPrice*(1+0.01*loss_percent) then begin   { 停損 }  SetPosition(0,getField("漲停價","D"), label:="停損出場");  end; end; if currentTime>=132500 and position>0 then setposition(0,getField("跌停價","D")); //多單平倉 if currentTime>=132500 and position<0 then setposition(0,getField("漲停價","D")); //空單平倉

附加文件

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

你是用同一帳戶交易多個策略。就我所知,目前在模擬帳戶演練的時候,重設部位有邏輯錯誤。這部份在16.01版本會做部份更新。網友Fenikos在他的貼文陳述,模擬單重設部位是有問題的,但真實單則正常。

https://forum.xq.com.tw/thread/%e8%87%aa%e5%8b%95%e4%ba%a4%e6%98%93%e7%ad%96%e7%95%a5%e5%9c%a8%e5%95%9f%e5%8b%95%e7%8b%80%e6%85%8b-%e6%89%8b%e5%8b%95%e8%b2%b7%e9%80%b2%e4%b8%80%e5%8f%a3%e5%b0%8f%e5%8f%b0-%e4%bd%86%e7%ad%96%e7%95%a5%e9%83%a8%e4%bd%8d%e5%8d%bb%e6%98%af%e8%ae%8a%e7%82%ba2%e5%8f%a3/

sl55ianhuang 發文於   2025/04/22

感謝教授的解答 

慘的是,我的是模擬單沒問題,但是實單則出現問題。 賠真金白銀! 那可以怎麼處理? 是因為資卷的關係嗎?

虎科大許教授 發文於   2025/04/22

看起來你用了四個策略在同一帳戶交易。這樣其實風險很高。就算系統調整部位沒問題,也可能由於部位調整的時間差,造成無法預期的交易。建議:若可能的話,每一個策略都只在一個帳戶交易。若策略的進場有不同方式,建議將這些不同的進場條件都寫在一個策略裡面。若非得不同策略都用同一個帳戶交易,建議各個策略監控的商品不要有重複的,或是策略部位選取『不設定』,讓各個策略各玩各的,不互相影響。

sl55ianhuang 發文於   2025/04/22

我現在是手打單,然後才開策略。 當停損後,我會停止策略。再進場時,再開策略。但是 有時停損後,再進場的時間在1分鐘內。不知道是不是這個問題,導致我系統會幫我多買?

謝謝

虎科大許教授 發文於   2025/04/22

你若是手動進場,但用不同策略出場,建議將這些策略的出場條件寫在一個出場策略。只用一個策略監控出場。

sl55ianhuang 發文於   2025/04/22

教授 不好意思,讓您誤解了。4個策略 分別是 自選二現股,自選三現股, 自選二資卷 ,自選三資卷。 我每次進場後,都只開對應的策略,沒有開2個。 所以我的打算是直接單純給空的XQ碼,如下。這樣會不會解決,自動交易多買的問題?

//空單停損(%)

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

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

if Position < 0 and Filled < 0 then 

    begin

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

        if profit_percent > 0 and Close <= FilledAvgPrice*(1-0.01*profit_percent) then 

            { 停利 }

            SetPosition(0, label:="停利出場")

        else if loss_percent > 0 and Close >= FilledAvgPrice*(1+0.01*loss_percent) then

            { 停損 }

            SetPosition(0,getField("漲停價","D"), label:="停損出場");

    end;

if currentTime>=132500 and position<0 then setposition(0,getField("漲停價","D")); //空單平倉

虎科大許教授 發文於   2025/04/22

你若每次手動進場,都只會啟動一個出場的當沖策略,且都是手動進場之後才啟動出場策略,則執行商品選擇『指定組合』,組合清單必須包含手動買進的商品,至於策略部位,選擇『與庫存同步』,但下面的三個選項都不要打勾,這樣的話,啟動策略後,會自動抓到手動進場的庫存進行監控。當策略執行停利或停損後,應該確認是否成交(要注意,你目前的寫法,停利的委託可能不會成交),才讓策略中斷,然後繼續手動下單。安全一點的做法是讓停利或停損的委託都會成交(例如使用市價單),然後用raiseRunTimeError自動中斷策略。當你看到策略中斷,就可以繼續找機會手動下單。手動下單成交之後,再點擊啟動策略的按鈕。

sl55ianhuang 發文於   2025/04/22

我改了程式碼 如下

//空單停損(%)

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

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

if Position < 0 and Filled < 0 then begin

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

        if profit_percent > 0 and 

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

        { 停利 }

  //假如我要市價+1檔買回 以下的寫法對嗎?

        SetPosition(0, Close+1, label:="停利出場");

        end else if loss_percent > 0 and 

Close >= FilledAvgPrice*(1+0.01*loss_percent) then begin

        { 停損 }

        SetPosition(0,getField("漲停價","D"), label:="停損出場");

end;

    end;

if currentTime>=132500 and position<0 then setposition(0,getField("漲停價","D")); //空單平倉

我進場後如下:

 09:17:10 卷賣4977x1 成交後,我會開啟策略

09:17:14 卷賣4977x1 策略持續中

09:17:18 卷賣4977x1 策略持續中

等到停利或停損時才會將策略關閉。

假如以上的做法 這3個選項也不用打勾嗎?

虎科大許教授 發文於   2025/04/22

(1)市價+1檔買回:setposition(0, addSpread(c,1));

(2)三個選項都不要打勾是正確的。

(3)建議腳本最上方加上以下兩行陳述式:

if getInfo("IsRealTime")=0 then return;

if position=0 and filled=0 then raiseRunTimeError("無庫存,不監控");

這樣的話,若已無部位,則策略會自動被中斷,出現錯誤訊息『無庫存,不監控』。當策略被中斷,你才可以再次手動進場。若手動進場的委託成交,只要再點擊策略的啟動按鈕即可繼續監控出場。

 

sl55ianhuang 發文於   2025/04/23

教授 

程式碼如以下 對嗎?

//空單停損(%)

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

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

 

if getInfo("IsRealTime")=0 then return;

if position=0 and filled=0 then raiseRunTimeError("無庫存,不監控");

 

if Position < 0 and Filled < 0 then begin

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

        if profit_percent > 0 and 

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

        { 停利 }

        SetPosition(0, addSpread(c,1), label:="停利出場");

        end else if loss_percent > 0 and 

Close >= FilledAvgPrice*(1+0.01*loss_percent) then begin

        { 停損 }

        SetPosition(0,getField("漲停價","D"), label:="停損出場");

end;

    end;

if currentTime>=132500 and position<0 then setposition(0,getField("漲停價","D")); //空單平倉

顯示更多回應 發表回覆
Close