Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1244

 
Nikita Bushuev:

Vladimir, também gerei o código com o feiticeiro MQL5. Experimentei a vossa EA, também não funciona para mim quando a administro na moeda GBPUSD.

Diz o seguinte no diário de bordo:

Leia o que está escrito no diário de bordo. Existe uma descrição do SEU erro. (se for um testador há um tronco, se for um terminal há dois troncos).


Especificar também: em que símbolo e em que período de tempo se inicia. Hoje os telepatas estão de férias e não há ninguém para ler a sua mente.

 
Vladimir Karputov:

Ler o que está escrito no livro de bordo. Existe uma descrição do SEU erro. (se for um testador - há um registo, se for um terminal - há DOIS registos).

O testador cai neste local quando cria um manípulo indicador, ou seja, ele = INVALID_HANDLE. Na variável símbolo "EURUSD", o período é também definido. Como pode ser e o que significa o erro 4804?

ERR_INDICATOR_CANNOT_APLICAR

4804

O indicador não pode ser aplicado a outro indicador

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:

O testador cai aqui quando cria um cabo indicador, ou seja, it = INVALID_HANDLE. Na variável símbolo "EURUSD", o período é também definido. Como pode ser e o que significa o erro 4804?

ERR_INDICATOR_CANNOT_APLICAR

4804

O indicador não pode ser aplicado a outro indicador

Leia o registo - há uma descrição do SEU erro. Quanto mais cedo o ler, mais cedo compreenderá.

Especifique também: em que símbolo e em que período de tempo está a lançar. Os telepatas estão hoje de férias e não há ninguém para ler mentes.
 
Vladimir Karputov:

Leia a revista - há uma descrição do SEU erro. Quanto mais cedo o ler, mais cedo compreenderá.

Esclareça também: em que símbolo e em que período de tempo está a lançar. Hoje os telepatas estão de férias e não há ninguém para ler a sua mente.

O problema foi resolvido com a reinstalação da plataforma.

 
Vladimir Pastushak:

Caros programadores, os produtos no mercado não podem ser verificados

Código em anexo

CopyRates causa um enforcamento, resultando na escrita do mercado

teste em EURUSD,H1 (rede)

o testador demora muito tempo

Relatório do testador de estratégia não encontrado

E o validador passou correctamente o ponto de corte: Provavelmente não está a pensar muito, quando quer pedir 1440 elementos em cada TICK para todos os símbolos no terminal? Nem sequer pensou: o servidor pode facilmente ter mais de cinco mil símbolos, um símbolo pode ter NO 1440 barras...


Em suma, um tópico para iniciantes. Definitivamente.

 
Olá, pode dizer-me por favor porque é que os gráficos não estão a ser carregados? 14.08 registados na plataforma de negociação MT5 4 dos 7 gráficos ainda estão pendurados à espera de actualização. Embora na conta demo previamente registada todos os gráficos sejam actualizados a tempo.
 
Vladimir Karputov:

Exemplo

Resultado:


Obrigado, Vladimir. Compreendo totalmente a lógica por detrás do seu exemplo. Acredita nisso?

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

Obrigado, Vladimir. Compreendo totalmente a lógica por detrás do seu exemplo. Acredita nisso?

Eu não sou Vladimir, mas pergunto-lhe: o que não funciona? Tudo desapareceu há muito tempo, e não me apetece procurar o seu exemplo. Por favor, duplicar novamente.

 
Artyom Trishkin:

Não sou Vladimir, mas tenho de perguntar: o que é que não está a resultar? Já se foi há muito, e não quero procurar o seu exemplo. Por favor, duplicar novamente.

Aqui está o meu exemplo:

//+------------------------------------------------------------------+
//|                                                        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 eu mudar barsBuffer1[0] para barsBuffer1[i], o desenho é feito. Mas então como acrescentar uma vela nova?
 
Сергей Таболин:

Aqui está o meu exemplo:

Se eu mudar barsBuffer1[0] para barsBuffer1[i], o desenho é feito. Mas então como adicionar uma nova vela?

Nem todas as arrays têm a mesma orientação.

Razão: