//+---------------------------------------------------------------------+ //| ColorSchaffTrendCycle.mq5 | //| Copyright © 2011, EarnForex.com | //| http://www.earnforex.com/ | //+---------------------------------------------------------------------+ //| Для работы индикатора следует положить файл SmoothAlgorithms.mqh | //| в папку (директорию): каталог_данных_терминала\\MQL5\Include | //+---------------------------------------------------------------------+ #property copyright "Copyright © 2011, EarnForex.com" #property link "http://www.earnforex.com" #property description "Schaff Trend Cycle - Cyclical Stoch over Stoch over XMACD." #property description "The code adapted Nikolay Kositsin." //---- номер версии индикатора #property version "2.10" //---- отрисовка индикатора в отдельном окне #property indicator_separate_window //---- количество индикаторных буферов 2 #property indicator_buffers 2 //---- использовано всего одно графическое построение #property indicator_plots 1 //+-----------------------------------+ //| Параметры отрисовки индикатора | //+-----------------------------------+ //---- отрисовка индикатора в виде цветной гистограммы #property indicator_type1 DRAW_COLOR_HISTOGRAM //---- в качестве цветов гистограммы использованы #property indicator_color1 clrMagenta,clrMediumOrchid,clrDarkOrange,clrPeru,clrBlue,clrDodgerBlue,clrMediumSeaGreen,clrLime //---- линия индикатора - сплошная #property indicator_style1 STYLE_SOLID //---- толщина линии индикатора равна 2 #property indicator_width1 2 //---- отображение метки индикатора #property indicator_label1 "Schaff Trend Cycle" //+----------------------------------------------+ //| Параметры отображения горизонтальных уровней | //+----------------------------------------------+ //---- фиксирование верхней и нижней границ окна индикатора #property indicator_minimum -110 #property indicator_maximum +110 //+-----------------------------------+ //| Описание классов усреднений | //+-----------------------------------+ #include //+-----------------------------------+ //---- объявление переменных класса CXMA из файла SmoothAlgorithms.mqh CXMA XMA1,XMA2; //+-----------------------------------+ //| Объявление перечислений | //+-----------------------------------+ enum Applied_price_ //тип константы { PRICE_CLOSE_ = 1, //Close PRICE_OPEN_, //Open PRICE_HIGH_, //High PRICE_LOW_, //Low PRICE_MEDIAN_, //Median Price (HL/2) PRICE_TYPICAL_, //Typical Price (HLC/3) PRICE_WEIGHTED_, //Weighted Close (HLCC/4) PRICE_SIMPL_, //Simpl Price (OC/2) PRICE_QUARTER_, //Quarted Price (HLOC/4) PRICE_TRENDFOLLOW0_, //TrendFollow_1 Price PRICE_TRENDFOLLOW1_, //TrendFollow_2 Price PRICE_DEMARK_ //Demark Price }; //--- /*enum Smooth_Method - перечисление объявлено в файле SmoothAlgorithms.mqh { MODE_SMA_, //SMA MODE_EMA_, //EMA MODE_SMMA_, //SMMA MODE_LWMA_, //LWMA MODE_JJMA, //JJMA MODE_JurX, //JurX MODE_ParMA, //ParMA MODE_T3, //T3 MODE_VIDYA, //VIDYA MODE_AMA, //AMA }; */ //+-----------------------------------+ //| Входные параметры индикатора | //+-----------------------------------+ input Smooth_Method XMA_Method=MODE_EMA; // Метод усреднения гистограммы input uint Fast_XMA = 23; // Период быстрой скользящей средней input uint Slow_XMA = 50; // Период медленной скользящей средней input int XPhase=100; // Параметр усреднения скользящих средних // для JJMA изменяющийся в пределах -100 ... +100, влияет на качество переходного процесса // для VIDIA это период CMO, для AMA это период медленной скользящей input Applied_price_ AppliedPrice=PRICE_CLOSE_; // Ценовая константа /* , по которой производится расчет индикатора ( 1-CLOSE, 2-OPEN, 3-HIGH, 4-LOW, 5-MEDIAN, 6-TYPICAL, 7-WEIGHTED, 8-SIMPL, 9-QUARTER, 10-TRENDFOLLOW, 11-0.5 * TRENDFOLLOW.) */ input uint Cycle=10; // Период стохастического осциллятора input int HighLevel=+60; input int MiddleLevel=0; input int LowLevel=-60; //+-----------------------------------+ //---- объявление динамических массивов, которые будут в //---- дальнейшем использованы в качестве индикаторных буферов double STC_Buffer[]; double ColorSTC_Buffer[]; //---- int Count[]; bool st1_pass,st2_pass; double XMACD[],ST[],Factor; //---- объявление целочисленных переменных начала отсчета данных int min_rates_total,min_rates_1,min_rates_2; //+------------------------------------------------------------------+ //| пересчет позиции самого нового элемента в массиве | //+------------------------------------------------------------------+ void Recount_ArrayZeroPos(int &CoArr[],// возврат по ссылке номера текущего значения ценового ряда int Rates_total, int Bar) { //---- if(Bar>=Rates_total-1) return; //---- int numb; static int count=1; count--; //---- if(count<0) count=int(Cycle)-1; //---- for(int iii=0; iiiint(Cycle)-1) numb-=int(Cycle); CoArr[iii]=numb; } } //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ void OnInit() { //---- инициализация переменных начала отсчета данных min_rates_1=int(MathMax(XMA1.GetStartBars(XMA_Method,Fast_XMA,XPhase), XMA1.GetStartBars(XMA_Method,Slow_XMA,XPhase))); min_rates_2=min_rates_1+int(Cycle); min_rates_total=min_rates_2+int(Cycle)+1; //---- распределение памяти под массивы переменных if(ArrayResize(ST,Cycle)rates_total || prev_calculated<=0) // проверка на первый старт расчета индикатора first=0; // стартовый номер для расчета всех баров else first=prev_calculated-1; // стартовый номер для расчета новых баров //---- основной цикл расчета индикатора for(bar=first; barrates_total || prev_calculated<=0) first++; //---- основной цикл раскраски индикатора for(bar=first; bar0) { if(Sts>HighLevel) { if(dSts>=0) clr=7; else clr=6; } else { if(dSts>=0) clr=5; else clr=4; } } //---- if(Sts<0) { if(Sts