здесь скорее всего просто перепутали название
Period это и есть таймфрейм.
Symbol () - это текущий символ
Если нужно обратиться к GBPUSD то пишите "GBPUSD"
например вызов МА в мт5:
double ma1_buffer[];
double ma2_buffer[];
int h_ma1=INVALID_HANDLE;
int h_ma2=INVALID_HANDLE;
input int periodma1=13;
input int periodma2=24;
input ENUM_MA_METHOD MAmethod=MODE_SMA;
input ENUM_APPLIED_PRICE MAprice=PRICE_CLOSE;
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
string symToWork=Symbol();
for(int x=0;x<9;x++)
{
h_ma1=iMA(symToWork,period[x],periodma1,0,MAmethod,MAprice);
h_ma2=iMA(symToWork,period[x],periodma2,0,MAmethod,MAprice);
// копируем 3 последних значения (0 1 2 бары)
if(CopyBuffer(h_ma1,0,0,3,ma1_buffer)<3) //--- и если данных меньше требуемых
//--- выходим из функции
return;
//--- зададим индексацию в массиве как таймсерию
if(!ArraySetAsSeries(ma1_buffer,true))
//--- в случае ошибки индексации выходим из функции
return;
// копируем 3 последних значения (0 1 2 бары)
if(CopyBuffer(h_ma2,0,0,3,ma2_buffer)<3) //--- и если данных меньше требуемых
//--- выходим из функции
return;
//--- зададим индексацию в массиве как таймсерию
if(!ArraySetAsSeries(ma2_buffer,true))
//--- в случае ошибки индексации выходим из функции
return;
if(ma1_buffer[0]>ma2_buffer[0]) // что то делаем
}
}
//+------------------------------------------------------------------+
здесь скорее всего просто перепутали название
Period это и есть таймфрейм.
Symbol () - это текущий символ
Если нужно обратиться к GBPUSD то пишите "GBPUSD"
например вызов МА в мт5:
Так никто в MQL5 не делает. Вы же на каждом тике создаёте по два хендла индуктора!
Для этого нужно сразу, заранее создать в OnInit() нужные хендлы по всем нужным символам и таймфреймам.
не зная сколько там символов, я не буду копипастить названия буферов, я показал лишь простой пример.
да и не обязательно в OnInit заполнять и создавать хендлы.
я создаю хендлы, прямиком в Тике.
{
//--- проверим хендлы индикаторов
if(h_ma1==INVALID_HANDLE)//--- если хэндл невалидный
{
//--- создадим его снова
h_ma1=iMA(symToWork,TF,periodma1,0,MAmethod,MAprice);
//--- выходим из функции
}
}
при этом проверяю не заполнен ли он ранее.
Т.е. я правильно понимаю, что в моем случае необходимо сделать следующее:
string period[]={"PERIOD_M1", "PERIOD_M5", "PERIOD_M15", "PERIOD_M30", "PERIOD_H1"};
И соответственно, дальше вызывать все по тому же алгоритму, что и в примере на mql4?
Тут дело в том, что мне рисовать индикаторы сами не нужно - мне главное создавать некое оповещение по всем парам/таймфреймам.
Скажите, а можно ли аналогично сделать для символа? EURUSD - это же та же строка? Соответственно, можно сделать что-то подобное?
string period[]={"PERIOD_M1", "PERIOD_M5", "PERIOD_M15", "PERIOD_M30", "PERIOD_H1"};
string symbol[]={"EURUSD", "EURJPY", "EURRUB", "GBPUSD", "GBPEUR"};
int start()
{
// используем цикл, чтобы проработать все таймфреймы
for(int x=0;x<4;x++)
{
for(int y=0;y<4;y++) //используем цикл, чтобы проработать все инструменты
if(iMA(symbol[y],period[x],13,0,MODE_SMA,PRICE_CLOSE)>iMA(symbol[y],period[x],130,0,MODE_SMA,PRICE_CLOSE))
//Собственно, то, что будет происходить, если сигнал поступит
}
return(0);
}
Т.е. я правильно понимаю, что в моем случае необходимо сделать следующее:
string period[]={"PERIOD_M1", "PERIOD_M5", "PERIOD_M15", "PERIOD_M30", "PERIOD_H1"};
И соответственно, дальше вызывать все по тому же алгоритму, что и в примере на mql4?
Тут дело в том, что мне рисовать индикаторы сами не нужно - мне главное создавать некое оповещение по всем парам/таймфреймам.
Скажите, а можно ли аналогично сделать для символа? EURUSD - это же та же строка? Соответственно, можно сделать что-то подобное?
string period[]={"PERIOD_M1", "PERIOD_M5", "PERIOD_M15", "PERIOD_M30", "PERIOD_H1"};
string symbol[]={"EURUSD", "EURJPY", "EURRUB", "GBPUSD", "GBPEUR"};
int start()
{
// используем цикл, чтобы проработать все таймфреймы
for(int x=0;x<4;x++)
{
for(int y=0;y<4;y++) //используем цикл, чтобы проработать все инструменты
if(iMA(symbol[y],period[x],13,0,MODE_SMA,PRICE_CLOSE)>iMA(symbol[y],period[x],130,0,MODE_SMA,PRICE_CLOSE))
//Собственно, то, что будет происходить, если сигнал поступит
}
return(0);
}
И что, в МТ4 так работает? Сомневаюсь, что строковый параметр прокатит вместо таймфрейма...
Возможно, есть резон тогда создать не строковый массив, а enum?
Что-то типа такого:
ENUM_TIMEFRAMES period[]={PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1};
В мт4 нет енумератора, там таймфрейм задается целым числом, поэтому я и спрашиваю, как в мт5 это все реализовать по подобному алгоритму
Да ладно? Справку-то хоть откройте (:
И даже если бы задавалось только целым числом, у вас-то стринг в коде.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте!
Посмотрел различия между параметрами технических индикаторов в mql5 и mql4. У меня возник вопрос: в четвертой версии есть такой параметр как таймфрейм, например:
double iWPR(
string symbol, // имя символа
int timeframe, // таймфрейм
int period, // период
int shift // сдвиг
);
В пятом этот параметр отсутствует:
string symbol, // имя символа
ENUM_TIMEFRAMES period, // период
int calc_period // период усреднения
);
Однако у периода тип изменен на enum_timeframes. Скажите, пожалуйста, каким образом я теперь могу, условно, через массив сделать проверку условия по всем таймфреймам, как здесь:
int period[]={1,5,15,30,60,240,1440,10080,43200};
И еще один вопрос - если я хочу обратиться не к инструменту, на котором висит индикатор, а к любому инструменту, что я должен писать в скобках в Symbol ()?