Пытаюсь переделать простой индикатор с МТ4 под МТ5, кто знает, подскажите как это сделать, уже всю голову сломал... скрин идюка будет внизу
вот МТ4
вот МТ5
вот сам индикатор, на заданном интервале от цены выстраивает линии из точек
У вас нечто странное написано под МТ5. Во первых, у индикаторных ордеров не задаются размеры, они динамические и размер определяет система. Потом, вы пишете в четыре ячейки буфера одно и то же, а в пятое нули. Смысл сего действия.
Короче, возьмите исходники самого простого индикатора, например мувинга, и посмотрите, как индикаторы правильно пишутся. Ваш код надо полностью переписывать. А неужели под МТ4 это работает? Не верю ))
У вас нечто странное написано под МТ5. Во первых, у индикаторных ордеров не задаются размеры, они динамические и размер определяет система. Потом, вы пишете в четыре ячейки буфера одно и то же, а в пятое нули. Смысл сего действия.
Короче, возьмите исходники самого простого индикатора, например мувинга, и посмотрите, как индикаторы правильно пишутся. Ваш код надо полностью переписывать. А неужели под МТ4 это работает? Не верю ))
на мт4 всё отлично, вот начал мт5 осваивать и не выходит ничего... я картинку прикрепил, что бы понятно было. Суть в том, что бы отображать 4 точки на одном уровне от цены, а пятая с нулём, что бы затирать "след", это для лучшего восприятия, когда работаешь с переменным масштабом. На другие индюки уже смотрел, но ни чего не понял...
У вас нечто странное написано под МТ5. Во первых, у индикаторных ордеров не задаются размеры, они динамические и размер определяет система. Потом, вы пишете в четыре ячейки буфера одно и то же, а в пятое нули. Смысл сего действия.
Короче, возьмите исходники самого простого индикатора, например мувинга, и посмотрите, как индикаторы правильно пишутся. Ваш код надо полностью переписывать. А неужели под МТ4 это работает? Не верю ))
А почему буферы статические?
И в mql4
double redline[5]; double blueline[5]; SetIndexBuffer(0,redline); SetIndexBuffer(1,blueline);
и в mql5
double redline[5]; double blueline[5]; SetIndexBuffer(0,redline,INDICATOR_DATA); SetIndexBuffer(1,blueline,INDICATOR_DATA);
Следующий вопрос: Зачем назначать стиль для точек?
#property indicator_type1 DRAW_ARROW #property indicator_style1 STYLE_SOLID #property indicator_type2 DRAW_ARROW #property indicator_style2 STYLE_SOLID
А почему буферы статические?
И в mql4
и в mql5
Следующий вопрос: Зачем назначать стиль для точек?
С буферами уже разобрались. Стиль для точек пофиг, не нужен, но ни на что не влияет.
Короче, вот эта портянка должна, по идее, работать как в 4. Но пятёрка - такая пятёрка )) ща пятёрочники зашеймят )))
#property link "" #property version "1.00" #include <Trade\SymbolInfo.mqh> #property indicator_chart_window #property indicator_buffers 2 #property indicator_plots 2 #property indicator_color1 clrRed #property indicator_color2 clrBlue #property indicator_width1 1 #property indicator_width2 1 #property indicator_type1 DRAW_LINE #property indicator_style1 STYLE_SOLID #property indicator_type2 DRAW_LINE #property indicator_style2 STYLE_SOLID CSymbolInfo c_symbol; input double sl = 0.1; double redline[]; double blueline[]; // +------------------------------------------------------------------+ // | Custom indicator initialization function | // +------------------------------------------------------------------+ int OnInit() { c_symbol.Name(Symbol()); // --- indicator buffers mapping SetIndexBuffer(0, redline, INDICATOR_DATA); SetIndexBuffer(1, blueline, INDICATOR_DATA); // ---- PlotIndexSetInteger(0, PLOT_ARROW, 151); PlotIndexSetInteger(1, PLOT_ARROW, 151); PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, 0.0); PlotIndexSetDouble(1, PLOT_EMPTY_VALUE, 0.0); PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, 1); PlotIndexSetInteger(1, PLOT_DRAW_BEGIN, 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[]) { ArraySetAsSeries(redline, false); ArraySetAsSeries(blueline, false); c_symbol.RefreshRates(); redline[0] = c_symbol.Ask() + 0.1; blueline[0] = c_symbol.Bid() - 0.1; redline[1] = c_symbol.Ask() + 0.1; blueline[1] = c_symbol.Bid() - 0.1; redline[2] = c_symbol.Ask() + 0.1; blueline[2] = c_symbol.Bid() - 0.1; redline[3] = c_symbol.Ask() + 0.1; blueline[3] = c_symbol.Bid() - 0.1; redline[4] = 0; blueline[4] = 0; PrintFormat("Ask: %f, Bid: %f", c_symbol.Ask(), c_symbol.Bid()); // --- return value of prev_calculated for next call return rates_total; }
Бл, запостил и нашёл ашипку )) массивы в серию же надо, а не наоборот, бестолочь )) ТС, пользуйтесь.
#property link "" #property version "1.00" #include <Trade\SymbolInfo.mqh> #property indicator_chart_window #property indicator_buffers 2 #property indicator_plots 2 #property indicator_color1 clrRed #property indicator_color2 clrBlue #property indicator_width1 1 #property indicator_width2 1 #property indicator_type1 DRAW_ARROW #property indicator_style1 STYLE_SOLID #property indicator_type2 DRAW_ARROW #property indicator_style2 STYLE_SOLID CSymbolInfo c_symbol; input double sl = 0.1; double redline[]; double blueline[]; // +------------------------------------------------------------------+ // | Custom indicator initialization function | // +------------------------------------------------------------------+ int OnInit() { c_symbol.Name(Symbol()); // --- indicator buffers mapping SetIndexBuffer(0, redline, INDICATOR_DATA); SetIndexBuffer(1, blueline, INDICATOR_DATA); // ---- PlotIndexSetInteger(0, PLOT_ARROW, 159); PlotIndexSetInteger(1, PLOT_ARROW, 159); PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, 0.0); PlotIndexSetDouble(1, PLOT_EMPTY_VALUE, 0.0); PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, 1); PlotIndexSetInteger(1, PLOT_DRAW_BEGIN, 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[]) { ArraySetAsSeries(redline, true); ArraySetAsSeries(blueline, true); c_symbol.RefreshRates(); redline[0] = c_symbol.Ask() + 0.1; blueline[0] = c_symbol.Bid() - 0.1; redline[1] = c_symbol.Ask() + 0.1; blueline[1] = c_symbol.Bid() - 0.1; redline[2] = c_symbol.Ask() + 0.1; blueline[2] = c_symbol.Bid() - 0.1; redline[3] = c_symbol.Ask() + 0.1; blueline[3] = c_symbol.Bid() - 0.1; redline[4] = 0; blueline[4] = 0; // --- return value of prev_calculated for next call return rates_total; }
Бл, запостил и нашёл ашипку )) массивы в серию же надо, а не наоборот, бестолочь )) ТС, пользуйтесь.
Огромнейшая благодарность, понял наконец в чём суть... всю голову с этим мт5 сломал
Огромнейшая благодарность, понял наконец в чём суть... всю голову с этим мт5 сломал
Да и в четверке тоже ArraySetAsSeries(redline, true) используют. Сейчас отличий четверки от пятерки не так много, как года полтора и более назад.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
вот МТ4
вот МТ5
вот сам индикатор, на заданном интервале от цены выстраивает линии из точек