自動交易某些程式碼沒有運行

  •   514 
  • 最後發表   303234  2023 九月 21
303234 發文於   2023/08/24

相關文件(8/24):https://drive.google.com/file/d/1znnlhwQa1wnXCXHic41l35AJPhW9OhvK/view?usp=sharing

相關文件(8/25):https://drive.google.com/file/d/1E4M-fnOaPXGUb8wI0XQGMKgSCqVHpNbe/view?usp=sharing

(已刪除部分選股條件)

(附件還有一張照片)

設定:一分K、逐筆洗價、觸價及成交

問題一:

今天在使用自動交易的時候,發現程式沒有依我寫的條件去運行下單後就設定停利(相似價位的有運行),導致留倉,可以看到截圖中,買完股票後並沒有賣出的動作,而且在自動交易介面沒看到有留倉,但是XQ帳務卻是有看到留倉

 

問題二:

我知道我現在這個寫法會導致一值改價掛單,

只要符合選股條件就會一直改價往下掛(回測上可能看不出來,但是早上實測就會看出來,這樣也會導致變得很難成交)

FilledAvgPrice抓停損或停利時可能也會多次下單而改變(第一次的單還沒平倉後面又有下單新成交導致FilledAvgPrice改變),

在取消超過4分鐘的單子時候,會一起把我掛停利的單子取消(但我希望只取消我進場未成交的單子就好),雖然在進場的時候加上變數vtime=time能記錄時間,不過因為沒有加上position=0 and filled=0會導致vtime的時間若有新的交易機會就又有改變

選股條件加上position=0 and filled=0,確實能改變這問題,但是會變成我一定要前一筆交易完全結束了才會有新的交易(會大量減少交易次數,並不是我所希望發生的)

問題三:少數股票並沒有依我所設的停損,如附件應該要在下一根就觸發超過成本的2個TICK停損才對,但是卻沒停損

 

8/25

問題四:自動交易顯示網路逾時,該筆資料並沒有成交回報,不過XQ帳務有顯示該筆,就會造成就算網路恢復自動交易也不會按造腳本停利停損,這時到底這筆有沒有成交我也覺得疑問?(以哪邊為主才對?)

問題五:操作逾時的頻率太高,已把等待時間設為60秒,可是這頻率還是如此高,請問為何?

8/28

依然還是有操作逾時錯誤,導致自動交易會停止,無法啟動停損停利變留倉

想請問小幫手該如何改寫?

附加文件

排序方式: 標準 | 最新
XQ小幫手 發文於   2023/08/30

Hello 303234,

 

請注意當同次腳本運算中有複數 SetPosition 執行的話,只會執行腳本第一個運算到的。

所以只要您的進場條件符合,後面的停損停利就不會被執行,因為會被進場的 SetPosition 給擋掉。

 

同一商品同時只會有一種委託單,所以不希望將停損停利的委託單取消的話,可以另外撰寫條件,舉例來說:

condition1 = filled <> 0 and position = 0;  //下停利委託單的可能部位庫存狀況

 

if not condition1 then begin

   ...過4分鐘取消委託...

   end;

 

如果您的帳務有顯示的話,那麼就是有成交。

至於頻繁操作逾時的部分小幫手認為可能是因為策略頻繁的下單改單,委託刪單重掛時已經有部分成交導致出現問題。

會請相關人員確認提供的Log。

 

小幫手還是會建議您加上 position 和 filled 作控管。

可參考 自動交易語法介紹 裡的說明。

303234 發文於   2023/08/30

好的,等待相關人員的確認。

至於小幫手說的這個用法

condition1 = filled <> 0 and position = 0;  //下停利委託單的可能部位庫存狀況

 

if not condition1 then begin

   if trueall(position <> filled, 4) then setposition(filled) ;

   end;

假設做空3張:

這個寫法就會變成我的委賣單若還沒全部成交,就不會4分鐘自動取消委賣單(position=-1 filled =-2),而會等到我的委賣全部成交了才啟動

這時我如果後面又掛停利單(-3檔),這時position=0 filled =3

好像也不會啟動該指令

 

然後我上禮拜和8/30今天,都有出現過XQ自動關閉程式,導致沒有按照指令停損和停利,附上今天的LOG時間約發生在9:00~10:00之間,準確時間我不知道,中間我也沒有動任何按鍵

8/30LOG:

https://drive.google.com/file/d/1hkuGJ3zc4ggkjMMnRRpQNL1Epcfsdc_3/view?usp=sharing

303234 發文於   2023/09/05

9/05 

使用方式:一分K、自動交易

LOG:https://drive.google.com/file/d/1vW7JVFAzwhdhOxa5G5XBEDfHZTnaA6Du/view?usp=sharing

CODE:https://drive.google.com/file/d/1csg6PjgTDexf_dZ5250BFucOzTnS0GWr/view?usp=sharing

問題一、  依然還是有操作於時問題

問題二、我設置一個停損機制,若時間超過30分鐘後沒有賺錢就平倉,可是程式亂平倉(已用print,確實timeadd我設置的時間是無誤)

問題三、是不是一直再重複下單呀?(依照指令如下,就算自動取消我也是設置10分鐘取消一次單子,而不是每一秒都在取消單子重新掛單)

        end else if FilledAvgPrice<82 and FilledAvgPrice>=71 then begin                         
        setPosition(0,AddSpread(FilledAvgPrice, -9));   

問題四、請解釋為何處理問題的速度如此慢?8/24到現在實際上我並沒有得到任何真正有解決我問題的方法,是只要拖得夠久,客戶就會直接放棄? 請於9/12以前給我滿意的解釋,逾期將找尋方式檢舉你們

 

 

 

 

 

 

XQ小幫手 發文於   2023/09/05

Hello 303234,

 

這邊是針對 8/30 的回覆。

 

小幫手不太確定您的意思。

condition1 要求的是 position 為 0 且 filled 不為 0。

而 if not condition1 then 則會是除了condition1以外的狀況,所以您提到的 委賣單若還沒全部成交 (setposition(-1), filled = -2, not condition1 符合) 則會被取消。

停損停利單 (setposition(0), filled = 3, condition1 符合) 則不會。

 

當然這只是舉個簡單的例子,如果您有複數庫存 (filled 為 -2) 且一次只平倉一張的話 (setposition(-1)),那麼就需要作相對應的調整。

 

需注意position是您設定的部位,filled 則為庫存。

所以假設原本的庫存為 0,執行 setposition(-2) 的話,此時position 會是 -2,filled 為 0。

成交一張放空單的話的話,則 filled 為 -1 ,position還是 -2。

 

建議您可以先閱覽 setposition 的說明 以及 自動交易語法介紹

 

至於您提供的Log小幫手會請相關人員確認看是什麼原因造成。

 

 

 

以下是針對 9/05 的回覆。

 

 

小幫手回覆時都是由討論區的後面往前面回覆。(會依據用戶發問帳號是否有訂閱調整順序)

所以如果您在同一篇文章推文的話會造成您的文章被往前推,反而讓小幫手看到問題的時間變晚。

由於近來問題量不少,麻煩您發問後多等待一陣子。

 

要注意的是,trueall 是比較近10根Bar (包含當根Bar) 該根Bar最後的狀態。

所以若您使用逐筆洗價,且前九根Bar的 filled 和 position 不同的話,在第十根 (也就是當根Bar) 洗價時判斷取消委託後,假設同根Bar下次洗價又發出委託的話,下下次洗價前未成交的話還是會被取消,因為 trueall(position <> filled, 10) 還是符合的。

除了 trueall 以外,您也可以考慮使用 timeadd 來決定是否取消單。

像是 if time > timeadd(vtime, "M", 5) and position <> filled then setposition(filled);

還有 time 是Bar開始的時間,currenttime 是 腳本運算當下的電腦時間,若使用1分鐘頻率的話, time 只會是整數分鐘 (ex. 090000, 090100)。

 

另外您並不需要使用迴圈來跑 if position = i and filled = i,如果是要避免因為有部分成交的狀況,或許您可以考慮改寫為 if position = filled and filled <> 0,這樣就會有相同效果。

但您的腳本中只會放空一張 (setposition(-1, value1)),那麼其實只要寫成 if position = -1 and filled = -1 即可。

 

只要有改委託價、改委託數,系統都會刪單後重新掛單。

若想要確認是哪個條件觸發交易的,您可以在setposition間加上print的指令,例如

if ... then begin

    setposition(...);

    print(date, time, "交易1觸發");

    end;

這樣會比較容易看出是哪個交易指令符合條件 (需注意同次運算中有複數觸發還是只會執行第一個)。

 

逾時的問題相關人員還在研究,目前有找出幾個可能問題點開始嘗試修復。

 

XQ小幫手 發文於   2023/09/05

Hello 303234,

 

小幫手補充,由您在0905的副圖和腳本內容來看,code連結的腳本應是實際腳本的片段。

可以的話麻煩提供完整腳本讓小幫手這邊測試運作看是什麼原因造成不斷的無效交易指令。

就圖片訊息來看的話可能是有其他的交易指令所導致,會詢問相關人員看有什麼原因可能造成這樣的狀況。

 

另外由於您是使用逐筆洗價,變數 vtime 是否有使用 intrabarpersist 來宣告?

就錯誤來看小幫手認為可能是 vtime 沒有保存住該次洗價的資訊而維持在初始值 (ex. 0),故加上30分鐘還是會小於當下的time。

XQ小幫手 發文於   2023/09/07

Hello 303234,

 

關於您提到的 8/30 發生 XQ 自動關閉程式 的部分。

相關人員確認後認為這應該是XQ其他頁面操作所導致,而非自動交易運作的問題。

 

如果可以的話,麻煩您另外發文說明自動關閉當下所作的操作,並將該問題連結回覆在此篇文章下方。

小幫手會請專人追蹤確認。

感謝。

303234 發文於   2023/09/08

沒有,我什麼事都沒做,那時頂多只有上APP看損益或在XQ看自動交易的損益,其餘都沒碰電腦了

303234 發文於   2023/09/14

今天再次發生關閉現象,不過目前排除應該不是XQ的問題,好像是我的電腦自己重新啟動了,目前還尚未知道為何會有重新啟動的原因

XQ小幫手 發文於   2023/09/21

Hello 303234,

 

了解,如果有發生您在操作XQ時自動關閉的情況的話,麻煩您提供 Log 和當下開啟的頁面,並描述當時的操作,讓相關人員確認。

感謝。

發表回覆
Close