Ctrade - Seite 4

 

also ich kann tun was ich will, ich habs mit manuellen orders probiert, ich hab die order gleich in die OnStart geschrieben, als void, bool, int, double

aber ich krieg kein 10008 ins script, keine Ahnung wie das im script geht


dafür ist mir noch was aufgefallen, aber das regt mich gar nicht mehr auf ;-)

ich kann in der OnDeinit

void OnDeinit(const int reason)
  {
   Print("Ticket in deInit ",_ticket);
   if(reason==0                        // Order Löschen wenn Chart order Terminal geschlossen wird 
      ||reason == 1
      ||reason == 2
      //||reason == 3
      || reason==4
      //||reason == 5
      || reason==6
      //||reason == 7
      //||reason == 8
      || reason==9
      )
     {

      _trade.OrderDelete(_ticket);
      ObjectsDeleteAll(0,-1,-1);       // löschen der Linien damit nach einem Neustart nicht die Order wiederkommt
        
     }

   Print("OnDeinit reason: ",reason);
  }

machen, weil bei OnDeinit, deaktiviert er zuerst die CTrade Class

ganz super, weil manuell funktioniert das ganze super


void OnDeinit(const int reason)
  {

   if(reason==0                        // Order Löschen wenn Chart order Terminal geschlossen wird 
      ||reason == 1
      ||reason == 2
      //||reason == 3
      || reason==4
      //||reason == 5
      || reason==6
      //||reason == 7
      //||reason == 8
      || reason==9
      )
     {
               // Pending Order rauslöschen
               
      MqlTradeRequest request={0};
      MqlTradeResult  result={0};
      request.action=TRADE_ACTION_REMOVE;
      request.symbol= _Symbol;
      request.order=_ticket;
      if(!OrderSend(request,result))
         PrintFormat("OrderSend error %d",GetLastError());  // wenn die Anfrage konnte nicht gesendet werden, den Fehlercode anzeigen
      //--- Details zur Transaktion   
      PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
      
      // Alle Objekte löschen
      ObjectsDeleteAll(0,-1,-1);       // löschen der Linien damit nach einem Neustart nicht die Order wiederkommt

     }

   Print("OnDeinit reason: ",reason);
  }

ich werd das Russen Zeugs nie verstehen

 
amando:

ich kann in der OnDeinit

machen, weil bei OnDeinit, deaktiviert er zuerst die CTrade Class




Das ist kein Russen-Zeugs :-)

Hat mit OOP zu tuhen:

Wenn du ein Object in OOP erstellst wird der sogenannte "Constructor" aufgerufen.

Wird ein Programm beendet wird automatisch der "Destructor" aufgerufen.

Dort kann je nach belieben Dinge erledigt werden bevor das Object vom "Betriebssystem" gelöscht wird.


Das macht auch der Metatrader.


Alle dynamisch erzeugten Objekte ( mit new) müssen von hand gelöscht werden.

Dort läuft aber der selbe Process ab. Es wird der Destructor aufgerufen.


https://www.mql5.com/de/articles/28

Die Reihenfolge der Erstellung und Zerstörung von Objekten in MQL5
Die Reihenfolge der Erstellung und Zerstörung von Objekten in MQL5
  • www.mql5.com
sorgt nicht nur für neue Möglichkeiten bei der Erstellung benutzerdefinierter Bibliotheken, sondern ermöglicht es Ihnen auch, vollständige und getestete Klassen von anderen Entwicklern zu benutzen. In der im MetaTrader 5 Client Terminal enthaltenen Standardbibliothek befinden sich Die Die Initialisierung globaler Variablen findet direkt nach...
 

Übrigens habe ich den Unterschied zwischen Code 10008 und 10009 gelesen.


10008 kommt zurück bei OrderSendAsync

10009 kommt zurück bei OrderSend

Prüf das mal

https://www.mql5.com/en/forum/10056

"10008 - TRADE_RETCODE_PLACED" vs "10009 - TRADE_RETCODE_DONE"
"10008 - TRADE_RETCODE_PLACED" vs "10009 - TRADE_RETCODE_DONE"
  • 2013.01.15
  • www.mql5.com
What is the practical difference between "10008 - TRADE_RETCODE_PLACED" and "10009 - TRADE_RETCODE_DONE"? https://www.mql5...
 
Christian:

Übrigens habe ich den Unterschied zwischen Code 10008 und 10009 gelesen.


10008 kommt zurück bei OrderSendAsync

10009 kommt zurück bei OrderSend

Prüf das mal

https://www.mql5.com/en/forum/10056

Ahja, also auf die idee wäre ich nicht gekommen 😂😂.

stimmt aber auch nicht so ganz. Bei async kommt auch 10009 zurück, zumindest wars bisher immer so

interessant das dies nur bei ctrade auftritt, und seitwann man eine pending order async setzt ist mir auch nicht klar. Das geht eigentlich nicht

 
amando:

Ahja, also auf die idee wäre ich nicht gekommen 😂😂.

stimmt aber auch nicht so ganz. Bei async kommt auch 10009 zurück, zumindest wars bisher immer so

interessant das dies nur bei ctrade auftritt, und seitwann man eine pending order async setzt ist mir auch nicht klar. Das geht eigentlich nicht

Setzt du denn nach dem erzeugen von CTrade den Asyncmode ?


Eine Pending Order Async zu senden macht durchaus Sinn. Auch wenn er dir nicht sofort klarr ist.

Oder du hast das Prinzip Sync-Async noch nicht ganz verstanden.

Bsp:

Absetzen von 100 Pending-Orders ( Egal warum :-) )

Syncron schematisch:

RTT bei guter Verbindung 30ms
Senden  30ms

Antwort vom Server  30ms

Status gesendet.



Das ganze 100 mal = 3 Sekunden


ASyncron schematisch:

Senden ...fertig

Es braucht nicht weiter auf irgendwas gewartet werden.
Den Status der Order wird dann mittels TransActions verarbeitet.




Das ganze 100 mal . Ich schätze das passiert in weniger als 100ms