161 lines
12 KiB
MQL5
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
|
|
|
|
//===================================================
|
|
|
|
//+------------------------------------------------------------------+
|