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