Ошибки, баги, вопросы - страница 2240

 
Konstantin:

а в чем проблема перенести рабочую стратегию за пределы МТ5 оставив МТ5 как коннектор ? думаю потратить время на такие танцы это нормально если стратегия стоящая, а не как обычно ))

Проблема в организации полноценной обратной связи... и даже коннекторам иногда нужно самим файлики открывать
 

кто то может обосновать почему при расчете индикатора в MQL5 в таймсерии time[] находится время не соответствующее времени сервера?

вот индикатор, который считает смещение цен закрытия относительно начала дня:

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2
//--- indicator buffers
double         DB[];

static int lastdayclose=-1;
static double F0=1.0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0,DB,INDICATOR_DATA);
   lastdayclose=-1;
   F0=1;
   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 i,limit;
   MqlDateTime tmpdate;
   if(prev_calculated==0)
     {
      limit=rates_total-1;
      lastdayclose=-1;
      F0=1;
     }
   else limit=rates_total-prev_calculated;
   ArraySetAsSeries(time,true);
   ArraySetAsSeries(close,true);
   for(i=limit;i>=0;i--)
     {
      TimeToStruct(time[i],tmpdate);
      if(tmpdate.day!=lastdayclose)
        {
         F0=close[i];
         lastdayclose=tmpdate.day;
        }
      DB[i]=F0-close[i];
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+

индикатор нарисовал:

https://www.mql5.com/ru/charts/8940511/eurusd-m5-alpari-international-limited

видно, что время начала дня смещено влево на 2 часа

 
Igor Makanu:

видно, что время начала дня смещено влево на 2 часа

Видно где?

 
Alexey Viktorov:

Видно где?

линии разделителей периодов видите? - это начало дня, соответствует серверному времени 0:00

логика индикатора понятна? - вертикальные всплески красной линии это цена закрытия первого бара начала дня, ее запоминаем и потом рисуем приращения цен закрытия относительно цены закрытия первого бара на открытии дня - этот "красный всплеск" должен быть на линии разделителей периода, т.е. на начале дня

 
A100:
Проблема в организации полноценной обратной связи... и даже коннекторам иногда нужно самим файлики открывать

а зачем коннекторам открывать самим файлы, если вся логика вынесена наружу, вызывайте из OnInit нужный функционал во внешней программе для инициализации

 
Igor Makanu:

линии разделителей периодов видите? - это начало дня, соответствует серверному времени 0:00

логика индикатора понятна? - вертикальные всплески красной линии это цена закрытия первого бара начала дня, ее запоминаем и потом рисуем приращения цен закрытия относительно цены закрытия первого бара на открытии дня - этот "красный всплеск" должен быть на линии разделителей периода, т.е. на начале дня

Вы считаете что на основании этого можно о чём-то говорить? Да, уж...

 
Alexey Viktorov:

Вы считаете что на основании этого можно о чём-то говорить? Да, уж...

да, если вопрос Вам интересен, но непонятна логика моего индикатора, я выложил код, можно добавить распринтовку...

но проблема то явная, время находящееся в таймсерии time[] не соответствует времени сервера, информации вида: "чтобы получить на ценовом графике время соответствующее времени сервера, не забудьте учесть смещение GMT.." не вижу в справке, поэтому и спрашиваю

кто то может обосновать почему при расчете индикатора в MQL5 в таймсерии time[] находится время не соответствующее времени сервера?

 
Konstantin:

а зачем коннекторам открывать самим файлы, если вся логика вынесена наружу, вызывайте из OnInit нужный функционал во внешней программе для инициализации

Откуда следует что вся логика вынесена наружу? Вы сначала прочтите внимательно предыдущий ответ. И непонятен смысл Ваших вопросов? Какое отношение они имеют к затронутым мной конкретным ошибкам? Как обойти ту или иную ошибку я и без Вас знаю. Интересуют предложения по подтверждению\воспроизведению, чтобы Разработчики приняли заявку в работу и в дальнейшем ошибка не возникала вновь в другом месте или в другом виде
[Удален]  
Igor Makanu:
int OnInit()
  {
   SetIndexBuffer(0,DB,INDICATOR_DATA);
   ArraySetAsSeries( DB, true );
   lastdayclose=-1;
   F0=1;
   return(INIT_SUCCEEDED);
  }

На здоровье.

 
Alexey Kozitsyn:

На здоровье.

да, наверное в этом проблема, совсем забыл что в MQL5, в индикаторах лучше устанавливать ArraySetAsSeries() самостоятельно, чем потом гадать где и что рассчитал индикатор

самое обидное, что справку читал, вроде все понятно, но стиль написания:

Возвращаемое значение

Возвращает true, если у указанного массива установлен флаг AS_SERIES, то есть доступ к массиву осуществляется задом наперед как в таймсерии. Таймсерия отличается от обычного массива тем, что индексация элементов таймсерии производится от конца массива к началу (от самых свежих данных к самым старым).

Примечание

Для проверки массива на принадлежность к таймсерии следует применять функцию ArrayIsSeries(). Массивы ценовых данных, переданных в качестве входных параметров в функцию OnCalculate(), не обязательно имеют направление индексации как у таймсерий. Нужное направление индексации можно установить функцией ArraySetAsSeries().

очень похож на перевод с "индуского" на русский, вроде и понятно, а вроде не на русском языке читаешь

спасибо!