На основе одного индикатора из кодабазы написал пример того что я хочу. Работает. Но при запуске выдаёт ошибку:
2019.03.06 21:24:26.091 my_MA_S (GBPUSD,M15) array out of range in 'my_MA_S.mq5' (103,59)
Не подскажете где ошибка?
//+------------------------------------------------------------------+ //| myMA_S.mq5 | //| Copyright 2019, Tabolin S.N. | //| https://www.mql5.com/ru/users/vip.avos | //+------------------------------------------------------------------+ #property copyright "Copyright 2019, Tabolin S.N." #property link "https://www.mql5.com/ru/users/vip.avos" #property version "1.07" //#property icon "\\Images\\mi2.ico" //---------------------------------------------------------------------------------------------- #define GS 1.618 #define PI 3.14159 //---------------------------------------------------------------------------------------------- #property strict #property indicator_chart_window #property indicator_buffers 1 #property indicator_plots 1 #property indicator_label1 "myMA_S" #property indicator_type1 DRAW_LINE #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- input parameters input int InpPeriodMA = 45; // MA period input int InpShiftCorrection = 9; // Correction shift //--- indicator buffers double Buffer1[]; int handle_MA; // переменная для хранения хэндла индикатора HMA5 double buffer_MA[]; // массив для хранения значений индикатора HMA5 int n=0; int ma_bars_calculated = 0; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int OnInit() { ArraySetAsSeries(Buffer1, true); ArraySetAsSeries(buffer_MA, true); PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,-1); SetIndexBuffer(0,Buffer1,INDICATOR_DATA); //--- set shortname and change label string short_name="myMA_S("+ IntegerToString(InpPeriodMA)+","+ IntegerToString(InpShiftCorrection)+")"; IndicatorSetString(INDICATOR_SHORTNAME,short_name); PlotIndexSetString(0,PLOT_LABEL,short_name); //--- set accuracy IndicatorSetInteger(INDICATOR_DIGITS,_Digits); //--- sets first bar from what index will be drawn PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpPeriodMA); handle_MA = iMA(Symbol(),0,InpPeriodMA,0,MODE_SMA,PRICE_CLOSE); if(handle_MA == INVALID_HANDLE) // проверяем наличие хендла индикатора { Comment("Не удалось получить хендл индикатора handle_MA"); // если хендл не получен, то выводим сообщение в лог об ошибке Print("Не удалось получить хендл индикатора handle_MA"); return(INIT_FAILED); // завершаем работу с ошибкой } return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ 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 ma_values_to_copy; int ma_calculated = BarsCalculated(handle_MA); if(ma_calculated <= 0){ PrintFormat("BarsCalculated() вернул %d, код ошибки %d",ma_calculated,GetLastError()); return(0); } if(prev_calculated == 0 || ma_calculated != ma_bars_calculated || rates_total > prev_calculated + 1){ if(ma_calculated > rates_total) ma_values_to_copy = rates_total; else ma_values_to_copy = ma_calculated; } else { ma_values_to_copy = (rates_total - prev_calculated) + 1; } if(CopyBuffer(handle_MA,0,0,ma_values_to_copy,buffer_MA) < 0 ) // копируем данные из индикаторного массива в массив buffer_HMA5 { // если не скопировалось Print("Не удалось скопировать данные из индикаторного буфера в buffer_MA"); // то выводим сообщение об ошибке return(0); // и выходим из функции } for(int i = 0; i < ma_values_to_copy; i++) { Buffer1[i] = buffer_MA[i]+(buffer_MA[i+1]-buffer_MA[i+InpShiftCorrection])/(InpShiftCorrection/GS);//1.314; } return(rates_total); } //+------------------------------------------------------------------+
Файлы:
my_MA_S.mq5
10 kb
Сергей Таболин:
Ответил в другой теме. Не плодите пожалуйста посты и темы.
На основе одного индикатора из кодабазы написал пример того что я хочу. Работает. Но при запуске выдаёт ошибку:
Не подскажете где ошибка?
Artyom Trishkin:
Ответил в другой теме. Не плодите пожалуйста посты и темы.
Ответил в другой теме. Не плодите пожалуйста посты и темы.
С удовольствием, если бы получал ответы ))) Месяц с открытия темы прошёл...
Спасибо.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Уважаемые, как-то видел открытый код индюка, который для своих рассчётов использовал данные другого индюка. Никак не могу вспомнить что за он. А очень надо. Просто я индикаторы никогда не писал и не знаю что там и как, но тут мне надо проверить одну идейку.
Суть в том, что к значению "стороннего" индикатора (типа средней, но без открытого кода, но бесплатного) я хочу добавить некоторое значение Х.
Как это сделать? Если можно, на примере.