FOREX MT4 INDICATORS DOWNLOAD
  • Donate to us
  • MT4 INDICATORS A
  • MT4 INDICATORS B
  • MT4 INDICATORS C
  • MT4 INDICATORS D
  • MT4 INDICATORS E
  • MT4 INDICATORS F
  • MT4 INDICATORS G
  • MT4 INDICATORS H
  • MT4 INDICATORS I
  • MT4 INDICATORS J
  • MT4 INDICATORS K
  • MT4 INDICATORS L
  • MT4 INDICATORS M
  • MT4 INDICATORS N
  • MT4 INDICATORS O
  • MT4 INDICATORS P
  • MT4 INDICATORS Q
  • MT4 INDICATORS R
  • MT4 INDICATORS S
  • MT4 INDICATORS T
  • MT4 INDICATORS U
  • MT4 INDICATORS V
  • MT4 INDICATORS W
  • MT4 INDICATORS X
  • MT4 INDICATORS Y
  • MT4 INDICATORS Z
  • MT4 INDICATORS NUM
  • MT4 INDICATORS SIGN

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.


Icon

XO ATR AA7 MTF TT.mq4

1 file(s) 58.13 KB
Download


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=0; i--)
    {
     SIGMA[i]=0;  if (Signal>0) SIGMA[i] = MAIN[i]!=0 ? iMAOnArray(MAIN,Bars,sgPer,0,SigMode,i) : 0;     FLAG[i]=0;  
     //------
     //---  //enum showCD { HideThis, DOTS, LINE, HISTO };   
     if (ShowXO==2) PlotLN = true;
     //---  //enum cciCLR { ColorOFF, moreLess, crossSignal, crossZero, crossLev };
     double slotHI = (Color==1) ? MAIN[i+1] : (Color==2) ? SIGMA[i] : (Color==3) ? levZR : levHI;
     double slotLO = (Color==1) ? MAIN[i+1] : (Color==2) ? SIGMA[i] : (Color==3) ? levZR : levLO;
     //---
     if (Color!=0) setupCOLOR(PlotLN,MAIN,slotHI,slotLO,CCUP,CCDN,i,0);    else { CCUP[i]=0;  CCDN[i]=0; }
     int mns = (CrossLevel>0) ? 1 : -1;
     if (Color==4 && MAIN[i] >= -CrossLevel*mns && MAIN[i] <= CrossLevel*mns) { CCUP[i]=0;  CCDN[i]=0; }   //
     //------
     //---  
     if (WhichAlerts!=0) GetArrAlt(false,WhichAlerts,i);
     //------
     //---
     if (Once && Time[i+1]=0; i--)
//**************************************************************************//
//***                           XO ATR AA7 MTF TT                          ***
//**************************************************************************//
   
   if (WhichAlerts!=0 && (AlertsMessage || AlertsEmail || AlertsMobile || AlertsSound))   
    {
     string sufix;  //enum arrows { ArrowsOFF, arSignal50, arMoreLess, arMoreLessLV, arCrossSignal, arExtremeLV, arCross50, arCrossLev, allArrows };
     //---
     if (FLAG[SGB]==111 || FLAG[SGB]==-111) sufix = "Signal cross Center";  //Zero
     if (FLAG[SGB]==222 || FLAG[SGB]==-222) sufix = "Index cross Previous";
     if (FLAG[SGB]==333 || FLAG[SGB]==-333) sufix = "Index cross Previous on Level";
     if (FLAG[SGB]==444 || FLAG[SGB]==-444) sufix = "Index cross Signal";
     if (FLAG[SGB]==555 || FLAG[SGB]==-555) sufix = "Extremum on Level";
     if (FLAG[SGB]==777 || FLAG[SGB]==-777) sufix = "Index cross Center";
     if (FLAG[SGB]==888 || FLAG[SGB]==-888) sufix = "Index cross Level ±"+(string)CrossLevel;
     //---  ///WindowExpertName()+
     string messageUP = "XO ATR TT:  "+_Symbol+", "+stringMTF(_Period)+"  >>  " +sufix+ " UP  >>  BUY";    
     string messageDN = "XO ATR TT:  "+_Symbol+", "+stringMTF(_Period)+"  <<  " +sufix+ " DN  <<  SELL";   
     //---
     if (TimeBar!=Time[0] && FLAG[SGB] > 0) {
         if (AlertsMessage) Alert(messageUP);
         if (AlertsEmail)   SendMail(_Symbol,messageUP);
         if (AlertsMobile)  SendNotification(messageUP);
         if (AlertsSound)   PlaySound(SoundFile);   //"stops.wav"   //"news.wav"
         TimeBar=Time[0]; }  //return(0);
     //---
     else 
     if (TimeBar!=Time[0] && FLAG[SGB] < 0) {
         if (AlertsMessage) Alert(messageDN);
         if (AlertsEmail)   SendMail(_Symbol,messageDN);
         if (AlertsMobile)  SendNotification(messageDN);
         if (AlertsSound)   PlaySound(SoundFile);   //"stops.wav"   //"news.wav"
         TimeBar=Time[0]; }  //return(0);
    }  ///*конец* АЛЕРТОВ для всех.....        
//**************************************************************************//
//**************************************************************************//
//------
return(0);
}
//**************************************************************************//
//***                           XO ATR AA7 MTF TT                          ***
//**************************************************************************//
void GetArrAlt(bool ArrAlt, int Which, int i)
{  //enum arrows { ArrowsOFF, arSignal50, arMoreLess, arMoreLessLV, arCrossSignal, arExtremeLV, arCross50, arCrossLev, allArrows };
   int Bar = (ArrAlt) ? ARB : 0;
   //---
   if (Which==1 || Which==8)
    {
     if (SIGMA[i+Bar] > levZR && SIGMA[i+1+Bar] <= levZR)  { if (ArrAlt)  DrawARROW(i, false, "ArrUP");    if (!ArrAlt)  FLAG[i] = 111; }
     if (SIGMA[i+Bar] < levZR && SIGMA[i+1+Bar] >= levZR)  { if (ArrAlt)  DrawARROW(i, true, "ArrDN");     if (!ArrAlt)  FLAG[i] = -111; }  
    }
   //---  
   if (Which==2 || Which==8)
    {
     if (MAIN[i+Bar] > MAIN[i+1+Bar] && MAIN[i+1+Bar] <= MAIN[i+2*MTK+Bar])  { if (ArrAlt) DrawARROW(i, false, "ArrUP");    if (!ArrAlt)  FLAG[i] = 222; }
     if (MAIN[i+Bar] < MAIN[i+1+Bar] && MAIN[i+1+Bar] >= MAIN[i+2*MTK+Bar])  { if (ArrAlt) DrawARROW(i, true, "ArrDN");     if (!ArrAlt)  FLAG[i] = -222; }  
    }
   //---
   if (Which==3 || Which==8)
    {
     if (MAIN[i+Bar] >= MAIN[i+1+Bar] && MAIN[i+1+Bar] <= MAIN[i+5*MTK+Bar] && MAIN[i+6*MTK+Bar] <= MAIN[i+9*MTK+Bar] && MAIN[i+Bar] <= levLO)  { if (ArrAlt) DrawARROW(i, false, "ArrUP");    if (!ArrAlt)  FLAG[i] = 333; }
     if (MAIN[i+Bar] <= MAIN[i+1+Bar] && MAIN[i+1+Bar] >= MAIN[i+5*MTK+Bar] && MAIN[i+6*MTK+Bar] >= MAIN[i+9*MTK+Bar] && MAIN[i+Bar] >= levHI)  { if (ArrAlt) DrawARROW(i, true, "ArrDN");     if (!ArrAlt)  FLAG[i] = -333; }  
    }
   //---  
   if (Which==4 || Which==8)
    {
     if (MAIN[i+Bar] > SIGMA[i+Bar] && MAIN[i+1+Bar] <= SIGMA[i+1+Bar])  { if (ArrAlt)  DrawARROW(i, false, "ArrUP");    if (!ArrAlt)  FLAG[i] = 444; }
     if (MAIN[i+Bar] < SIGMA[i+Bar] && MAIN[i+1+Bar] >= SIGMA[i+1+Bar])  { if (ArrAlt)  DrawARROW(i, true, "ArrDN");     if (!ArrAlt)  FLAG[i] = -444; }  
    }
   //---   
   if (Which==5 || Which==8)
    {
     int y = iBarShift(NULL,MTF,Time[i],false);
     int x = y;  if (i MAIN[i+3*TFK+Bar] &&*/ MAIN[i+2*MTK+Bar] > MAIN[i+3*MTK+Bar] && MAIN[i+1*MTK+Bar] > MAIN[i+2*MTK+Bar] && MAIN[i+1*MTK+Bar] >= MAIN[i+Bar] && MAIN[i+1*MTK+Bar] >= levHI)  { if (ArrAlt && x!=y) DrawARROW(i, true, "ArrDN");     if (!ArrAlt)  FLAG[i] = -555; }  
    }
   //---   
   if (Which==6 || Which==8)
    {
     if (MAIN[i+Bar] > levZR && MAIN[i+1+Bar] <= levZR)  { if (ArrAlt)  DrawARROW(i, false, "ArrUP");    if (!ArrAlt)  FLAG[i] = 777; }
     if (MAIN[i+Bar] < levZR && MAIN[i+1+Bar] >= levZR)  { if (ArrAlt)  DrawARROW(i, true, "ArrDN");     if (!ArrAlt)  FLAG[i] = -777; }  
    }
   //---   
   if (Which==7 || Which==8)
    {
     if (MAIN[i+Bar] > levLO && MAIN[i+1+Bar] <= levLO)  { if (ArrAlt)  DrawARROW(i, false, "ArrUP");    if (!ArrAlt)  FLAG[i] = 888; }
     if (MAIN[i+Bar] < levHI && MAIN[i+1+Bar] >= levHI)  { if (ArrAlt)  DrawARROW(i, true, "ArrDN");     if (!ArrAlt)  FLAG[i] = -888; }  
    }
}
//**************************************************************************//
//***                              SSA Impulsive                           ***
//**************************************************************************//
bool DrawARROW(int i, bool DOWN, string Name)  //, int ARRCOD, int ARRSIZE)  ///,  double gap, color ARRCOLOR)
{
   if (ShowArrows==0) return(false);
//------
   int wind = ShowArrows==1 ? WindowFind(IndukName) : 0;
//------
   //int DGTS = Digits;  if (Digits==3 || Digits==5) DGTS-=1;
   string objName = PREF+Name+(string)i;  //TimeToStr(Time[i],TIME_MINUTES)+"_"+DoubleToStr(Close[i],DGTS);
   //double Gap = 2.0*iATR(NULL,0,20,z)/4.0;
   double gap = ShowArrows==1 ? ArrowGap*10 : ArrowGap*_Point*pow(10,Digits%2);  //(Digits%2==1) ? _Point*10 : _Point;  //*_Point;   if (Digits==3 || Digits==5) gap*=10;
   //---  // имя для Стрелки 
   if (!ObjectCreate(0,objName,OBJ_ARROW, wind, Time[i], 0)) return(false);
   //---  // создать стрелку по заданным координатам    
   //ObjectSetInteger(0,objName,OBJPROP_ARROWCODE, ARRCOD);      // код стрелки 
   //ObjectSetInteger(0,objName,OBJPROP_ANCHOR, ANCHOR_CENTER);  // угол привязки стрелки
   //ObjectSetInteger(0,objName,OBJPROP_COLOR, ARRCOLOR);        // цвет стрелки 
   ObjectSetInteger(0,objName,OBJPROP_STYLE, STYLE_SOLID);       // стиль окаймляющей линии 
   ObjectSetInteger(0,objName,OBJPROP_WIDTH, ArrowSize);         // размер стрелки
   ObjectSetInteger(0,objName,OBJPROP_BACK, false);        // на заднем плане 
   ObjectSetInteger(0,objName,OBJPROP_SELECTABLE, false);  // объект можно выделять
   ObjectSetInteger(0,objName,OBJPROP_SELECTED, false);    // выделить для перемещений 
   ObjectSetInteger(0,objName,OBJPROP_HIDDEN, true);       // скрыт в списке объектов 
   ObjectSetInteger(0,objName,OBJPROP_ZORDER, 0);          // приоритет на нажатие мышью 
//------   enum showAR { HideArrows, aINSIDE, aCENTER, aOUTSIDE };
   double HIGH = ShowArrows==1 ? MAIN[i]+gap : High[i]+gap;    //if (ShowArrows==2) HIGH=(High[i]+Low[i])/2;  if (ShowArrows==1) HIGH=Low[i] -gap;
   double LOW  = ShowArrows==1 ? MAIN[i]-gap : Low[i]-gap;     //if (ShowArrows==2) LOW =(High[i]+Low[i])/2;  if (ShowArrows==1) LOW =High[i]+gap;
//------
   if (DOWN) {
              ObjectSetDouble(0,objName,OBJPROP_PRICE1, HIGH); 
              ObjectSetInteger(0,objName,OBJPROP_ARROWCODE, CodeSELL);   
              ObjectSetInteger(0,objName,OBJPROP_ANCHOR, ANCHOR_BOTTOM); 
              ObjectSetInteger(0,objName,OBJPROP_COLOR, ColorSELL);  
              ObjectSetText(objName, "setup for SELL", 10, "Verdana", clrRed); } 
//------
   if (!DOWN) {
               ObjectSetDouble(0,objName,OBJPROP_PRICE1, LOW); 
               ObjectSetInteger(0,objName,OBJPROP_ARROWCODE, CodeBUY);
               ObjectSetInteger(0,objName,OBJPROP_ANCHOR, ANCHOR_TOP); 
               ObjectSetInteger(0,objName,OBJPROP_COLOR, ColorBUY);   
               ObjectSetText(objName, "setup for BUY", 10, "Verdana", clrWhite); } 
//------
return(true);
}
//**************************************************************************//
//***                           XO ATR AA7 MTF TT                          ***
//**************************************************************************//
double trend[][4];
//------
void setupCOLOR(bool IfLine, double& main[], double lvLO, double lvHI, double& trendUP[], double& trendDN[], int i, int NB)
{
   if (ArrayRange(trend,0)!=Bars)  ArrayResize(trend,Bars);     
   trendUP[i]=0;  trendDN[i]=0; 
   //------
   int FB = (IfLine) ? 1 : 0;
   trend[i][NB] = trend[i+1][NB];    
   //------
   if (main[i] > lvLO) trend[i][NB] = 888;     //>level[i+1]
   if (main[i] < lvHI) trend[i][NB] = -888;
   //------
   if (trend[i][NB] > 0) { trendUP[i]=main[i];  if (trend[i+FB][NB]<0) trendDN[i]=0;  trendUP[i+FB]=main[i+FB]; }     
   if (trend[i][NB] < 0) { trendDN[i]=main[i];  if (trend[i+FB][NB]>0) trendUP[i]=0;  trendDN[i+FB]=main[i+FB]; }   
}
//**************************************************************************//
//***                           XO ATR AA7 MTF TT                          ***
//**************************************************************************//
string stringMTF(int perMTF)
{  
   if (perMTF==0)      perMTF=_Period;
   if (perMTF==1)      return("M1");
   if (perMTF==5)      return("M5");
   if (perMTF==15)     return("M15");
   if (perMTF==30)     return("M30");
   if (perMTF==60)     return("H1");
   if (perMTF==240)    return("H4");
   if (perMTF==1440)   return("D1");
   if (perMTF==10080)  return("W1");
   if (perMTF==43200)  return("MN1");
   if (perMTF== 2 || 3  || 4  || 6  || 7  || 8  || 9 ||       /// нестандартные периоды для грфиков Renko
               10 || 11 || 12 || 13 || 14 || 16 || 17 || 18)  return("M"+(string)_Period);
//------
   return("Period error!");  //("Ошибка периода");
}
//**************************************************************************//
//***             X15 DynZone Bands LinReg Divergence TT+VRD               ***
//**************************************************************************//
void interpolate(double& target[], int interTF, int interType, int i)
{ //взято из Step one more Average 2-3 MTF    //enum Iterpolation { intNO, intLinear, intQuad };
   int bar = iBarShift(NULL,interTF,Time[i]); 
   double x0=0, x1=1, x2=2, y0=0, y1=0, y2=0;
//------
   if (interType==intQuad) {
       y0 = target[i];                                                
       y1 = target[(int)MathMin(iBarShift(NULL,0,iTime(NULL,interTF,bar+0))+1,Bars-1)]; 
       y2 = target[(int)MathMin(iBarShift(NULL,0,iTime(NULL,interTF,bar+1))+1,Bars-1)]; }
//------
   datetime time = iTime(NULL,interTF,bar);
   int n, k;
//------
   for (n=1; (i+n)=time; n++) continue;
   for (k=1; (i+n)=0; length--)
    {
     int CHAR = StringGetChar(s, length);
     if ((CHAR > 96 && CHAR < 123) || (CHAR > 223 && CHAR < 256))
     s = StringSetChar(s, length, CHAR - 32);
     else if (CHAR > -33 && CHAR < 0)
     s = StringSetChar(s, length, CHAR + 224);
    }
return(s);
} 
//**************************************************************************//
//***                           XO ATR AA7 MTF TT                          ***
//**************************************************************************//
xma.mq4 xpMA.mq4

Related Posts

METATRADER4X

XPMA CBA MTF TT.mq4

METATRADER4X

xpMA.mq4

METATRADER4X

xma.mq4

METATRADER4X

xb4d.mq4

How to use this site.
  1. Subscribe YouTube
  2. Subscribe Facebook
  3. Subscribe Instagram
  4. Download MT4
  5. Watch Youtube Video
  6. Downliad Indicator and Try Trading
  7. Donate to us for update

Recent News

  • i-g-cci2.mq4
  • haosvisual_27jk8.mq4
  • HamaSystem separate window.ex4
  • HalfTrend 2.mq4
  • Gitalovsa.mq4

Donate