Шаблон советника.

 

Здравствуйте.

 Появилась необходимость в шаблоне советника, который при принятии решения об открытии/закрытии позиции опирался бы на показания одного или двух индикатора но, на нескольких таймфреймах. Думаю здесь, на mql4 такое уже есть, но с ходу не смог найти. Если кто встречал, кинте ссылочку, пожалуйста.

 
boing9267:

Здравствуйте.

Появилась необходимость в шаблоне советника, который при принятии решения об открытии/закрытии позиции опирался бы на показания одного или двух индикатора но, на нескольких таймфреймах. Думаю здесь, на mql4 такое уже есть, но с ходу не смог найти. Если кто встречал, кинте ссылочку, пожалуйста.

Шаблон не должен зависеть от того сколько индикаторов используется и сколько таймфреймов. На то он и шаблон, а то пришлось бы разрабатывать столько шаблонов сколько разных условий. Ищите в кодобазе и в статьях.
 

Вроде бы нашел что нужно.

 Добавил в шаблон свою торговую функцию на примере стохастика, но почемуто не открывает сделки:

 

//+------------------------------------------------------------------+
//| функция выдачи торговых сиглналов |
//+------------------------------------------------------------------+
int yourFunction(int workPeriod)
{
int res=OP_BALANCE;
//----
double prevValueTF1MAIN = iStochastic(Symbol(),PERIOD_D1,Kperiod,Dperiod,slowPeriod,MODE_SMA,0,MODE_MAIN,2);
double currValueTF1MAIN = iStochastic(Symbol(),PERIOD_D1,Kperiod,Dperiod,slowPeriod,MODE_SMA,0,MODE_MAIN,1);

double prevValueTF1SIGNAL = iStochastic(Symbol(),PERIOD_D1,Kperiod,Dperiod,slowPeriod,MODE_SMA,0,MODE_SIGNAL,2);
double currValueTF1SIGNAL = iStochastic(Symbol(),PERIOD_D1,Kperiod,Dperiod,slowPeriod,MODE_SMA,0,MODE_SIGNAL,1);

double prevValueTF2MAIN = iStochastic(Symbol(),PERIOD_H1,Kperiod,Dperiod,slowPeriod,MODE_SMA,0,MODE_MAIN,2);
double currValueTF2MAIN = iStochastic(Symbol(),PERIOD_H1,Kperiod,Dperiod,slowPeriod,MODE_SMA,0,MODE_MAIN,1);

double prevValueTF2SIGNAL = iStochastic(Symbol(),PERIOD_H1,Kperiod,Dperiod,slowPeriod,MODE_SMA,0,MODE_SIGNAL,2);
double currValueTF2SIGNAL = iStochastic(Symbol(),PERIOD_H1,Kperiod,Dperiod,slowPeriod,MODE_SMA,0,MODE_SIGNAL,1);

double prevValueTF3MAIN = iStochastic(Symbol(),PERIOD_M15,Kperiod,Dperiod,slowPeriod,MODE_SMA,0,MODE_MAIN,2);
double currValueTF3MAIN = iStochastic(Symbol(),PERIOD_M15,Kperiod,Dperiod,slowPeriod,MODE_SMA,0,MODE_MAIN,1);

double prevValueTF3SIGNAL = iStochastic(Symbol(),PERIOD_M15,Kperiod,Dperiod,slowPeriod,MODE_SMA,0,MODE_SIGNAL,2);
double currValueTF3SIGNAL = iStochastic(Symbol(),PERIOD_M15,Kperiod,Dperiod,slowPeriod,MODE_SMA,0,MODE_SIGNAL,1);


if (prevValueTF1MAIN<prevValueTF1SIGNAL && currValueTF1MAIN>currValueTF1SIGNAL && currValueTF1MAIN<DownLevel && currValueTF1SIGNAL<DownLevel
&& prevValueTF2MAIN<prevValueTF2SIGNAL && currValueTF2MAIN>currValueTF2SIGNAL && currValueTF2MAIN<DownLevel && currValueTF2SIGNAL<DownLevel
&& prevValueTF3MAIN<prevValueTF3SIGNAL && currValueTF3MAIN>currValueTF3SIGNAL && currValueTF3MAIN<DownLevel && currValueTF3SIGNAL<DownLevel)
res=OP_BUY;
if (prevValueTF1MAIN>prevValueTF1SIGNAL && currValueTF1MAIN<currValueTF1SIGNAL && currValueTF1MAIN>UpLevel && currValueTF1SIGNAL>UpLevel
&& prevValueTF2MAIN>prevValueTF2SIGNAL && currValueTF2MAIN<currValueTF2SIGNAL && currValueTF2MAIN>UpLevel && currValueTF2SIGNAL>UpLevel
&& prevValueTF3MAIN>prevValueTF3SIGNAL && currValueTF3MAIN<currValueTF3SIGNAL && currValueTF3MAIN>UpLevel && currValueTF3SIGNAL>UpLevel)
res=OP_SELL;

//----
return (res);
}

Не подскажите где ошибся?

 

Вот тот же кусок из шаблона:

 

//+------------------------------------------------------------------+
//| функция выдачи торговых сиглналов |
//+------------------------------------------------------------------+
int yourFunction(int workPeriod)
{
int res=OP_BALANCE;
//----
double prevValue = iStochastic(Symbol(),workPeriod,Kperiod,Dperiod,slowPeriod,MODE_SMA,0,MODE_SIGNAL,2);
double currValue = iStochastic(Symbol(),workPeriod,Kperiod,Dperiod,slowPeriod,MODE_SMA,0,MODE_SIGNAL,1);

if (currValue>DownLevel && prevValue<DownLevel) res=OP_BUY;
if (currValue<UpLevel && prevValue>UpLevel) res=OP_SELL;

//----
return (res);
}

 

 

думаю проблема в том что в шаблоне стохастих используется на 1 таймфрейме, я мне нужно 3 периода.

Как переписать код в этом случае? Добавить в вызов функции вместо 1 переменной workPeriod 3 своих переменных? 

 

попробовал в вызове ф-ции через запятую перечислить 3 переменных - пишет ошибки:


 

Выкладываю исходный шаблон и шаблон с моими изменениями

Osc - исходный

Файлы:
osc_test.mq4  37 kb
3stoh.mq4  39 kb
Причина обращения: