FORTS: OnTradeTransaction() Rückgabecodes - Seite 6

 

Fantastisch!

Installationszeit - 15:07:31.849

Zeitpunkt der Löschung - 15:07:31.865

Und es ist bereits die 25. Woche desungültigen Antrags, und das allen Ernstes. Jetzt verstehe ich, warum servicedesk schweigt.


 

In diesen Fällen kann der Berater einen Code erhalten:

TRADE_RETCODE_REJECT
 

Sergej!

Du hattest Recht. MQ-Fehler

DasTerminal aktualisiert den Auftragsstatus nicht:

2015.11.26 15:41:56.094 Forts_trader (GAZR-12.15,H1)    Remove: Ордер не отослан! Причина: Неправильный запрос; Билет = 24041883
2015.11.26 15:41:56.094 Forts_trader (GAZR-12.15,H1)    DEBUG: order state = ORDER_STATE_STARTED
2015.11.26 15:41:56.068 Forts_trader (GAZR-12.15,H1)    CheckOrders: Sell ордер установлен. Билет = 24041883

Ich habe eine Bestellung erhalten, aber ihr Status ist immer nochORDER_STATE_STARTED

 
Михаил:

Sergej!

Du hattest Recht. MQ-Fehler

DasTerminal aktualisiert den Auftragsstatus nicht:

Ich habe die Bestellung erhalten, aber ihr Status ist immer nochORDER_STATE_STARTED

Michael, besteht der Auftrag nach diesen Meldungen noch? Könnte es nicht sein, dass ein Geschäft ein paar Monate zuvor abgeschlossen wurde?

 
Alexey Kozitsyn:

Michael, besteht der Auftrag nach diesen Meldungen noch? War es zufällig ein paar Millisekunden vorher, dass der Auftrag nicht ausgeführt werden konnte?

Ja, der Auftrag ist nach dem Fehler noch vorhanden.

Das spielt keine Rolle, da vor dem Löschen (Ändern) des Auftrags geprüft wird, ob er existiert:

void COrder::Remove()
{
  if ( ticket > 0 )
  {
    if ( OrderSelect( ticket ) )
    {
      ENUM_ORDER_STATE ord_state = ENUM_ORDER_STATE( OrderGetInteger( ORDER_STATE ) );
      if ( ( ord_state == ORDER_STATE_REQUEST_MODIFY ) ||
           ( ord_state == ORDER_STATE_REQUEST_CANCEL ) ||
           ( ord_state == ORDER_STATE_REQUEST_ADD ) ) return;
//........................................ Other code 
   }
  }
}
 

Warum ich frage, ich habe diese Situation:

Logbuch (Experten):

2015.11.26 18:05:16.725 FROG (RTS-12.15,M1)     TradeRemoveCycle case ORDER_STATE_PLACED: ОШИБКА #4756,  retcode = 10013. Ордер не удален!
2015.11.26 18:05:16.691 FROG (RTS-12.15,M1)     TradeRemoveCycle: ORDER_STATE_PLACED

Ich kann sehen, dass der Auftrag angenommen wurde (was bedeutet, dass er bearbeitet werden kann), aber die Anfrage ist nicht korrekt.

Im Logbuch sieht das Protokoll folgendermaßen aus:

2015.11.26 18:05:16.725 Trades  '1007642': failed cancel order #35817112 buy 0.00  at market [Invalid request]
2015.11.26 18:05:16.693 Trades  '1007642': cancel order #35817112 buy limit 1.00 RTS-12.15 at 87780
2015.11.26 18:05:16.691 Trades  '1007642': deal #4375646 buy 1.00 RTS-12.15 at 87780 done (based on order #35817112)

D.h. in dem Moment, in dem der Auftrag gelöscht wurde, wurde ein Geschäft mit ihm abgeschlossen. Und dann versucht der Roboter, den Auftrag zu löschen, der nicht mehr existiert.

Jetzt versuche ich zu entscheiden, was ich tun soll.

 
Михаил:

Ja, der Auftrag ist nach dem Fehler vorhanden.

Das macht aber nichts, denn vor dem Löschen (Ändern) wird geprüft, ob der Auftrag existiert:

Wie Sie sehen können, hat meine auch...
 
Alexey Kozitsyn:

Warum ich frage, ich habe diese Situation:

Logbuch (Experten):

Ich kann sehen, dass der Auftrag angenommen wurde (was bedeutet, dass er bearbeitet werden kann), aber die Anfrage ist nicht korrekt.

Im Logbuch sieht das Protokoll folgendermaßen aus:

D.h. in dem Moment, in dem der Auftrag gelöscht wurde, wurde ein Geschäft mit ihm abgeschlossen. Und dann versucht der Roboter, den Auftrag zu löschen, der nicht mehr existiert.

Jetzt versuche ich zu entscheiden, was ich tun soll.

Ich hatte dieses Problem auch schon, aber ich habe es gelöst.

Welchen Befehl verwenden Sie zum Festlegen von OrderSend() oder OrderSendAsync()?

 
Михаил:

Ich hatte dieses Problem auch schon, aber ich habe es gelöst.

Welchen Befehl verwenden Sie, um OrderSend() oder OrderSendAsync() zu setzen?

OrderSend(). Worin besteht der Unterschied in diesem Fall?
 
Alexey Kozitsyn:
BestellungSenden()

Wenn ein Auftrag ausgeführt wird, haben Sie keine Kontrolle über seine Ausführung und blockieren daher auch nicht OnTick() oder OnBookEvent().

Sie müssen das Handelsereignis in OnTradeTransaction() behandeln, um die Ausführung des Auftrags schnell zu kontrollieren.

Ich werde den Code dafür bald veröffentlichen...