Данные из индикаторов mql5

 

как получить значения индикатора разных периодов если этот индикатор не открыт?

выводиться результат только того периода на который бросаешь скрипт и в котором обязательно есть индикатор данного периода

iWPR с периодом 14

Результат:

2009.10.26 08:57:40 cl (EURUSD,M5) WilBuffer[0]=-2.60869565
2009.10.26 08:57:40 cl (EURUSD,M5) WilBuffer[1]=-18.02325581
2009.10.26 08:57:40 cl (EURUSD,M5) WilBuffer[2]=-14.62264151
2009.10.26 08:57:40 cl (EURUSD,M5) willAnalizator handleWill=11 symbol=EURUSD period=5 calc_period=14
2009.10.26 08:57:40 cl (EURUSD,M5) WilBuffer[0]=0.00000000
2009.10.26 08:57:40 cl (EURUSD,M5) WilBuffer[1]=0.00000000
2009.10.26 08:57:40 cl (EURUSD,M5) WilBuffer[2]=0.00000000
2009.10.26 08:57:40 cl (EURUSD,M5) willAnalizator handleWill=10 symbol=EURUSD period=1 calc_period=14

а если открыта и минутка и 5-ти минутка(2 окна) с этим индикатором с периодом 14 то бросая скрипт в любое окно

результат

2009.10.26 09:00:54 cl (EURUSD,M5) WilBuffer[0]=-18.02325581
2009.10.26 09:00:54 cl (EURUSD,M5) WilBuffer[1]=-17.92452830
2009.10.26 09:00:54 cl (EURUSD,M5) WilBuffer[2]=-19.32367150
2009.10.26 09:00:54 cl (EURUSD,M5) willAnalizator handleWill=11 symbol=EURUSD period=5 calc_period=14
2009.10.26 09:00:54 cl (EURUSD,M5) WilBuffer[0]=-21.83908046
2009.10.26 09:00:54 cl (EURUSD,M5) WilBuffer[1]=-22.22222222
2009.10.26 09:00:54 cl (EURUSD,M5) WilBuffer[2]=-23.95209581
2009.10.26 09:00:54 cl (EURUSD,M5) willAnalizator handleWill=10 symbol=EURUSD period=1 calc_period=14



//+------------------------------------------------------------------+
//|                                                           Cl.mq5 |
//|                                                       Copyright  |
//|                                                                  |
//+------------------------------------------------------------------+

class willAnalizator
  {

public:
   string            symbol;          // имя символа
   ENUM_TIMEFRAMES   period;          // период
   int               calc_period;     // период усреднения

public:
   void willAnalizatorInfo()
     {
      int handleWill=iWPR(symbol,period,calc_period);
      Print("willAnalizator  handleWill="+handleWill+" symbol="+symbol+" period="+period+" calc_period="+calc_period);

      int rates_total=3;
      double WilBuffer[];

      int copied=CopyBuffer(handleWill,0,0,rates_total,WilBuffer);

      for(int i=rates_total-1;i>=0;i--)
        {
         Print("WilBuffer["+i+"]="+WilBuffer[i]);
        }


     }
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
   willAnalizator mc1,mc5;

   mc1.symbol = Symbol();
   mc1.period = PERIOD_M1;
   mc1.calc_period=14;
   mc1.willAnalizatorInfo();

   mc5.symbol = Symbol();
   mc5.period = PERIOD_M5;
   mc5.calc_period=14;
   mc5.willAnalizatorInfo();

  }
//+------------------------------------------------------------------+
 
snik_666 писал(а) >>

как получить значения индикатора разных периодов если этот индикатор не открыт?

выводиться результат только того периода на который бросаешь скрипт и в котором обязательно есть индикатор данного периода

Результат:

2009.10.26 08:57:40 cl (EURUSD,M5) WilBuffer[0]=-2.60869565
2009.10.26 08:57:40 cl (EURUSD,M5) WilBuffer[1]=-18.02325581
2009.10.26 08:57:40 cl (EURUSD,M5) WilBuffer[2]=-14.62264151
2009.10.26 08:57:40 cl (EURUSD,M5) willAnalizator handleWill=11 symbol=EURUSD period=5 calc_period=14
2009.10.26 08:57:40 cl (EURUSD,M5) WilBuffer[0]=0.00000000
2009.10.26 08:57:40 cl (EURUSD,M5) WilBuffer[1]=0.00000000
2009.10.26 08:57:40 cl (EURUSD,M5) WilBuffer[2]=0.00000000
2009.10.26 08:57:40 cl (EURUSD,M5) willAnalizator handleWill=10 symbol=EURUSD period=1 calc_period=14

Надо бы пометочку было в заголоке сделать, что в МТ5

 
Vinin >>:

Надо бы пометочку было в заголоке сделать, что в МТ5

Скорее надо бы уже разработчикам открыть mql5.com c форумом. Зачем мешать котлеты с мухами не понимаю.

 

После того, как создан совсем новый индикатор, надо дождаться момента, когда данные этого индикатора пересчитаются. Посмотрите обсуждение в ветке https://www.mql5.com/ru/forum/121251

 
stringo >>:

После того, как создан совсем новый индикатор, надо дождаться момента, когда данные этого индикатора пересчитаются. Посмотрите обсуждение в ветке https://www.mql5.com/ru/forum/121251

прочитал ветку но не вкурил как правильно переписать код который не будет ждать лишнее время, и я так понимаю замрет до момента когда данные этого индикатора пересчитаются.

Хочу сделать как написано в той ветке "Кроме того, все действия по синхронизации вы можете скрыть в своих собственных классах, один раз написал и забыл", но как грамотно переписать свой класс не понимаю. Если не трудно покажите как переписать мой код

 

Чтобы не ждать лишнего времени, сначала создайте все необходимые хэндлы индикаторов, а только после этого в цикле с задержкой 5 миллисекунд спрашивайте BarsCounted у соответствующих хэндлов. Должно быть больше 0.

 

то есть это окончательный ответ и без связки (sleep+контроль ERR_INDICATOR_DATA_NOT_FOUND) не получится нормально контролировать окончание расчетов вызванных индикаторов?

использование sleep при решение подобных задач в так часто упоминаемом С++ является моветоном...

Кстати тот же sleep плюс цикл проверки тоже жрет системные ресурсы и чем ниже число задержки тем сильнее нагрузим камень, а при больших значениях sleep опять же ростут возможные потери времени так как данные к примеру уже посчитались, а мы еще ждем 1-2 секунды, а если есть идея анализировать по 10 индикаторов на 5 валютных парах и с 3-4 разными тайм фреймами, плюс внедрить систему логирования подстройки параметров выбранных индикаторов в реальном времени, то есть периодически к примеру раз в день (ночью во время флета) проводить прогонку всего этого добра на предмет оптимальности выбранных входящих параметров...

не айс. надо довести до ума.

 
betmen >>:

то есть это окончательный ответ и без связки (sleep+контроль ERR_INDICATOR_DATA_NOT_FOUND) не получится нормально контролировать окончание расчетов вызванных индикаторов?

Нормально написанный индикатор рассчитывается один раз и 5 миллисекунд - не большая плата за это. В 4-ке тоже приходилось ждать некоторое время, просто об этом не задумывались.

В следующие моменты вызова индикатора он уже находится в кеше и никаких дополнительных расчетов делать не нужно, так что не нужно драматизировать.

 
Rosh >>:

Нормально написанный индикатор рассчитывается один раз и 5 миллисекунд - не большая плата за это. В 4-ке тоже приходилось ждать некоторое время, просто об этом не задумывались.

В следующие моменты вызова индикатора он уже находится в кеше и никаких дополнительных расчетов делать не нужно, так что не нужно драматизировать.

как писал marketeer по этой ссылке Сама концепция "централизации" расчетов и отвязки их от интерфейса хороша, но она не означает необходимости асинхронного вызова. Возможность асинхронного расчета в отдельном потоке прекрасно сосуществует с определением синхронного программного интерфейса к классам этого потока (если хотите, в дополнение к асинхронному). Основное назначение вызова индикатора из эксперта - получить готовые данные, а не "отвалить" (как Вы выражаетесь) побыстрее с фигой.

Присоединяюсь к его мнению на 100%. Если не поздно внесите либо нормальную многопоточность в язык, либо результат выдавать после окончательного расчета индикатора, либо посредством WaitForSingleObject решениий множество, но слип реально напрягает в коде программы.

 

На то оно и бетта тестирование что бы в максимально короткие сроки отловить баги, а так же показать настроение масс и соотнести это мнение со своими представлениям о Вашем продукте.

Безусловно 5-ка шаг вперед, но есть возможность сделать этот язык лучше.

 
betmen >>:


Присоединяюсь к его мнению на 100%. Если не поздно внесите либо нормальную многопоточность в язык, либо результат выдавать после окончательного расчета индикатора, либо посредством WaitForSingleObject решениий множество, но слип реально напрягает в коде программы.

Пока все это чисто теоретические претензии, кто-нибудь может показать пример того, как текущая реализация работы с индикаторами как-то мешает или замедляет работу эксперта.