Дык, а чего не так с индикаторами то?
Сказано же, "расчетная сущность" + "стандартные возможности рисования". Нельзя объекты, это ненравится народу?
По факту, нужна конечно отдельная сущность "плоттер", что бы вообще отвязать "индикатор" от графика.
Да и сама привязка MQL программ к графикам - раритет.
Архитектурно индикатор - это оторванная от графика расчетная сущность, которая умеет перемалывать предоставляемые числовые буферы с данными и отрисовывать результаты одним из стандартных вариантов визуализации.
Если же добавлять к нему возможность создавать и управлять
объектами, то это заставит нас явно интерфейсно привязывать к графику,
что создаст определенные ограничения в тестере.
Вопрос с созданием объектов из индикаторов остается открытым - окончательное решение еще не принято.
Причины такого шага понятны.
Вопрос лишь в том, как и чем "заменить" то, к чему уже привыкли строить в индикаторах в МТ4.
т.е. тому что уже является как само собой разумеещееся... ;)
Основная масса предложений озвучена в теме "Справка...",
здесь же пока есть желание поговорить по душам... так сказать...
*
Использование советников как единственного художника не подходит по главной причине:
- необходимость в постоянном разрешении оных, что весьма чревато последствиями
Плюс к этому что только один на один график, т.е. для "центра управления космическим аппаратом" необходимо
либо перегружать советник излишним кодом, либо держать два графика и ломать голову как транслировать данные
обьктов с одного графика в другой, торговый...
*
Создание же "третьей сущности" так-же неоднозначно как кажется на первый взгляд.
На чьей базе создавать эту самую сущность 3с?
Если заложена таки возможность управлять обьектами в индикаторе, то вроде как смысл городить огород получается с 3с.
Использовать поток советника? только ежли этой 3с придать свойство "плюсоваться" к текущему советнику если таковой есть на графике.
Ну а если нет, то 3с работает сам по себе... однако общее, но уже не так существенное ограничение как у Гореца: только один :)))
Так ведь индикаторы отвязанные - берите из них, а плоттер будет просто индикатором старого типа, как в MQL4
Копировать буфер? или каждый раз обращаться? А если индюк тяжелый? А внутреннее состояние? Дублировать логику?
Индикаторов "старого типа" никто делать не будет, их не поддерживает платформа.
Поэтому имхо единственный вариант разделить индикаторы на два класса -- для советников и для графиков.
kombat писал(а) >>
Создание же "третьей сущности" так-же неоднозначно как кажется на первый взгляд.
Нету неоднозначноестей. 3с создается на базе индикатора с его свойствами. НО 3с привязан к графику и не может вызываться функцией iCustom
Если заложена таки возможность управлять обьектами в индикаторе, то вроде как смысл городить огород получается с 3с.
Смысл в том, что если таки эта возможность появится, то это будет не что иное, как костыль, на радость mql4-приверженцам.
Идея использования одной "рисовалки" для всех открытых графиков заслуживает внимания.
Но это будет действительно космический аппарат. Каким-то образом необходимо будет из одного окна изменения свойств рисовалки включать для каждого графика различные свойства индикатора, задавать торговые инструменты (валютные пары), на графиках которых должно что-то рисоваться, задавать рабочие периоды (возможно, на разных рабочих периодах различные свойства индикатора будут задействоваться). Сразу необходимо будет предусматривать создание "шаблонов" в самом коде индикатора, чтобы группы параметров применять для различных графиков. Действительно ЦУП - Центр Управления Полетами - получается. Мало кто из разработчиков сможет грамотно реализовывать такие штуки.
Посмотрите справку по функции PlotIndexSetInteger - там приведен пример трехцветной скользящей средней с периодической сменой цветовой схемы.
А что там, в справке, за модификатор? подробности бы какие написали о нём, или ссылку дали, где их искать.
PlotIndexGetInteger
prop_modifier
[in] Модификатор указанного свойства. Только свойства индексов цветов требуют модификатора.
А что там, в справке, за модификатор? подробности бы какие написали о нём, или ссылку дали, где их искать.
Вы же просили пример индикатора - я показал, где его можно увидеть. Вот код из раздела PlotIndexSetInteger (не PlotIndexGetInteger):
//+------------------------------------------------------------------+ //| ColorLine.mq5 | //| Copyright © 2009, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2009, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" #property indicator_chart_window #property indicator_buffers 2 #property indicator_plots 1 //---- plot ColorLine #property indicator_label1 "ColorLine" #property indicator_type1 DRAW_COLOR_LINE #property indicator_color1 Red,Green,Blue #property indicator_style1 STYLE_SOLID #property indicator_width1 3 //--- indicator buffers double ColorLineBuffer[]; double ColorBuffer[]; int MA_handle; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,ColorLineBuffer,INDICATOR_DATA); SetIndexBuffer(1,ColorBuffer,INDICATOR_COLOR_INDEX); //--- get MA handle MA_handle=iMA(Symbol(),0,10,0,MODE_EMA,PRICE_CLOSE); //--- return(0); } //+------------------------------------------------------------------+ //| get color index | //+------------------------------------------------------------------+ int getIndexOfColor(int i) { int j=i%300; if(j<100) return(0);// first index if(j<200) return(1);// second index return(2); // third index } //+------------------------------------------------------------------+ //| 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[]) { //--- static int ticks=0,modified=0; int limit; //--- first calculation or number of bars was changed if(prev_calculated==0) { //--- copy values of MA into indicator buffer ColorLineBuffer int copied=CopyBuffer(MA_handle,0,rates_total,0,ColorLineBuffer); if(copied<=0) return(0);// copying failed - throw away //--- now set line color for every bar for(int i=0;i<rates_total;i++) ColorBuffer[i]=getIndexOfColor(i); } else { //--- copy values of MA into indicator buffer ColorLineBuffer int copied=CopyBuffer(MA_handle,0,rates_total,0,ColorLineBuffer); if(copied<=0) return(0); ticks++;// ticks counting if(ticks>=5)//it's time to change color scheme { ticks=0; // reset counter modified++; // counter of color changes if(modified>=3)modified=0;// reset counter ResetLastError(); switch(modified) { case 0:// first color scheme PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,Red); PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,Blue); PlotIndexSetInteger(0,PLOT_LINE_COLOR,2,Green); //Print("Color scheme"+modified); break; case 1:// second color scheme PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,Yellow); PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,Pink); PlotIndexSetInteger(0,PLOT_LINE_COLOR,2,LightSlateGray); //Print("Color scheme"+modified); break; default:// third color scheme PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,LightGoldenrod); PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,Orchid); PlotIndexSetInteger(0,PLOT_LINE_COLOR,2,LimeGreen); //Print("Color scheme"+modified); } } else { //--- set start position limit=prev_calculated-1; //--- now we set line color for every bar for(int i=limit;i<rates_total;i++) ColorBuffer[i]=getIndexOfColor(i); } } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Продолжение поднятой темы
https://www.mql5.com/ru/forum/119409/page30