Добрый день, уважаемые трейдеры.
Я новичок и пытаюсь самостоятельно обучиться программированию на MQL5 и на данном этапе передо мной стоит задача прикрепить несколько индикаторов к одному советчику (допустим Moving Average). А именно:
- simple MA 20
Каждый индикатор должен находиться в отдельном файле. Как можно сделать такое?
Извините, если тема уже обсуждалась (ссылки приветствуются). Всем откликнувшимся - спасибо.
Добрый день, уважаемые трейдеры.
Я новичок и пытаюсь самостоятельно обучиться программированию на MQL5 и на данном этапе передо мной стоит задача прикрепить несколько индикаторов к одному советчику (допустим Moving Average). А именно:
- simple MA 20
Каждый индикатор должен находиться в отдельном файле. Как можно сделать такое?
Извините, если тема уже обсуждалась (ссылки приветствуются). Всем откликнувшимся - спасибо.
//+------------------------------------------------------------------+ //| Example.mq5 | //| Copyright 2013, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ //--- input parameters input int EMA=20; input int BB=20; input int RSI=20; input int SMA=20; //------------------ int EMA_handle, BB_handle, RSI_handle, SMA_handle; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- EMA_handle=iMA(NULL,NULL,EMA,0,MODE_EMA,PRICE_CLOSE); BB_handle=iBands(NULL,NULL,BB,0,1,PRICE_CLOSE); RSI_handle=iRSI(NULL,NULL,RSI,PRICE_CLOSE); SMA_handle=iMA(NULL,NULL,SMA,0,MODE_SMA,PRICE_CLOSE); //--- return(0); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- double mas[1]; CopyBuffer(EMA_handle,0,0,1,mas); CopyBuffer(BB_handle,0,0,1,mas); CopyBuffer(BB_handle,1,0,1,mas); CopyBuffer(BB_handle,2,0,1,mas); CopyBuffer(RSI_handle,0,0,1,mas); CopyBuffer(SMA_handle,0,0,1,mas); //--- } //+------------------------------------------------------------------+
Вот пример, разбирайтесь, F1 в помощь :)
Я был бы очень рад иметь возможность иногда консультироваться у вас с возникающими вопросами, если Вы не против.
Спасибо вам огромное за настолько детальный ответ! :)
Я был бы очень рад иметь возможность иногда консультироваться у вас с возникающими вопросами, если Вы не против.
Обратите внимание, была ошибка в строке:
BB_handle=iBands(NULL,NULL,BB,0,1,PRICE_CLOSE);
Ещё материал для размышлений. Тут с проверками ошибок.
//+------------------------------------------------------------------+ //| Example.mq5 | //| Copyright 2013, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ //--- input parameters input int EMA=20; input int BB=20; input int RSI=20; input int SMA=20; //--- хендлы индикаторов int EMA_handle,BB_handle,RSI_handle,SMA_handle; //--- динамические массивы для значений индикаторов double EMA_arr[]; double BB_base_arr[],BB_upper_arr[],BB_lower_arr[]; double RSI_arr[]; double SMA_arr[]; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- EMA_handle=iMA(NULL,NULL,EMA,0,MODE_EMA,PRICE_CLOSE); if(EMA_handle<0) { printf("EMA_handle is not created. Handle=",INVALID_HANDLE, "\n Error=",GetLastError()); return(INIT_FAILED); } BB_handle=iBands(NULL,NULL,BB,0,1,PRICE_CLOSE); if(BB_handle<0) { printf("BB_handle is not created. Handle=",INVALID_HANDLE, "\n Error=",GetLastError()); return(INIT_FAILED); } RSI_handle=iRSI(NULL,NULL,RSI,PRICE_CLOSE); if(RSI_handle<0) { printf("RSI_handle is not created. Handle=",INVALID_HANDLE, "\n Error=",GetLastError()); return(INIT_FAILED); } SMA_handle=iMA(NULL,NULL,SMA,0,MODE_SMA,PRICE_CLOSE); if(SMA_handle<0) { printf("SMA_handle is not created. Handle=",INVALID_HANDLE, "\n Error=",GetLastError()); return(INIT_FAILED); } //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- находим значения индикаторов для баров 0, 1 и 2, //--- т.е. 3 значения начиная с бара 0. if(CopyBuffer(EMA_handle,MAIN_LINE,0,3,EMA_arr)<=0) return; ArraySetAsSeries(EMA_arr,true); //--- if(CopyBuffer(BB_handle,BASE_LINE,0,3,BB_base_arr)<=0) return; ArraySetAsSeries(BB_base_arr,true); if(CopyBuffer(BB_handle,UPPER_BAND,0,3,BB_upper_arr)<=0) return; ArraySetAsSeries(BB_upper_arr,true); if(CopyBuffer(BB_handle,LOWER_BAND,0,3,BB_lower_arr)<=0) return; ArraySetAsSeries(BB_lower_arr,true); //--- if(CopyBuffer(RSI_handle,MAIN_LINE,0,3,RSI_arr)<=0) return; ArraySetAsSeries(RSI_arr,true); //--- if(CopyBuffer(SMA_handle,MAIN_LINE,0,3,SMA_arr)<=0) return; ArraySetAsSeries(SMA_arr,true); //--- // Значение верхней линии Боллинджера на текущем баре будет BB_upper_arr[0], // а ЕМА для 2 бара EMA_arr[2]. } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { IndicatorRelease(EMA_handle); IndicatorRelease(BB_handle); IndicatorRelease(RSI_handle); IndicatorRelease(SMA_handle); } //+------------------------------------------------------------------+
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день, уважаемые трейдеры.
Я новичок и пытаюсь самостоятельно обучиться программированию на MQL5 и на данном этапе передо мной стоит задача прикрепить несколько индикаторов к одному советчику (допустим Moving Average). А именно:
- simple MA 20
Каждый индикатор должен находиться в отдельном файле. Как можно сделать такое?
Извините, если тема уже обсуждалась (ссылки приветствуются). Всем откликнувшимся - спасибо.