//+------------------------------------------------------------------+ //| ProjectName | //| Copyright 2020, CompanyName | //| http://www.companyname.net | //+------------------------------------------------------------------+ #ifndef FILL_RC_BUFFERS_MQH #define FILL_RC_BUFFERS_MQH //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ static int calc_rc::Init(setting_t *settings) { if(settings.use_for_next_Order != 0) { cci=iCCI(CURRENT_SYMBOL,settings.CciTimeFrame,settings.CciPeriod,PRICE_CLOSE); if(cci==INVALID_HANDLE) { //--- сообщим о неудаче и выведем номер ошибки log_error("Не удалось создать хэндл индикатора iCCI"); //--- работа индикатора завершается досрочно _init_failed = true; return(INIT_FAILED); } rsi=iRSI(CURRENT_SYMBOL,settings.RsiTimeFrame,settings.RsiPeriod,PRICE_CLOSE); if(rsi==INVALID_HANDLE) { //--- сообщим о неудаче и выведем номер ошибки log_error("Не удалось создать хэндл индикатора iRSI"); //--- работа индикатора завершается досрочно _init_failed = true; return(INIT_FAILED); } } if(settings.use_for1Order) { cci1=iCCI(CURRENT_SYMBOL,settings.CciTimeFrame1,settings.CciPeriod1,PRICE_CLOSE); if(cci1==INVALID_HANDLE) { //--- сообщим о неудаче и выведем номер ошибки log_error("Не удалось создать хэндл индикатора iCCI1"); //--- работа индикатора завершается досрочно _init_failed = true; return(INIT_FAILED); } rsi1=iRSI(CURRENT_SYMBOL,settings.RsiTimeFrame1,settings.RsiPeriod1,PRICE_CLOSE); if(rsi1==INVALID_HANDLE) { //--- сообщим о неудаче и выведем номер ошибки log_error("Не удалось создать хэндл индикатора iRSI1"); //--- работа индикатора завершается досрочно _init_failed = true; return(INIT_FAILED); } } return(INIT_SUCCEEDED); //--- }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void calc_rc::Deinit(void) { if(rsi!=INVALID_HANDLE) IndicatorRelease(rsi); if(rsi1!=INVALID_HANDLE) IndicatorRelease(rsi1); if(cci!=INVALID_HANDLE) IndicatorRelease(cci); if(cci!=INVALID_HANDLE) IndicatorRelease(cci1); }; //====================================================== bool calc_rc::fill_rc_buffers(setting_t *settings) { if(settings.use_for_next_Order != 0) { if(OldCci != iTime(CURRENT_SYMBOL,settings.CciTimeFrame,1) || (OldRci != iTime(CURRENT_SYMBOL,settings.RsiTimeFrame,1))) { OldCci = iTime(CURRENT_SYMBOL,settings.CciTimeFrame,1); OldRci = iTime(CURRENT_SYMBOL,settings.RsiTimeFrame,1); if((cci !=0) && (CopyBuffer(cci,0,1,IND_ARRAY_BUFFER_SIZE,CciBuff)<0)) { //--- если копирование не удалось, сообщим код ошибки log_error(StringFormat("Не удалось скопировать данные из индикатора CCI, код ошибки %d",GetLastError())); //--- завершим с нулевым результатом - это означает, что индикатор будет считаться нерассчитанным return false; } ArrayReverse(CciBuff); if((rsi !=0) && (CopyBuffer(rsi,0,1,IND_ARRAY_BUFFER_SIZE,RsiBuff)<0)) { //--- если копирование не удалось, сообщим код ошибки log_error(StringFormat("Не удалось скопировать данные из индикатора RSI, код ошибки %d",GetLastError())); //--- завершим с нулевым результатом - это означает, что индикатор будет считаться нерассчитанным return false; } ArrayReverse(RsiBuff); for(int i=(IND_ARRAY_BUFFER_SIZE-1); i>=0; i--) RsiBuff[i] -= 50.0; } } if(settings.use_for1Order) { if(OldCci1 != iTime(CURRENT_SYMBOL,settings.CciTimeFrame1,1) || (OldRci1 != iTime(CURRENT_SYMBOL,settings.RsiTimeFrame1,1))) { OldCci1 = iTime(CURRENT_SYMBOL,settings.CciTimeFrame1,1); OldRci1 = iTime(CURRENT_SYMBOL,settings.RsiTimeFrame1,1); if((cci1 != 0) && (CopyBuffer(cci1,0,1,IND_ARRAY_BUFFER_SIZE,CciBuff1)<0)) { //--- если копирование не удалось, сообщим код ошибки log_error(StringFormat("Не удалось скопировать данные из индикатора CCI1, код ошибки %d",GetLastError())); //--- завершим с нулевым результатом - это означает, что индикатор будет считаться нерассчитанным return false; } ArrayReverse(CciBuff1); if((rsi1 != 0) && (CopyBuffer(rsi1,0,1,IND_ARRAY_BUFFER_SIZE,RsiBuff1)<0)) { //--- если копирование не удалось, сообщим код ошибки log_error(StringFormat("Не удалось скопировать данные из индикатора RSI1, код ошибки %d",GetLastError())); //--- завершим с нулевым результатом - это означает, что индикатор будет считаться нерассчитанным return false; } ArrayReverse(RsiBuff1); for(int i=(IND_ARRAY_BUFFER_SIZE-1); i>=0; i--) RsiBuff1[i] -= 50.0; } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ return true; }; #endif //=================================================== //+------------------------------------------------------------------+