XO ATR AA7 MTF TT.mq4
XO ATR AA7 MTF TT.mq4 FOREX MetaTrader4 Indicators Download
XO ATR AA7 MTF TT.mq4 download link will appear after 20 seconds.
XO ATR AA7 MTF TT.mq4 Programming source code.
//**************************************************************************// //*** XO ATR AA7 MTF TT *** //**************************************************************************// #property description "XO или принцип ''крестики-нолики'', где изначально задаётся размер коробки в пунктах," #property description "который должна пройти Цена, чтобы индикатор построил новый уровень гистограммы." #property description "XO не станет, давать сигнал в ту сторону, куда Цена, фактически не идёт," #property description "в XO нет усреднения массива данных, то есть решение Buy/Sell принимается за один ход." #property description " " #property description "Индикатор НЕ перерисовывается в режиме MTF если RePaintMTF=false!!!" //"НЕ перерисовывается! в режиме MTF." #property description "ARROWBAR и SIGNALBAR скорректированы для MTF." #property description " " //* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * " #property version "5.13" //прежняя "5.22" //#property strict #property indicator_separate_window //chart_window #property indicator_buffers 4 //------ #property indicator_color1 clrMediumPurple //MediumOrchid //LightSkyBlue //DodgerBlue //RoyalBlue // #property indicator_color2 clrLightSkyBlue //LimeGreen //SpringGreen //LightSteelBlue //LightSkyBlue //LimeGreen //MediumSeaGreen //PaleVioletRed #property indicator_color3 clrLightPink //Coral //HotPink //LightCoral //LightPink //Red //Crimson //DimGray #property indicator_color4 clrLime //Magenta //LightCyan //GreenYellow //Lime //Gold //------ #property indicator_style1 STYLE_DASH #property indicator_style2 STYLE_DASH #property indicator_style3 STYLE_DASH #property indicator_style4 STYLE_DOT //------ //#property indicator_width1 0 //#property indicator_width2 0 //#property indicator_width3 0 //#property indicator_width4 0 //------ //#property indicator_level1 0 //#property indicator_level2 -100 //#property indicator_level3 100 #property indicator_levelcolor clrDimGray //C'85,86,88' //DarkSlateGray //DarkSlateBlue //SteelBlue //DarkGreen //SlateGray // // #property indicator_levelstyle STYLE_DOT //**************************************************************************// //*** Custom indicator ENUM settings *** //**************************************************************************// enum Iterpolation { intNO,/*No interpolation*/ intLinear,/*Linear Interpolation*/ intQuad/*Quadratic Interpolation*/ }; enum arrows { ArrowsOFF,/*OFF*/ arSignal50,/*Signal cross Center*/ arMoreLess,/*Index more/less Previous*/ arMoreLessLV,/*Index more/less Previous on Level*/ arCrossSignal,/*Index cross Signal*/ arExtremeLV,/*Index Extremum on Level */ arCross50,/*Index cross Center*/ arCrossLev,/*Index cross Level*/ allArrows/*All setups*/ }; enum showAR { arrowsOFF,/*Arrows OFF*/ onInduk,/*on Indicator*/ onChart/*on Chart*/ }; //{ HideArrows,/*Hide Arrows*/ INSIDE,/**/ CENTER,/**/ OUTSIDE/**/ }; //enum showAR { aDoNotCALC, HideArrows, aOnCHART, aOnINDIK }; enum showCD { HideThis, DOTS, LINE, HISTO }; enum cciCLR { ColorOFF, moreLess, crossSignal, crossZero, crossLev }; //**************************************************************************// //*** Custom indicator input parameters *** //**************************************************************************// extern int History = 3456; //288=D1/M5 //576=D2/M5; //864=D3/M5; //1152=D4/M5; //1440=D5/M5; extern bool RePaintMTF = true; //true; extern ENUM_TIMEFRAMES TimeFrame = PERIOD_CURRENT; //extern Iterpolation Interpolate = intNO; //intQuad; //true; //extern bool SignalMTF = true; extern string PAIR = ""; extern int ATRPeriod = 15; //12; //14; //288 extern double BlockPip = 0.0; extern bool ShowSignal = true; extern int Signal = 0; //9; extern ENUM_MA_METHOD SigMode = MODE_SMA; //MODE_SMMA; // //extern ENUM_MA_METHOD CCIMode = MODE_SMA; //tern ENUM_APPLIED_PRICE CCIPrice = PRICE_TYPICAL; //PRICE_WEIGHTED; extern int CrossLevel = -10; extern arrows WhichArrows = arCrossLev; //enum arrows { ArrowsOFF, arSignal50, arMoreLess, arMoreLessLV, arCrossSignal, arExtremeLV, arCross50, arCrossLev, allArrows }; extern showAR ShowArrows = onChart; //OUTSIDE; //IN extern int ARROWBAR = 0; //На каком баре рисовать Стрелку: =0 - рисовать на текущем (до закрытия - может исчезнуть) extern int ArrowGap = 3; //Дистанция от High/Low свечи extern color ColorBUY = clrDeepSkyBlue, //White, //LightBlue, //LimeGreen, //SpringGreen, //LightCyan, //Aqua, // //DarkTurquoise, //FireBrick, //Magenta, //Aqua, // ColorSELL = clrHotPink; //Red; //HotPink; //LightSalmon; //Gold; // //HotPink; //Orange; //SlateBlue; //DodgerBlue; //Lavender; //Gold; // extern int CodeBUY = 233, CodeSELL = 234, ArrowSize = 1; extern arrows WhichAlerts = arCrossLev; //arCross50; //allAlerts; // extern int SIGNALBAR = 1; extern bool AlertsMessage = true, //false, AlertsSound = true, //false, AlertsEmail = false, AlertsMobile = false; extern string SoundFile = "alert.wav"; //"expert.wav"; //"stops.wav" //"alert2.wav" //"news.wav"; // extern showCD ShowXO = HISTO; //DOTS; //LINE; // extern cciCLR Color = crossZero; //crossSignal; // extern int Size = 2; extern int DotCode = 167; //159; //**************************************************************************// //*** Custom indicator buffers *** //**************************************************************************// double CCUP[], CCDN[], MAIN[], SIGMA[], FLAG[], TREND[], levZR, levLO, levHI; int ccPer, prPer, sgPer, MTF, TFK, MTK, MAX, ARB, SGB; bool Once=false; string TWIN, PREF, IndukName; bool PlotLN=false; datetime TimeArr=0, TimeBar=0; //**************************************************************************// //*** Custom indicator initialization function *** //**************************************************************************// int init() { TimeFrame = fmax(TimeFrame,_Period); //strTFR = StringSubstr(EnumToString(TimeFrame),7); MTF = (RePaintMTF) ? TimeFrame : _Period; TFK = TimeFrame/_Period; MTK = MTF/_Period; //(Interpolate==0) ? MTF/_Period : 1; //--- TWIN = (PAIR=="") ? _Symbol : StringUpperCase(PAIR); //--- ccPer = (RePaintMTF) ? fmax(ATRPeriod,1) : fmax(ATRPeriod*TFK,1*TFK); prPer = (RePaintMTF) ? 1 : 1*TFK; if (Signal>0) sgPer = Signal*TFK; //(SignalMTF) ? Signal*TFK : Signal; //--- MAX = ccPer+sgPer; ARB = ARROWBAR*MTF/_Period; SGB = SIGNALBAR*MTF/_Period; //--- //------ IndicatorBuffers(6); IndicatorDigits(0); //(Digits-Digits%2); //enum showCD { DOTS, LINE, HISTO }; //------ 9 распределенных буфера индикатора //--- настройка параметров отрисовки //--- пропуск отрисовки первых баров int HST = (ShowXO==0) ? DRAW_NONE : (ShowXO==1) ? DRAW_ARROW : (ShowXO==2) ? DRAW_LINE : DRAW_HISTOGRAM; SetIndexBuffer(0,MAIN); SetIndexStyle(0,HST,EMPTY,Size); SetIndexArrow(0,DotCode); SetIndexBuffer(1,CCUP); SetIndexStyle(1,HST,EMPTY,Size); SetIndexArrow(1,DotCode); SetIndexBuffer(2,CCDN); SetIndexStyle(2,HST,EMPTY,Size); SetIndexArrow(2,DotCode); //--- int SGT = (ShowSignal) ? DRAW_LINE : DRAW_NONE; SetIndexBuffer(3,SIGMA); SetIndexStyle(3,SGT); //------ 9 дополнительных буфера индикатора, используются для подсчета SetIndexBuffer(4,FLAG); SetIndexStyle(4,DRAW_NONE); SetIndexBuffer(5,TREND); SetIndexStyle(5,DRAW_NONE); //------ настройка параметров отрисовки уровней levZR = (Bid>-1) ? 0 : 0; //50; levLO = (Bid>-1) ? -CrossLevel : -CrossLevel; levHI = (Bid>-1) ? CrossLevel : CrossLevel; //100-CrossLevel; //--- SetLevelValue(0,levZR); SetLevelValue(1,levLO); SetLevelValue(2,levHI); ////------ значение 0 отображаться не будет // for (int i=0; i<=16; i++) { // //SetIndexStyle(i,DRAW_LINE); //--- настройка параметров отрисовки // SetIndexEmptyValue(i,0.0); //--- значение 0 отображаться не будет // //SetIndexShift(11,SlowShift); //--- установка сдвига линий при отрисовке // if (History>MAX) SetIndexDrawBegin(i,Bars-History); //--- пропуск отрисовки первых баров // if (History<=MAX) SetIndexDrawBegin(i,MAX*1); } //--- пропуск отрисовки первых баров //------ отображение в DataWindow SetIndexLabel(0,TWIN+", "+stringMTF(TimeFrame)+": XO ["+(string)ATRPeriod+"~"+DoubleToStr(BlockPip,1)+"]"); SetIndexLabel(1,TWIN+", "+stringMTF(TimeFrame)+": XO UP ["+(string)ATRPeriod+"~"+DoubleToStr(BlockPip,1)+"]"); //-"+(string)s1+"]"); SetIndexLabel(2,TWIN+", "+stringMTF(TimeFrame)+": XO DN ["+(string)ATRPeriod+"~"+DoubleToStr(BlockPip,1)+"]"); //-"+(string)s1+"]"); SetIndexLabel(3,TWIN+", "+stringMTF(TimeFrame)+": Signal ["+(string)Signal+"]"); //------ "короткое имя" для DataWindow и подокна индикатора + и/или "уникальное имя индикатора" //+StringSubstr(EnumToString(MAMode),5)+ //+DoubleToStr(Deviations,1)+ IndukName = TWIN+", "+stringMTF(TimeFrame)+": XO ATR TT ["+(string)ATRPeriod+"~"+DoubleToStr(BlockPip,1)+">"+(string)Signal+"] "; IndicatorShortName(IndukName); //--- PREF = TWIN+", "+stringMTF(TimeFrame)+": XO'TT ["+(string)ATRPeriod+"~"+DoubleToStr(BlockPip,1)+">"+(string)Signal+"] "; //**************************************************************************// //**************************************************************************// //------ return(0); } //**************************************************************************// //*** Custom indicator deinitialization function *** //**************************************************************************// ///void OnDeinit(const int reason) { ObjectsDeleteAll(0,PREF,-1,-1); } int deinit() { ALL_OBJ_DELETE(); Comment(""); return(0); } //+++======================================================================+++ void ALL_OBJ_DELETE() { string name; for (int s=ObjectsTotal()-1; s>=0; s--) { name=ObjectName(s); if (StringSubstr(name,0,StringLen(PREF))==PREF) ObjectDelete(name); } } //+++======================================================================+++ datetime LastBarOpenTime=0; //------ bool NewBarTF(int period) { datetime BarOpenTime=iTime(NULL,period,0); if (BarOpenTime!=LastBarOpenTime) { LastBarOpenTime=BarOpenTime; return (true); } else return (false); } //+++======================================================================+++ datetime dtmPrevTime; //--- bool blnNewBar(ENUM_TIMEFRAMES TF) { if (dtmPrevTime==iTime(NULL,TF,0)) return(false); dtmPrevTime=iTime(NULL,TF,0); return(true); } //**************************************************************************// //*** Custom indicator iteration function *** //**************************************************************************// double setATR=0, Kir=0, HI=0, LO=0, curCO=0, xoUP=0, xoDN=0, kkUP=0, kkDN=0; //--- int start() { int i, y, CountedBars=IndicatorCounted(); if (CountedBars<0) return(-1); //Стандарт+Tankk+Вариант!!! if (CountedBars>0) CountedBars--; int limit=fmin(Bars-3,Bars-3-MAX); //fmin(Bars-CountedBars,Bars-3-MAX); //+MAX*10*TFK if (History>MAX) limit=fmin(Bars-3,History+MAX*21); //fmin(History+MAX,Bars-3-MAX); //ALL_OBJ_DELETE(); } //limit+=MAX; Comment(limit); //------ for (i=0; i<6; i++) { SetIndexEmptyValue(i,0.0); //--- значение 0 отображаться не будет if (History>MAX) SetIndexDrawBegin(i,Bars-History); //--- пропуск отрисовки первых баров if (History<=MAX) SetIndexDrawBegin(i,MAX*3); } //--- пропуск отрисовки первых баров //**************************************************************************// //**************************************************************************// for (i=limit; i>=0; i--) //double GetXO(string TWIN, int MTF, int atrPer, double pipSZ, int coPer, int i) { y = (RePaintMTF) ? iBarShift(TWIN,MTF,Time[i],false) : i; //--- TREND[i]=0; MAIN[i]=0; //MAIN[i] = GetXO(TWIN,MTF,ccPer,BlockPip,prPer,y); //iCCI(TWIN,MTF,ccPer,CCIPrice,y); // /sqrt(iVolume(TWIN,MTF,y)) /pow(MarketInfo(TWIN,MODE_POINT),1.0) *100; //( iMA(NULL,tf1,f1,0,MAMode,MAPrice,y1) - iMA(NULL,tf1,s1,0,MAMode,MAPrice,y1) ) /_Point; //--- TREND[i] = TREND[i+1]; //--- setATR = BlockPip>0 ? BlockPip*MarketInfo(TWIN,MODE_POINT)*pow(10,(int)MarketInfo(TWIN,MODE_DIGITS)%2) : iATR(TWIN,MTF,ccPer,y); //(iMA(NULL,0,15,0,0,2,i) - iMA(NULL,0,15,0,0,3,i) ) *1; //0.05; // //--- if (Kir < 1) { HI = iMA(TWIN,MTF,prPer,0,MODE_SMA,PRICE_CLOSE,y); //Close[i]; LO = iMA(TWIN,MTF,prPer,0,MODE_SMA,PRICE_CLOSE,y); //Close[i]; Kir = 1; } //--- curCO = iMA(TWIN,MTF,prPer,0,MODE_SMA,PRICE_CLOSE,y); //Close[i]; //--- if (curCO > (HI+setATR)) { kkUP = setATR!=0 ? ceil((curCO-(HI+setATR))/setATR) : MarketInfo(TWIN,MODE_POINT)/100; Kir = Kir+1; HI = curCO; LO = curCO - setATR; xoUP = xoUP + kkUP; xoDN = 0; TREND[i] = xoUP; } //--- if (curCO < (LO-setATR)) { kkDN = setATR!=0 ? ceil(((LO-setATR)-curCO)/setATR) : MarketInfo(TWIN,MODE_POINT)/100; Kir = Kir+1; LO = curCO; HI = curCO + setATR; xoDN = xoDN - kkDN; xoUP = 0; TREND[i] = xoDN; } //--- MAIN[i] = TREND[i] *10; ////------ //"новый вариант" от mladen'a == Quadratic лучше сглаживает.... //if (Interpolate==0 || (i>0 && y==iBarShift(NULL,MTF,Time[i-1]))) continue; // interpolate(MAIN,MTF,Interpolate,i); } //**************************************************************************// //*** XO ATR AA7 MTF TT *** //**************************************************************************// if (blnNewBar(1)) ALL_OBJ_DELETE(); //--- if (TimeArr