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

 
Vladimir Karputov:

Die Optimierung wird von AGENTEN (in Ihrem Fall von LOKALEN AGENTEN) durchgeführt.

So zeigen Sie die lokalen Agentenprotokolle an: Klicken Sie mit der rechten Maustaste auf die Registerkarte Protokoll und gehen Sie zum Agentenordner

Das ist die Sache, es gibt keine Fehler. Alles ist in Ordnung, vielleicht gibt es eine Firewall oder so.

Dateien:
 
Aleksandr Dziuba:

Das ist der Punkt - es gibt keine Fehler. Alles zählt. Vielleicht gibt es Firewalls oder so etwas?

Führen Sie einen einzigen Test durch, einen einzigen Durchgang. Keine Optimierung, nur ein einziger Durchgang. Auf diese Weise können Sie das Protokoll einsehen.

 
Vladimir Karputov:

Führen Sie einen einzigen Test durch - einen einzigen Durchgang. Keine Optimierung, sondern ein einziger Durchgang. Auf diese Weise können Sie das Protokoll mit Sicherheit sehen.

Was meinen Sie mit "visuell"? Nun, ich habe das Protokoll. Ich sehe da nichts Schlimmes. Es werden alle Parameter übergeben. Es lief zwar, aber die Leistung beträgt immer noch 20.000.

Dateien:
20200924.log  17 kb
 
Aleksandr Dziuba:

Was meinen Sie mit "visuell"? Nun, ich habe das Protokoll. Ich sehe nichts Falsches daran. Die Parameter werden alle übergeben. Es wurde sogar ausgeführt, aber der Ausgangssaldo war 20000 und ist es immer noch.

Ändern Sie also den Code so, dass erFehlermeldungen ausgibt, wenn Fehler auftreten oder die Handelsoperation nicht durchgeführt werden kann. Oder der Code ist generell falsch und gibt keine Signale. Wunder gibt es nicht.

Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
  • www.mql5.com
Импортируемая функция не может иметь такого параметра (нельзя передавать указатель, класс или структуру, содержащую динамический массив, указатель, класс и т.д.) Недопустимый возвращаемый тип. Например, такая ошибка будет выдана для функций, импортированных из...
 
Vladimir Karputov:

Ändern Sie also den Code so, dass erFehlermeldungen ausgibt, wenn Fehler auftreten oder der Handel nicht ausgeführt werden kann. Oder der Code ist fehlerhaft und gibt überhaupt keine Signale. Es gibt keine Wunder.

Ja, ja.

Die Optimierung ist also nicht in Ontick enthalten. OnInit wird gerade verarbeitet. Aber On-Tick wird nicht erzeugt. Hier liegt das Problem.

Ich habe Druckpunkte ( ) in die Ein- und Ausgänge integriert, nur Init wird ins Protokoll geschrieben.

P.S.

Ich behandle Fehler. Macht der Gewohnheit. Ich schreibe seit 1987 Programme.

 
Aleksandr Dziuba:

Ja, ja.

Im Allgemeinen ist die Optimierung nicht in Ontick enthalten. OnInit wird verarbeitet. Aber On Tick wird nicht erzeugt. Das Problem.

Ich habe Druckpunkte ( ) in die Ein- und Ausgänge integriert, nur Init wird ins Protokoll geschrieben.

P.S.

Ich behandle Fehler. Macht der Gewohnheit. Ich schreibe seit 1987 Programme.

Nur Telepathen werden ohne den Code helfen können - und jetzt sind alle Telepathen im Urlaub.

 
Vladimir Karputov:

Ohne den Code können nur Telepathen helfen - und wie es der Zufall will, sind gerade alle Telepathen im Urlaub.

Ich habe den Grund gefunden. Aus irgendeinem Grund werden die Indikatoren in Ontick nicht neu berechnet (es wird nicht die Anzahl der neu berechneten Balken angegeben). Vielleicht muss ich die Zitate aktualisieren.

Ich habe jedoch meinen Dank verloren. Ich bin klüger geworden. Ich habe erfahren, wo die Protokolle geschrieben werden.

 

Konvertiert einen einfachen Indikator von MQL4 -> MQL5, aber kein Signal auf die letzten paar Bars. Bitte helfen Sie mir, den Grund zu finden. Quellcode und Ergebnis befinden sich im Anhang. Ich füge hier auch die umgewandelte Version ein.

#property indicator_chart_window
#property indicator_plots   4
#property indicator_buffers 4
#property indicator_color1 PaleVioletRed
#property indicator_color2 DeepSkyBlue
#property indicator_color3 Red
#property indicator_color4 LimeGreen

input int  dist2           = 21;       // Distance#2
input int  dist1           = 14;       // Distance#1

double b1[];
double b2[];
double b3[];
double b4[];

int    handle_atr;
int    min_rates_total;
double atr[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit() {

   SetIndexBuffer(0,b1,INDICATOR_DATA);
   SetIndexBuffer(1,b2,INDICATOR_DATA);
   SetIndexBuffer(2,b3,INDICATOR_DATA);
   SetIndexBuffer(3,b4,INDICATOR_DATA);
   
   ArraySetAsSeries(b1,true);
   ArraySetAsSeries(b2,true);
   ArraySetAsSeries(b3,true);
   ArraySetAsSeries(b4,true);

   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE);
   PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_LINE);
   PlotIndexSetInteger(2,PLOT_DRAW_TYPE,DRAW_ARROW);
   PlotIndexSetInteger(3,PLOT_DRAW_TYPE,DRAW_ARROW);

      PlotIndexSetInteger(2,PLOT_ARROW,159);
      PlotIndexSetInteger(3,PLOT_ARROW,159);
   
   ResetLastError();
   handle_atr = iATR(NULL,PERIOD_CURRENT,50);
   if(handle_atr==INVALID_HANDLE) {
      Print("   ***   ATR handle was unable to create. Error ",GetLastError());
      return INIT_FAILED;
   }

   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   
   PlotIndexSetString(0,PLOT_LABEL,"SuperSignals Upper");
   PlotIndexSetString(1,PLOT_LABEL,"SuperSignals Lower");
   PlotIndexSetString(2,PLOT_LABEL,"SuperSignals Sell");
   PlotIndexSetString(3,PLOT_LABEL,"SuperSignals Buy");

        return INIT_SUCCEEDED;
   
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &High[],
                const double &Low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[]) {
                
   int counted_bars=prev_calculated;
   int i,limit;
   
   ArraySetAsSeries(Low,true);
   ArraySetAsSeries(High,true);

   if(counted_bars<0) return 0;
   if(counted_bars>0) counted_bars--;
           limit=rates_total-counted_bars;
           limit=MathMax(limit,dist1);
           limit=MathMax(limit,dist2);

   for (i = limit-1; i >= 0; i--) {
         int hhb1 = ArrayMaximum(High,i-dist1/2,dist1);
         int llb1 = ArrayMinimum(Low, i-dist1/2,dist1);
         int hhb  = ArrayMaximum(High,MathMax(0,i-dist2/2),dist2);
         int llb  = ArrayMinimum(Low, MathMax(0,i-dist2/2),dist2);

            b1[i] = EMPTY_VALUE;
            b2[i] = EMPTY_VALUE;
            b3[i] = EMPTY_VALUE;
            b4[i] = EMPTY_VALUE;
         
         ArraySetAsSeries(atr,true);
         int copied=CopyBuffer(handle_atr,0,0,limit,atr);
         if (copied<=0) Print("   ***   ATR failed to copy.");
         double tr = atr[i];

                      b1[i] = High[hhb];
                      b2[i] = Low[llb];
         if (i==hhb1) b3[i] = High[hhb1]+tr/2;
         if (i==llb1) b4[i] = Low[llb1] -tr/2;
    }
   
   return rates_total;
}
//+------------------------------------------------------------------+

Das Ergebnis.


 
Grigori.S.B:

Konvertiert einen einfachen Indikator von MQL4 -> MQL5, aber kein Signal auf die letzten paar Bars. Bitte helfen Sie mir, den Grund zu finden. Quellcode und Ergebnis befinden sich im Anhang. Ich füge hier auch die konvertierte Version ein.

Das Ergebnis.


Der Schuldige könnte etwas sein, das nicht logisch zwischen den Plattformen abläuft

Bitte beachten Sie die verschiedenen Eingabeparameter

MT4

ArrayMaximum
Ищет в одномерном числовом массиве максимальный элемент.

int  ArrayMaximum(
   const void&   array[],             // массив для поиска
   int           count=WHOLE_ARRAY,   // количество проверяемых
   int           start=0              // с какого индекса начинаем поиск
   );

MT5

ArrayMaximum
Ищет максимальный элемент в первом измерении многомерного числового массива.

int  ArrayMaximum(
   const void&   array[],             // массив для поиска
   int           start=0,             // с какого индекса начинаем поиск
   int           count=WHOLE_ARRAY    // количество проверяемых
   );
 
Vitaly Muzichenko:

Der Schuldige könnte etwas sein, das zwischen den Plattformen nicht logisch abläuft.

Beachten Sie die verschiedenen Eingabeparameter

MT4

MT5

Vielen Dank, Vitaliy.

Die Reihenfolge der Variablen an dieser Stelle ist korrekt, ich habe sie bei der Konvertierung vertauscht. Auch iHighest / iLowest Funktionen waren in MQL4.

Das ist etwas anderes. Ich habe mir bereits den Kopf zerbrochen.

Grund der Beschwerde: