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

 
Nikita Bushuev:

Vladimir, ich habe den Code auch mit dem MQL5-Assistenten erstellt. Ich habe versucht, Ihre EA, es funktioniert auch nicht für mich, wenn ich es auf GBPUSD Währung laufen.

Im Protokoll steht Folgendes:

Lesen Sie, was im Protokoll steht. Es gibt eine Beschreibung IHRES Fehlers. (wenn es sich um einen Tester handelt, gibt es ein Protokoll, wenn es sich um ein Terminal handelt, gibt es zwei Protokolle).


Geben Sie auch an, mit welchem Symbol und in welchem Zeitrahmen Sie beginnen. Heute sind die Telepathen im Urlaub und es gibt niemanden, der Ihre Gedanken lesen kann.

 
Vladimir Karputov:

Lesen Sie, was im Logbuch steht. Es gibt eine Beschreibung IHRES Fehlers. (wenn es sich um ein Prüfgerät handelt, gibt es ein Protokoll, wenn es sich um ein Terminal handelt, gibt es ZWEI Protokolle).

Der Tester stürzt an dieser Stelle ab, wenn ein Indikator-Handle erstellt wird, d.h. es = INVALID_HANDLE. In der Symbolvariablen "EURUSD" wird auch der Zeitraum festgelegt. Wie kann das sein und was bedeutet der Fehler 4804?

ERR_INDICATOR_CANNOT_APPLY

4804

Indikator kann nicht auf einen anderen Indikator angewendet werden

m_handle=iAC(symbol,period);
bool CiAC::Create(const string symbol,const ENUM_TIMEFRAMES period)
  {
//--- check history
   if(!SetSymbolPeriod(symbol,period))
      return(false);
//--- create
   m_handle=iAC(symbol,period);
//--- check result
   if(m_handle==INVALID_HANDLE)
      return(false);
//--- idicator successfully created
   if(!Initialize(symbol,period))
     {
      //--- initialization failed
      IndicatorRelease(m_handle);
      m_handle=INVALID_HANDLE;
      return(false);
     }
//--- ok
   return(true);
  }
Документация по MQL5: Предопределенные переменные / _Symbol
Документация по MQL5: Предопределенные переменные / _Symbol
  • www.mql5.com
Предопределенные переменные / _Symbol - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Nikita Bushuev:

Der Tester stürzt hier ab, wenn ein Indikator-Handle erzeugt wird, d.h. es = INVALID_HANDLE. In der Symbolvariablen "EURUSD" wird auch der Zeitraum festgelegt. Wie kann das sein und was bedeutet der Fehler 4804?

ERR_INDICATOR_CANNOT_APPLY

4804

Der Indikator kann nicht auf einen anderen Indikator angewendet werden

Lesen Sie das Protokoll - dort finden Sie eine Beschreibung IHRES Fehlers. Je eher Sie es lesen, desto eher werden Sie es verstehen.

Geben Sie außerdem an, auf welchem Symbol und in welchem Zeitrahmen Sie starten wollen. Heute sind die Telepathen im Urlaub und es gibt niemanden, der Gedanken lesen kann.
 
Vladimir Karputov:

Lesen Sie das Magazin - dort ist IHR Fehler beschrieben. Je eher Sie es lesen, desto eher werden Sie es verstehen.

Klären Sie auch, mit welchem Symbol und in welchem Zeitrahmen Sie einsteigen wollen. Heute sind die Telepathen im Urlaub, und es gibt niemanden, der deine Gedanken lesen kann.

Das Problem wurde durch eine Neuinstallation der Plattform gelöst.

 
Vladimir Pastushak:

Liebe Entwickler, die Produkte auf dem Markt können nicht überprüft werden

Code beigefügt

CopyRates verursacht einen Hänger, der dazu führt, dass der Markt schreibt

Test auf EURUSD,H1 (Netting)

Tester braucht zu lange Zeit

Strategieprüfungsbericht nicht gefunden

Und der Prüfer hat den Cutoff korrekt bestanden: Sie denken wahrscheinlich nicht zu viel, wenn Sie 1440 Elemente bei jedem TICK für alle Symbole im Terminal abfragen wollen? Sie haben nicht einmal gedacht: Der Server kann leicht mehr als fünftausend Symbole haben, ein Symbol kann KEINE 1440 Balken haben...


Alles in allem ein Thema für Neulinge. Definitiv.

 
Hallo, könnten Sie mir bitte sagen, warum die Diagramme nicht geladen werden? 14.08 auf der Handelsplattform MT5 registriert 4 von 7 Charts hängen noch und warten auf ein Update. Obwohl auf dem zuvor registrierten Demokonto alle Charts rechtzeitig aktualisiert werden.
 
Vladimir Karputov:

Beispiel

Ergebnis:


Vielen Dank, Vladimir. Ich verstehe die Logik hinter Ihrem Beispiel vollkommen. Können Sie das glauben?

 
Сергей Таболин:

Vielen Dank, Vladimir. Ich verstehe die Logik hinter Ihrem Beispiel vollkommen. Können Sie das glauben?

Ich bin nicht Vladimir, aber ich frage Sie: Was funktioniert nicht? Alles ist längst weg, und ich habe keine Lust, nach Ihrem Beispiel zu suchen. Bitte vervielfältigen Sie es noch einmal.

 
Artyom Trishkin:

Ich bin nicht Wladimir, aber ich muss fragen: Was funktioniert nicht? Es ist schon lange weg, und ich möchte nicht nach Ihrem Beispiel suchen. Bitte vervielfältigen Sie es noch einmal.

Hier ist mein Beispiel:

//+------------------------------------------------------------------+
//|                                                        cTest.mq5 |
//|                                     Copyright 2020, Tabolin S.N. |
//|                           https://www.mql5.com/ru/users/vip.avos |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, Tabolin S.N."
#property link      "https://www.mql5.com/ru/users/vip.avos"
#property version   "1.00"
//#property indicator_separate_window
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_plots   1
//--- plot bars
#property indicator_label1  "bars"
#property indicator_type1   DRAW_CANDLES
#property indicator_color1  clrGold
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- indicator buffers
double   barsBuffer1[];
double   barsBuffer2[];
double   barsBuffer3[];
double   barsBuffer4[];
//+------------------------------------------------------------------+
double   newCandles_Open[5]   = {106.785, 106.724, 106.760, 106.767, 106.769};
double   newCandles_High[5]   = {106.792, 106.765, 106.780, 106.781, 106.769};
double   newCandles_Low[5]    = {106.716, 106.719, 106.746, 106.758, 106.715};
double   newCandles_Close[5]  = {106.724, 106.760, 106.766, 106.769, 106.725};

int      tick_count           = 0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
   SetIndexBuffer(0, barsBuffer1, INDICATOR_DATA);
   SetIndexBuffer(1, barsBuffer2, INDICATOR_DATA);
   SetIndexBuffer(2, barsBuffer3, INDICATOR_DATA);
   SetIndexBuffer(3, barsBuffer4, INDICATOR_DATA);
   
   ArraySetAsSeries(barsBuffer1  ,true);
   ArraySetAsSeries(barsBuffer2  ,true);
   ArraySetAsSeries(barsBuffer3  ,true);
   ArraySetAsSeries(barsBuffer4  ,true);
   
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0);
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0);
   PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,0);
   
   ArrayInitialize(barsBuffer1   ,0);
   ArrayInitialize(barsBuffer2   ,0);
   ArrayInitialize(barsBuffer3   ,0);
   ArrayInitialize(barsBuffer4   ,0);
//---
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int  OnCalculate(
   const int        rates_total,       // размер входных таймсерий
   const int        prev_calculated,   // количество обработанных баров на предыдущем вызове
   const datetime&  time[],            // массив Time
   const double&    open[],            // массив Open
   const double&    high[],            // массив High
   const double&    low[],             // массив Low
   const double&    close[],           // массив Close
   const long&      tick_volume[],     // массив Tick Volume
   const long&      volume[],          // массив Real Volume
   const int&       spread[]           // массив Spread
   )
{
   if(rates_total - prev_calculated > 1)
   {
      if(prev_calculated == 0)
      {
         Print("~~~~ Предварительный расчёт индикатора.");
         for(int i = 0; i < 5; i++)
         {
            barsBuffer1[0] = newCandles_Open[i];
            barsBuffer2[0] = newCandles_High[i];
            barsBuffer3[0] = newCandles_Low[i];
            barsBuffer4[0] = newCandles_Close[i];
         }
         Print("~~~~ Предварительный расчёт индикатора закончен.");
      }
      else return(0);
   }
   else Print("tick_count = ",++tick_count);
//--- return value of prev_calculated for next call
   return(rates_total);
}
//+------------------------------------------------------------------+
Wenn ich barsBuffer1[0] in barsBuffer1[i] ändere, wird es gezeichnet. Aber wie kann ich dann eine neue Kerze hinzufügen?
 
Сергей Таболин:

Hier ist mein Beispiel:

Wenn ich barsBuffer1[0] in barsBuffer1[i] ändere, wird es gezeichnet. Aber wie fügt man dann eine neue Kerze hinzu?

Nicht alle Arrays haben die gleiche Ausrichtung.

Grund der Beschwerde: