EA-Setka-2/logic/rsi_cci/mql5/fill_rc_buffers.mqh
super.admin a4b861dd93 convert
2025-05-30 14:50:44 +02:00

161 lines
12 KiB
MQL5

//+------------------------------------------------------------------+
//| 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
//===================================================
//+------------------------------------------------------------------+