Diskussion zum Artikel "LifeHack für Händler: Fast-Food aus Indikatoren"

 

Neuer Artikel LifeHack für Händler: Fast-Food aus Indikatoren :

Wenn Sie gerade erst auf MQL5 umgestiegen sind, dann wird Ihnen dieser Artikel helfen. Erstens erfolgt der Zugriff auf die Indikatorendaten und -serien im üblichen MQL4-Stil. Zweitens ist diese ganze Einfachheit in MQL5 implementiert. Alle Funktionen sind so übersichtlich wie möglich und eignen sich perfekt für ein schrittweise Debugging.

Ich habe "Comment" nur zur Verifizierung implementiert. Sie können die Arbeit im Tester überprüfen, wenn Sie "MACD MQL4 style EA short.mq5" im visuellen Modus starten und den Cursor auf dei Bar mit dem Index #1 stellen:

"MACD MQL4 style EA short.mh5" im Tester

Abb. 1. "MACD MQL4 style EA short.mh5" im Tester

Autor: Vladimir Karputov

 

Toll...

 

Der Artikel ist ein kleiner Auszug aus einem anderen. Es wurde nichts getan, damit er effizient funktioniert. Keine Zwischenspeicherung von Indikatoren und Zeitreihen. Kein High[i], Low[i], etc. Kein iCustom.

Ich hatte etwas ganz anderes erwartet. Außerdem, was nützt das Fast Food in Expert Advisors, wenn es nicht einmal in den Quellen enthalten ist?

   for(int i=PositionsTotal()-1;i>=0;i--)
      if(m_position.SelectByIndex(i)) // wählt die Position über den Index aus, um weiteren Zugriff auf ihre Eigenschaften zu erhalten
         if(m_position.Symbol()==m_symbol.Name())
           {
            //--- Long-Position wird eröffnet
            if(m_position.PositionType()==POSITION_TYPE_BUY)
              {
               //--- soll sie geschlossen werden?
               if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious && 
                  MacdCurrent>(MACDCloseLevel*m_adjusted_point))
                 {
                  //--- Position schließen und beenden
                  if(!m_trade.PositionClose(m_position.Ticket()))
                     Print("PositionClose error ",m_trade.ResultRetcodeDescription());
                  return;
                 }
               //--- Prüfung auf Trailing-Stop
               if(TrailingStop>0)
                 {
                  if(m_position.PriceCurrent()-m_position.PriceOpen()>m_adjusted_point*TrailingStop)
                    {
                     if(m_position.StopLoss()<m_symbol.Bid()-m_adjusted_point*TrailingStop)
                       {
                        //--- Position ändern und beenden
                        if(!m_trade.PositionModify(m_position.Ticket(),
                           m_symbol.NormalizePrice(m_position.PriceCurrent()-m_adjusted_point*TrailingStop),
                           m_position.TakeProfit()))
                           Print("PositionModify error ",m_trade.ResultRetcodeDescription());
                        return;
                       }
                    }
                 }
              }

            if(m_position.PositionType()==POSITION_TYPE_SELL)
              {
               //--- soll sie geschlossen werden?
               if(MacdCurrent<0 && MacdCurrent>SignalCurrent && 
                  MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*m_adjusted_point))
                 {
                  //--- Position schließen und beenden
                  if(!m_trade.PositionClose(m_position.Ticket()))
                     Print("PositionClose error ",m_trade.ResultRetcodeDescription());
                  return;
                 }
               //--- Prüfung auf Trailing-Stop
               if(TrailingStop>0)
                 {
                  if((m_position.PriceOpen()-m_position.PriceCurrent())>(m_adjusted_point*TrailingStop))
                    {
                     if((m_position.StopLoss()>(m_symbol.Ask()+m_adjusted_point*TrailingStop)) || (m_position.StopLoss()==0.0))
                       {
                        //--- Position ändern und beenden
                        if(!m_trade.PositionModify(m_position.Ticket(),
                           m_symbol.NormalizePrice(m_symbol.Ask()+m_adjusted_point*TrailingStop),
                           m_position.TakeProfit()))
                           Print("PositionModify error ",m_trade.ResultRetcodeDescription());
                        return;
                       }
                    }
                 }
              }
           }
Переход с MQL4 на MQL5
Переход с MQL4 на MQL5
  • 2010.05.11
  • Sergey Pavlov
  • www.mql5.com
Данная статья, построенная в форме справочника по функциям MQL4, призвана помочь переходу с MQL4 на MQL5. Для каждой функции языка MQL4 приведено описание и представлен способ ее реализации на MQL5, что позволит вам значительно ускорить перевод своих программ с MQL4 на MQL5. Для удобства функции разбиты на группы, как в документации по MQL4.
 
fxsaber:

Der Artikel ist ein kleiner Auszug aus einem anderen. Es wurde nichts getan, damit er effizient funktioniert. Keine Zwischenspeicherung von Indikatoren und Zeitreihen. Kein High[i], Low[i], etc. Kein iCustom.

Ich hatte etwas ganz anderes erwartet. Außerdem, was nützt das Fast Food in Expert Advisors, wenn es in den Quellen sowieso nicht riecht?


Hier ein Beispiel für einen typischen MQL4-ca - ohne den Code zu lesen oder anzuschauen, geht man direkt auf das Podium mit Flaggen :) .

 
Vladimir Karputov:

Hier ist ein Beispiel für eine typische MQL4-ca - ohne zu lesen, ohne Blick auf den Code, direkt auf dem Podium mit Flaggen :) .

Bevor ich kommentiere, lese ich nicht nur den Text des Artikels, sondern auch alle beigefügten Quellen (einschließlich der Analyse von IndicatorsMQL4.mqh VS IndicatorsMQL5.mqh).

 
fxsaber:

Bevor Sie einen Kommentar abgeben, haben Sie nicht nur den Text des Artikels gelesen, sondern auch alle beigefügten Quellen (einschließlich der Analyse von IndicatorsMQL4.mqh VS IndicatorsMQL5.mqh).


Sie müssen die Datei MQL5\Include\SimpleCall\Series.mqh durchgesehen (und übersehen) haben.

Über das Caching - dies sind Ihre persönlichen Vermutungen (Erwartungen).

Dieser Artikel soll MQL4-Benutzer nicht täuschen, indem er sagt: "Stecken Sie meine Datei ein und Sie können gedankenlos im Stil von MQL4 weiterarbeiten", sondern er zeigt, wie man den alten Ansatz bei der Adressierung von Indikatoren auf MQL5 überträgt.

 
Vladimir Karputov:

Sie müssen die Datei MQL5\Include\SimpleCall\Series.mqh übersehen haben.

Lesen Sie sie sorgfältig. Wo steht High[i], usw.?

Zum Thema Caching - das sind Ihre persönlichen Vermutungen (Erwartungen).

Dieser Artikel soll nicht dazu dienen, MQL4-Benutzer zu täuschen, indem man sagt: "Stecken Sie meine Datei ein und Sie können gedankenlos im Stil von MQL4 weiterarbeiten", sondern er zeigt, wie man den alten Ansatz bei der Adressierung von Indikatoren auf MQL5 überträgt.

Wo ist iCustom? Sie haben gedankenlos fast einen Teil eines anderen Artikels kopiert und eingefügt und damit einen Fehler in der Leistung erhalten. In der Tat, täuschen Benutzer, dass dies die Kosten der MQL4-Stil, nicht Ihre Umsetzung ist.

Hier haben Sie Leistungsmessungen, die zeigen, dass MQL4-Stil ist nicht schlechter als MQL5 in einigen Fragen. Das Gleiche könnten Sie mit Indikatoren machen.

Hier ist eine der Realisierungen von Zeitreihen. Sie können sehen, dass der Autor sich bemüht hat, die Leistung zu betonen und sich vom MQL4-Stil zu entfernen (Sie können die Idee verfeinern, wenn Sie wollen).

Высокопроизводительная библиотека iTimeSeries
Высокопроизводительная библиотека iTimeSeries
  • Stimmen: 25
  • 2017.05.25
  • nicholishen
  • www.mql5.com
Одной из основных проблем с MQL5 до сих пор было удаление встроенных функций для работы с таймсериями. Несмотря на то, что такой подход расширил для программистов возможности разработки, он также замедлил работу из-за обязательного шага по созданию и удалению новых ячеек памяти каждый раз, когда требуется доступ к данным таймсерии.  Рассмотрим...
 
fxsaber:

Lesen Sie es sorgfältig. Wo steht High[i], usw.?

Wo steht iCustom? Sie haben gedankenlos einen Teil eines anderen Artikels kopiert und eingefügt und damit einen Leistungsabfall verursacht. Tatsächlich täuschen Sie die Benutzer, dass dies die Kosten von MQL4-Stil ist, nicht Ihre Implementierung.

Hier haben Sie Leistungsmessungen, die zeigen, dass MQL4-Stil ist nicht schlechter als MQL5 in einigen Fragen. Das Gleiche könnten Sie mit Indikatoren machen.

Hier ist eine der Realisierungen von Zeitreihen. Sie können sehen, dass der Autor versucht hat, die Leistung zu betonen und leicht vom MQL4-Stil abgewichen ist (es ist bequemer für ihn) (Sie können die Idee verfeinern, wenn Sie wollen).


Um sich schneller an MQL5 zu gewöhnen, sind nur die iXXXX-Funktionen von series übrig geblieben, da sie vollständigere Parameter haben (Symbol, Zeitrahmen, Verschiebung), die die hochspezialisierten High[] usw. leicht ersetzen werden. Das Ziel ist nicht, dass der Benutzer weiterhin gedankenlos MQL4 verwendet, sondern dass er langsam beginnt, seinen MQL4-Code umzuschreiben.

iCustom war nicht einmal in den Plänen vorgesehen - nur Standardindikatoren wurden berücksichtigt.

Über Caching - das steht definitiv nicht in dem Artikel für die Allgemeinheit.


Nachtrag: Übrigens wird das Feedback der Nutzer deutlich machen, ob High[] und ähnliche Funktionen notwendig sind oder ob wir auf iXXXX series verzichten können.

 
Vladimir Karputov:

Das Ziel ist nicht, dass der Benutzer weiterhin gedankenlos MQL4 verwendet, sondern dass er langsam beginnt, seinen MQL4-Code umzuschreiben.

MQL4-Stil ist reines MQL5. Es ist nicht schlechter als SB. Kämpfen Sie nicht mit Windmühlen in Ihrer Vorstellung. Du kämpfst nicht mit dem StandardLibrary-Style.

iCustom war nicht einmal in den Plänen - nur Standardindikatoren wurden berücksichtigt.

Über das Caching - es ist definitiv nicht in dem Artikel für die Allgemeinheit.

In den MT4 vs. MT5 Themen, die Indikatoren betreffen, wurden die Standardindikatoren am wenigsten diskutiert. Fast alle sprachen über benutzerdefinierte Indikatoren. Standardindikatoren wurden vor Jahrzehnten geschrieben und sind unwiderruflich veraltet. Die Arbeit in der fortgeschrittenen MQL5 mit uralten Indikatoren sieht seltsam aus.

Die Zwischenspeicherung hätte in dem Artikel nicht erklärt werden sollen, aber sie hätte getan werden müssen, da Sie die Objektivität Ihrer Schlussfolgerungen in Bezug auf den MQL4-Stil genommen haben.

Ein Rückgang der Testgeschwindigkeit mit gleichzeitigem Zugriff auf mehr als einen Indikator;

 
Vladimir Karputov:

Übrigens: Das Feedback der Nutzer wird zeigen, ob High[] und ähnliche Funktionen benötigt werden oder ob auf die iXXXX-Serie verzichtet werden kann.

Machen Sie eine Umfrage und sehen Sie das Ergebnis, ohne etwas in Form von Kommentaren zu sagen. Das Gleiche gilt auch für so einfache Dinge wie Bid/Ask-Variablen.

 

Der Artikel sollte genannt werden "wie Sie nicht schreiben können Code versuchen, MQL4 Darstellung zu speichern".

Harter Horror mit durchgesickerten Handles (warum den Indikator-Handle schließen?) und erstaunlichem Overhead (der Versuch, den Indikator neu zu erstellen, fällt in den Indikatormanager). Und genug Leute werden es kopieren, ohne zu schauen und ohne zu verstehen.

Außerdem, ineffiziente Extraktion von 1 Wert aus dem Indikator.

Ich las den Artikel vollständig, sah durch die Codes genug.