Grundlegende Fragen eines Neueinsteigers

 

Hallo zusammen!

Ich sollte gleich darauf hinweisen, dass ich versucht habe, diese Fragen in dem entsprechenden Thread hier zu stellen, aber irgendwie hat die Frage nicht die Aufmerksamkeit bekommen, die sie verdient hätte. Obwohl ich den Eindruck habe, dass die angesprochenen Themen zumindest einmal in den Köpfen vieler Menschen auftauchen. Eine Art von Fragen aus den FAQ (obwohl ich mich irren könnte). Ich werde die Fragen selbst hier direkt duplizieren:

1. Es gibt einen Unterschiedzwischen Mql4 und Mql5 (Website und Programmiersprache). Es gibt Metatrade 4 und Metatrader 5 mit Mql4 bzw. Mql5. Es gibt auch zwei verschiedene entsprechende Websites. Gleichzeitig führen alle Expert Advisors, die ich mir in MT4 angesehen habe, zu dieser Website. Welche ist wichtiger? Welches Forum ist "lebendiger"? Wo ist der beste Ort, um Fragen zu stellen? Gibt es eine Abwärtskompatibilität zwischen verschiedenen Versionen von MT und Mql? Ich persönlich schreibe derzeit meinen MT4 Expert Advisor auf Mql4. Das liegt daran, dass der Broker, mit dem ich die Demo teste, mit MT4 arbeitet. Wie kann ich erkennen, in welcher Sprache mein Expert Advisor geschrieben ist? Ich meine nur die Erweiterung (.mq4 und .mq5). Wenn ich eine Datei umbenenne, kann ich sie dann kompilieren (wieder wegen der Kompatibilität)?

2. Dynamische Parameter des externen Expertenberaters. Ist es möglich, einstellbare Parameter eines Expert Advisors dynamisch zu ändern? Lassen Sie mich erklären... Zum Beispiel gibt es einen externen Parameter extern bool a. Wenn dies der Fall ist, muss ein zusätzlicher Parameter extern int b gesetzt werden. Ist a=false, wird der Parameter b nicht benötigt. Gibt es eine Möglichkeit, sie je nach dem aktuellen Wert eines ausgewählten Elements anzuzeigen oder nicht? In Anbetracht der Tatsache, dass ich keine externen Parameter-Änderungshandler finden konnte und es kein #if gibt ... #endif, ich vermute, dass es nicht möglich ist... Wenn ja, könnten Sie dann vorschlagen, wie man in dieser Situation am besten vorgeht, um den Prozess der Einstellung externer Parameter nicht zu überlasten? Ich könnte z. B. a=false setzen und vergessen, dass der Parameter b nicht verwendet wird, ihn aber trotzdem in die Optimierung einbeziehen (obwohl es keinen Sinn hätte, sondern nur zusätzliche Zeit verschwenden würde). Und es ist eine Sache, wenn es nur einen solchen Parameter b gibt. Aber wenn ich zum Beispiel einen externen Enum-Parameter mache und es mehrere Dropdown-Varianten von TC. Sie haben einen gemeinsamen Teil (daher ist es logisch, sie in einem EA zu implementieren, anstatt mehrere zu schreiben), aber es gibt auch verschiedene mit vielen unterschiedlichen Parametern. Dann ist es sehr einfach zu verwechseln, welche Parameter für den ausgewählten TS relevant sind.

Automatische Optimierung des Expert Advisors. IMHO ist es sehr nützlich und sinnvoll. Ich habe hier einen Artikel über dieautomatisierte Optimierung von Handelsrobotern im realen Handel gefunden. Soweit ich weiß, wird jedoch eine zweite Instanz von MT verwendet, die für die Optimierung von außen gestartet wird (von einer laufenden Instanz von MT), und die Optimierungsergebnisse werden aus einem Bericht in Form von HTML gelesen. Das ist ungünstig und schief. Logischerweise sollte ich meine eigene Optimierungsfunktion/Dll schreiben und sie direkt im Expert Advisor ausführen. Hier ist also die Frage. Soweit ich das verstanden habe, wurde ein genetischer Optimierungsalgorithmus in den Strategietester programmiert. Ich kenne mich mit diesen Algorithmen nur sehr kurz aus. Aber sie sind seit langem bekannt, daher die Frage - warum das Rad neu erfinden?) Gibt es einen vorgefertigten Algorithmus, der direkt in MT verwendet wird? Vielleicht existiert sie bereits irgendwo in den Bibliotheken des Terminals selbst... Vielleicht gibt es einen separaten Quellcode oder eine fertige DLL. Bitte teilen Sie uns Ihre Erfahrungen in dieser Angelegenheit mit.

Vielen Dank im Voraus für Antworten auf zumindest einen Teil dieser Fragen.

 
gammaray:

Hallo zusammen!

Ich sollte gleich darauf hinweisen, dass ich versucht habe, diese Fragen in dem entsprechenden Thread hier zu stellen, aber irgendwie hat die Frage nicht die Aufmerksamkeit bekommen, die sie verdient hätte. Obwohl ich den Eindruck habe, dass die angesprochenen Themen zumindest einmal in den Köpfen vieler Menschen auftauchen. Eine Art von Fragen aus den FAQ (obwohl ich mich irren könnte). Ich werde die Fragen selbst hier direkt duplizieren:

1. Es gibt einen Unterschiedzwischen Mql4 und Mql5 (Website und Programmiersprache). Es gibt Metatrade 4 und Metatrader 5 mit Mql4 bzw. Mql5. Es gibt auch zwei verschiedene entsprechende Websites. Gleichzeitig führen alle Expert Advisors, die ich mir in MT4 angesehen habe, zu dieser Website. Welche ist wichtiger? Welches Forum ist "lebendiger"? Wo ist der beste Ort, um Fragen zu stellen? Gibt es eine Abwärtskompatibilität zwischen verschiedenen Versionen von MT und Mql? Ich persönlich schreibe derzeit meinen MT4 Expert Advisor auf Mql4. Das liegt daran, dass der Broker, den ich zum Testen der Demo verwende, MT4 verwendet. ...

...

Es wäre logisch, meine Fragen zu MQL4 in das "vierte" Forum zu stellen. Obwohl der Unterschied zwischen MQL5 und MQL4 nicht sehr groß ist. Wir sind von MQL4 umgezogen. Wenn Sie also eine Frage zur "4" in diesem Forum stellen wollen, sollten Sie in der Überschrift des Themas angeben, dass sie sich auf MT4 bezieht. Auf diese Weise wird es klarer sein.


... Wie bestimmen Sie die Sprache, in der der Expert Advisor geschrieben ist? Ich meine, nur durch die Erweiterung (.mq4 und .mq5). Und wenn die Datei umbenannt wird, lässt sie sich dann kompilieren (wieder wegen der Kompatibilität)?

...

Was die Verlängerung betrifft. Es gibt Dateien, die sich nach dem Umbenennen gut kompilieren lassen und sowohl im MT4 als auch im MT5 funktionieren - hier gibt es keine allgemeinen Rezepte.
 
Karputov Vladimir:

Es ist sinnvoll, Fragen zu MQL4 an das "vierte" Forum zu richten. Obwohl die Unterschiede zwischen MQL5 und MQL4 nicht signifikant sind. Es ist ein Übergang von MQL4. Wenn Sie also eine Frage zur "4" in diesem Forum stellen wollen, sollten Sie in der Überschrift des Themas angeben, dass sie sich auf MT4 bezieht. Auf diese Weise wird es klarer sein.


Bezüglich der Verlängerung. Wenn Sie kein MT4- oder MT5-Konto mit einer MT4- oder MT5-Datei haben, können Sie diese als Voraussetzung für einen Handelsroboter verwenden und benötigen keinen speziellen.
Nur die erste Frage betrifft mql4, der Rest ist IMHO für mql4 und mql5 gleich. Danke für die Antwort auf die erste Frage;) Mich interessiert vor allem die zweite Frage. Und IMHO könnte die dritte Frage für alle EA-Entwickler interessant sein)
 
Für die zweite Frage, siehe input, sinput, ParametrGetRange(...), ParametrSetRange(...).
 
Vladimir Kazakov:
Für die zweite Frage, siehe input, sinput, ParametrGetRange(...), ParametrSetRange(...).

Ich habe nicht gefragt, wie man externe Parameter des Expert Advisors einstellt. Das habe ich vor langer Zeit gelernt (Eingabe, extern). Ich habe gefragt, wie und ob es möglich ist, den in den Einstellungen angezeigten Parametersatz dynamisch zu ändern. ParametrGetRange und ParametrSetRange sind in mql nicht zu finden. Dies sind keine eingebauten Funktionen? Wo kann man nach ihnen suchen?

P.S. Die Verwendung von sinput kann nur als Hinweis darauf dienen, dass der Parameter nicht allein optimiert werden kann, ohne mit anderen Parametern verbunden zu sein. Aber ich kann nicht einmal dynamisch den Input in den Sinput ändern, abhängig von den Parametern, die ich bereits gewählt habe, um vorzuschlagen, welche Parameter in der Optimierung zu holen sind (welche Parameter angesichts der gewählten Parameter von Bedeutung sind), so dass ich keine Zeit damit verschwenden muss, die Parameter durchzugehen, die derzeit keinen Sinn machen

 

Auf der Registerkarte "Parameter" kann nichts programmatisch geändert werden. Sie können den deaktivierten Parametersatz überspringen, indem Sie INIT_PARAMETERS_INCORRECT von OnInit() zurückgeben.

Sie können die Start-, Schritt-, Stopp- und Optimierungserlaubnis programmatisch ändern: https://www.mql5.com/ru/docs/optimization_frames

Документация по MQL5: Работа с результатами оптимизации
Документация по MQL5: Работа с результатами оптимизации
  • www.mql5.com
Работа с результатами оптимизации - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Vladimir Kazakov:

Auf der Registerkarte Parameter kann nichts programmatisch geändert werden. Ein deaktivierter Parametersatz kann nicht übersprungen werden - ein Stub kann eingeschaltet werden, um keine unnötigen Berechnungen durchzuführen.

Sie können die Start-, Schritt-, Stopp- und Optimierungsauflösung programmatisch ändern: https://www.mql5.com/ru/docs/optimization_frames

Diese Funktionen sind offenbar in mql5 erschienen, denn ich habe sie in der mql4-Hilfe nicht gefunden. Und dann ist da noch die Frage der Kompatibilität. Wenn ich einen EA in Metatrader 5 schreibe, kann ich ihn dann in Metatrader 4 verwenden? Das scheint unwahrscheinlich. Insbesondere verwende ich die neuen Funktionen, die in mql5 eingeführt wurden. Verfügt mql5 über Funktionen zur Optimierung (es ist nur die Frage meiner 3. Frage)?
 

Das Thema heißt "Grundlegende Fragen eines Anfängers", und als Anfängerin verstehe ich nichts. Nun, hier werde ich eine Antwort auf meine elementare Frage bekommen (oder besser gesagt, ich hoffe es). Ich habe versucht, eine Schritt-für-Schritt-Anleitung zum Schreiben meines Expert Advisors zu befolgen. Ich bin bei dem Aspekt hängen geblieben, wie man eine offene Position in MKL5 zwangsweise schließt (ohne auf den SL oder TP zu warten), wenn ein bestimmtes Indikatorsignal erscheint, wie z.B. beim Schnittpunkt zweier MAs, oder wenn die Verengung der Bollinger-Linien oder andere Signale? Es muss eine Funktion wie ClosePos() geben, aber wo ist sie und wie bekomme ich sie? Ich bitte um ein detailliertes Stück Code, weil ich selbst die Feinheiten nicht verstehe - ich bin noch ein Baby in MKL5.

 
doublezero:

Das Thema heißt "Grundlegende Fragen eines Anfängers", und als Anfängerin verstehe ich nichts. Nun, hier werde ich eine Antwort auf meine elementare Frage bekommen (oder besser gesagt, ich hoffe es). Ich habe versucht, eine Schritt-für-Schritt-Anleitung zum Schreiben meines Expert Advisors zu befolgen. Ich bin bei dem Aspekt hängen geblieben, wie man eine offene Position in MKL5 zwangsweise schließt (ohne auf den SL oder TP zu warten), wenn ein bestimmtes Indikatorsignal erscheint, wie z.B. beim Schnittpunkt zweier MAs, oder wenn die Verengung der Bollinger-Linien oder andere Signale? Es muss eine Funktion wie ClosePos() geben, aber wo ist sie und wie bekomme ich sie? Ich bitte um einen ausführlichen Codeschnipsel, da ich selbst die Feinheiten nicht verstehe - in MKL5 ist noch ein Baby.

Ich beschäftige mich selbst seit weniger als einem Monat mit diesem Thema. Die Frage ist, ob Sie es selbst tun oder im Forum fragen wollen. Einfache Fragen werden in der Regel nicht gestellt, weil es nicht sehr gut ist (Sie können in der Hilfe nachsehen, suchen Sie nach fertigen Antworten im Internet). Deshalb habe ich diese ziemlich umfangreichen Fragen gestellt, die in diesem Monat aufkamen. Was Ihre Frage betrifft... Die Funktion OrderClose wird aufgerufen. Es gibt viele Beispiele für seine Verwendung. Sie ist in der integrierten MACD-Probe enthalten. Hier ist der Code, der zum Schließen von Aufträgen durch MACD-Signale verwendet wird (hier ist ein Codebeispiel für die Implementierung von Trailing Stop)


//--- it is important to enter the market correctly, but it is more important to exit it correctly...   
   for(cnt=0;cnt<total;cnt++)
     {
      if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
         continue;
      if(OrderType()<=OP_SELL &&   // check for opened position
         OrderSymbol()==Symbol())  // check for symbol
        {
         //--- long position is opened
         if(OrderType()==OP_BUY)
           {
            //--- should it be closed?
            if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
               MacdCurrent>(MACDCloseLevel*Point))
              {
               //--- close order and exit
               if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet))
                  Print("OrderClose error ",GetLastError());
               return;
              }
            //--- check for trailing stop
            if(TrailingStop>0)
              {
               if(Bid-OrderOpenPrice()>Point*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-Point*TrailingStop)
                    {
                     //--- modify order and exit
                     if(!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green))
                        Print("OrderModify error ",GetLastError());
                     return;
                    }
                 }
              }
           }
         else // go to short position
           {
            //--- should it be closed?
            if(MacdCurrent<0 && MacdCurrent>SignalCurrent &&
               MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*Point))
              {
               //--- close order and exit
               if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet))
                  Print("OrderClose error ",GetLastError());
               return;
              }
            //--- check for trailing stop
            if(TrailingStop>0)
              {
               if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     //--- modify order and exit
                     if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red))
                        Print("OrderModify error ",GetLastError());
                     return;
                    }
                 }
              }
           }
        }
     }


Und generell: Geben Sie einfach das Wort "Auftrag" in den "Index" ein und alle Funktionen zur Auftragsverwaltung werden dort angezeigt
 
gammaray:

Ich selbst mache das seit weniger als einem Monat. Die Frage ist, ob Sie es selbst machen wollen oder ob Sie Fragen im Forum stellen wollen. Normalerweise stelle ich keine einfachen Fragen, weil das nicht wirklich angebracht ist (Sie können im Helpdesk nachsehen oder im Internet nach Antworten suchen). Deshalb habe ich diese ziemlich umfangreichen Fragen gestellt, die in diesem Monat aufkamen. Was Ihre Frage betrifft... Die Funktion OrderClose wird aufgerufen. Es gibt viele Beispiele für seine Verwendung. Sie ist in der integrierten MACD-Probe enthalten. Hier ist der Code, der zum Schließen von Aufträgen durch MACD-Signale verwendet wird (hier ist ein Beispielcode für die Implementierung des Trailing Stop-Mechanismus)



Vielen Dank für die schnelle Antwort! Ich dachte, dass sie wahrscheinlich von jemandem gegeben werden würde, der sich schon lange mit dieser Art von Dingen beschäftigt.

Nur, dass OrderClose in MKL4 enthalten ist, aber nicht in MKL5. Es gibt nur die FunktionPositionClose in der Klasse CTrade in der Standardbibliothek, und es ist mir überhaupt nicht klar, wie man sie dort herausbekommt. Ich denke, dafür muss man irgendwie von einem Code zur Bibliothek aufrufen, dann zur Klasse CTrade.... Alles in allem ist es für mich ein dunkler Wald. Ich hatte nicht vor, MKL5 zu studieren, sondern beschloss einfach, meine (für mich) recht erfolgreiche Strategie zu automatisieren, und so begann ich einfach, Schritt für Schritt den Anweisungen zu folgen. Und jetzt stecke ich fest...

 
doublezero:

Vielen Dank für die schnelle Antwort! Ich dachte, es würde wahrscheinlich von jemandem kommen, der neu auf diesem Gebiet ist.

Nur, dass OrderClose in MKL4 enthalten ist, in MKL5 aber nicht. Es gibt nur die FunktionPositionClose in der Klasse CTrade in der Standardbibliothek, und es ist mir überhaupt nicht klar, wie man sie dort herausbekommt. Ich denke, dafür muss man irgendwie von einem Code zur Bibliothek aufrufen, dann zur Klasse CTrade.... Alles in allem ist es für mich ein dunkler Wald. Ich hatte nicht vor, MKL5 zu studieren, sondern beschloss einfach, meine (für mich) recht erfolgreiche Strategie zu automatisieren, und so begann ich einfach, Schritt für Schritt den Anweisungen zu folgen. Und jetzt stecke ich fest...

Ich hatte in mql 5 etwas durcheinander gebracht, ich möchte OrderSend nicht verwenden, alles wird dort gemacht (einschließlich Schließen). Auch der MT5 hat das gleiche MACD-Muster. Aber es braucht 10 Mal mehr Zeilen...
Ошибка закрытия ордера
Ошибка закрытия ордера
  • www.mql5.com
Скажите а есть отдельная команда по закрытию позиции или только встречная позиция? - - Категория: эксперты форекс, торговые роботы и советники
Grund der Beschwerde: