165 lines
15 KiB
MQL5
165 lines
15 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
|
|
class CExternalIndicators_class
|
|
{
|
|
private:
|
|
|
|
|
|
public:
|
|
enum enMaTypes
|
|
{
|
|
ma_sma, // Simple moving average
|
|
ma_ema, // Exponential moving average
|
|
ma_smma, // Smoothed MA
|
|
ma_lwma // Linear weighted MA
|
|
};
|
|
|
|
CExternalIndicators_class();
|
|
~CExternalIndicators_class();
|
|
|
|
void _Dochian_buffer(double &upperBuffer[],double &middleBuffer[],double &lowerBuffer[],int Handle_Donchian);
|
|
void _Donchian_handle(string Simbol,ENUM_TIMEFRAMES per,int DonchianPeriod,int Margins,
|
|
int Shift,int Handle_Donchian, bool ChartIndAdd);
|
|
|
|
void Keltner_buffer(double &bufferUp[],double &bufferDn[]);
|
|
void Keltner_handle(string Simbol,ENUM_TIMEFRAMES per,int inpPeriods,double inpMulti,int enMaTypes ,
|
|
ENUM_APPLIED_PRICE inpPrice ,bool ChartIndAdd);
|
|
|
|
};
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
CExternalIndicators_class::CExternalIndicators_class()
|
|
{
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
CExternalIndicators_class::~CExternalIndicators_class()
|
|
{
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Donchian_channel |
|
|
//+------------------------------------------------------------------+
|
|
enum Applied_Extrem //Тип экстремумов
|
|
{
|
|
HIGH_LOW,
|
|
HIGH_LOW_OPEN,
|
|
HIGH_LOW_CLOSE,
|
|
OPEN_HIGH_LOW,
|
|
CLOSE_HIGH_LOW
|
|
};
|
|
////+-----------------------------------+
|
|
////| ВХОДНЫЕ ПАРАМЕТРЫ ИНДИКАТОРА |
|
|
////+-----------------------------------+
|
|
//input int DonchianPeriod=20; //Период усреднения
|
|
//input Applied_Extrem Extremes=HIGH_LOW; //Тип экстремумов
|
|
//input int Margins=-2;
|
|
//input int Shift=0; //сдвиг индикатора по горизонтали в барах
|
|
////+-----------------------------------+
|
|
////---- индикаторные буферы
|
|
//double upperBuffer[];
|
|
//double middleBuffer[];
|
|
//double lowerBuffer[];
|
|
//int Handle_Donchian;
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
void CExternalIndicators_class:: _Donchian_handle(string Simbol,ENUM_TIMEFRAMES per,int DonchianPeriod,int Margins,
|
|
int Shift,int Handle_Donchian, bool ChartIndAdd)
|
|
{
|
|
//--- Получение хэндла индикатора Donchian Channel
|
|
Handle_Donchian=iCustom(Simbol,per,"Donchian_channels",DonchianPeriod,Margins,Shift);
|
|
if(Handle_Donchian == INVALID_HANDLE)
|
|
{
|
|
Print("Не удалось создать описатель индикатора Donchian_Handle!");
|
|
return;
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
|
|
if(ChartIndAdd == true)
|
|
ChartIndicatorAdd(ChartID(), 0, Handle_Donchian);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
void CExternalIndicators_class:: _Dochian_buffer(double &upperBuffer[],double &middleBuffer[],double &lowerBuffer[],int Handle_Donchian)
|
|
{
|
|
ArraySetAsSeries(upperBuffer, true);
|
|
ArraySetAsSeries(middleBuffer, true);
|
|
ArraySetAsSeries(lowerBuffer, true);
|
|
ArrayResize(upperBuffer, 5);
|
|
ArrayResize(middleBuffer, 5);
|
|
ArrayResize(lowerBuffer, 5);
|
|
int dochian_upper = CopyBuffer(Handle_Donchian, 0, 0, 5, upperBuffer);
|
|
int dochian_midlle = CopyBuffer(Handle_Donchian, 1, 0, 5, middleBuffer);
|
|
int dochian_lower = CopyBuffer(Handle_Donchian, 1, 0, 5, lowerBuffer);
|
|
if(dochian_upper < 0 || dochian_lower < 0 || dochian_midlle < 0)
|
|
{
|
|
Print("Данные dochian_main не загрузились", _LastError);
|
|
SendMail(_Symbol + "Ошибка загрузки данных индикатора dochian_main ", _Symbol + " Ошибка загрузки данных индикаторов");
|
|
return;
|
|
}
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
|
////+------------------------------------------------------------------+
|
|
////| Keltner channel - smooth ATR |
|
|
////+------------------------------------------------------------------+
|
|
//
|
|
////input int inpPeriods = 20; // Keltner channel period
|
|
////input double inpMulti = 2.0; // Channel multiplicator
|
|
////input enMaTypes inpMaMethod = ma_lwma; // Keltner channel median value average method
|
|
////input ENUM_APPLIED_PRICE inpPrice = PRICE_MEDIAN; // Price
|
|
////
|
|
////double bufferUp[],bufferUpc[],bufferDn[],bufferDnc[],bufferMe[],fupu[],fupd[],fdnd[],fdnu[];
|
|
//
|
|
//int Handle_Keltner;
|
|
//
|
|
////+------------------------------------------------------------------+
|
|
////| |
|
|
////+------------------------------------------------------------------+
|
|
//void CExternalIndicators_class:: Keltner_handle(string Simbol,ENUM_TIMEFRAMES per,int inpPeriods,double inpMulti,int enMaTypes,
|
|
// ENUM_APPLIED_PRICE inpPrice ,bool ChartIndAdd)
|
|
// {
|
|
////--- Получение хэндла индикатора Donchian Channel
|
|
// Handle_Keltner=iCustom(Simbol,per,"Keltner_channel_smooth _ATR",inpPeriods,inpMulti, inpMaMethod,inpPrice);
|
|
// if(Handle_Keltner == INVALID_HANDLE)
|
|
// {
|
|
// Print("Не удалось создать описатель индикатора Handle_Keltner!");
|
|
// return;
|
|
// }
|
|
//
|
|
// if(ChartIndAdd == true)
|
|
// ChartIndicatorAdd(ChartID(), 0, Handle_Keltner);
|
|
//
|
|
// }
|
|
//
|
|
////+------------------------------------------------------------------+
|
|
////| |
|
|
////+------------------------------------------------------------------+
|
|
//void CExternalIndicators_class:: Keltner_buffer(double &bufferUp[],double &bufferDn[])
|
|
// {
|
|
// ArraySetAsSeries(bufferDn, true);
|
|
// ArraySetAsSeries(bufferUp, true);
|
|
// ArrayResize(bufferUp, 5);
|
|
// ArrayResize(bufferDn, 5);
|
|
//
|
|
// int kelner_up = CopyBuffer(Handle_Donchian, 0, 0, 5, upperBuffer);
|
|
// int kelner_dn = CopyBuffer(Handle_Donchian, 1, 0, 5, middleBuffer);
|
|
// if(kelner_up < 0 || kelner_dn < 0 )
|
|
// {
|
|
// Print("Данные kelner не загрузились", _LastError);
|
|
// SendMail(_Symbol + "Ошибка загрузки данных индикатора kelner ", _Symbol + " Ошибка загрузки данных индикаторов");
|
|
// return;
|
|
// }
|
|
// }
|
|
//+------------------------------------------------------------------+
|