Как правильно в MQL4 сделать.. - страница 2

 
По тем же причинам считаю что можно рассмотреть возможность реализации произвольной заливки области между двумя линиями (цвет, стиль).
 
Соответственно полюбомуэто можно сделать и полюбому получится замедление работы и отжор памяти.В связи с этим считаю оправданным реализацию линии с динамически меняемыми характеристиками.


Забываете: это произойдет _только_ у того, кто хочет использовать такой способ.
А вот если внести штатные стили любого бара у индикатора - это означает, что все 100%
пользователей попадут на серьезные затраты ресурсов в любом случае. Следующий шаг -
борьба за экономность с только что самостоятельно созданной проблемой - это для нас не подходит.

В текущей версии MetaTrader идеологию построения менять уже не будем.
У нас есть целая линейка архитектур: FX Charts (1), MetaQuotes(2), MetaTrader 3.xx(3).
И есть достаточно четкая архитектура MetaTrader 4, которую нам и надо реализовать до конца.
 
простой 13-периодный трёхцветовой мувинг. ещё и толщина линии меняется.
//+------------------------------------------------------------------+
//|                                                  three_color.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                       https://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net/

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 Green
#property indicator_color3 Blue
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexBuffer(2,ExtMapBuffer3);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int i,j,shift;
   static int width=1;
//----
   for(i=0; i<Bars-21; i+=30)
     {
      for(j=0,shift=i; j<11; j++,shift++)
        {
         ExtMapBuffer1[shift]=iMA(NULL,0,13,MODE_SMA,0,PRICE_CLOSE,shift);
         if(j>0 && j<10)
           {
            ExtMapBuffer2[shift]=EMPTY_VALUE;
            ExtMapBuffer3[shift]=EMPTY_VALUE;
           }
        }
     }
//----
   for(i=10; i<Bars-11; i+=30)
     {
      for(j=0,shift=i; j<11; j++,shift++)
        {
         ExtMapBuffer2[shift]=iMA(NULL,0,13,MODE_SMA,0,PRICE_CLOSE,shift);
         if(j>0 && j<10)
           {
            ExtMapBuffer1[shift]=EMPTY_VALUE;
            ExtMapBuffer3[shift]=EMPTY_VALUE;
           }
        }
     }
//----
   for(i=20; i<Bars-1; i+=30)
     {
      for(j=0,shift=i; j<11; j++,shift++)
        {
         ExtMapBuffer3[shift]=iMA(NULL,0,13,MODE_SMA,0,PRICE_CLOSE,shift);
         if(j>0 && j<10)
           {
            ExtMapBuffer1[shift]=EMPTY_VALUE;
            ExtMapBuffer2[shift]=EMPTY_VALUE;
           }
        }
     }
//----
   if(width>10) width=1;
   else width++;
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,width);
   SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,width);
   SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,width);
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
Забываете: это произойдет _только_ у того, кто хочет использовать такой способ.
А вот если внести штатные стили любого бара у индикатора - это означает, что все 100%
пользователей попадут на серьезные затраты ресурсов в любом случае.


Почему же 100%. Есть реализация простой линии. Оставляем ее как есть.
Делаем реализацию новой эдвансэд линии. Кто хочет, использует простую, кто хочет, тот использует
'непростую' линию. Совсем не обязательно заменять текущие классы. Можно дополнить, перегрузить и пр...

Следующий шаг -
борьба за экономность с только что самостоятельно созданной проблемой - это для нас не подходит.


Ну почему же сразу обьявлять функционал нужный пользователям проблеммой. Хм...

В текущей версии MetaTrader идеологию построения менять уже не будем.
У нас есть целая линейка архитектур: FX Charts (1), MetaQuotes(2), MetaTrader 3.xx(3).
И есть достаточно четкая архитектура MetaTrader 4, которую нам и надо реализовать до конца.


Я все понимаю. Сроки, заказчики, планы...
Но если это возможно, то внесите вышеописанный функционал в планы следующих фаз разработки.
Спасибо большое.
 
Совсем не обязательно заменять текущие классы. Можно дополнить, перегрузить и пр...


Добавить массу незапланированных функций, усложнить код и напрочь испортить архитектуру.
В который раз...

К счастью, все это уже было пройдено. Был FX Charts, внесли столько изменений, что пришлось
браться с нуля за MetaQuotes, потом в нем массу дополнений, что проект стал монстром - пришлось
с нуля писать MetaTrader. Теперь вот с нуля MetaTrader 4 написали.
 
Кстати, а чем не нравится индикатор, который написал Слава?
Выглядит потрясающе и все малой кровью.
 
Добавить массу незапланированных функций, усложнить код и напрочь испортить архитектуру.
В который раз...


:) В каждой архитектуре должно быть ядро, движок, который позволяет расширять функциональность без особых проблемм. Каждый новый ваш проект - это результат неправильной архитектуры предыдущего проекта.
Вполне обычная нормальная эволюционная ситуация, которая описана во всех книжках по проектированию.
Возвращаясь к теме хочу сказать, что раз уж существует текущая ситуация, т.е. вы принимаете, рассматриваете и реализуете на форуме пожелания и предложения, то значит есть возможность сделать архитектуру чуть лучше.
PS: Никаких наездов, претензий и высокомерия. Я знаком с большими IT проектами, сам их делал и сопровождал. Знаю что это такое.

Кстати, а чем не нравится индикатор, который написал Слава?
Выглядит потрясающе и все малой кровью.


Да - нормально. :) Вот только использовано 3 штатных массива на один индикатор. Как раз то о чем я говорил выше (ресурсы, быстродействие, меньше линий в одном индикаторе).
Полагаю что можно сделать одну штатную линию и она будет менее ресурсоемкой чем 3 массива на одну линию в предоставленном Slawoй примере.
 
:) В каждой архитектуре должно быть ядро, движок, который позволяет расширять функциональность без особых проблемм.


Извините, слишком наивно. Возьмитесь за аналогичный проект и проверьте.
Тот кто прошел сложные проекты, уже по-другому говорит.

Каждый новый ваш проект - это результат неправильной архитектуры предыдущего проекта.


Правильно, а вся наша жизнь - это сплошная ошибка. Со стороны идеалиста.

Да - нормально. :) Вот только использовано 3 штатных массива на один индикатор. Как раз то о чем я говорил выше (ресурсы, быстродействие, меньше линий в одном индикаторе).


Этот способ экономнее и проще. Попробуйте на листочке набросать свою реализацию и нашу.
Только не забудьте - именно реализацию и со всеми затратами.
 
Сейчас я выступаю со стороны пользователя.
И сделать можно все что угодно. Если есть желание и возможности.
 
IMHO все выше написанное есть следствие разных подходов :
МQ делает развитый торговый терминал для своих серверов, а нам ,клиентам, нужно мощное средство ТА с поддержкой торговли из программы. Но очень важен и слой оффлайновой работы, тестинга и т.д. Согласитесь, весьма оазные требования , хотя и имеющие много общего.

А насчет четвертой смены платформы с нуля.... ну я уже удивлялся нелюбовью к объектам. При этом сам участвуя и участвовав в крупных проектах пришел к необходимости и нужности испоьзования и классов и объектов и паттеренов и много другого. Да , будет долго сначала ,но быстро и относительно безболезненно потом. может в MQL5 + MT5 это реализуете? все равно придется все переписывать заново :).