Здравствуйте, есть следующие функции
...
Но при их исполнении выдает 5053 ошибку - т.е. не заполняется массив. Прогоняю циклом типа Символ х Таймфрейм (х - символ, у - таймфрейм)
Подскажите, пожалуйста, почему так происходит
У вас так:
double bars_min (int bar, int x, int y) { for (int i=0; i>bar;i++){ BarsMin_buffer[i]=iLow(aSymbol(x), tf(y), i); } return ArrayMinimum (BarsMin_buffer, 0, WHOLE_ARRAY); } double bars_max (int bar, int x, int y) { for (int i=0; i>bar;i++){ BarsMin_buffer[i]=iHigh(aSymbol(x), tf(y), i); } return ArrayMaximum (BarsMax_buffer, 0, WHOLE_ARRAY); }
Нужно так:
for (int i=0; i<bar;i++)
Здравствуйте, есть следующие функции
double bars_min (int bar, int x, int y) {
for (int i=0; i>bar;i++){
BarsMin_buffer[i]=iLow(aSymbol(x), tf(y), i);
}
return ArrayMinimum (BarsMin_buffer, 0, WHOLE_ARRAY);
}
double bars_max (int bar, int x, int y) {
for (int i=0; i>bar;i++){
BarsMin_buffer[i]=iHigh(aSymbol(x), tf(y), i);
}
return ArrayMaximum (BarsMax_buffer, 0, WHOLE_ARRAY);
}
Но при их исполнении выдает 5053 ошибку - т.е. не заполняется массив. Прогоняю циклом типа Символ х Таймфрейм (х - символ, у - таймфрейм)
Подскажите, пожалуйста, почему так происходит
5053??? Такого кода нет вроде, предположу что имелось в виду 4053
Может проблема в цикле: for (int i=0; i > < bar; i++)???
Здравствуйте, есть следующие функции
double bars_min (int bar, int x, int y) {
for (int i=0; i>bar;i++){
BarsMin_buffer[i]=iLow(aSymbol(x), tf(y), i);
}
return ArrayMinimum (BarsMin_buffer, 0, WHOLE_ARRAY);
}
double bars_max (int bar, int x, int y) {
for (int i=0; i>bar;i++){
BarsMin_buffer[i]=iHigh(aSymbol(x), tf(y), i);
}
return ArrayMaximum (BarsMax_buffer, 0, WHOLE_ARRAY);
}
Но при их исполнении выдает 5053 ошибку - т.е. не заполняется массив. Прогоняю циклом типа Символ х Таймфрейм (х - символ, у - таймфрейм)
Подскажите, пожалуйста, почему так происходит
Для начала рассмотрим первую функцию (во второй будет аналогично)
double bars_min (int bar, int x, int y) { for (int i=0; i<bar;i++) BarsMin_buffer[i]=iLow(aSymbol(x), tf(y), i); return ArrayMinimum (BarsMin_buffer, 0, WHOLE_ARRAY); }
Первое, что бросается в глаза, нужно объявить массив BarsMin_buffer. Стоп, а зачем вообще массив? Запоминаем первое значение функции iLow(aSymbol(x), tf(y), i); Затем в цикле for (int i=1; i<bar;i++) ищем остальные значения и если меньше запоминаем.
double bars_min (int bar, int x, int y) { double mini=iLow(aSymbol(x), tf(y), i), mini2; for (int i=1; i<bar;i++) { mini2=iLow(aSymbol(x), tf(y), i); if(mini2<mini)mini=mini2; } return mini; }
Для начала рассмотрим первую функцию (во второй будет аналогично)
Первое, что бросается в глаза, нужно объявить массив BarsMin_buffer. Стоп, а зачем вообще массив? Запоминаем первое значение функции iLow(aSymbol(x), tf(y), i); Затем в цикле for (int i=1; i<bar;i++) ищем остальные значения и если меньше запоминаем.
Можно вообще без циклов обойтись и лишних массивов
double bars_min(int bar,string symbol,ENUM_TIMEFRAMES period) { double hist_low[]; int digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS); if(CopyLow(symbol,period,0,bar,hist_low)<bar)return(WRONG_VALUE); int index=ArrayMinimum(hist_low); if(index<0)return(WRONG_VALUE); return(NormalizeDouble(hist_low[index],digits)); }
...
раз пошла такая пьянка...
можно вообще в три строки (вот что значит MQL4)
int digit=(int)SymbolInfoInteger(aSymbol(x),SYMBOL_DIGITS); double Maximum=NormalizeDouble(iHigh(aSymbol(x),tf(y),iHighest(aSymbol(x),tf(y),MODE_HIGH,bar,0)),digit); double Minimum=NormalizeDouble(iLow(aSymbol(x),tf(y),iLowest(aSymbol(x),tf(y),MODE_LOW,bar,0)),digit);
раз пошла такая пьянка...
можно вообще в три строки (вот что значит MQL4)
можно и так, но могут быть проблемы если данные функции вернут значение в случае ошибки
iHighest
Возвращаемое значение
Индекс наибольшего найденного значения (смещение относительно текущего бара) соответствующего графика или -1 в случае ошибки. Для получения дополнительной информации об ошибке необходимо вызвать функцию GetLastError().
iHigh
Возвращаемое значение
Значение максимальной цены бара (указанного параметром shift) соответствующего графика или 0 в случае ошибки. Для получения дополнительной информации об ошибке необходимо вызвать функцию GetLastError().
..
можно и так, но могут быть проблемы если данные функции вернут значение в случае ошибки
да, нужно при старте, подгружать историю по всем необходимым символам и периодам, иначе при любом варианте будут ошибки...
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте, есть следующие функции
double bars_min (int bar, int x, int y) {
for (int i=0; i>bar;i++){
BarsMin_buffer[i]=iLow(aSymbol(x), tf(y), i);
}
return ArrayMinimum (BarsMin_buffer, 0, WHOLE_ARRAY);
}
double bars_max (int bar, int x, int y) {
for (int i=0; i>bar;i++){
BarsMin_buffer[i]=iHigh(aSymbol(x), tf(y), i);
}
return ArrayMaximum (BarsMax_buffer, 0, WHOLE_ARRAY);
}
Но при их исполнении выдает 5053 ошибку - т.е. не заполняется массив. Прогоняю циклом типа Символ х Таймфрейм (х - символ, у - таймфрейм)
Подскажите, пожалуйста, почему так происходит