Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 58

 
teetrinker:

Sollte Myexpert.Time(10) die Zeit des zehnten Balkens im Diagramm zurückgeben? Und wie schreibt man ihn richtig?

Dankeschön

Theoretisch ja, es sollte...

Die Time-Methode ruft laut Dokumentation den Wert des Time-Elements mit dem angegebenen Index ab. Es handelt sich um eine Methode der Klasse CExpertBase, die eine Basisklasse für CExpert und alle Hilfsklassen von Handelsstrategien ist.

Liebe sergeev sagt Ihnen richtig... Am besten verwenden Sie den Debugger, um die Rolle der Time()-Methode im Leben Ihres EA zu bestimmen...

 

Vielen Dank, Yedelkin !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Und EnumToString(timeframe), coole Funktion!!! UND ICH BIN BARAN!!!!!!

 
Sagen Sie mir bitte, hier ist eine Funktion
 bool  PositionModify( ulong  PositionTicket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color=CLR_NONE)
      {  MqlTradeRequest request  = {0};
         MqlTradeResult result = {0};
        request.action= TRADE_ACTION_SLTP; 
        request.order= PositionTicket; 
        request.price= price;
        request.symbol= Symbol();
        request.sl= stoploss;
        request.tp= takeprofit;
        return (OrderSend( request,   result    ));   
      }

Die Funktion scheint eine ,,Seite zu haben,,- request.symbol= Symbol(); Warum Symbol()? Hierher sollte das Symbol übertragen werden, für das wir TP und SL setzen. Können wir also einfach die Zeichenfolge request.symbol= Symbol(); entfernen, wie es dumm nada ist?

 

Wie kann man einen Rollover-Auftrag auf dem Stop-Level des offenen Hauptauftrags setzen und ihn dann löschen, wenn der Hauptauftrag zum TP geschlossen wird?

Ich habe beide Aufträge gleichzeitig in den Code eingegeben:

        
 // основной ордер +++++++++++++++++++++++++++++++++++++++      
        {
         request.action = TRADE_ACTION_PENDING;
         request.magic=magic_number;                  // ORDER_MAGIC
         request.symbol = "EURUSD";
         request.volume = NormalizeDouble(volume()/1,2);
         request.price=NormalizeDouble(Ask+StopLevel*_Point,_Digits);
         request.sl = NormalizeDouble(request.price - SL*_Point,_Digits);
         request.tp = NormalizeDouble(request.price + TP*_Point,_Digits);
         request.deviation=0;
         request.type=ORDER_TYPE_BUY_STOP;
         request.type_filling=ORDER_FILLING_FOK;
         
           {
            OrderSend(request,result);
            if(result.retcode==10009 || result.retcode==10008)
               Print("Установлен ордер BuyStop");
            else
              {
               Print(ResultRetcodeDescription(result.retcode));
                           
              }
           }      
 // переворотный ордер +++++++++++++++++++++++++++++++++++++++
        
         request.action = TRADE_ACTION_PENDING;
         request.magic=magic_number1;                  // ORDER_MAGIC
         request.symbol = "EURUSD";
         request.volume = NormalizeDouble(volume()/2,2);
         request.price=NormalizeDouble(Bid-(SL-45) *_Point,_Digits);
         request.sl = NormalizeDouble(request.price + SL*_Point,_Digits);
         request.tp = NormalizeDouble(request.price - (TP-900)*_Point,_Digits);
         request.deviation=0;
         request.type=ORDER_TYPE_SELL_STOP;
         request.type_filling=ORDER_FILLING_FOK;
         
           {
            OrderSend(request,result);
            if(result.retcode==10009 || result.retcode==10008)
               Print("Установлен ордер SellStop");
            else
              {
               Print(ResultRetcodeDescription(result.retcode));
               return;
              }
           }        
       } } 
}

Der Hauptauftrag öffnet und schließt bei TP, und der Rollover-Auftrag bleibt hängen. Wenn der Hauptauftrag bei der Haltestelle geschlossen wurde, gäbe es kein Problem). Welche Funktion lässt sich am besten schließen?

Sollte ich die ausstehenden Aufträge durchgehen und sie auf diese Weise löschen?

      {
         request.action = TRADE_ACTION_REMOVE;
         request.magic=magic_number1;                  // ORDER_MAGIC
         request.symbol = "EURUSD";
         request.volume = 0;
         request.price=0;
         request.sl = 0;
         request.tp =0;
         request.deviation=0;
         request.type=0;
         request.type_filling=0;
         
           {
            OrderSend(request,result);
Oder gibt es einen einfacheren Weg?


	          
 
Crucian: Der Hauptauftrag öffnet und schließt bei TP und der Rollover-Auftrag bleibt hängen. Wäre der Hauptauftrag beim Stopp geschlossen worden, hätte es keine Probleme gegeben )). Welche Funktion sollte ich verwenden, um sie zu schließen? Sollte ich die ausstehenden Aufträge durchgehen und sie auf diese Weise löschen? Oder gibt es einen einfacheren Weg?

Die Frage ist also, wie genau eine schwebende Order gelöscht werden kann, die keine SL- oder TP-Order ist, wenn bestimmte Ereignisse eintreten (insbesondere, wenn eine TP-Order bei einer offenen Position ausgelöst wird).

Derzeit kann ein solcher schwebender Auftrag nur zwangsweise gelöscht werden, indem ein entsprechender Antrag auf "Löschen eines schwebenden Auftrags" gestellt wird. Wir müssen also auf der Terminalseite das Auftreten bestimmter Ereignisse überwachen und eine Anfrage senden. Aber im Gegensatz zu Ihrer Variante müssen nur zwei Felder in der Anfrage angegeben werden, von denen eines die Anfrage ist.bestellen.

In der von Ihnen erwähnten Situation wären OCO-Aufträge ("One Cansels Other(s)") hilfreich: Auf der TP-Ebene würde ein Auftrag in der Größe der offenen Position platziert werden, und auf der SL-Ebene würde ein Auftrag in der Größe platziert werden, die erforderlich ist, um die Position "umzukehren". Wenn einer dieser OCO-Aufträge ausgelöst wird, wird der zweite auf der Serverseite automatisch entfernt. Während der gesamten Laufzeit dieses Forums haben die Entwickler der Plattform jedoch darauf bestanden, keine zusätzlichen Auftragsarten, einschließlich OCO-Aufträgen, einzuführen.

 
Yedelkin:

Solange es dieses Forum gibt, haben die Entwickler der Plattform jedoch kategorisch abgelehnt, zusätzliche Auftragsarten, einschließlich OCO-Aufträge, einzuführen.

Und warum sollte man sie einführen, wenn man sie auch programmatisch umsetzen kann?
 
A100: Warum sollte man sie eingeben, wenn man es auch programmatisch tun kann?
Versuchen Sie, das Wort "OCO" in lateinischer und kyrillischer Sprache in eine Forumssuche einzugeben und lesen Sie es.
 
Yedelkin:
Versuchen Sie, das Wort "OCO" in lateinischer und kyrillischer Sprache in eine Forumssuche einzugeben und lesen Sie es.
OCO ist kein eigenständiger Haftbefehl und muss nicht eingetragen werden.
 
A100: Der CCA ist kein eigenständiger Haftbefehl und es besteht keine Notwendigkeit, ihn einzuführen
Ich verstehe. Sie haben also nichts gelesen. Aber Sie sind bereit, Ihre Meinung zu teilen. OK, Ihre Meinung ist akzeptiert: Sie brauchen diese Art von Auftrag nicht.
 
Yedelkin:
Sie benötigen diese Art von Bestellung nicht.
Einige Plattformen haben die Möglichkeit, 1 (manchmal 2) CCA-Aufträge zu binden. In MT4/5 implementiere ich programmatisch eine Kette von verknüpften Aufträgen (manchmal recht komplex) und finde dies eine bequemere Option