Diskussion zum Artikel "Handelsoperationen in MQL5 - Nichts leichter als das" - Seite 3

 

Können Sie mir sagen, ob es möglich ist, diese Konstruktion von MQL4 mit m_Trade.PositionModify zu implementieren (m_Trade ist ein Mitglied der Klasse CTrade)?

...
if(TrendUp==true) 
   for(int i=0; i<10; i++)
      {
        ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,30,0,0);
        if(ticket>0 && i<9) OrderModify(ticket,0,0,Ask+SPS*take_koef[i],0);
      };
...

Der Sinn des Skripts ist es, einen Kauf auf dem Markt mit einer bestimmten Anzahl von Lots zu eröffnen und dann einen Take Profit in 10 Teilen zu setzen. Ich bin an der Tatsache gescheitert, dass PositionModify, ohne einen Stop Loss zu setzen, den Fehler 10016(Falsche Stops in der Anfrage) ausgibt. Und es gibt keine Aufgabe, einen Stop zu setzen :). In der Hilfe heißt es, dass es möglich ist, keinen Wert anzugeben:

Параметры

symbol

[in]  Наименование торгового инструмента, по которому предполагается модифицировать позицию.

sl

[in]  Новая цена, по которой сработает Stop Loss (либо, если изменение не нужно, предыдущее значение).

tp

[in]  Новая цена, по которой сработает Take Profit (либо, если изменение не нужно, предыдущее значение).

Ich habe versucht, den Wert aus dem vorherigen Kauf-Anfrage erhalten übergeben (es ist Null natürlich), gut, die gleiche Rake nur im Profil. Hier ist mein Code:

...
         m_Trade.Buy(Lots);// das gesamte Volumen auf dem Markt kaufen
         if(m_Trade.ResultRetcode()==10008)//wenn der Kauf erfolgreich ist, ändern Sie die Position, indem Sie die Take-Outs einstellen
           {
            S="Antrag erfüllt. Bestellnummer: "+IntegerToString(m_Trade.RequestOrder());
            Comment(S);
            sl=m_Trade.RequestSL();// Abrufen des Stop Loss aus der letzten Anfrage
            for(int i=0;i<=10;i++)
              {
               if(m_Trade.PositionModify(symbol,sl,Ask+SPS*take_koef[i]))
                 {
                  S+="Snap Take:"+IntegerToString(i);
                  Comment(S);
                 }
               else
                 {
                  S+="SnPositionsänderungsfehler mit Code: "+IntegerToString(m_Trade.ResultRetcode());
                  Comment(S);
                  return(4);
                 };
              };
...

Ich danke Ihnen im Voraus für Ihre Hilfe.

[Gelöscht]  
Dies ist eine GROSSE Hilfe, um Ihre EA-Programmierung in Gang zu bringen.
 

Gute Einführung in die objektorientierte Programmierung in MQL5.

Mit MT5 Build 1347 kann das erste Codebeispiel nicht kompiliert werden mit dem Fehler "illegal switch expression type".

Ich musste Casting zu int in switch-Anweisungen in AccountInfo.mqh hinzufügen, damit es funktioniert, wie:

switch((int)MarginMode())

 
Николай Осипов:

Hallo,
Wenn ich die Funktion BuyStop im Code für den Handel mit RTS-3.13 (RIH3) Futures verwende, tritt immer wieder ein Fehler auf:
10022 TRADE_RETCODE_INVALID_EXPIRATION - Ungültiges Verfallsdatum der Order


Nicholas, viele Grüße. Haben Sie zufällig dieses Problem gelöst? Ich habe die gleichen Schwierigkeiten mit RTS-6.17 und weiß nicht, wie ich es lösen kann.
 
Rashid Zeynalov:
Ähnliches Problem auf RTS-3.13 Opening-demo, habe alles ausprobiert (während Limit-Orders auf ORDER_TIME_SPECIFIED_DAY gesetzt sind, wie im Symbolprofil geschrieben) !!!!. Während Buy-Stop-Order ist perfekt offen in den Markt manuell. Dies ist ein Terminal-Fehler, sollten Sie an die Entwickler schreiben
Rashid, hallo. Haben Sie zufällig dieses Problem gelöst? Ich habe die gleichen Schwierigkeiten mit dem echten Open auf RTS-6.17.

 
sgtkachev:
Rashid, hallo. Haben Sie zufällig dieses Problem gelöst? Ich habe die gleichen Schwierigkeiten mit dem echten Open auf RTS-6.17.

Entschuldigung, ich habe die Frage nicht bemerkt. Versuchen Sie, diese Datei zu ersetzen und berichten Sie bitte über das Ergebnis.
Dateien:
Trade.mqh  68 kb
 

Hallo

Bei einigen Brokern (z.B. FoxPro) tritt beim Versuch, eine Position zu eröffnen, der Fehler 10030 auf. Codebeschreibung: ungültige Füllung. Auf anderen Brokern (zum Beispiel Alpari) funktioniert ohne diese Zeilen

Im Block der Initialisierung des Expert Advisors habe ich verschiedene Werte in den Code geschrieben:

trade.SetTypeFilling(SYMBOL_FILLING_FOK);

или
trade.SetTypeFilling(SYMBOL_FILLING_IOC);

или

trade.SetTypeFilling(ORDER_FILLING_RETURN);

Hilft aber nicht. Wie kann man das Problem lösen? Oder ist diese CTrade-Klasse veraltet und entspricht nicht den neuesten Terminal-Updates und ich muss Handelsoperationen nach dem Standardschema durch die Struktur schreiben?


UPD: Rashid hat oben eine Bibliotheksdatei gepostet, die mein Problem gelöst hat. Es ist traurig, dass die Standardbibliothek einen Fehler hat. Ich werde jetzt den Vergleich untersuchen, um zu sehen, ob es möglich ist, einige Änderungen direkt im EA vorzunehmen, ohne die Bibliothek zu ersetzen, damit alles funktioniert

Автоматическое обновление - Для продвинутых пользователей - Начало работы - Справка по MetaTrader 5
Автоматическое обновление - Для продвинутых пользователей - Начало работы - Справка по MetaTrader 5
  • www.metatrader5.com
В платформу встроена система автоматического обновления. Она позволяет своевременно получать и устанавливать новые версии программы. Эту систему...
 
Gut
 
makk:

Gute Einführung in die objektorientierte Programmierung in MQL5.

Mit MT5 Build 1347 kann das erste Codebeispiel nicht kompiliert werden mit dem Fehler "illegal switch expression type".

Ich musste Casting zu int in switch-Anweisungen in AccountInfo.mqh hinzufügen, damit es funktioniert, wie:

switch((int)MarginMode())

 

Hallo, Vielen Dank für diesen sehr hilfreichen Beitrag und bitte helfen Sie mir, dieses Problem zu lösen. Ich bin neu im MT5 und lerne gerade, EAs zu erstellen, also habe ich den Beispielcode kopiert, um Ctrade.Buy auszuführen, aber der Backtest ist fehlgeschlagen. Hier sind weitere Informationen:


1) Konto: Es ist ein Live-Konto mit der Basiswährung NZD

2) MetaEditor-Einstellungen für den Backtest:

Optionen


3) Code: Kopiert von https://www.mql5.com/de/articles/481:


//+------------------------------------------------------------------+

//|                                                         demo.mq5 |

//|                        Copyright 2017, MetaQuotes Software Corp. |

//|                                             https://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "Copyright 2017, MetaQuotes Software Corp."

#property link      "https://www.mql5.com"

#property version   "1.00"

#include<Trade\Trade.mqh>


//--- object for performing trade operations

CTrade  trade;

//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

int OnInit()

  {

   //--- set MagicNumber for your orders identification

   int MagicNumber=123456;

   trade.SetExpertMagicNumber(MagicNumber);

   //--- set available slippage in points when buying/selling

   int deviation=10;

   trade.SetDeviationInPoints(deviation);

   //--- order execution mode

   trade.SetTypeFilling(ORDER_FILLING_RETURN);

   //--- logging mode: it would be better not to declare this method at all, the class will set the best mode on its own

   trade.LogLevel(1);

   //--- what function is to be used for trading: true - OrderSendAsync(), false - OrderSend()

   trade.SetAsyncMode(true);

   //---

   return(0);

  }

//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

  {

//---

   

  }

//+------------------------------------------------------------------+

//| Expert tick function                                             |

//+------------------------------------------------------------------+

void OnTick()

  {

   BuySample1();

  }


//--- Buy sample  

//+------------------------------------------------------------------+

//|  Buying a specified volume at the current symbol                 |

//+------------------------------------------------------------------+

void BuySample1()

  {

//--- 1. example of buying at the current symbol

   if(!trade.Buy(0.1))

     {

      //--- failure message

      Print("Buy() method failed. Return code=",trade.ResultRetcode(),

            ". Code description: ",trade.ResultRetcodeDescription());

     }

   else

     {

      Print("Buy() method executed successfully. Return code=",trade.ResultRetcode(),

            " (",trade.ResultRetcodeDescription(),")");

     }

//---

  }

4) Fehlerprotokoll (Bitte beachten Sie, dass ich nur auf EUR/USD teste):

GJ 0 19:36:44.410 127.0.0.1 Anmeldung (Build 1730)

HH 0 19:36:44.420 Netzwerk 38520 Bytes Kontoinformationen geladen

JO 0 19:36:44.420 Netzwerk 1482 Bytes Testerparameter geladen

QE 0 19:36:44.420 Netzwerk 188 Bytes Eingabeparameter geladen

FR 0 19:36:44.421 Netzwerk 443 Bytes der Symbolliste geladen

IF 0 19:36:44.421 Tester-Experten-Datei hinzugefügt: Experts\demo.ex5. 46684 Bytes geladen

QH 0 19:36:44.433 Tester Ersteinzahlung 10000.00 NZD, Hebelwirkung 1:100

JN 0 19:36:44.437 Tester erfolgreich initialisiert

ES 0 19:36:44.437 Netzwerk 46 Kb Gesamtinitialisierungsdaten empfangen

PP 0 19:36:44.437 Testgerät Intel Core i7-4510U @ 2.00GHz, 8103 MB

RJ 0 19:36:44.799 Symbole EURUSD: zu synchronisierendes Symbol

HR 0 19:36:44.800 Symbole EURUSD: Symbol synchronisiert, 3624 Bytes an Symbolinformationen erhalten

NJ 0 19:36:44.800 Verlauf EURUSD: Verlaufssynchronisation gestartet

GO 0 19:36:44.856 Historie EURUSD: Laden von 27 Bytes Historiendaten zur Synchronisation in 0:00:00.000

RQ 0 19:36:44.856 Historie EURUSD: Historie synchronisiert von 2012.01.01 bis 2017.11.15

EF 0 19:36:44.993 Historie EURUSD,Daily: Historien-Cache für 1010 Balken zugewiesen und enthält 312 Balken von 2014.01.01 00:00 bis 2014.12.31 00:00

ND 0 19:36:44.993 Historie EURUSD,Täglich: Historie beginnt ab 2014.01.01 00:00

OL 0 19:36:44.996 Tester EURUSD,Daily (HalifaxPlus-Live): jeder Tick wird erzeugt

GN 0 19:36:44.996 Tester EURUSD,Daily: Test von Experts\demo.ex5 von 2015.01.01 00:00 bis 2017.11.15 00:00 gestartet

CK 0 19:36:56.288 Symbole NZDUSD: zu synchronisierendes Symbol

IS 0 19:36:56.288 Symbole NZDUSD: Symbol synchronisiert, 3624 Bytes Symbolinformationen erhalten

JL 0 19:36:56.288 Verlauf NZDUSD: Verlaufssynchronisation gestartet

HJ 0 19:36:56.575 Historie NZDUSD: 14 Kb Historiendaten zum Synchronisieren geladen in 0:00:00.078

LS 0 19:36:56.575 Historie NZDUSD: Historie synchronisiert von 2013.01.01 bis 2017.11.15

CO 0 19:36:56.579 Symbole EURNZD: zu synchronisierendes Symbol

OJ 0 19:36:56.580 Symbols EURNZD: Symbol synchronisiert, 3624 Bytes an Symbolinformationen erhalten

DL 0 19:36:56.580 Verlauf EURNZD: Verlaufssynchronisation gestartet

MK 0 19:36:56.656 Historie EURNZD: Laden von 27 Bytes Historiendaten zur Synchronisation in 0:00:00.000

OD 0 19:36:56.656 Geschichte EURNZD: Geschichte von 2013.01.01 bis 2017.11.15 synchronisiert

IN 0 19:36:56.665 Handel 2015.01.02 03:00:00 Marktkauf 0.10 EURUSD (1.20538 / 1.20549 / 1.20538)

PE 0 19:36:56.665 Handel 2015.01.02 03:00:00 Geschäft #2 Kauf 0.10 EURUSD zu 1.20549 durchgeführt(basierend auf Auftrag #2)

FH 0 19:36:56.666 Trade 2015.01.02 03:00:00 deal ausgeführt [#2 buy 0.10 EURUSD at 1.20549]

OG 0 19:36:56.666 Trade 2015.01.02 03:00:00 Auftrag ausgeführt buy 0.10 at 1.20549 [#2 buy 0.10 EURUSD at 1.20549]

FO 0 19:36:56.670 demo (EURUSD,D1) 2015.01.02 03:00:00 Buy() Methode erfolgreich ausgeführt. Return code=10009 (ausgeführt bei 1.20549)

NM 2 19:37:15.823 Verlauf NZDUSD 2016.09.21 23:01:00: beschädigter Verlauf entdeckt (s:-73370, o:73433, h:+48, l:-123, c:-117 -- tv:63, rv:11250111)

JF 2 19:37:15.823 Verlauf NZDUSD 2016.09.21, fehlerhafter Container gefunden, muss neu synchronisiert werden

LQ 2 19:37:16.106 Tester Historie Fehler 9 in undefinierter Funktion

OH 2 19:37:16.106 Tester stoppt bei 0% des Testintervalls mit Fehler '20 NZDUSD'


Bitte sagen Sie mir, was falsch ist und wie ich das Problem beheben kann?