Как собственного индюка запихнуть в сову, помогите!

 

Народ, помогите!

Работал с индюками, а сейчас решил освоить советников.

По индикаторам работа была как правило по принципу пересечение двух линий = сигнал. Для формирования буферов вывода мы работали с ценами, использовали циклы, условия выхода из которых опирались на функцию IndicatorCounted. И все было ясно. 

С совой не понятен один момент - чем заменить IndicatorCounted и как правильно формировать массив (сформировать раз, а далее дополнять новым элементом только при появлении нового бара) с переменными double, чтобы работать как с ними, так и с их iMa?? 

Если в индюке было так, то чем заменять в сове?

Файлы:
 
Vitaliy Hudyakov:

Народ, помогите!

Работал с индюками, а сейчас решил освоить советников.

По индикаторам работа была как правило по принципу пересечение двух линий = сигнал. Для формирования буферов вывода мы работали с ценами, использовали циклы, условия выхода из которых опирались на функцию IndicatorCounted. И все было ясно. 

С совой не понятен один момент - чем заменить IndicatorCounted и как правильно формировать массив (сформировать раз, а далее дополнять новым элементом только при появлении нового бара) с переменными double, чтобы работать как с ними, так и с их iMa?? 

Если в индюке было так, то чем заменять в сове?

зашивать код индикатора в советник сложно и не продуктивно - проще обращаться к индикатору через функцию айкастом, подход к решению задачи изначально не верный, если нужен советник с индикаторами в одном файле то пихайте индикаторы в ресурсы
 
Vitaliy Hudyakov:

Народ, помогите!

Работал с индюками, а сейчас решил освоить советников.

По индикаторам работа была как правило по принципу пересечение двух линий = сигнал. Для формирования буферов вывода мы работали с ценами, использовали циклы, условия выхода из которых опирались на функцию IndicatorCounted. И все было ясно. 

С совой не понятен один момент - чем заменить IndicatorCounted и как правильно формировать массив (сформировать раз, а далее дополнять новым элементом только при появлении нового бара) с переменными double, чтобы работать как с ними, так и с их iMa?? 

Если в индюке было так, то чем заменять в сове?

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

double MA = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,1);

Если нужно больше, то пробежать в цикле на образовании нового бара, и получить по номеру бара его значение

for(int i=10; i>0; i--) { // ищем по последним 10 барам
 MA = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i);
 // если нашли - запись значения: MA=? и выход: break;
}

Вариантов много, всё зависит от задачи

 

Запихнуть индикатор в советник поможет "#resource"

#resource "\\Indicators\\myInd.ex4"

Получить значение индикатора

double Ind = iCustom(_Symbol,0,"::Indicators\\myInd.ex4",0,1);
 
Vitaly Muzichenko:

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

Если нужно больше, то пробежать в цикле на образовании нового бара, и получить по номеру бара его значение

Вариантов много, всё зависит от задачи

 

Запихнуть индикатор в советник поможет "#resource"

Получить значение индикатора

Виталий, я так и думал сделать. Мне нужны будут 2 периода усреднения 9 и 120. Думал есть более корректные способы, чтобы не гонять заново по 120 барам.

Попробую сделать и так и с подключением индюка.

Спасибо! 

 

никакие буферы и всякие массивы не нужны по идее. Просто изучи стандартные роботы MACDsample и MovingAverage, которые есть в МТ4.

А отдельный индикатор будет тормозить тестирование на тестере. 

 
Vitaliy Hudyakov:

Народ, помогите!

Работал с индюками, а сейчас решил освоить советников.

По индикаторам работа была как правило по принципу пересечение двух линий = сигнал. Для формирования буферов вывода мы работали с ценами, использовали циклы, условия выхода из которых опирались на функцию IndicatorCounted. И все было ясно. 

С совой не понятен один момент - чем заменить IndicatorCounted и как правильно формировать массив (сформировать раз, а далее дополнять новым элементом только при появлении нового бара) с переменными double, чтобы работать как с ними, так и с их iMa?? 

Если в индюке было так, то чем заменять в сове?

Делаю так:

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
double ind[53];
bool stat=true;
datetime Tm[1];
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   int i;
   datetime NTm[1];

   CopyTime(_Symbol,_Period,0,1,NTm);
   if(Tm[0]!=NTm[0])
     {
      if(stat==true)
        {
         for(i=52;i>0;i--) IND(i);
         stat=false;
        }
      IND(0);
      //---

      //---
      for(i=52;i>0;i--) ind[i]=ind[i-1];
      //---
      Tm[0]=NTm[0];
     }
//---
   return;
//---
  }
//+------------------------------------------------------------------+
 
Aliaksandr Yemialyanau:

Делаю так:

Всем большое спасибо!

Разобрался!! 

 

индюка запихнуть в сову

Погуглите эту фразу. Может что полезного найдёте. :)