自動交易訊號condition1觸發價格,進行委託買進一張,委託後還沒成交前如果價格下跌則連續改降價買進,如果委託買進,兩秒鐘內價格上漲沒成交,則調高價格1檔買進,這樣的自動交易程式碼該如何寫?
 
        
        求教-即時轉單改價的交易方式
- 252
- 最後發表 XQYi 2024 六月 12
程式邏輯如下:
(1)送出委託時記錄時間及價格。
(2)判斷是否成交,若沒成交,則
(3)比較即時價格與委託時的價格,若價格下跌(這裡要定義跌多少),則以更低價(這裡要定義價格)進行委託單改價。若價格上漲(這裡要定義漲多少),則判斷距離委託的時間是否超過2秒鐘,若超過,則以高於目前價格1檔進行委託單改價。
感謝教授,以下是否OK?
var: intrabarpersist SBT1(0) , intrabarpersist PT1(0),intrabarpersist PT2(0),intrabarpersist SentTime(0);
var: intrabarpersist hasOrdered(false);
if position=0 and filled=0 and condition90 and currentTime > TM and currentTime <=101500
then begin
if condition1 and (trueAll(value31 > value31[1],2) or value7 > value7[1] )
and value7*1.0045 < getField("High","D")
then
setposition(minList(position+2,2),GetField("收盤價","Tick"),label:="買1");//有庫存時,不進場加買,維持2張
SBT1=Getfield("時間","Tick");
PT1=GetField("收盤價","Tick");
end;
//-------------?秒內尚未成交有更低的價格改低單
if position <> 0 and filled=0 and Getfield("時間","Tick")>=timeadd(SBT1,"S",0.5)
and GetField("收盤價","Tick") < pt1 then begin
pt2=GetField("收盤價","Tick");
setposition(minList(position+2,2),PT2,label:="買1-0.5");//超過0.5秒尚未成交有更低的價格改低單
end;
//-------------買不到追價
if position <> 0 and filled=0 and Getfield("時間","Tick")>=timeadd(SBT1,"S",2) then //已經委託尚未成交經過2秒
setposition(minList(position+2,2),addSpread(GetField("收盤價","Tick"),1),label:="買1-2B");//2秒內如果買不到則調高追價
你使用0.5秒,亦即500毫秒,使用TimeAdd時應該用MS,亦即timeadd(SBT1,"MS",500)。
感謝教授指導!
教授何時有開課?
如圖交易情況,有些看不懂交易為何會這樣?
第一次觸發44.55,
第二次0.5秒內未成交有更低價格調降44.4
第三次觸發0.5秒內未成交,應調降為何價格增加了?
(2、3次的觸發,都沒有刪單改委託價 ?)
結果第四次成交是在第一次觸發的指令,但價格不是原來的44.55

若改價之後,需要再改價,則改價時,重新紀錄時間。另外,你必須留意,還有一個2秒鐘用加一檔的方式改價,要考慮兩種改價方式會不會衝突。
實際交易情況是有的如預期有的不如預期,上述就是不如預期,不知道原因出在何處?
XQ的委託單,任何時候在外頭最多只能有一張。有多張委託單的情況下,後面的委託單會對前面還沒有成交的委託單進行刪單或改價。由於你同一秒鐘送出三張委託,其中包含最後兩張改價的委託單,在改價(先刪單,再重送委託)之前,第一張就成交了。送出委託的時間差只有0.5秒鐘,容易出現這種問題。等同於改價沒有發揮功效。
感謝教授指導
如果原因是速度追不上邏輯,也就只能改邏輯了!
有建議的修正嗎?
 
 
             
         
         
                     
         
     
     分類
    分類
 
            
12 評論