[Archiv!] Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Könnte nirgendwo ohne dich hingehen - 2. - Seite 470

 
tol64:

Wie lassen sich die Parameter für die verschiedenen Währungen optimieren? Im MT4-Tester gibt es keine Möglichkeit, mehrere Symbole auf einmal zu testen... Ich denke über die Multicurrency EA und ich kam zu dem Schluss, dass seine Parameter für jedes Symbol separat optimiert sind, und dann übertrage ich alle diese Parameter zu meinem Expert Advisor für Multicurrency-Modus für den Handel konzipiert.

Gehe ich in die richtige Richtung oder ist es tatsächlich einfacher?)

In mql5 kann alles in einem EA zum Testen und Handeln implementiert werden, aber für jetzt habe ich beschlossen, mql4 zu studieren.

Ich habe gerade gedacht, dass, wenn Sie nicht testen können einige Symbole auf einmal, warum die Mühe mit einem EA, wenn Sie nur Ihre eigene Kopie jedes Symbol Chart und es wird das gleiche sein. Ich würde gerne die Meinung der Mitglieder der Gemeinschaft hören)))

Ich habe keine Mehrfachwährung, ich hänge einfach denselben EA an jedes Instrument.
 
Roman.:

Antwort
Entschuldigung, ich habe die Antwort nicht verstanden.
 
demlin:
Entschuldigung, ich verstehe die Antwort nicht.

Suchen Sie bei Google nach "wie optimiert man eine Website:mql4.com": Das folgende Buch ist auch hier erhältlich: "how to optimize an Expert Advisor site:mql4.com", auch hier.

Ich empfehle ein gutes Buch zu diesem Thema: "Development, Testing and Optimization of Trading Systems for the Stock Trader" von Ralph Vince - alles im Detail.

 

Problem: Die Abbildung zeigt eine Kurve (z.B. MA). Die Punkte A, C und E sind lokale Maxima, die Punkte B und D sind lokale Minima. Frage: Wie berechnet man sie, wenn der Abstand zwischen dem nächstgelegenen Maximum und Minimum mehr als N Punkte beträgt? Ich habe es versucht, aber es scheint mir zu umständlich zu sein. Vielleicht gibt es einen fertigen Algorithmus, um ein solches Problem zu lösen? Bitte um Rat, wenn jemand Erfahrung damit hat.

 
Elenn:

Problem: Die Abbildung zeigt eine Kurve (z.B. MA). Die Punkte A, C und E sind lokale Maxima, die Punkte B und D sind lokale Minima. Frage: Wie berechnet man sie, wenn der Abstand zwischen dem nächstgelegenen Maximum und Minimum mehr als N Punkte beträgt? Ich habe es versucht, aber es scheint mir zu umständlich zu sein. Vielleicht gibt es einen fertigen Algorithmus, um ein solches Problem zu lösen? Bitte um Rat, wenn jemand damit Erfahrung hat.


Bestimmung der Gleitrichtung.

Wenn er oben ist und die Variablen B, C, D und E leer sind, geben wir den aktuellen Wert des Bewegungswinkels in die Variable A ein.

Wenn die Variable A nicht leer ist und die Gleitrichtung abwärts ist und die Variablen C, D und E leer sind, wird der aktuelle Wert des Gleitindikators in die Variable B eingetragen. Wenn die Variablen A und B nicht leer sind, der gleitende Durchschnitt nach oben zeigt und die Variablen D und E leer sind, wird die Variable C mit dem aktuellen Wert des gleitenden Durchschnitts gefüllt.

Und so weiter, wir füllen die Werte der Variablen mit Werten aus.

Wenn nun die Variablen A und C nicht leer sind und wenn der Modul der Differenz zwischen A und C größer oder gleich einer vordefinierten Anzahl von Punkten ist, wird die gewünschte Aktion ausgeführt.

Im Allgemeinen ist der Code durchaus möglich. Wir müssen nur den Punkt im Algorithmus bestimmen, an dem wir die Variablen zurücksetzen, damit der EA erkennt, dass er einen neuen Startpunkt erreicht hat. Der Code kann über eine Schleife und Arrays geschrieben werden und ist vielleicht weniger komplex, aber es ist besser, den Algorithmus über Variablen zu schreiben, um Verwirrung mit Array-Indizes und Candlestick-Nummern in der Schleife zu vermeiden.

 

Leute, ich bin kürzlich auf dieses Problem gestoßen. Wer auf dem Laufenden ist - kommentieren Sie es. Ich habe den Fehler selbst - Gott sei Dank - schnell gefunden... Beim Schreiben von Code - alles kompiliert ohne Fehler, aber trawl funktioniert nicht... Das heißt, wir gehen in der Bestellschleife nicht weiter. Hier sind die Codefragmente... Der Fehler war in der folgenden - wir gaben Aufträge Magie in externen Variablen, aber bei der Suche nach Aufträgen in der Schleife - mit einem kleinen Buchstaben, die Suche über STRG + F - Anfrage "Magie" wurde von "Magie" gefolgt... Der Compiler gab keinen Fehler, aber in der Schleife, das Programm wurde nicht zu einem Schleppnetz geändert... die Schleife würde bei "Magie" unterbrochen... Soll das so sein? Ich dachte immer, "Magie" und "Zauberei" seien unterschiedliche Variablen... und deshalb hätte der Compiler diesen Fehler anzeigen müssen, dass die "magische" Variable nicht definiert ist... Im Code, wie er jetzt vor der Auswahl des Schleppnetzes ausgeführt wird und Printa () kommt nicht mehr - der Ausstieg aus der Schleife durch diese Bedingung - wegen der Magie - d.h. diese Bedingung - wird nie ausgeführt, wegen der unterschiedlichen Namen - "magic" und "Magic".

if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != magic))
      {
         continue;
      }

// глоб переменные
...
...
extern int  Magic = 10;     // MagicNumber

//----------------------------------------------------------------------------
int start()                            // Спец. функция start
  {
  
   
   int orderCount = 0; 
  
   //---------------------------ТРАЛ ОРДЕРОВ---------------------------------------------------------------------------------------
   int orderType;
    for (orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
    {
      if (!OrderSelect(orderIndex, SELECT_BY_POS))
      {
         continue;
      }

      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != magic))
      {
         continue;
      }

      orderType = OrderType();
      if ((orderType != OP_BUY) && (orderType != OP_SELL))
      {
         continue;
      }
                ticket = OrderTicket( );                         // Номер ордера
       double   orderLots = OrderLots();                         // Lots   
       double   orderProfit = OrderProfit() + OrderSwap();       // Profit
       double   Price = OrderOpenPrice();                        // Цена открытия рыночного ордера
       double   SL =  OrderStopLoss();                           // Значение StopLoss ордера
       double   TP = OrderTakeProfit();                          // Значение TakeProfit ордера
          
             if (ticket>0)                                               // Если позиция открылась
                    {
                             while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                                 {
                                   Sleep(100);
                                 }
                                  double OpenPrice=OrderOpenPrice();
                    }
                 
         
      orderCount++;                     // считаем ордера (не больше 10)
     
            
       while (!IsTradeAllowed() || !IsConnected()) Sleep(5000); RefreshRates();
       
      //----------------------------Тралим последовательно все наши ордера по виду трала------------------
      if (UseTrailing && orderCount > 0 && type ==0)   // простой трал по аналогии учебнику - в зависимости от параметра trlinloss (тралить ли в зоне лоссов)
          {     
           if (orderType == OP_BUY)  SampleTrailing_texbook (0);          // если бай
           if (orderType == OP_SELL) SampleTrailing_texbook (1);          // если селл
          }      
      ...
      ...
      ...   
     Print( "Эксперт база: Всего наших ордеров = " ,orderCount);
     }   
//--------------------------------------------------------------------------------------------------------------------------------------     
   
   
  
//----------------------------------------------------------------  
   return;                             // Выход из start()
  }

P.S. Wer es nicht weiß, sollte sich dessen bewusst sein, sonst ist nicht klar, wie viel man mit dem Code machen kann...

 
Roman.:

Leute, ich bin kürzlich auf dieses Problem gestoßen. Wer auf dem Laufenden ist - kommentieren Sie es. Ich habe den Fehler selbst - Gott sei Dank - schnell gefunden... Beim Schreiben von Code - alles kompiliert ohne Fehler, aber trawl funktioniert nicht... Das heißt, wir gehen in der Bestellschleife nicht weiter. Hier sind die Codefragmente... Der Fehler war in der folgenden - wir gaben Aufträge Magie in externen Variablen, aber bei der Suche nach Aufträgen in der Schleife - mit einem kleinen Buchstaben, die Suche über CTRL + F - Anfrage "Magie" wurde durch den Übergang zu "Magie" gefolgt... Der Compiler gab keinen Fehler, aber die Programmausführung nicht ändern, um Schleppnetz-Modus in der Schleife... die Schleife würde bei "Magie" unterbrochen... Soll das so sein? Ich dachte immer, "Magie" und "Zauberei" seien unterschiedliche Variablen... und deshalb hätte der Compiler diesen Fehler anzeigen müssen, dass die "magische" Variable nicht definiert ist... Im Code, da er jetzt vor der Auswahl des Schleppnetzes ausgeführt wird und Printa () nicht mehr auftaucht - wird der Ausstieg aus der Schleife bei dieser Bedingung - wegen derMagie - d.h. dieser Bedingung - nie ausgeführt, aufgrund der unterschiedlichen Namen - "magic" und "Magic".

P.S. Wer es nicht weiß - seid euch dessen bewusst, sonst wisst ihr nicht, wie viel ihr mit dem Code zu tun haben werdet...


Wenn Magie deklariert ist und Magie verwendet wird, sagt der Compiler, dass die magische Variable nicht deklariert ist.

MetaEditor 4 401.

 
Roman.:

Leute, ich bin kürzlich auf dieses Problem gestoßen. Wer auf dem Laufenden ist - kommentieren Sie es. Ich habe den Fehler selbst - Gott sei Dank - schnell gefunden... Beim Schreiben von Code - alles kompiliert ohne Fehler, aber trawl funktioniert nicht... Das heißt, wir gehen in der Bestellschleife nicht weiter. Hier sind die Codefragmente... Der Fehler war in der folgenden - wir gaben Aufträge Magie in externen Variablen, aber bei der Suche nach Aufträgen in der Schleife - mit einem kleinen Buchstaben, die Suche über STRG + F - Anfrage "Magie" wurde von "Magie" gefolgt... Der Compiler gab keinen Fehler, aber in der Schleife, das Programm wurde nicht zu einem Schleppnetz geändert... die Schleife würde bei "Magie" unterbrochen... Soll das so sein? Ich dachte immer, "Magie" und "Zauberei" seien unterschiedliche Variablen... und deshalb hätte der Compiler diesen Fehler anzeigen müssen, dass die "magische" Variable nicht definiert ist... In dem Code, da er jetzt vor der Auswahl des Schleppnetzes ausgeführt wird und Printa () nicht mehr auftaucht - wird der Ausgang aus der Schleife bei dieser Bedingung - wegen derMagie - d.h. dieser Bedingung - nie ausgeführt, aufgrund der unterschiedlichen Namen - "magic" und "Magic".

P.S. Wer es nicht weiß - sei dir dessen bewusst, sonst verstehst du nicht, wie viel du mit Code zu tun haben wirst...

Vergleichen Sie mit meinem einfachen Schleppnetz. Es handelt sich insbesondere um eine Schleife der Auftragssuche:

   // В глоб. переменных
   string sy=Symbol();
   // ...................................................................
   color  cl;
   double sl, StopLevel;
   for (int i=0; i<OrdersTotal(); i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=sy)           continue;
         if (OrderMagicNumber()!=Magic)   continue;
         if (OrderType()>1)               continue;
         sl=OrderStopLoss();
         if (OrderType()==OP_BUY) {
            cl=clModifyBuy;
            StopLevel=NormalizeDouble(strG-DeltaStop*PointX, dg);
            if (sl<StopLevel) ModifyOrder(-1, StopLevel, -1, -1, cl);
            }
         if (OrderType()==OP_SELL) {
            cl=clModifySell;
            StopLevel=NormalizeDouble(strR+DeltaStop*PointX, dg);
            if (sl>StopLevel) ModifyOrder(-1, StopLevel, -1, -1, cl);
            }
         }
      }

Ich denke, das Prinzip wird Ihnen klar sein.

Und Magie und magische Variablen sind wirklich unterschiedlich. Aktivieren Sie bei der Suche mit Strg+F die Option "Groß-/Kleinschreibung abgleichen".

Irgendwo im Code haben Sie sie beide deklariert

 
artmedia70:

Und Magie und magische Variablen sind wirklich unterschiedlich. Aktivieren Sie bei der Suche mit Strg+F das Kontrollkästchen "Groß- und Kleinschreibung beachten".

Irgendwo im Code haben Sie sie beide nach allen
deklariert.

Ganz genau. Ich habe es gerade dank Ihnen gefunden... :-))) Unten bei Variablen habe ich zusätzlich zu der Variablen extern int Magic = 10; eine Variable -
int magic = 12345;

:-)))

Es stellte sich heraus, dass ich die Magie in der Auftragseröffnung und die Magie in der Schleife berücksichtigte, weshalb die Auftragsschleife zum Durchsuchen der Aufträge nicht funktionierte...:-)))

Ich danke Ihnen von ganzem Herzen - ich habe das Problem gelöst. Die Option "Register verwenden" wurde aktiviert, und alles funktioniert ordnungsgemäß.

P.S. Wie es passiert!!! (Wenn das Glück auf den Code geht - bereit und nicht nur ein paar Majiks zu deklarieren...:-))))

 
artmedia70:

Vergleichen Sie dies mit meiner einfachsten Suche. Insbesondere der Zyklus der Auftragssuche:

Ich denke, das Prinzip wird klar sein.

Vielen Dank für die Möglichkeit des Schleppnetzes. Das Prinzip ist klar.