Project_N_1/Include/ExternalIndicators_class.mqh
super.admin fca2fc1d82 convert
2025-05-30 16:18:18 +02:00

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;
// }
// }
//+------------------------------------------------------------------+