Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1244

 
Nikita Bushuev:

Владимир, я и генерировал код с помощью визарда MQL5. Ваш советник попробовал, он также не работает у меня при запуске на валюте GBPUSD.

В журнале пишет следующее:

Читайте то что пишется в журнале. Там описание ВАШЕЙ ошибки. (если это тестер - то журнал один, если это терминал - журнала ДВА).


Также уточняйте: на каком символе и на каком таймфрейме производите запуск. Сегодня телепаты в отпуске и мысли читать некому.

 
Vladimir Karputov:

Читайте то что пишется в журнале. Там описание ВАШЕЙ ошибки. (если это тестер - то журнал один, если это терминал - журнала ДВА).

Тестировщик падает вот в этом месте при создании хэндла индикатора, т.е. он = INVALID_HANDLE. В переменной symbol "EURUSD", период тоже задан. Как такое может быть и что означает ошибка 4804?

ERR_INDICATOR_CANNOT_APPLY

4804

Индикатор не может быть применен к другому индикатору

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:

Тестировщик падает вот в этом месте при создании хэндла индикатора, т.е. он = INVALID_HANDLE. В переменной symbol "EURUSD", период тоже задан. Как такое может быть и что означает ошибка 4804?

ERR_INDICATOR_CANNOT_APPLY

4804

Индикатор не может быть применен к другому индикатору

Читайте журнал - там описание ВАШЕЙ ошибки. Чем быстрее прочитаете, тем быстрее поймете.

Также уточняйте: на каком символе и на каком таймфрейме производите запуск. Сегодня телепаты в отпуске и мысли читать некому.
 
Vladimir Karputov:

Читайте журнал - там описание ВАШЕЙ ошибки. Чем быстрее прочитаете, тем быстрее поймете.

Также уточняйте: на каком символе и на каком таймфрейме производите запуск. Сегодня телепаты в отпуске и мысли читать некому.

Вопрос решился переустановкой платформы.

 
Vladimir Pastushak:

Уважаемые разработчики, продукты в маркете не могут пройти проверку 

Код приложен 

CopyRates  вызывает зависание, в результате маркет пишет

test on EURUSD,H1 (netting)

tester takes too long time

strategy tester report not found

И правильно валидатор отсечку выдал: Вы ведь вероятно не очень подумали, когда захотели на КАЖДОМ ТИКЕ запрашивать 1440 элементов ПО ВСЕМ СИМВОЛАМ терминала? При этом даже не подумали: на сервере может быть запросто более пяти тысяч символов, на символе может НЕ БЫТЬ 1440 баров ...


В общем в тему для новичков. Однозначно.

 
Здравствуйте! Подскажите пожалуйста почему не загружаются графики? 14.08 зарегистрировалась на торговой платформе МТ5 4 графика из 7 до сих пор висят в ожидании обновления. Хотя на ранее зарегистрированном демо-счете все графики вовремя обновляются. 
 
Vladimir Karputov:

Пример

Результат:


Спасибо, Владимир. Мне абсолютна понятна логика работы Вашего примера. Верите?

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

Спасибо, Владимир. Мне абсолютна понятна логика работы Вашего примера. Верите?

Я не Владимир, но всё ж спрошу: а что не получается? Уже давно всё утекло, и искать ваш пример нет желания. Продублируйте пожалуйста ещё раз.

 
Artyom Trishkin:

Я не Владимир, но всё ж спрошу: а что не получается? Уже давно всё утекло, и искать ваш пример нет желания. Продублируйте пожалуйста ещё раз.

Вот мой пример:

//+------------------------------------------------------------------+
//|                                                        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);
}
//+------------------------------------------------------------------+
Если поменять barsBuffer1[0] на barsBuffer1[i] , то рисуется. Но как тогда добавлять новую свечу
 
Сергей Таболин:

Вот мой пример:

Если поменять barsBuffer1[0] на barsBuffer1[i] , то рисуется. Но как тогда добавлять новую свечу

Не все массивы имеют одинаковую направленность.

Причина обращения: