Diskussion zum Artikel "In 6 Schritten zum eigenen automatischen Handelssystem!"

 

Neuer Artikel In 6 Schritten zum eigenen automatischen Handelssystem! :

Wenn Sie nicht wissen, wie Handelsklassen aufgebaut sind, und Wörter wie „objektorientierte Programmierung“ (OOP) Sie verunsichern, ist dieser Beitrag genau das Richtige für Sie. Denn Sie müssen wirklich nicht alle Einzelheiten kennen, um Ihr eigenes Handelssignalmodul zu programmieren, sondern lediglich ein paar einfache Regeln befolgen. Alle weitere erledigt der MQL5-Assistent für Sie, und am Ende haben Sie ein einsatzbereites automatisches Handelssystem, einen Expert Advisor!

Autor: MetaQuotes Software Corp.

 
Und alles wäre in Ordnung - Handelsroboter sind mit 5 Mausklicks erstellt, sie können in einem Tester für das Handelssystem оптимизации параметров getestet werden, Sie können den daraus resultierenden Roboter auf Ihrem Konto handeln lassen und Sie müssen nichts mit einer Datei ändern.
Kann ein solcher Roboter zum Handel zugelassen werden? Schließlich enthält die Bibliothek der Handelsklassen keine Verarbeitung verschiedener Fehler, was schon bei der Meisterschaft eine notwendige Bedingung war, geschweige denn beim echten Handel. Es ist richtiger zu schreiben, dass man einen Expert Advisor mit fünf Klicks nur für eine schnelle Überprüfung von Ideen im Tester erstellen kann, aber ein solcher Expert Advisor wird für den Handel ungeeignet sein.
 
Vielen Dank für Ihre Arbeit! Und danke für das Bild mit der Box und den Würfeln! Systematisiert :-)
 

um fortzufahren...

Ich dachte daran, die Zeilen dieses Beispiels umzuwandeln:

if(m_method_fast!=MODE_SMA && m_method_fast!=MODE_EMA && m_method_fast!=MODE_SMMA && m_method_fast!=MODE_LWMA)

if(m_method_slow!=MODE_SMA && m_method_slow!=MODE_EMA && m_method_slow!=MODE_SMMA && m_method_slow!=MODE_LWMA)

In den Algorithmus:

1) zwei Arrays:

das erste enthält m_method_fast und m_method_slow

das zweite enthält die Aufzählungswerte ENUM_MA_METHOD.

2) In einer Schleife wird der Wert des ersten Arrays genommen und geprüft, ob er im zweiten Array gefunden wird.

Können Sie mir sagen, wie man das implementiert?

Ich verstehe, dass es notwendig ist, CArray zu verbinden. Aber welcher Typ?

Wer kann, bitte, schreiben Sie einen Teil des Codes, weil elementare grundlegende Dinge, und mit der Syntax kann ich nicht fangen noch.

Ich danke Ihnen!

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Методы скользящих
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Методы скользящих
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Методы скользящих - Документация по MQL5
 
bivmail:

um fortzufahren...

Ich dachte daran, die Zeilen dieses Beispiels umzuwandeln:

if(m_method_fast!=MODE_SMA && m_method_fast!=MODE_EMA && m_method_fast!=MODE_SMMA && m_method_fast!=MODE_LWMA)

if(m_method_slow!=MODE_SMA && m_method_slow!=MODE_EMA && m_method_slow!=MODE_SMMA && m_method_slow!=MODE_LWMA)

In den Algorithmus:

1) zwei Arrays:

das erste enthält m_method_fast und m_method_slow

das zweite enthält die Aufzählungswerte ENUM_MA_METHOD.

2) In einer Schleife wird der Wert des ersten Arrays genommen und geprüft, ob er im zweiten Array gefunden wird.

Können Sie mir sagen, wie man das implementiert?

Ich verstehe, dass es notwendig ist, CArray zu verbinden. Aber welcher Typ?

Wer kann, bitte, schreiben Sie einen Teil des Codes, weil elementare grundlegende Dinge, und mit der Syntax kann ich nicht fangen noch.

Danke!

Etwa so:

func(int& array1[],int& array2[])
  {
   int total1=ArraySize(array1);
   int total2=ArraySize(array2);
//---
   for(int i=0;i<total1;i++)
     {
      for(int j=0;j<total2;j++)
        {
         if(array1[i]==array2[j])
           {
            // gefunden
           }
        }
     }
  }
 

Ja, zu diesem Punkt bin ich schon in C++ für Anfänger gekommen :-)

Nur dass es dort keinen solchen Datentyp ENUM_MA_METHOD gibt

Wie kann ich herausfinden, aus welchem Datentyp diese Aufzählung besteht? Ist es möglich, eine Schleife durch die ENUM_MA_METHOD-Aufzählung selbst zu machen?

Ich sehe jetzt zwei Möglichkeiten:

//erste Möglichkeit zur Beschreibung beider Arrays

  ENUM_MA_METHOD l_array_enum_ma_method[3];

  l_array_enum_ma_method[0]=MODE_SMA;

  l_array_enum_ma_method[1]=MODE_EMA;

  l_array_enum_ma_method[2]=MODE_SMMA;

  l_array_enum_ma_method[3]=MODE_LWMA;

  print("array size %d", ArraySize(l_array_enum_ma_method));

  print("ENUM_MA_METHOD size %d", ArraySize(ENUM_MA_METHOD));

  

   ENUM_MA_METHOD l_array_select_method[1];

   l_array_select_method[0]=m_MethodFast;

   l_array_select_method[1]=m_MethodSlow;

   //weiterhin nach dem Schema

   

   //zweite Möglichkeit, die Bibliothek zu verbinden

   //#include <Arrays\ArrayInt.mqh>

     CArrayInt *l_array_enum_ma_method=new CArrayInt;

   l_array_enum_ma_method[0]=MODE_SMA;

  l_array_enum_ma_method[1]=MODE_EMA;

  l_array_enum_ma_method[2]=MODE_SMMA;

  l_array_enum_ma_method[3]=MODE_LWMA;

   l_array_enum_ma_method.Sort();

   //--- Suchelement

   if(l_array_enum_ma_method.Search(m_MethodFast)!=-1) printf("Element found");

   else                        printf("Element not found");

   //--- Array löschen

   delete l_array_enum_ma_method;

Bei der zweiten Möglichkeit muss man eine Bibliothek eines bestimmten Typs anschließen, und welcher Typ ist ENUM_MA_METHOD?

hmm... seltsam, ich habe auf Antwort geklickt und es stellte sich heraus, dass es ein neuer Beitrag ist....

 
Sehen Sie, wie Sie den Code richtig einfügen.
 
bivmail:

Ja, zu diesem Punkt bin ich schon in C++ für Anfänger gekommen :-)

Nur dass es dort keinen solchen Datentyp ENUM_MA_METHOD gibt

Wie kann ich herausfinden, aus welchem Datentyp diese Aufzählung besteht? Ist es möglich, eine Schleife durch die ENUM_MA_METHOD-Aufzählung selbst zu machen?

Ich sehe jetzt zwei Möglichkeiten:

Bei der zweiten Möglichkeit muss man eine Bibliothek eines bestimmten Typs anschließen, und welcher Typ ist ENUM_MA_METHOD?

hmm... seltsam, ich habe auf Antwort geklickt und es stellte sich heraus, dass es ein neuer Beitrag ist....

Erster Weg:

 ENUM_MA_METHOD l_array_enum_ma_method[]={MODE_SMA,MODE_EMA,MODE_SMMA,MODE_LWMA};
//--- weiter unten in der Zeile

Zweite Möglichkeit:

#include <Arrays\ArrayInt.mqh>

CArrayInt l_array_enum_ma_method;
//---
l_array_enum_ma_method.Add(MODE_SMA);
l_array_enum_ma_method.Add(MODE_EMA);
l_array_enum_ma_method.Add(MODE_SMMA);
l_array_enum_ma_method.Add(MODE_LWMA);
//--- weiter unten in der Zeile

Ich kann nicht herausfinden, warum so viele Schritte erforderlich sind?

 

oops... vielen Dank, das ist es, was ich versuche... aus.

Im ersten Fall habe ich diese Art der Aufzeichnung bereits gesehen, aber ich habe noch nicht erkannt, was ich brauche,

und im zweiten Fall - ich war verwirrt von ArrayInt. Ich dachte, dass seit Int, es bedeutet, dass nur Zahlenwert gespeichert wird, aber ,

es scheint, dass der Compiler MODE_SMA in eine Zahl umwandelt, und wenn man den Wert zurückbekommt, muss man eine implizite Umwandlung (mit Klammern) in den Typ(ENUM_MA_METHOD) durchführen, d.h. etwas ähnliches wie das Folgende.

  ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);

P.S. Im dritten Abschnitt 3, Methoden zum Setzen von Parametern, sollten wir vorzeitig deklarierte Zeilen löschen, ich denke
:

 CiCustom          m_fast_ma;        // Indikator als Objekt
   CiCustom          m_slow_ma;        // Indikator als Objekt
 
bivmail:

P.S. Im dritten Abschnitt 3. Methoden zum Setzen von Parametern sollten wir meiner Meinung nach vorzeitig deklarierte Zeilen streichen:

Entfernt, danke.
 

Ich war schon ganz aufgeregt, aber ich kann das Problem nicht umgehen (comm - ich habe etwas über Speicheradressübertragung gelesen, aber auch das hat nicht funktioniert):

Der Compiler gibt den Fehler 'm_MethodFast' - constant expression required, ' m_MethodSlow' - constant expression required

Das sind natürlich Fragen für einen Dummie. Vielleicht sollte ich solche Fragen in einem anderen Thread stellen, um den Artikel nicht zu verstopfen?

//erste Möglichkeit zur Beschreibung beider Arrays
//int *Finger_m_MethodFast;
//int *Finger_m_MethodSlow;
//Finger_m_MethodFast=&m_MethodFast;
//Finger_m_MethodFast=&m_MethodSlow;
// int l_array1_select_method[]={Finger_m_MethodFast,Finger_m_MethodFast};
   ENUM_MA_METHOD l_array1_select_method[]={m_MethodFast,m_MethodSlow};
   ENUM_MA_METHOD l_array2_enum_ma_method[]={MODE_SMA,MODE_EMA,MODE_SMMA,MODE_LWMA};

   int total_array1=ArraySize(l_array1_select_method);
   int total_array2=ArraySize(l_array2_enum_ma_method);
   bool NoErrorsFlag=false;
   for(int i_array1=0;i_array1<total_array1;i_array1++)
     {

      for(int i_array2=0;i_array2<total_array2;i_array2++)
        {
         if(l_array1_select_method[i_array1]=l_array2_enum_ma_method[i_array2])
           {
            NoErrorsFlag=true;
           }
        }
      if(!NoErrorsFlag)
        {
         PrintFormat("Ungültiger Glättungs-Typ %s gleitender Durchschnitt!",EnumToString(l_array1_select_method[i_array1]));
        }

     }

   if(!NoErrorsFlag)
     {
      return(false);
     }