//+------------------------------------------------------------------+ //| dynamix.mq5 | //| Copyright © 2014, Serkov Alexandr | //| serkov-alexandr@mail.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2014, Serkov Alexandr" #property link "serkov-alexandr@mail.ru" //---- номер версии индикатора #property version "1.00" //---- отрисовка индикатора в отдельном окне #property indicator_separate_window //+-----------------------------------+ //| объявление констант | //+-----------------------------------+ #define LINES_TOTAL 27 // Константа для количества линий индикатора #define RESET 0 // Константа для возврата терминалу команды на пересчёт индикатора //+-----------------------------------+ #property description "dynamix",LINES_TOTAL //---- количество индикаторных буферов #property indicator_buffers LINES_TOTAL //---- использовано всего графических построений #property indicator_plots LINES_TOTAL //+-----------------------------------+ //| Параметры отрисовки индикаторов | //+-----------------------------------+ //---- отрисовка осцилляторов в виде линий #property indicator_type1 DRAW_LINE //---- линии - штрихпунктирные кривые #property indicator_style1 STYLE_SOLID //---- толщина линий 1 #property indicator_width1 1 //+-----------------------------------+ //| объявление перечислений | //+-----------------------------------+ 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 }; //+-----------------------------------+ //| ВХОДНЫЕ ПАРАМЕТРЫ ИНДИКАТОРА | //+-----------------------------------+ input uint step=10; //шаг построения скользящих средних, оптимальный диапазон значений - от 1 до 10 input Applied_price_ IPC=PRICE_CLOSE;//ценовая константа input int Shift=0; // сдвиг индикатора по горизонтали в барах input int ColorWidth=40; //ширина цветовой палитры (изменяется от 0 до 131) //+-----------------------------------+ //---- Объявление целых переменных начала отсчёта данных int min_rates_total; double ma[LINES_TOTAL],ma_[LINES_TOTAL]; double mb[LINES_TOTAL][100],mb_[LINES_TOTAL][100]; int ind[LINES_TOTAL]={1,2,3,4,5,6,8,10,12,14,16,18,20,22,24,27,30,33,36,39,42,45,48,51,54,57,60}; //+------------------------------------------------------------------+ //| Массивы переменных для создания индикаторных буферов | //+------------------------------------------------------------------+ class CIndicatorsBuffers { public: double IndBuffer[]; }; //+------------------------------------------------------------------+ //| Создание индикаторных буферов | //+------------------------------------------------------------------+ CIndicatorsBuffers Ind[LINES_TOTAL]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ void OnInit() { //---- Инициализация переменных начала отсчёта данных min_rates_total=int(61*step); color ArrayColors[]= { //---- Black,DarkGreen,DarkSlateGray,Olive,Green,Teal,Navy,Purple,Maroon,Indigo,MidnightBlue,DarkBlue, DarkOliveGreen,SaddleBrown,ForestGreen,OliveDrab,SeaGreen,DarkGoldenrod,DarkSlateBlue,Sienna,MediumBlue, Brown,DarkTurquoise,DimGray,LightSeaGreen,DarkViolet,FireBrick,MediumVioletRed,MediumSeaGreen,Chocolate, Crimson,SteelBlue,Goldenrod,MediumSpringGreen,LawnGreen,CadetBlue,DarkOrchid,YellowGreen,LimeGreen,OrangeRed, DarkOrange,Orange,Gold,Yellow,Chartreuse,Lime,SpringGreen,Aqua,DeepSkyBlue,Blue,Magenta,Red,Gray, SlateGray,Peru,BlueViolet,LightSlateGray,DeepPink,MediumTurquoise,DodgerBlue,Turquoise,RoyalBlue,SlateBlue, DarkKhaki,IndianRed,MediumOrchid,GreenYellow,MediumAquamarine,DarkSeaGreen,Tomato,RosyBrown,Orchid,MediumPurple, PaleVioletRed,Coral,CornflowerBlue,DarkGray,SandyBrown,MediumSlateBlue,Tan,DarkSalmon,BurlyWood,HotPink,Salmon, Violet,LightCoral,SkyBlue,LightSalmon,Plum,Khaki,LightGreen,Aquamarine,Silver,LightSkyBlue,LightSteelBlue, LightBlue,PaleGreen,Thistle,PowderBlue,PaleGoldenrod,PaleTurquoise,LightGray,Wheat,NavajoWhite,Moccasin,LightPink, Gainsboro,PeachPuff,Pink,Bisque,LightGoldenrod,BlanchedAlmond,LemonChiffon,Beige,AntiqueWhite,PapayaWhip,Cornsilk, LightYellow,LightCyan,Linen,Lavender,MistyRose,OldLace,WhiteSmoke,Seashell,Ivory,Honeydew,AliceBlue, LavenderBlush,MintCream,Snow,White //---- }; int size=ArraySize(ArrayColors); size-=2; int ColorWidth_=ColorWidth; if(ColorWidth>size) ColorWidth_=size; if(ColorWidth<1) ColorWidth_=1; color Colors[]; if(ArrayResize(Colors,ColorWidth_)rates_total || prev_calculated<=0) // проверка на первый старт расчёта индикатора limit=rates_total-min_rates_total-1; // стартовый номер для расчёта всех баров else limit=rates_total-prev_calculated; // стартовый номер для расчёта новых баров //---- индексация элементов в массивах как в таймсериях ArraySetAsSeries(open,true); ArraySetAsSeries(high,true); ArraySetAsSeries(low,true); ArraySetAsSeries(close,true); //---- основной цикл расчёта индикатора for(bar=limit; bar>=0 && !IsStopped(); bar--) { //---- Вызов функции PriceSeries для получения входной цены price for(int x=0; x0; y--) mb[x][y]=mb_[x][y-1]; for(int x=0; x0; y--) mb_[x][y]=mb[x][y]; } } //---- return(rates_total); } //+------------------------------------------------------------------+ //| Получение значения ценовой таймсерии | //+------------------------------------------------------------------+ double PriceSeries ( uint applied_price,// Ценовая константа uint bar,// Индекс сдвига относительно текущего бара на указанное количество периодов назад или вперёд). const double &Open[], const double &Low[], const double &High[], const double &Close[] ) //PriceSeries(applied_price, bar, open, low, high, close) //+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+ { //---- switch(applied_price) { //---- Ценовые константы из перечисления ENUM_APPLIED_PRICE case PRICE_CLOSE: return(Close[bar]); case PRICE_OPEN: return(Open [bar]); case PRICE_HIGH: return(High [bar]); case PRICE_LOW: return(Low[bar]); case PRICE_MEDIAN: return((High[bar]+Low[bar])/2.0); case PRICE_TYPICAL: return((Close[bar]+High[bar]+Low[bar])/3.0); case PRICE_WEIGHTED: return((2*Close[bar]+High[bar]+Low[bar])/4.0); //---- case 8: return((Open[bar] + Close[bar])/2.0); case 9: return((Open[bar] + Close[bar] + High[bar] + Low[bar])/4.0); //---- case 10: { if(Close[bar]>Open[bar])return(High[bar]); else { if(Close[bar]Open[bar])return((High[bar]+Close[bar])/2.0); else { if(Close[bar]Open[bar]) res=(res+High[bar])/2; if(Close[bar]==Open[bar]) res=(res+Close[bar])/2; return(((res-Low[bar])+(res-High[bar]))/2); } //---- default: return(Close[bar]); } //---- //return(0); } //+------------------------------------------------------------------+