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

 
galustyan10:

ЗДРАВСТВУЙТЕ, ПОДСКАЖИТЕ КОГДА ОТКРЫВАЕШЬ РЕАЛЬНЫЙ СЧЕТ НА МТ5, ТО В ТЕЧЕНИИ КАКОГО ВРЕМЕНИ ДОЛЖЕН ПОЗВОНИТЬ СОТРУДНИК КОМПАНИИ И ЗАВЕРШИТЬ ПРОЦЕДУРУ ОТКРЫТИЯ СЧЕТА?

А кричать-то зачем? Никто никому не звонит, а логин и пароль Вы получаете при регистрации счёта. Как правило это личный кабинет на сайте брокера.

 
Ошибка компиляции: 'a' - is not static member
class A     { int a; };
class B : A { void a(); };
void B::a() {}
а так 
class A     { int a; };
class B : A { void a() {} };
нормально. А в чём разница?
 

MT5 1159.  Несоответствие горизонтального масштаба, если в "персонализации" установлен средний или крупный шрифт. Win7, 32b

 

 

Как в МТ5 происходит автомасштабирование индикаторов в отдельном окне?

Индикатор в отдельном окне

Терминал делает максимум 0.5603, при фактическом максимальном значении любого индикаторного буфера на всей истории 0.0605. Стоит ли говорить, что в МТ4 таких проблем не возникает.

 
Ilya Malev:

Как в МТ5 происходит автомасштабирование индикаторов в отдельном окне?


Терминал делает максимум 0.5603, при фактическом максимальном значении любого индикаторного буфера на всей истории 0.0605. Стоит ли говорить, что в МТ4 таких проблем не возникает..

Проверьте значения, которые у Вас в индикаторном буфере. Можно вручную с помощью "Перекрестия", можно с помощью MQL5.
 
Karputov Vladimir:
Проверьте значения, которые у Вас в индикаторном буфере. Можно вручную с помощью "Перекрестия", можно с помощью MQL5.

Я же сказал максимум на всей истории 0.0605. Проверено в OnCalculate сравнением максимального значения каждого буфера на каждом баре.

П.С. Собственно я уже понял в чем дело. Разный алгоритм расчета максимума в МТ4 и МТ5. Хотелось бы понять, какова была целесообразность менять этот алгоритм, но это вопрос риторический.

Проблема была в МТ4 - значения буфера индикатора, отображаемые в окне данных, влияют на масштаб отдельного окна индикатора, даже если отключено их отображение на графике (стиль DRAW_NONE). Я решил проблему, сделав их отрицательными и фиксировав минимум на 0. Отображалось все отлично, потому что в расчете масштаба участвовали только значения индикатора выше фиксированного минимума (0). Теперь в расчете масштаба участвуют значения ниже фиксированного минимума. То есть возможность убрать значения буфера из расчета масштаба не добавили (или я пока не разобрался как), но при этом убрали возможность из исключить из масштабирования загнав ниже минимума или максимума. (это все относится к не отображаемым буферам DRAW_NONE)

 
Ilya Malev:

Я же сказал максимум на всей истории 0.0605. Проверено в OnCalculate сравнением максимального значения каждого буфера на каждом баре.

П.С. Собственно я уже понял в чем дело. Разный алгоритм расчета максимума в МТ4 и МТ5. Хотелось бы понять, какова была целесообразность менять этот алгоритм, но это вопрос риторический.

Какие значения Вы в индикаторный буфер передадите, такие они и будут. Ещё вариант: в начале старта не обсчитываете каждый элемент индикаторного буфера и в результате получаете случайные значения в буфере.

В общем без взгляда на код здесь не обойтись. 

 
Karputov Vladimir:

Ещё вариант: в начале старта не обсчитываете каждый элемент индикаторного буфера и в результате получаете случайные значения в буфере.

С этим я уже разобрался. Это тоже кстати был неожиданный сюрприз МТ5 :)
 
Karputov Vladimir:

В общем без взгляда на код здесь не обойтись. 

Хорошо, вот код

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots 2
#property indicator_minimum 0
#property indicator_color1 clrRed
#property indicator_type1 DRAW_LINE
#property indicator_label1 "Стд.Откл."

double buffer1[], buffer2[];

int i_std=INVALID_HANDLE;

void OnInit(){
   SetIndexBuffer(0, buffer1);
   SetIndexBuffer(1, buffer2);
   PlotIndexSetInteger(1, PLOT_DRAW_TYPE, DRAW_NONE);
   PlotIndexSetInteger(1, PLOT_SHOW_DATA, true);
   ArraySetAsSeries(buffer1, true);
   ArraySetAsSeries(buffer2, true);
   i_std=iStdDev(Symbol(), Period(), 20, 0, MODE_SMA, PRICE_CLOSE);
}

void OnDeinit(const int reason){
   if(i_std!=INVALID_HANDLE)  IndicatorRelease(i_std);
}

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[]){

   for(int i=rates_total-MathMax(1, prev_calculated); i>=0; i--){
      buffer1[i]=_ind(i_std, 0, i);
      buffer2[i]=-MathRand()%5;
   }
   return(rates_total);
}

double _ind(int hnd, int buf, int index){
   if(index < 0) return(EMPTY_VALUE);
   double Arr[];
   return(CopyBuffer(hnd, buf, index, 1, Arr)==1?Arr[0]:EMPTY_VALUE);
}
 

Не знаю ошибка это или баг, или странное поведение но в тестере стратегий МТ4 буферы под индикаторы имеют размер около 1000   +/- 3  ячейки.

На ином типе тестирования демо или реал количество ячеек в буфере примерно равно количеству баров разрешенных в настройке терминала.

Хочу узнать это баг или так задумывалось, так же заметил что индикаторы можно редактировать в момент тестирования без остановки тестера. Офф инфы нигде не читал на советниках пока не проверял, но за это спасибо !

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