Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 614

 
newnek:

Hallo, könnten Sie mir bitte sagen,ob ich den Parameter Parameter=Ka,int,21 im Signal der Standardbibliothek brauche?

Ausgewählt im Prozess der Optimierung aus der Aufzählung des Typs

Aber, wenn das Signal aus der Auswahl verschwindet, wenn EA zu generieren, aber es ist normal kompilieren, es ist schwer, Schlussfolgerungen zu machen - was ist falsch ......, Hilfe mit Code, gab es nicht bereits eine Implementierung?

p.s. Ich muss in der finalen EA jedes Mal int in intTypeändern

Geben Sie die genaue Signalmoduldatei und Codezeile an...
 
Karputov Vladimir:
Geben Sie die genaue Signalmoduldatei und Codezeile an...

Hier ist zum Beispiel ein Teil des oberen Codes SignalRVI.mqh. In diesem Fall verschwindet es aus der Signalauswahl, wenn ich den Typ int in intType ändere

Wenn der Geltungsbereich falsch ist, stelle ich ihn in eine separate Datei mit Aufzählung #include <Libraries\myfunc.mqh>
//+------------------------------------------------------------------+
//|                                                    SignalRVI.mqh |
//|                   Copyright 2009-2013, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#include <Expert\ExpertSignal.mqh>
// wizard description start
//+------------------------------------------------------------------+
//| Description of the class                                         |
//| Title=----------------Signals of oscillator 'Relative Vigor Index'               |
//| Type=SignalAdvanced                                              |
//| Name=Relative Vigor Index                                        |
//| ShortName=RVI                                                    |
//| Class=CSignalRVI                                                 |
//| Page=signal_rvi                                                  |
//| Parameter=PeriodRVI,intType,15,Period of calculation                 |
//+------------------------------------------------------------------+
// wizard description end
//+------------------------------------------------------------------+
//| Class CSignalRVI.                                                |
//| Purpose: Class of generator of trade signals based on            |
//|          the 'Relative Vigor Index' oscillator.                  |
//| Is derived from the CExpertSignal class.                         |
//+------------------------------------------------------------------+
enum intType
  {
   p0 = 15, 
   p1 = 21, 
   p2 = 29 
}
;
class CSignalRVI : public CExpertSignal
  {
protected:
   CiRVI             m_rvi;            // object-oscillator
   //--- adjusted parameters
   intType               m_periodRVI;      // the "period of calculation" parameter of the oscillator
   //--- "weights" of market models (0-100)
   int               m_pattern_0;      // model 0 "the oscillator has required direction"
   int               m_pattern_1;      // model 1 "crossing of main and signal line"

public:
                     CSignalRVI(void);
                    ~CSignalRVI(void);
   //--- methods of setting adjustable parameters
   void              PeriodRVI(intType value)            { m_periodRVI=value;                 }
   //--- methods of adjusting "weights" of market models
   void              Pattern_0(int value)            { m_pattern_0=value;                 }
   void              Pattern_1(int value)            { m_pattern_1=value;                 }
   //--- method of verification of settings
   virtual bool      ValidationSettings(void);
   //--- method of creating the indicator and timeseries
   virtual bool      InitIndicators(CIndicators *indicators);
   //--- methods of checking if the market models are formed
   virtual int       LongCondition(void);
   virtual int       ShortCondition(void);

protected:
   //--- method of initialization of the oscillator
   bool              InitRVI(CIndicators *indicators);
   //--- methods of getting data
   double            Main(int ind)                   { return(m_rvi.Main(ind));           }
   double            DiffMain(int ind)               { return(Main(ind)-Main(ind+1));     }
   double            Signal(int ind)                 { return(m_rvi.Signal(ind));         }
   double            DiffSignal(int ind)             { return(Signal(ind)-Signal(ind+1)); }
   double            DiffMainSignal(int ind)         { return(Main(ind)-Signal(ind));     }
  };
//+------------------------------------------------------------------+
//| Constructor                                                      |
//+------------------------------------------------------------------+
CSignalRVI::CSignalRVI(void) : m_periodRVI(15),
                               m_pattern_0(60),
                               m_pattern_1(100)
  {
  }
 
newnek:

Hallo, könnten Sie mir bitte sagen,ob ich den Parameter Parameter=Ka,int,21 im Signal der Standardbibliothekbrauche?

Ausgewählt im Prozess der Optimierung aus der Aufzählung des Typs

Aber, wenn das Signal aus der Auswahl verschwindet, wenn EA zu generieren, aber es ist normal kompilieren, es ist schwer, Schlussfolgerungen zu machen - was ist falsch ......, Hilfe mit Code, gab es nicht bereits eine Implementierung?

p.s. Ich muss in der finalen EA jedes Mal int in intType ändern

Sie müssen nichts ändern - erstellen Sie einfach Ihren Expert Advisor auf der Grundlage des "Relative Vigor Index"-Indikators, wählen Sie dann im Strategietester auf der Registerkarte "Einstellungen" eine der Optimierungen aus, gehen Sie auf die Registerkarte "Parameter" und legen Sie das Intervall und den Wert für den Parameter "Relative Vigor Index(10) Berechnungszeitraum" fest:

RVI

Da Sie aber nur drei Werte aus dem Intervall 15-29 verwenden wollen, müssen Sie eine Prüfbedingung in OnInit() schreiben:

//+------------------------------------------------------------------+
//| Initialization function of the expert                            |
//+------------------------------------------------------------------+
int OnInit()
  {
   if(Signal_RVI_PeriodRVI!=15 && Signal_RVI_PeriodRVI!=21 && Signal_RVI_PeriodRVI!=29)
      return(INIT_PARAMETERS_INCORRECT);
//--- Initializing expert

Nach der Optimierung können Sie sehen, dass der Tester nur bei den Parametern 15, 21 und 29 funktioniert hat:

Selektive Optimierung

 
Karputov Vladimir:

Sie müssen nichts ändern - generieren Sie einfach Ihren Expert Advisor auf Basis des "Relative Vigor Index"-Indikators, wählen Sie dann eine der Optimierungen im Strategy Tester aus, gehen Sie auf die Registerkarte "Parameter" und legen Sie das Intervall und die Werte für den Parameter "Relative Vigor Index(10) Berechnungszeitraum" fest:


Da Sie aber nur drei Werte aus dem Intervall 15-29 verwenden wollen, müssen Sie eine Prüfbedingung in OnInit() schreiben:

Nach der Optimierung können Sie sehen, dass der Tester nur bei den Parametern 15, 21 und 29 funktioniert hat:

Danke, ich verstehe Ihre Idee, sehr interessant, aber es wird eine Menge Schritte vergeudet (obwohl wahrscheinlich auch keine Zeit verschwendet). Ich habe es geschafft, manuell auf den Enum-Typ im generierten EA zu wechseln. Und ich würde es gerne noch mehr automatisieren.
 
newnek:
Danke, ich verstehe Ihre Idee, sehr interessant, aber es wird eine Menge Schritte verschwendet werden (obwohl wahrscheinlich auch keine Zeit verschwendet wird). Ich habe es geschafft, im generierten EA manuell zum Enum-Typ zu wechseln. Und ich würde es gerne noch mehr automatisieren.
Es wird leere Schritte geben, die aber keine Zeit in Anspruch nehmen, da OnInit() bei Nichterfüllung der Bedingung verlassen wird und der nächste Optimierungsschritt sofort gestartet wird.
 

Guten Tag... Ich bin selbst C++-Programmierer. Ich habe vor kurzem beschlossen, mich in diesem Bereich zu versuchen... Ich möchte einen Expert Advisor oder einen Expert Advisor schreiben, meine Strategie ist OK, meine Plattform ist MT4... Also, ich bin mit diesem Problem konfrontiert, ich verwende in meinem Expert Advisor MACD.... Ich werde es in Kürze schreiben...

Zum Beispiel erstelle ich eine neue Vorlage EA, fügen Sie x=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0); und sagen wir, es gibt nichts anderes ... Ich kompilieren, testen, alles ist OK, am Ende des Tests zeigt ein Macd-Chart mit den angegebenen Parametern, alles ist OK.

Die zweite Option - Ich erstelle eine neue Vorlage EA in der OnTick, fügen Sie einen Drittanbieter-Indikator RSICur = iCustom(NULL,0, "My_Induk",14,1,0,21,1,65,35, "DodgerBlue", "Magenta",50,50, "Red", "Green",0,0); kompilieren, testen, alles ist OK, aber!Wenn ich den Test beende oder den Test im Fenster von Tausenden dieser Indikatoren abbreche, verstehe ich, dass bei jedem Tick ein neuer Indikator erstellt wird ... Ich verstehe nicht, warum, denn der Standard-MAKD wird einmal geboren und das war's ...

Kann mir bitte jemand das Problem erklären... Ich versuche, das Problem mit den anderen Nicht-Standard-Indikatoren zu erklären, aber das gleiche Problem...

P.S. Dies ist mein erster Beitrag... Bitte nehmt es mir nicht übel, dass ich keine Möglichkeit gefunden habe, das Foto unter einem Spoiler zu verstecken.

Bildschirmfoto
 

Ich weiß nicht, woran es liegt, aber ich habe eine Lösung gefunden...

RSICur=iCustom(NULL,0, "My_Induk",14,1,0,0,21,1,65,35, "DodgerBlue", "Magenta",50,50, "Red", "Green",0,0);- zeichnet Chart pro Tick

RSICur=iCustom(NULL,0, "My_Induk",0,0); - Ok, ein Chart, nur die Daten in der VariableRSICur werden pro Tick aktualisiert...Was ist die Logik, die ich nicht verstehe, im Prinzip ist es genug für mich, aber ich würde gerne verstehen, warum es funktioniert gut nur mit Standardeinstellungen...

 
Игорь Марин:

Guten Tag... Ich bin selbst C++-Programmierer. Ich habe vor kurzem beschlossen, mich in diesem Bereich zu versuchen... Ich möchte einen Expert Advisor oder einen Expert Advisor schreiben, meine Strategie ist OK, meine Plattform ist MT4... Also, ich bin mit diesem Problem konfrontiert, ich verwende in meinem Expert Advisor MACD.... Ich werde es in Kürze schreiben...

Zum Beispiel erstelle ich eine neue Vorlage EA, fügen Sie x=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0); und sagen wir, es gibt nichts anderes ... Ich kompilieren, testen, alles ist OK, am Ende des Tests zeigt ein Macd-Chart mit den angegebenen Parametern, alles ist OK.

Die zweite Option - Ich erstelle eine neue Vorlage EA in der OnTick, fügen Sie einen Drittanbieter-Indikator RSICur = iCustom(NULL,0, "My_Induk",14,1,0,21,1,65,35, "DodgerBlue", "Magenta",50,50, "Red", "Green",0,0); kompilieren, testen, alles ist OK, aber!Wenn ich den Test beende oder den Test im Fenster von Tausenden dieser Indikatoren abbreche, verstehe ich, dass bei jedem Tick ein neuer Indikator erstellt wird ... Ich verstehe nicht, warum, denn der Standard-MAKD wird einmal geboren und das war's ...

Kann mir bitte jemand das Problem erklären... Ich versuche, das gleiche Problem mit einem anderen Nicht-Standard-Indikator zu lösen...

P.S. Dies ist mein erster Beitrag... Bitte schimpfen Sie nicht mit mir, weil ich keine Möglichkeit gefunden habe, das Foto unter dem Spoiler zu verstecken.

Das Foto ist in Ordnung, es ist nicht versteckt.

Haben Sie das geschrieben My_Induk oder haben Sie es irgendwo gefunden? Ich verstehe, dass der Indikator schief ist. Wenn Sie den Quellcode haben, posten Sie ihn - dann können wir sehen, wo das Problem liegt.

 
Игорь Марин:

Ich weiß nicht, woran es liegt, aber ich habe eine Lösung gefunden...

RSICur=iCustom(NULL,0, "My_Induk",14,1,0,0,21,1,65,35, "DodgerBlue", "Magenta",50,50, "Red", "Green",0,0);- zeichnet Chart pro Tick

RSICur=iCustom(NULL,0, "My_Induk",0,0); - Ok, ein Chart, nur die Daten in der VariableRSICur werden pro Tick aktualisiert...Was ist die Logik, die ich nicht verstehe, im Prinzip ist es genug für mich, aber ich würde gerne verstehen, warum es funktioniert gut nur mit Standardeinstellungen...

Dies geschieht, wenn Sie die Parameter des Indikators nicht korrekt übergeben haben.
 
Alexey Volchanskiy:

Das Foto ist in Ordnung, hier gibt es nichts zu verbergen.

Haben Sie das geschrieben My_Induk oder haben Sie es irgendwo gefunden? Ich nehme an, der Indikator ist schief. Wenn Sie den Quellcode haben, posten Sie ihn - dann können wir sehen, wo das Problem liegt.

Vladislav Andruschenko:
Dies geschieht, wenn Sie die Parameter des Indikators nicht richtig übergeben haben.

Danke. Ich habe es herausgefunden... Ich habe den ganzen Tag herumgestöbert und konnte es nicht herausfinden... Ich bin selbst Programmierer, aber das kommt vor... Ich habe einen Syntaxfehler gemacht, ich musste die Farbparameter beim Aufruf des Indikators in Anführungszeichen setzen...

iCustom(NULL,0,"My_Induk",14,1,0,21,1,65,35,"DodgerBlue","Magenta",50,50,"Red","Green",0,0);

Das war die Ursache für die Fehlfunktion... ) Danke!!! Sicherlich wird es noch mehr Fragen geben!!!