Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1244

 
Nikita Bushuev:

Vladimir, ho anche generato il codice con la procedura guidata MQL5. Ho provato il tuo EA, anche per me non funziona quando lo eseguo sulla valuta GBPUSD.

Nel registro c'è scritto quanto segue:

Leggete cosa c'è scritto nel registro. C'è una descrizione del TUO errore. (se è un tester c'è un log, se è un terminale ci sono due log).


Specificare anche: su quale simbolo e in quale lasso di tempo si inizia. Oggi i telepati sono in vacanza e non c'è nessuno che legga la tua mente.

 
Vladimir Karputov:

Leggere ciò che è scritto nel diario di bordo. C'è una descrizione del TUO errore. (se è un tester - c'è un log, se è un terminale - ci sono DUE log).

Il tester va in crash in questo posto quando si crea un handle di indicatore, cioè esso = INVALID_HANDLE. Nella variabile simbolo "EURUSD", viene impostato anche il periodo. Come può essere e cosa significa l'errore 4804?

ERRARE_INDICATORE_NON_APPLICABILE

4804

L'indicatore non può essere applicato a un altro indicatore

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:

Il tester va in crash qui quando si crea un manico indicatore, cioè esso = INVALID_HANDLE. Nella variabile simbolo "EURUSD", viene impostato anche il periodo. Come può essere e cosa significa l'errore 4804?

ERRARE_INDICATORE_NON_APPLICABILE

4804

L'indicatore non può essere applicato a un altro indicatore

Leggi il log - c'è una descrizione del TUO errore. Prima lo leggete, prima lo capirete.

Specifica anche: su quale simbolo e su quale timeframe stai lanciando. I telepati sono in vacanza oggi e non c'è nessuno per leggere la mente.
 
Vladimir Karputov:

Leggi la rivista - c'è una descrizione del TUO errore. Prima lo leggete, prima lo capirete.

Chiarisci anche: su quale simbolo e su quale timeframe stai lanciando. Oggi i telepati sono in vacanza e non c'è nessuno che legga la tua mente.

Il problema è stato risolto reinstallando la piattaforma.

 
Vladimir Pastushak:

Cari sviluppatori, i prodotti sul mercato non possono essere verificati

Codice allegato

CopyRates causa un blocco, con il risultato che il mercato scrive

test su EURUSD,H1 (netting)

il tester impiega troppo tempo

Rapporto del tester di strategia non trovato

E il validatore ha superato correttamente il cutoff: Probabilmente non stai pensando troppo, quando vuoi chiedere 1440 elementi ad ogni TICK per tutti i simboli nel terminale? Non hai nemmeno pensato: il server può avere facilmente più di cinquemila simboli, un simbolo può avere NO 1440 barre...


Tutto sommato, un argomento per i neofiti. Sicuramente.

 
Ciao, Potresti dirmi perché i grafici non si caricano? 14.08 registrato sulla piattaforma di trading MT5 4 grafici su 7 sono ancora appesi in attesa di aggiornamento. Anche se sul conto demo precedentemente registrato tutti i grafici sono aggiornati in tempo.
 
Vladimir Karputov:

Esempio

Risultato:


Grazie, Vladimir. Capisco perfettamente la logica del tuo esempio. Ci credi?

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

Grazie, Vladimir. Capisco perfettamente la logica del tuo esempio. Ci credi?

Non sono Vladimir, ma lascia che ti chieda: qual è il problema? Tutto è sparito da tempo e non ho voglia di cercare il tuo esempio. Per favore, duplicatelo di nuovo.

 
Artyom Trishkin:

Non sono Vladimir, ma devo chiedere: cosa non funziona? È passato molto tempo e non voglio cercare il tuo esempio. Per favore, duplicatelo di nuovo.

Ecco il mio esempio:

//+------------------------------------------------------------------+
//|                                                        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);
}
//+------------------------------------------------------------------+
Se cambio barsBuffer1[0] con barsBuffer1[i], viene disegnato. Ma allora come faccio ad aggiungere una nuova candela?
 
Сергей Таболин:

Ecco il mio esempio:

Se cambio barsBuffer1[0] con barsBuffer1[i], viene disegnato. Ma allora come aggiungere una nuova candela?

Non tutti gli array hanno lo stesso focus.