Daiyukai 发表于 2024-10-14 13:10:19

找X-XARDFX-38源码


bigwin 发表于 2024-10-15 11:44:23


#property indicator_chart_window
#property indicator_buffers 32
#define Version "XARDFX-38"
string ID="Xard>",tFx,TFx="当前时间框架",TimeFrame="当前时间框架";
//+------------------------------------------------------------------------------------------------------------------+
#include <WinUser32.mqh>
extern string Indicator = Version;
extern string STR00 = "<<<==== 图表设置 ====>>>";
enum menuupdatemode {UpdatePerSecond, UpdatePerMilliseconds}; // 更新模式
extern menuupdatemode UpdateMode = UpdatePerSecond; // 每秒更新
extern int UpdateEveryXseconds = 1, UpdateEveryXmilliseconds = 1; // 每 X 秒/毫秒更新
extern bool AutoRefresh = false; // 自动刷新
extern ENUM_TIMEFRAMES RefreshPeriod = PERIOD_M15; // 刷新周期为15分钟
int hWindow = 0, oldBars = 0;
extern bool AutoArrangeChart = true, cleanChart = false; // 自动整理图表
extern color chartBackgroundColor = C'162,162,162', chartForegroundColor = clrBlack, // 背景颜色和前景颜色
             chartGridColor = clrDimGray, chartBarUpColor = clrBlue, chartBarDownColor = clrRed,
             chartBullCandleColor = clrBlue, chartBearCandleColor = clrRed,
             chartLineGraphColor = clrNONE, charttradeEntryColor = clrLimeGreen,
             chartAskLineColor = clrOrangeRed, charttradeLevelColor = clrOrangeRed;
//+------------------------------------------------------------------------------------------------------------------+
string STR01 = "<<<==== TMA1 设置 ====>>>";
bool showTMA1 = false;
int TMA1per = 28, TMA1atr = 100; // TMA1周期和ATR
double TMA1atrMulti = 2.618;
double TMA1[], TMA1up[], TMA1dn[], TMA1bandUp[], TMA1bandDn[];
//+------------------------------------------------------------------------------------------------------------------+
string STR02 = "<<<==== TMA2 设置 ====>>>";
bool showTMA2 = true, Extrapolate = true; // 是否显示TMA2并进行推断
int TMA2per = 28, TMA2atr = 100;
ENUM_APPLIED_PRICE TMA2price = PRICE_WEIGHTED; // 使用加权价格
double TMA2atrMulti = 2.618;
double TMA2[], TMA2up[], TMA2dn[], TMA2bandUp[], TMA2bandDn[];
double slope[], trend1[], trend2[];
//+------------------------------------------------------------------------------------------------------------------+
string STR03 = "<<<==== 色带设置 ====>>>";
bool showRIBBON = true;
int barWidth = 4;
double MA1[], MA2[], MA3[], MA4[];
color RibColUP = C'30,144,255', RibColDN = C'255,85,160', LineCol = C'120,140,120';
//+------------------------------------------------------------------------------------------------------------------+
string STR04 = "<<<==== 信号灯设置 ====>>>";
bool showSemafor = true;
int Period2 = 34, Period3 = 84;
string DevStep2 = "0,5", DevStep3 = "0,5";
color cU, cD;
int S2size = 4, S3size = 5, S2kod = 108, S3kod = 162;
int HPeriod, ZPeriod, Dev2, Dev3, Stp2, Stp3;
double HPup[], HPdn[], ZPup[], ZPdn[], ZZdelta, ZZPoint, deltaPips = 0.05;

//+------------------------------------------------------------------------------------------------------------------+
       string STR05                      = "<<<==== Open Line Settings ====>>>";
         bool showOpenline               = true;
       double TimeShiftMins=0,BufPOL,POLb[],POL0[],POL1[],VAL; int tFrame=0; datetime StartTime;
//+------------------------------------------------------------------------------------------------------------------+
       string STR06                      = "<<<==== HA Settings ====>>>";
         bool showHA                     = false;
      color cBullish                   = clrBlue,cBearish=clrRed;
       double haOpen[],haClose[],haHighLow[],haLowHigh[]; int getChartScale=WRONG_VALUE;
//+------------------------------------------------------------------------------------------------------------------+
       string STR07                      = "<<<==== Trend Line Settings ====>>>";
         bool showTREND                  = true;
      color TRENDbgdclr                = C'100,100,100',
            TRENDupclr               = clrDeepSkyBlue,
            TRENDdnclr               = clrViolet;
          int TRENDper                   = 7,
            TRENDtf                  = 0,
            TRENDshft                  = 0,
            TRENDmode                  = MODE_SMMA,
            TRENDtype                  = PRICE_CLOSE;
         bool returnBars,calculateTREND; double TREND[],TRENDbgd[],TRENDdna[],TRENDdnb[],trend[],ccitrend[];
//+------------------------------------------------------------------------------------------------------------------+
       string STR08                      = "<<<==== InfoBOX Settings ====>>>";
         bool showINFOBOX                = true,showSpotLight=true;
      color PanelBackColor             = C'40,40,40',PanelForeColor=C'20,20,20',PanelBorderColor=C'120,120,120';
          int PanelBorderWidth         = 1,InfoBoxCorner=1,Window=0; int posLR=6,posUD=-20,tsize=19;
      color Boxbgd                     = C'30,40,50',Panelcol=clrSnow;
       double DecNos,CLOSE,myPoint,mPoint,OpenToday,CloseToday,ADR1,ADR5,ADR10,ADR20,ADRavg;
       double SetPoint(){if(Digits<4) mPoint=0.01; else mPoint=0.0001; return(mPoint);}
      color textcolUP=clrSnow,textcolDN=clrSnow,textcolWT=clrSnow,Panetpgd2=C'40,50,60';
#define RedLight -1
#define OverBoughtLight 0
#define OverSoldLight 1
#define GreenLight 2
#define OrangeLight 3
#define PowerFailure -999
//+------------------------------------------------------------------------------------------------------------------+
       string STR09                      = "<<<==== Symbol Header Settings ====>>>";
         bool showSymbolHeader         = true;int LR=310,UD=-10,HDRsize=50;
//+------------------------------------------------------------------------------------------------------------------+
       string STR10                      = "<<<==== Xmath Settings ====>>>";
         bool showXmath                  = true;
double dmml=0,dvtl=0,sumx=0,v1x=0,v2x=0,mn=0,mx=0,x1=0,x2=0,x3=0,x4=0,x5=0,x6=0,y1=0,y2=0,y3=0,y4=0,y5=0,y6=0,
   tx=0,octave=0,fractal=0,rangex=0,finalH=0,finalL=0,mmlx;string ln_txt,ln_tx,buff_str="";
   int Px=64,StepBackx=0,bn_v1x=0,bn_v2x=0,OctLinesCnt=13,mml_thk=8,mml_clr,mml_shft=3,nTime=0,CurPeriod=0,
   nDigits=0,frametemp=0,f=0,gb=0,gbT=0,mP=0,lperiod=0,d=0,ts=0,mml_wdth;
//+------------------------------------------------------------------------------------------------------------------+
       string STR11                      = "<<<==== Bid Ratio Settings ====>>>";
         bool showD1                     = true;
          int BuyRatio                   = 90, SellRatio = 10;
          int fontsize1=16;double D1pct; color clrD1pct,clrPAIR=clrGray; int X=0,Y=0;
//+------------------------------------------------------------------------------------------------------------------+
extern string STR12                      = "<<<==== Alerts Settings ====>>>";
extern bool alertsOn                   = true;
extern bool alertsOnStopLight          = true;
extern bool alertsOnCurrent            = true;
extern bool alertsMessage            = true;
extern bool alertsSound                = false;
extern bool alertsNotify               = true;
extern bool alertsEmail                = false;
       string soundFile                  = "alert2.wav";
//+------------------------------------------------------------------------------------------------------------------+
   bool calculateValue;string FontType="Arial Black",SymPair="",indicatorFileName;
   double data1;int timeFrame,BarsCount=1000,Type,Type2,win,FontSize=14,FontSize2=12,pipsize;
//+----OnInit Function-----------------------------------------------------------------------------------------------+
   int OnInit(){if(UpdateMode == UpdatePerSecond) EventSetTimer(UpdateEveryXseconds); else
   if(UpdateMode == UpdatePerMilliseconds) EventSetMillisecondTimer(UpdateEveryXmilliseconds);
//+------------------------------------------------------------------------------------------------------------------+
   if(AutoArrangeChart){ChartSetInteger(0,CHART_COLOR_BACKGROUND,chartBackgroundColor);
                        ChartSetInteger(0,CHART_COLOR_FOREGROUND,chartForegroundColor);
                        ChartSetInteger(0,CHART_COLOR_GRID,chartGridColor);
                        ChartSetInteger(0,CHART_COLOR_CHART_UP,chartBarUpColor);
                        ChartSetInteger(0,CHART_COLOR_CHART_DOWN,chartBarDownColor);
                        ChartSetInteger(0,CHART_COLOR_CANDLE_BULL,chartBullCandleColor);
                        ChartSetInteger(0,CHART_COLOR_CANDLE_BEAR,chartBearCandleColor);
                        ChartSetInteger(0,CHART_COLOR_CHART_LINE,chartLineGraphColor);
                        ChartSetInteger(0,CHART_COLOR_VOLUME,charttradeEntryColor);
                        ChartSetInteger(0,CHART_COLOR_ASK,chartAskLineColor);
                        ChartSetInteger(0,CHART_COLOR_STOP_LEVEL,charttradeLevelColor);
                        ChartSetInteger(0,CHART_MODE,CHART_CANDLES);
                        ChartSetInteger(0,CHART_SHIFT,true);
                        ChartSetInteger(0,CHART_SHOW_OHLC,false);
                        ChartSetInteger(0,CHART_SHOW_GRID,false);}
//+------------------------------------------------------------------------------------------------------------------+   
   int Buffers=32,Buf=-1;IndicatorBuffers(Buffers);TMA2per=MathMax(TMA2per,1);
   if(TimeFrame==0 || TimeFrame<Period()) TimeFrame=Period();timeFrame=stringToTimeFrame(TimeFrame);
   IndicatorDigits(Digits); IndicatorShortName(ID); win=WindowFind(ID);
//+------------------------------------------------------------------------------------------------------------------+
   if(AutoRefresh)hWindow=WindowHandle(Symbol(),Period());oldBars=iBars(NULL,RefreshPeriod);
//+------------------------------------------------------------------------------------------------------------------+
   if(showRIBBON)         Type=DRAW_HISTOGRAM; else Type=DRAW_NONE;
   Buf+=1; SetIndexBuffer(Buf,MA1);      
   Buf+=1; SetIndexBuffer(Buf,MA2);      
   Buf+=1; SetIndexBuffer(Buf,MA3);      
   Buf+=1; SetIndexBuffer(Buf,MA4);       fSetBuffers();
   if(showTMA1)         Type=DRAW_LINE; else Type=DRAW_NONE;
   Buf+=1; SetIndexBuffer(Buf,TMA1);       SetIndexStyle(Buf,DRAW_NONE);      SetIndexDrawBegin(Buf,TMA1per);
   Buf+=1; SetIndexBuffer(Buf,TMA1bandUp); SetIndexStyle(Buf,Type,0,1,clrRed);SetIndexDrawBegin(Buf,TMA1per);
   Buf+=1; SetIndexBuffer(Buf,TMA1bandDn); SetIndexStyle(Buf,Type,0,1,clrRed);SetIndexDrawBegin(Buf,TMA1per);
   if(showTMA2)         Type=DRAW_LINE; else Type=DRAW_NONE;
   Buf+=1; SetIndexBuffer(Buf,TMA2);       SetIndexStyle(Buf,DRAW_NONE);      SetIndexDrawBegin(Buf,TMA2per);
   Buf+=1; SetIndexBuffer(Buf,TMA2up);   SetIndexStyle(Buf,DRAW_NONE);      SetIndexDrawBegin(Buf,TMA2per);
   Buf+=1; SetIndexBuffer(Buf,TMA2dn);   SetIndexStyle(Buf,DRAW_NONE);      SetIndexDrawBegin(Buf,TMA2per);
   Buf+=1; SetIndexBuffer(Buf,TMA2bandUp); SetIndexStyle(Buf,Type,0,2,clrSnow); SetIndexDrawBegin(Buf,TMA2per);
   Buf+=1; SetIndexBuffer(Buf,TMA2bandDn); SetIndexStyle(Buf,Type,0,2,clrSnow); SetIndexDrawBegin(Buf,TMA2per);
   Buf+=1; SetIndexBuffer(Buf,slope);      SetIndexStyle(Buf,DRAW_NONE);
   Buf+=1; SetIndexBuffer(Buf,trend1);   SetIndexStyle(Buf,DRAW_NONE);
   Buf+=1; SetIndexBuffer(Buf,trend2);   SetIndexStyle(Buf,DRAW_NONE);
//+------------------------------------------------------------------------------------------------------------------+
   if(showSemafor)      ZZPoint=getPoint(true);ZZdelta=deltaPips*ZZPoint;int CDev=0,CSt=0,Mass[],C=0;
   if(Period2>0) HPeriod=MathCeil(Period2*Period()); else HPeriod=0;
   if(Period3>0) ZPeriod=MathCeil(Period3*Period()); else ZPeriod=0;
//+------------------------------------------------------------------------------------------------------------------+
   if(Period2>0){cU=clrSnow; cD=clrSnow; Type=DRAW_ARROW;
   Buf+=1; SetIndexBuffer(Buf,HPup);      SetIndexStyle(Buf,Type,0,S2size,cU);
         SetIndexArrow(Buf,S2kod);      SetIndexEmptyValue(Buf,0.0);
   Buf+=1; SetIndexBuffer(Buf,HPdn);      SetIndexStyle(Buf,Type,0,S2size,cD);
         SetIndexArrow(Buf,S2kod);      SetIndexEmptyValue(Buf,0.0);}
//+------------------------------------------------------------------------------------------------------------------+
   if(showSemafor)
   if(Period3>0){cU=clrBlue; cD=clrRed; Type=DRAW_ARROW;
   Buf+=1; SetIndexBuffer(Buf,ZPup);      SetIndexStyle(Buf,Type,0,S3size,cU);
            SetIndexArrow(Buf,S3kod);   SetIndexEmptyValue(Buf,0.0);
   Buf+=1; SetIndexBuffer(Buf,ZPdn);      SetIndexStyle(Buf,Type,0,S3size,cD);
            SetIndexArrow(Buf,S3kod);   SetIndexEmptyValue(Buf,0.0);}
//+------------------------------------------------------------------------------------------------------------------+
   if(IntFromStr(DevStep2,C,Mass)==1){Stp2=Mass; Dev2=Mass;}
   if(IntFromStr(DevStep3,C,Mass)==1){Stp3=Mass; Dev3=Mass;}
//+------------------------------------------------------------------------------------------------------------------+
   if(showOpenline)       Type=DRAW_LINE; else Type=DRAW_NONE; if(Period()>=PERIOD_W1) Type=DRAW_NONE;
   Buf+=1; SetIndexBuffer(Buf,POLb);      SetIndexStyle(Buf,Type,0,3+2,clrBlack);
   Buf+=1; SetIndexBuffer(Buf,POL0);      SetIndexStyle(Buf,Type,0,3,clrYellow);
   Buf+=1; SetIndexBuffer(Buf,POL1);      SetIndexStyle(Buf,Type,0,3,clrAqua);
//+------------------------------------------------------------------------------------------------------------------+
   if(showHA)             Type=DRAW_HISTOGRAM; else Type=DRAW_NONE;
   Buf+=1; SetIndexBuffer(Buf,haLowHigh); SetIndexEmptyValue(Buf,0); SetIndexStyle(Buf,Type,0,1,cBearish);
        Buf+=1; SetIndexBuffer(Buf,haHighLow); SetIndexEmptyValue(Buf,0); SetIndexStyle(Buf,Type,0,1,cBullish);
        Buf+=1; SetIndexBuffer(Buf,haOpen);    SetIndexEmptyValue(Buf,0);
        Buf+=1; SetIndexBuffer(Buf,haClose);   SetIndexEmptyValue(Buf,0); fSetBuffers();
//+------------------------------------------------------------------------------------------------------------------+
   if(showTREND)          Type=DRAW_LINE; else Type=DRAW_NONE;
   Buf+=1; SetIndexBuffer(Buf,TRENDbgd);SetIndexDrawBegin(Buf,TRENDper+1);
   Buf+=1; SetIndexBuffer(Buf,TREND);   SetIndexDrawBegin(Buf,TRENDper+1);
   Buf+=1; SetIndexBuffer(Buf,TRENDdna);SetIndexDrawBegin(Buf,TRENDper+1);
   Buf+=1; SetIndexBuffer(Buf,TRENDdnb);SetIndexDrawBegin(Buf,TRENDper+1);
   Buf+=1; SetIndexBuffer(Buf,trend);   SetIndexStyle(Buf,DRAW_NONE); fSetBuffers();
//+------------------------------------------------------------------------------------------------------------------+
   Buf+=1; SetIndexBuffer(Buf,ccitrend);SetIndexStyle(Buf,DRAW_NONE);
   if(Buffers != Buf+1) Print("*******Buffer MisMatch!!!   ",Buffers," ",Buf);
   for(int Bufx=0;Bufx<indicator_buffers;Bufx++){SetIndexLabel(Bufx,NULL);}
//+------------------------------------------------------------------------------------------------------------------+
   if(SymPair=="") SymPair=Symbol(); myPoint=SetPoint();
      if(StringFind(Symbol(),"JPY",0) != -1)   DecNos=2;
   else if(StringSubstr(Symbol(),0,5)=="UKOil")    DecNos=2;
   else if(StringSubstr(Symbol(),0,6)=="BTCUSD")   DecNos=1;
   else if(StringSubstr(Symbol(),0,7)=="CHINA50")DecNos=0;
   else if(StringSubstr(Symbol(),0,6)=="US2000")   DecNos=1;
   else if(StringSubstr(Symbol(),0,5)=="US500")    DecNos=1;
   else if(StringSubstr(Symbol(),0,6)=="ETHUSD")   DecNos=2;
   else if(StringSubstr(Symbol(),0,6)=="LTCUSD")   DecNos=3;
   else if(StringSubstr(Symbol(),0,6)=="USOUSD")   DecNos=3;
   else if(StringSubstr(Symbol(),0,6)=="SPX500")   DecNos=1;
   else if(StringSubstr(Symbol(),0,8)=="USDOLLAR") DecNos=3;
   else if(StringSubstr(Symbol(),0,5)=="JP225")    DecNos=0;
   else if(StringSubstr(Symbol(),0,4)=="HK50")   DecNos=0;
   else if(StringSubstr(Symbol(),0,5)=="UK100")    DecNos=0;
   else if(StringSubstr(Symbol(),0,7)=="FTSE100")DecNos=1;
   else if(StringSubstr(Symbol(),0,6)=="XAUUSD")   DecNos=1;
   else if(StringSubstr(Symbol(),0,6)=="XAGUSD")   DecNos=3;
   else if(StringSubstr(Symbol(),0,6)=="USDMXN")   DecNos=3;
   else if(StringSubstr(Symbol(),0,6)=="NDX100")   DecNos=1;
   else if(StringSubstr(Symbol(),0,4)=="WS30")   DecNos=0; else DecNos=4;
   if(SymPair=="") SymPair=Symbol();
      if(StringFind(Symbol(),"JPY",0) != -1)   pipsize=10;
   else if(StringSubstr(Symbol(),0,8)=="USDOLLAR") pipsize=10;
   else if(StringSubstr(Symbol(),0,6)=="BTCUSD")   pipsize=100;
   else if(StringSubstr(Symbol(),0,7)=="CHINA50")pipsize=100;
   else if(StringSubstr(Symbol(),0,6)=="LTCUSD")   pipsize=1;
   else if(StringSubstr(Symbol(),0,6)=="ASX200")   pipsize=100;
   else if(StringSubstr(Symbol(),0,4)=="HK50")   pipsize=100;
   else if(StringSubstr(Symbol(),0,5)=="JP225")    pipsize=100;
   else if(StringSubstr(Symbol(),0,6)=="USDTRY")   pipsize=100;
   else if(StringSubstr(Symbol(),0,5)=="UK100")    pipsize=100;
   else if(StringSubstr(Symbol(),0,7)=="FTSE100")pipsize=100;
   else if(StringSubstr(Symbol(),0,6)=="USDMXN")   pipsize=100;
   else if(StringSubstr(Symbol(),0,6)=="XAUUSD")   pipsize=10;
   else if(StringSubstr(Symbol(),0,6)=="XAGUSD")   pipsize=1;
   else if(StringSubstr(Symbol(),0,4)=="WS30")   pipsize=100;
   else if(StringSubstr(Symbol(),0,6)=="NDX100")   pipsize=100; else pipsize=10;
//+----Xmath---------------------------------------------------------------------------------------------------------+
   switch(Period()){
   case    1: Px=15360;tx=10; break;   case    5: Px=3072; tx=20; break;
   case   15: Px=1024;   tx=20; break;   case   30: Px=512;tx=20; break;
   case   60: Px=256;    tx=50; break;   case240: Px=64;   tx=50; break;
   case 1440:            tx=50; break;   case 10080:         tx=50; break;default:tx=50; break;}
   ln_txt ="                               [-2/8] "; mml_wdth =0; ln_tx =""; mml_clr=clrSnow;
   ln_txt ="                               [-1/8] "; mml_wdth =0; ln_tx =""; mml_clr=clrSnow;
   ln_txt ="                               ";mml_wdth =0; ln_tx =""; mml_clr=clrSnow;
   ln_txt ="                               ";mml_wdth =0; ln_tx =""; mml_clr=clrSnow;
   ln_txt ="                               ";mml_wdth =0; ln_tx =""; mml_clr=clrSnow;
   ln_txt ="                               ";mml_wdth =0; ln_tx =""; mml_clr=clrSnow;
   ln_txt ="                               ";mml_wdth =0; ln_tx =""; mml_clr=clrSnow;
   ln_txt ="                               ";mml_wdth =0; ln_tx =""; mml_clr=clrSnow;
   ln_txt ="                               ";mml_wdth =0; ln_tx =""; mml_clr=clrSnow;
   ln_txt ="                               ";mml_wdth =0; ln_tx =""; mml_clr=clrSnow;
   ln_txt="                               ";mml_wdth=0; ln_tx=""; mml_clr=clrSnow; mml_shft=0;
   ln_txt="                               [+1/8] "; mml_wdth=0; ln_tx=""; mml_clr=clrSnow;mml_thk=3;
   ln_txt="                               [+2/8] "; mml_wdth=0; ln_tx=""; mml_clr=clrSnow;
   indicatorFileName = WindowExpertName();
   calculateValue    = (TimeFrame=="calculateValue"); if (calculateValue) return(0);
   returnBars      = (TimeFrame=="returnBars");   if (returnBars)   return(0);
   timeFrame         = stringToTimeFrame(TimeFrame);return(INIT_SUCCEEDED);}//End OnInit
//+----deinit Function-----------------------------------------------------------------------------------------------+
   void deinit(){ int reason; switch(reason){
      case REASON_CHARTCHANGE :
      case REASON_RECOMPILE   :
      case REASON_CLOSE       : break;
                      default : {
   for(int i=0;i<OctLinesCnt;i++){buff_str="mmlx"+i;
   ObjectDelete(buff_str); buff_str = "mml_txtx"+i; ObjectDelete(buff_str);}            
      CleanUpAisle1(ID); string lookFor = ID+":"; int lookForLength = StringLen(lookFor);
   for(int io=ObjectsTotal()-1; io>=0; io--){string objectName=ObjectName(io);
   if(StringSubstr(objectName,0,lookForLength)==lookFor) ObjectDelete(objectName);}}}}
//+------------------------------------------------------------------------------------------------------------------+
   class CFix { } ExtFix;
//+----OnCalculate Function------------------------------------------------------------------------------------------+
   int OnCalculate(const int rates_total,
                   const int prev_calculated,
                   const datetime &time[],
                   const double &open[],
                   const double &high[],
                   const double &low[],
                   const double &close[],
                   const long &tick_volume[],
                   const long &volume[],
                   const int &spread[]){fSetBuffers();
//+------------------------------------------------------------------------------------------------------------------+
   if(AutoRefresh){if(oldBars<iBars(NULL,RefreshPeriod) && hWindow!=0){int message;
   switch(Period()){case   1: message= 33137; break;
                  case   5: message= 33138; break;
                  case    15: message= 33139; break;
                  case    30: message= 33140; break;
                  case    60: message= 33135; break;
                  case   240: message= 33136; break;
                  case1440: message= 33134; break;
                  case 10080: message= 33141; break;
                     default: message= 33137; break;}
   PostMessageA (hWindow,WM_COMMAND,33141,0);   // switch to weekly TF
   PostMessageA (hWindow,WM_COMMAND,message,0); // switch to original TF
   oldBars=iBars(NULL,RefreshPeriod);}}//End AutoRefresh
   int counted_bars=IndicatorCounted();
   int i,j,k,limit; double ld_Range;
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--; limit=MathMin(Bars-counted_bars+TMA2per,Bars-1);
   if(returnBars){TMA2 = limit+1; return(0);}
//+---TMA1 Function--------------------------------------------------------------------------------------------------+
   for (i=limit; i>=0; i--){
          TMA1 = EMPTY_VALUE;
      TMA1up = EMPTY_VALUE;
      TMA1dn = EMPTY_VALUE;
          TMA1 = iMA(NULL,0,TMA1per,0,MODE_LWMA,PRICE_CLOSE,i);
         ld_Range = iATR(NULL,0,TMA1atr,i+10);
    TMA1bandUp = TMA1 + (ld_Range * TMA1atrMulti);
    TMA1bandDn = TMA1 - (ld_Range * TMA1atrMulti);}
//+---TMA2 Function--------------------------------------------------------------------------------------------------+
   if(calculateValue || timeFrame==Period()){
   if(slope==-1) CleanPoint(limit,TMA2up,TMA2dn);
   for(i=limit;i>=0;i--){
   if(Extrapolate || (!Extrapolate && i>TMA2per)){
            double sum= (TMA2per+1)*iMA(NULL,0,1,0,MODE_SMA,TMA2price,i);
            double sumw = (TMA2per+1);
   for(j=1, k=TMA2per; j<=TMA2per; j++, k--){
             sum+= k*iMA(NULL,0,1,0,MODE_SMA,TMA2price,i+j);
             sumw += k;
   if(j<=i){ sum+= k*iMA(NULL,0,1,0,MODE_SMA,TMA2price,i-j);
             sumw += k;}}
   double range = iATR(NULL,0,TMA2atr,i+10)*TMA2atrMulti;
            TMA2 = sum/sumw;
      TMA2bandUp = TMA2+range;
      TMA2bandDn = TMA2-range;} else {
            TMA2 = TMA2;
      TMA2bandUp = TMA2bandUp;
      TMA2bandDn = TMA2bandDn;}         
          TMA2up = EMPTY_VALUE;
          TMA2dn = EMPTY_VALUE;
         slope = slope;
          trend1 = 0;
          trend2 = trend2;
   if(TMA2> TMA2) slope = 1;
   if(TMA2< TMA2) slope =-1;
   //if(High   > TMA2bandUp)    trend1 = 1;
   //if(Low    < TMA2bandDn)    trend1 =-1;
   if(Close> TMA2bandUp)    trend2 = 1;
   if(Close< TMA2bandDn)    trend2 =-1;
   if(slope==-1) PlotPoint(i,TMA2up,TMA2dn,TMA2);}
//+---Ribbon Function------------------------------------------------------------------------------------------------+
   for(i=0; i<limit; i++){
   if(TMA1bandUp>TMA2bandUp){MA2=TMA1bandUp;MA1=TMA2bandUp;MA4=EMPTY_VALUE;MA3=EMPTY_VALUE;}
   if(TMA1bandDn<TMA2bandDn){MA4=TMA1bandDn;MA3=TMA2bandDn;MA2=EMPTY_VALUE;MA1=EMPTY_VALUE;}}
//+---Semafor Function-----------------------------------------------------------------------------------------------+
   if(Period2>0) CountZZ(HPup,HPdn,Period2,Dev2,Stp2);
   if(Period3>0) CountZZ(ZPup,ZPdn,Period3,Dev3,Stp3);
//+---Open Line Function---------------------------------------------------------------------------------------------+
   double XardPer; if(Period()<=PERIOD_H1){XardPer=PERIOD_D1;}   if(Period()>=PERIOD_H4){XardPer=PERIOD_W1;}
   if(Bars<=3) return(0); int ExtCountedBars=IndicatorCounted(); if(ExtCountedBars<0) return(-1); limit=Bars-2;
   if(ExtCountedBars>2) limit=Bars-ExtCountedBars-1; int pos2,index; pos2=limit; while(pos2>=0){
   if(tFrame<10){index=iBarShift(NULL,XardPer,Time,false);}
    else {index=iBarShift(NULL,XardPer,BofYr(Time),false);}
   BufPOL=iMA(Symbol(),0,2,0,MODE_SMMA,PRICE_CLOSE,pos2); VAL=iOpen(NULL,XardPer,index);
   POL0=VAL; POL1=VAL; POLb=POL0; if((VAL>BufPOL)){POL1=EMPTY_VALUE;}pos2--;}
//+---Xmath Function-------------------------------------------------------------------------------------------------+
   bn_v1x =Lowest(NULL,0, MODE_LOW,Px+StepBackx,0);
   bn_v2x = Highest(NULL,0,MODE_HIGH,Px+StepBackx,0);v1x = Low;v2x = High;
//+------------------------------------------------------------------------------------------------------------------+
   if(v2x<=250000   && v2x>25000)    fractal=100000;if(v2x<=25000    && v2x>2500)   fractal=10000;
   if(v2x<=2500   && v2x>250)      fractal=1000;    if(v2x<=250      && v2x>25)       fractal=100;
   if(v2x<=25       && v2x>12.5)   fractal=12.5;    if(v2x<=12.5   && v2x>6.25)   fractal=12.5;
   if(v2x<=6.25   && v2x>3.125)    fractal=6.25;    if(v2x<=3.125    && v2x>1.5625)   fractal=3.125;
   if(v2x<=1.5625   && v2x>0.390625) fractal=1.5625;if(v2x<=0.390625 && v2x>0)      fractal=0.1953125;
//+------------------------------------------------------------------------------------------------------------------+
   rangex=(v2x-v1x); sumx=MathFloor(MathLog(fractal/rangex)/MathLog(2)); octave=fractal*(MathPow(0.5,sumx));
   mn=MathFloor(v1x/octave)*octave; if((mn+octave+(octave*0.3333))>v2x) mx=mn+octave; else mx=mn+(2*octave);
//+------------------------------------------------------------------------------------------------------------------+
   if((v1x>=(3*(mx-mn)/16+mn)) && (v2x<=(9*(mx-mn)/16+mn))) x2=mn+(mx-mn)/2; else x2=0;
   if((v1x>=(mn-(mx-mn)/8)) && (v2x<=(5*(mx-mn)/8+mn)) && (x2 == 0)) x1=mn+(mx-mn)/2; else x1=0;
   if((v1x>=(mn+7*(mx-mn)/16)) && (v2x<=(13*(mx-mn)/16+mn))) x4=mn+3*(mx-mn)/4; else x4=0;
   if((v1x>=(mn+3*(mx-mn)/8)) && (v2x<=(9*(mx-mn)/8+mn)) && (x4==0)) x5=mx; else x5=0;
   if((v1x>=(mn+(mx-mn)/8)) && (v2x<=(7*(mx-mn)/8+mn)) && (x1==0) && (x2==0) && (x4==0) && (x5==0))
      x3 = mn+3*(mx-mn)/4; else x3=0;if((x1+x2+x3+x4+x5)==0) x6=mx; else x6=0;   finalH=x1+x2+x3+x4+x5+x6;
   if(x1>0) y1=mn; else y1=0;if(x2>0) y2=mn+(mx-mn)/4; else y2=0;if(x3>0) y3=mn+(mx-mn)/4; else y3=0;
   if(x4>0) y4=mn+(mx-mn)/2; else y4=0;   if(x5>0) y5=mn+(mx-mn)/2; else y5=0;
   if((finalH>0) && ((y1+y2+y3+y4+y5)==0)) y6=mn; else y6=0;   finalL = y1+y2+y3+y4+y5+y6;
//+------------------------------------------------------------------------------------------------------------------+
   double xo = (finalH-finalL),xmm = xo/8;
   for(f=0; f<OctLinesCnt; f++){mmlx = 0;}dmml=(finalH-finalL)/8;mmlx=(finalL-dmml*2);
   for(f=1; f<OctLinesCnt; f++){mmlx = mmlx + dmml;}
   for(f=0; f<OctLinesCnt; f++){buff_str = "mmlx"+f; buff_str = "mml_txtx"+f; ObjectDelete(buff_str);
   if(showXmath){
    ObjectCreate(buff_str,OBJ_TEXT, 0, Time, mml_shft);
   ObjectSetText(buff_str,ln_txt+DoubleToStr(mmlx,DecNos)+ln_tx,12,"MV Boli",mml_clr);
       ObjectSet(buff_str,OBJPROP_BACK,1);ObjectMove(buff_str,0,Time,mmlx+Point*tx);}}//End Xmath
//+------------------------------------------------------------------------------------------------------------------+
   int countedbars=prev_calculated; if(countedbars<0) return(-1); if(countedbars>0) countedbars--;
   limit=MathMin(rates_total-countedbars,rates_total-1);
//+----HA Function---------------------------------------------------------------------------------------------------+
   int i_Bar = fmax(1, rates_total - prev_calculated + (prev_calculated > 0));
        if(prev_calculated == 0){i_Bar--;
                  if(Open < Close) {
                haLowHigh =   Low;
                haHighLow =High;} else {
                haLowHigh =High;
                haHighLow =   Low;}
                   haOpen =Open;
                  haClose = Close;}
//+----
        double d_Open,d_Close,d_High,d_Low;
        i_Bar = fmin(rates_total - 2,i_Bar);
        while(i_Bar-- >0) {
       d_Open = (haOpen + haClose) / 2;
        d_Close = (Open + High + Low + Close) / 4;
       d_High = fmax(High, fmax(d_Open, d_Close));
          d_Low = fmin(Low, fmin(d_Open, d_Close));
//+----
        if(d_Open < d_Close){
                haLowHigh = d_Low;
                haHighLow = d_High;} else {
                haLowHigh = d_High;
                haHighLow = d_Low;}
                   haOpen = d_Open;
                  haClose = d_Close;} //End HA
//+---Trend Function-------------------------------------------------------------------------------------------------+
   if(returnBars){TREND=limit+1; return(0);} if(calculateTREND || timeFrame == Period()){
   if(!calculateTREND && trend==-1) CleanPoint(limit,TRENDdna,TRENDdnb);
   for(i=limit;i>=0;i--){TRENDdna=EMPTY_VALUE;TRENDdnb=EMPTY_VALUE; trend=trend;
                   if(Close>iMA(Symbol(),TRENDtf,TRENDper,TRENDshft,TRENDmode,PRICE_HIGH,i+1)) trend= 1;
                   if(Close<iMA(Symbol(),TRENDtf,TRENDper,TRENDshft,TRENDmode,PRICE_LOW, i+1)) trend=-1;
   if(trend==-1)   TREND=iMA(Symbol(),TRENDtf,TRENDper,TRENDshft,TRENDmode,TRENDtype,i+1);
                elseTREND=iMA(Symbol(),TRENDtf,TRENDper,TRENDshft,TRENDmode,TRENDtype,i+1);
   if(!calculateTREND && trend==-1) PlotPoint(i,TRENDdna,TRENDdnb,TREND); TRENDbgd=TREND;}}//End Trend
//+---ccitrend Function----------------------------------------------------------------------------------------------+
   for(i=0; i<=limit; i++){ccitrend=iCCI(NULL,0,28,PRICE_TYPICAL,i);}
//+---Alert Function-------------------------------------------------------------------------------------------------+
   for(i=limit;i>=0;i--){
   if(trend== 1 && TMA1bandDn<TMA2bandDn && ccitrend>=0.){trend1= 1;}
   if(trend==-1 && TMA1bandUp>TMA2bandUp && ccitrend<-0.){trend1=-1;}}
//+---InfoBOX Display------------------------------------------------------------------------------------------------+
   int LightButp=Determine_StopLight(); Show_TrafficLights(LightButp); if(showINFOBOX){
   iPanel(ID+"Xard0",4,129,"g",70,"Webdings",Panelcol); iPanel(ID+"Xard1",4,212,"g",70,"Webdings",Panelcol);
   iPanel(ID+"Xard2",4,236,"g",70,"Webdings",Panelcol);
   iPanel(ID+"Xard3",9,134,"g",62,"Webdings",Boxbgd);   iPanel(ID+"Xard4",9,216,"g",62,"Webdings",Boxbgd);
//+------------------------------------------------------------------------------------------------------------------+
   double ydayhigh=iHigh(Symbol(),PERIOD_D1,1), ydaylow=iLow(Symbol(),PERIOD_D1,1);
   double spd=(MarketInfo(SymPair,MODE_BID)); string MarketPrice=DoubleToStr(Bid,Digits-1);
   if(spd>=1 && spd<=9.99)         int spx=+13; else if(spd>=0 && spd<=0.9999)      spx=+12;
   else if(spd>=10 && spd<=99.99)      spx=+13; else if(spd>=100 && spd<=999.99)    spx=+12;
   else if(spd>=1000 && spd<=9999.99)spx=+12; else if(spd>=10000 && spd<=99999.99)spx=+14;
   iPanel(ID+"Xard5",spx,155,DoubleToStr(MarketInfo(SymPair,MODE_BID),DecNos),16,"Arial Black",clrAqua);
//+------------------------------------------------------------------------------------------------------------------+
   double sprd=(Ask-Bid)/myPoint; if(sprd>=1 && sprd<=9.99) int spdx=-1; else if(sprd>=10 && sprd<=99.99)spdx=-3;
   else if(sprd>=100 && sprd<=999.99)spdx=-6; iPanel(ID+"Xard6",18+spdx,179,"SPD:"+
   DoubleToStr((Ask-Bid)*MathPow(10,Digits)/pipsize,1),12,"Consolas Bold",Snow); Show_Timer(); RefreshRates();
//+------------------------------------------------------------------------------------------------------------------+
   string OPEN=""; OpenToday=iOpen(SymPair,1440,0); OPEN=(DoubleToStr(OpenToday,DecNos));
   string PIPS=""; CLOSE=iClose(SymPair,1440,0); PIPS=DoubleToStr((CLOSE-OpenToday)/Point/pipsize,0);
   color cPIPS; if(CLOSE>=OpenToday){cPIPS=clrAqua;} if(CLOSE<OpenToday){cPIPS=clrViolet;}
   iPanel(ID+"Xard8",13,134,StringSubstr(SymPair,0,7),18,"Impact",clrWhite);
   iPanel(ID+"Xard9",12,211,"Daily Open",10,"Arial Black",cPIPS); iPanel(ID+"Xard10",21,224,OPEN,13,FontType,cPIPS);
   iPanel(ID+"Xard11",52,246,"P2Op",10,"Arial Bold",clrSnow); iPanel(ID+"Xard12",14,246,PIPS,11,"Arial Bold",cPIPS);
//+------------------------------------------------------------------------------------------------------------------+
   string HILO=""; double HiToday=iHigh(NULL,1440,0),LoToday=iLow(NULL,1440,0);
   HILO=DoubleToStr((HiToday-LoToday)/Point/pipsize,0); iPanel(ID+"Xard13",52,263,"HiLo",10,"Arial Bold",clrSilver);
                                                      iPanel(ID+"Xard14",14,263, HILO ,11,"Arial Bold",clrSilver);
//+---ADR------------------------------------------------------------------------------------------------------------+
   ADR1=0; ADR5=0; ADR10=0; ADR20=0; ADRavg=0; int a,b,c; int ypos=0;
                           ADR1=(iHigh(NULL,PERIOD_D1,1)-iLow(NULL,PERIOD_D1,1));
   for(a=1;a<= 5;a++)ADR5= ADR5+(iHigh(NULL,PERIOD_D1,a)-iLow(NULL,PERIOD_D1,a));
   for(b=1;b<=10;b++) ADR10=ADR10+(iHigh(NULL,PERIOD_D1,b)-iLow(NULL,PERIOD_D1,b));
   for(c=1;c<=20;c++) ADR20=ADR20+(iHigh(NULL,PERIOD_D1,c)-iLow(NULL,PERIOD_D1,c));
   ADR5=ADR5/5;ADR10=ADR10/10;ADR20=ADR20/20;ADRavg=(((ADR1+ADR5+ADR10+ADR20)/4))/Point/pipsize;
   double avYest=(iHigh(NULL,PERIOD_D1,1)-iLow(NULL,PERIOD_D1,1))/Point/pipsize; color colorDAV=LimeGreen;
   if(ADRavg>avYest){colorDAV=DarkOrange;} iPanel(ID+"Xard15",52,280,"D.Avg",10,"Arial Bold",clrSnow);
   iPanel(ID+"Xard16",14,280,DoubleToStr(ADRavg,0),11,"Arial Bold",colorDAV);}//EO InfoBox
//+---Symbol Header Function-----------------------------------------------------------------------------------------+
   color SymClr=clrGray; if(Close>OpenToday){SymClr=clrDodgerBlue;} if(Close<OpenToday){SymClr=C'238,130,238';}
   if(showSymbolHeader){color Sbg=clrSnow;//C'161,161,161';
   iOBOS(ID+"ObOs1",LR+1,UD+1,StringSubstr(SymPair,0,8),HDRsize,"Arial Black",Sbg);
   iOBOS(ID+"ObOs2",LR+0,UD+0,StringSubstr(SymPair,0,8),HDRsize,"Arial Black",SymClr);}//End Symboltext
//+---BidRatio Function----------------------------------------------------------------------------------------------+
   if(showD1){if((iHigh(SymPair,PERIOD_D1,0)-iLow(SymPair,PERIOD_D1,0)!=0))
   D1pct=100.0*((iClose(SymPair,PERIOD_D1,0)-iLow(SymPair,PERIOD_D1,0))/
   (iHigh(SymPair,PERIOD_D1,0)-iLow(SymPair,PERIOD_D1,0))); else D1pct=0.0;
   clrD1pct=clrGray; if(D1pct<=SellRatio){clrD1pct=clrRed;} if(D1pct>=BuyRatio){clrD1pct=clrLime;}
   iPanel(ID+"Xard21",15,300,DoubleToStr(D1pct,0)+"%",18,"Arial Bold",clrD1pct);}
//+------------------------------------------------------------------------------------------------------------------+
      manageAlerts();return(0);}
   for(i=limit;i>=0;i--) if(slope==-1) PlotPoint(i,TMA2up,TMA2dn,TMA2);return(rates_total);}
//+---Timer Function-------------------------------------------------------------------------------------------------+
   void Show_Timer(){double rx; int mt,s; mt=Time+Period()*60-CurTime(); rx=mt/60.0; s=mt%60; mt=(mt-mt%60)/60;
   if(showINFOBOX){iPanel(ID+"Xard7",13,192,mt+":"+s,13,"Arial Black",clrLime);}}
//+------------------------------------------------------------------------------------------------------------------+
   void manageAlerts(){if(!calculateValue && alertsOn){if(alertsOnCurrent)
   int whichBar = 0; else whichBar = 1;
       whichBar = iBarShift(NULL,0,iTime(NULL,timeFrame,whichBar));
      static datetime time2 = 0;static string   mess2 = "";
   if(alertsOnStopLight && trend1 != trend1){
   if(trend1 ==1) doAlert(time2,mess2,whichBar,"BUY");
   if(trend1 == -1) doAlert(time2,mess2,whichBar,"SELL");}}}
//+------------------------------------------------------------------------------------------------------------------+
   void doAlert(datetime& previousTime, string& previousAlert, int forBar, string doWhat){string msg;
   if(previousAlert != doWhat || previousTime != Time){previousAlert = doWhat;previousTime = Time;
   msg=StringConcatenate(Symbol()," ",timeFrameToString(timeFrame)," @ ",
       TimeToStr(TimeLocal(),TIME_MINUTES),"StopLight is a ",doWhat);
   if(alertsMessage) Alert(msg);if(alertsNotify)SendNotification(msg);
   if(alertsEmail)   SendMail(StringConcatenate(Symbol()," "),msg);if(alertsSound)   PlaySound("alert2.wav");}}
//+------------------------------------------------------------------------------------------------------------------+
   void CleanPoint(int i,double& first[],double& second[]){
   if((second!=EMPTY_VALUE) && (second!=EMPTY_VALUE)) second=EMPTY_VALUE;
   else if((first!=EMPTY_VALUE) && (first!=EMPTY_VALUE) && (first==EMPTY_VALUE)) first=EMPTY_VALUE;}
//+------------------------------------------------------------------------------------------------------------------+
   void PlotPoint(int i,double& first[],double& second[],double& from[]){ if(first==EMPTY_VALUE){
   if(first==EMPTY_VALUE){ first=from; first=from; second=EMPTY_VALUE;} else {
   second=from; second=from; first=EMPTY_VALUE;}} else {first=from; second=EMPTY_VALUE;}}
//+------------------------------------------------------------------------------------------------------------------+
   string sTfTable[] = {"M1","M5","M15","M30","H1","H4","D1","W1","MN"};
   int    iTfTable[] = {1,5,15,30,60,240,1440,10080,43200};
//+------------------------------------------------------------------------------------------------------------------+
   int stringToTimeFrame(string tfs){ tfs=stringUpperCase(tfs);for(int i=ArraySize(iTfTable)-1; i>=0; i--)
   if(tfs==sTfTable || tfs==""+iTfTable) return(MathMax(iTfTable,Period()));return(Period());}
//+------------------------------------------------------------------------------------------------------------------+
   string timeFrameToString(int tf){
   for(int i=ArraySize(iTfTable)-1;i>=0;i--)if(tf==iTfTable) return(sTfTable); return("");}
//+------------------------------------------------------------------------------------------------------------------+
   string stringUpperCase(string str){ string s=str; for(int length=StringLen(str)-1; length>=0; length--){
   int tchar=StringGetChar(s,length); if((tchar>96 && tchar<123) || (tchar>223 && tchar<256))
   s=StringSetChar(s,length,tchar-32); else if(tchar>-33 && tchar<0) s=StringSetChar(s,length,tchar+224);} return(s);}
//+--- Semafor ------------------------------------------------------------------------------------------------------+
   int CountZZ(double& ZZBufUp[],double& ZZBufDn[],int ExtDepth,int ExtDeviation,int ExtBackstep){
   int shiftZZ,back,lasthighpos,lastlowpos; double val,res,curlow,curhigh,lasthigh,lastlow;
   for(shiftZZ=Bars-ExtDepth; shiftZZ>=0; shiftZZ--){val=Low;
   if(val==lastlow) val=0.0;else {lastlow=val;
   if((Low-val)>(ExtDeviation*ZZPoint)) val=0.0;else {
   for(back=1; back<=ExtBackstep; back++){res=ZZBufUp;
   if(res!=0.0) res=res+ZZdelta;if((res!=0.0)&&(res>val)) ZZBufUp=0.0;}}}
   if(val==0.0) ZZBufUp=0.0; else ZZBufUp=val-ZZdelta;
   val=High;
   if(val==lasthigh) val=0.0;else { lasthigh=val;
   if((val-High)>(ExtDeviation*ZZPoint)) val=0.0; else {
   for(back=1; back<=ExtBackstep; back++){ res=ZZBufDn;
   if(res!=0.0) res=res-ZZdelta;if((res!=0.0)&&(res<val)) ZZBufDn=0.0;}}}
   if(val==0.0) ZZBufDn=0.0; else ZZBufDn=val+ZZdelta;}
//+--- Semafor final cutting ----------------------------------------------------------------------------------------+
   lasthigh=-1;lasthighpos=-1;lastlow=-1;lastlowpos=-1;
   for(shiftZZ=Bars-ExtDepth; shiftZZ>=0; shiftZZ--){ curlow=ZZBufUp;
   if( curlow != 0.0)curlow =curlow+ZZdelta;   curhigh=ZZBufDn;
   if(curhigh != 0.0) curhigh = curhigh-ZZdelta;if((curlow==0.0)&&(curhigh==0.0)) continue;
   if(curhigh!=0.0){if(lasthigh>0.0){ if(lasthigh<curhigh) ZZBufDn=0.0; else ZZBufDn=0.0;}
   if(lasthigh<curhigh || lasthigh<0.0){lasthigh=curhigh; lasthighpos=shiftZZ;} lastlow=-1;}
   if(curlow!=0.0){if(lastlow>0.0){   if(lastlow>curlow) ZZBufUp=0.0; else ZZBufUp=0.0;}
   if((curlow<lastlow)||(lastlow<0.0)){lastlow=curlow; lastlowpos=shiftZZ;} lasthigh=-1;}}
   for(shiftZZ=Bars-1;shiftZZ>=0;shiftZZ--){if(shiftZZ>=Bars-ExtDepth)ZZBufUp=0.0; else {break;}} return(0);}
//+------------------------------------------------------------------------------------------------------------------+
   int Str2Massive(string VStr,int& MCount,int& VMass[]){int val=StrToInteger(VStr); if(val>0){MCount++;
   int mc=ArrayResize(VMass,MCount); if(mc==0)return(-1); VMass=val; return(1);} else return(0);}
//+------------------------------------------------------------------------------------------------------------------+
   int IntFromStr(string ValStr,int& MCount, int& VMass[]){if(StringLen(ValStr)==0) return(-1);
   string SS=ValStr; int NP=0; string CS; MCount=0; ArrayResize(VMass,MCount);
   while(StringLen(SS)>0){NP=StringFind(SS,",");
   if(NP>0){CS=StringSubstr(SS,0,NP); SS=StringSubstr(SS,NP+1,StringLen(SS));} else {
   if(StringLen(SS)>0){CS=SS; SS="";}} if(Str2Massive(CS,MCount,VMass)==0){return(-2);}} return(1);}
//+------------------------------------------------------------------------------------------------------------------+
   double getPoint(bool custommode){string symbol=Symbol();double point = MarketInfo(symbol,MODE_POINT);
   int pluspos = StringFind(symbol,"+",0);int minuspos = StringFind(symbol,"-",0);
   if(pluspos>0) symbol=StringSubstr(symbol,0,pluspos); else if(minuspos>0) symbol=StringSubstr(symbol,0,minuspos);
   if(point<0.000000001) point=MarketInfo(symbol,MODE_POINT);if(! custommode) return(point); else {
   if(symbol=="NOKJPY"||symbol=="SEKJPY"||symbol=="GBPDKK"||symbol=="GBPNOK"||symbol=="USDSKK"||symbol=="XAG")
   point=MarketInfo(symbol,MODE_POINT);
      else if (StringFind(symbol,"JPY",3) == 3 || symbol == "XAUUSD") point = 0.01;
      else if (StringFind(symbol,"USD",0) >= 0
            || StringFind(symbol,"EUR",0) >= 0
            || StringFind(symbol,"GBP",0) >= 0
            || StringFind(symbol,"CAD",0) >= 0
            || StringFind(symbol,"NZD",0) >= 0) point = 0.0001;}
   if(point<0.000000001) point=Point; if(point<0.000000001) point=0.01; return(point);}//end of getPoint
//+------------------------------------------------------------------------------------------------------------------+
   datetime BofYr(datetime T){return (StrToTime(TimeYear(T)+".1.1 00:00"));}
//+------------------------------------------------------------------------------------------------------------------+
   void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam){
        if(id==CHARTEVENT_OBJECT_CLICK && ObjectGet(sparam,OBJPROP_TYPE)==OBJ_BUTTON){
   if(StringFind(sparam,ID+":back:",0)==0) ObjectSet(sparam,OBJPROP_STATE,false);
        if(IsStopped()) return; fSetBuffers();} OnInit();}
//+------------------------------------------------------------------------------------------------------------------+
   void fSetBuffers(){int iChartScale = int(ChartGetInteger(0,CHART_SCALE));
        if(getChartScale == iChartScale) return;
        getChartScale = iChartScale; int iWidth=0; switch(iChartScale){
                case 0: iWidth = 1; break;
                case 1: iWidth = 1; break;
                case 2: iWidth = 2; break;
                case 3: iWidth = 4; break;
                case 4: iWidth = 7; break;
                case 5: iWidth =14; break;}
        if(showRIBBON)         Type=DRAW_HISTOGRAM; else Type=DRAW_NONE;
   SetIndexStyle(0,Type,0,iWidth,RibColUP);
   SetIndexStyle(1,Type,0,iWidth,RibColDN);
   SetIndexStyle(2,Type,0,iWidth,RibColUP);
   SetIndexStyle(3,Type,0,iWidth,RibColDN);
        if(showHA)             Type=DRAW_HISTOGRAM; else Type=DRAW_NONE;
        SetIndexStyle(24,Type,0,iWidth,cBearish);
        SetIndexStyle(25,Type,0,iWidth,cBullish);
        if(showTREND)          Type=DRAW_LINE; else Type=DRAW_NONE;
        SetIndexStyle(26,Type,0,iWidth+4,TRENDbgdclr);
        SetIndexStyle(27,Type,0,iWidth+2,TRENDupclr);
        SetIndexStyle(28,Type,0,iWidth+2,TRENDdnclr);
        SetIndexStyle(29,Type,0,iWidth+2,TRENDdnclr);        ChartRedraw();}
//+---StopLight Function---------------------------------------------------------------------------------------------+
        int Determine_StopLight(){int xpos=18,ypos=66;if(showSpotLight){if(!IsConnected())return(PowerFailure);
   if(trend== 1 && TMA1bandDn<TMA2bandDn && ccitrend>=0.){
   ObjectDelete(ID+"tls0102");ObjectDelete(ID+"tls0103");
   makeSTOP(ID+"tls0101",xpos+4,ypos+2,"BUY", tsize,FontType,textcolUP);return(GreenLight);}
   if(trend==-1 && TMA1bandUp>TMA2bandUp && ccitrend<-0.){
   ObjectDelete(ID+"tls0101");ObjectDelete(ID+"tls0103");
   makeSTOP(ID+"tls0102",xpos-2,ypos+2,"SELL",tsize,FontType,textcolDN);return(RedLight);}
   ObjectDelete(ID+"tls0101");ObjectDelete(ID+"tls0102");
   makeSTOP(ID+"tls0103",xpos-3,ypos+2,"WAIT",tsize,FontType,textcolWT);return(OrangeLight);} return(PowerFailure);}
//+------------------------------------------------------------------------------------------------------------------+
   void Show_TrafficLights(int TrafficLight){color cStopLights; switch(TrafficLight){
   case GreenLight:   cStopLights=clrGreen;                  Color_Chart(GreenLight); break;
   case OrangeLight:    cStopLights=clrOrange;                  Color_Chart(OrangeLight); break;
   case RedLight:       cStopLights=C'238,130,238';                Color_Chart(RedLight); break;
   case PowerFailure:   cStopLights=Panetpgd2; break;   default:cStopLights=Panetpgd2; break;}
//+------------------------------------------------------------------------------------------------------------------+
   if(showSpotLight){double OpToday=iOpen(NULL,1440,0); color Panetpgd1=C'80,90,100';
   if(Close>OpToday){Panetpgd1=clrLime;} else Panetpgd1=clrDeepPink;
   makeTLS(ID+"tls0001",5,31); ObjectSetText(ID+"tls0001","g",70,"Webdings",Panelcol);
   makeTLS(ID+"tls0004",8,35); ObjectSetText(ID+"tls0004","n",65,"Webdings",Panetpgd1); for(int is=0;is<1;is++){
   makeTLS(ID+"tls00"+(is+4),13,40+is*92); ObjectSetText(ID+"tls00"+(is+4),"n",58,"Webdings",cStopLights);}}}
//+------------------------------------------------------------------------------------------------------------------+
   void makeSTOP(string tls1,int x,int y,string Text,int fontSize,string Font,color Color){
         ObjectDelete(tls1); ObjectCreate(tls1,OBJ_LABEL,Window,0,0);
            ObjectSet(tls1,OBJPROP_CORNER,InfoBoxCorner);
            ObjectSet(tls1,OBJPROP_XDISTANCE,x-1+posLR);
            ObjectSet(tls1,OBJPROP_YDISTANCE,y+3+posUD);
            ObjectSet(tls1,OBJPROP_BACK,false);
          ObjectSetText(tls1,Text,tsize,FontType,Color);}
//+------------------------------------------------------------------------------------------------------------------+
   void makeTLS(string tls2,int x,int y){ObjectCreate(tls2,OBJ_LABEL,Window,0,0);
             ObjectSet(tls2,OBJPROP_CORNER,InfoBoxCorner);
             ObjectSet(tls2,OBJPROP_XDISTANCE,x-1+posLR);
             ObjectSet(tls2,OBJPROP_YDISTANCE,y+9+posUD);}
//+------------------------------------------------------------------------------------------------------------------+
   void iPanel(string tls3,int x,int y,string Text,int fontSize,string Font,color Color){
         ObjectCreate(tls3,OBJ_LABEL,Window,0,0);
            ObjectSet(tls3,OBJPROP_CORNER,InfoBoxCorner);
            ObjectSet(tls3,OBJPROP_XDISTANCE,x+posLR);
            ObjectSet(tls3,OBJPROP_YDISTANCE,y+2+posUD);
            ObjectSet(tls3,OBJPROP_BACK,false);
      ObjectSetText(tls3,Text,fontSize,Font,Color);}
//+------------------------------------------------------------------------------------------------------------------+
   void iOBOS(string tls4,int x,int y,string Text,int fontSize,string Font,color Color){
      ObjectCreate(tls4,OBJ_LABEL,0,0,0);
         ObjectSet(tls4,OBJPROP_CORNER,0);
         ObjectSet(tls4,OBJPROP_XDISTANCE,x);
         ObjectSet(tls4,OBJPROP_YDISTANCE,y);
         ObjectSet(tls4,OBJPROP_BACK,false);
       ObjectSetText(tls4,Text,fontSize,Font,Color);}
//+------------------------------------------------------------------------------------------------------------------+
   void Color_Chart(int signal){static color LastColor;color Color=C'20,20,40';if(Color==LastColor)return;
   LastColor=Color; ChartSetInteger(0,CHART_COLOR_BACKGROUND,Color); ChartRedraw(0);}
//+----Clean Chart Function------------------------------------------------------------------------------------------+
   void CleanUpAisle1(string nature){int obj_total= ObjectsTotal(); for(int il=obj_total; il>=0; il--){
   string name=ObjectName(il); if(StringSubstr(name,0,5)==(nature)) ObjectDelete(name);}}//End CleanUpAisle1

bigwin 发表于 2024-10-16 13:47:54

MQL4源码:
#property copyright "Bigwin"
#property description "XARDFX-38"
#property description "指标"
#property indicator_chart_window
#property indicator_buffers 32
#define Version "XARDFX-38"
string ID="Xard>",tFx,TFx="当前时间框架",TimeFrame="当前时间框架";
//+------------------------------------------------------------------------------------------------------------------+
#include <WinUser32.mqh>
extern string Indicator = Version;
extern string STR00 = "<<<==== 图表设置 ====>>>";
enum menuupdatemode {UpdatePerSecond, UpdatePerMilliseconds}; // 更新模式
extern menuupdatemode UpdateMode = UpdatePerSecond; // 每秒更新
extern int UpdateEveryXseconds = 1, UpdateEveryXmilliseconds = 1; // 每 X 秒/毫秒更新
extern bool AutoRefresh = false; // 自动刷新
extern ENUM_TIMEFRAMES RefreshPeriod = PERIOD_M15; // 刷新周期为15分钟
int hWindow = 0, oldBars = 0;
extern bool AutoArrangeChart = true, cleanChart = false; // 自动整理图表
extern color chartBackgroundColor = C'162,162,162', chartForegroundColor = clrBlack, // 背景颜色和前景颜色
             chartGridColor = clrDimGray, chartBarUpColor = clrBlue, chartBarDownColor = clrRed,
             chartBullCandleColor = clrBlue, chartBearCandleColor = clrRed,
             chartLineGraphColor = clrNONE, charttradeEntryColor = clrLimeGreen,
             chartAskLineColor = clrOrangeRed, charttradeLevelColor = clrOrangeRed;
//+------------------------------------------------------------------------------------------------------------------+
string STR01 = "<<<==== TMA1 设置 ====>>>";
bool showTMA1 = false;
int TMA1per = 28, TMA1atr = 100; // TMA1周期和ATR
double TMA1atrMulti = 2.618;
double TMA1[], TMA1up[], TMA1dn[], TMA1bandUp[], TMA1bandDn[];
//+------------------------------------------------------------------------------------------------------------------+
string STR02 = "<<<==== TMA2 设置 ====>>>";
bool showTMA2 = true, Extrapolate = true; // 是否显示TMA2并进行推断
int TMA2per = 28, TMA2atr = 100;
ENUM_APPLIED_PRICE TMA2price = PRICE_WEIGHTED; // 使用加权价格
double TMA2atrMulti = 2.618;
double TMA2[], TMA2up[], TMA2dn[], TMA2bandUp[], TMA2bandDn[];
double slope[], trend1[], trend2[];
//+------------------------------------------------------------------------------------------------------------------+
string STR03 = "<<<==== 色带设置 ====>>>";
bool showRIBBON = true;
int barWidth = 4;
double MA1[], MA2[], MA3[], MA4[];
color RibColUP = C'30,144,255', RibColDN = C'255,85,160', LineCol = C'120,140,120';
//+------------------------------------------------------------------------------------------------------------------+
string STR04 = "<<<==== 信号灯设置 ====>>>";
         bool showSemafor                = true;
          int Period2                  = 34, Period3 = 84;
       string DevStep2="0,5",DevStep3="0,5"; color cU,cD;
          int S2size=4,S3size=5,S2kod=108,S3kod=162; int HPeriod,ZPeriod,Dev2,Dev3,Stp2,Stp3;
       double HPup[],HPdn[],ZPup[],ZPdn[],ZZdelta,ZZPoint,deltaPips=0.05;
//+------------------------------------------------------------------------------------------------------------------+
    //+------------------------------------------------------------------------------------------------------------------+
string STR05 = "<<<==== 开盘线设置 ====>>>";
bool showOpenline = true; // 是否显示开盘线
double TimeShiftMins = 0, BufPOL, POLb[], POL0[], POL1[], VAL;
int tFrame = 0;
datetime StartTime;
//+------------------------------------------------------------------------------------------------------------------+
string STR06 = "<<<==== Heiken Ashi(HA)设置 ====>>>";
bool showHA = false; // 是否显示HA蜡烛图
color cBullish = clrBlue, cBearish = clrRed; // 看涨和看跌颜色
double haOpen[], haClose[], haHighLow[], haLowHigh[];
int getChartScale = WRONG_VALUE;
//+------------------------------------------------------------------------------------------------------------------+
string STR07 = "<<<==== 趋势线设置 ====>>>";
bool showTREND = true; // 是否显示趋势线
color TRENDbgdclr = C'100,100,100', TRENDupclr = clrDeepSkyBlue, TRENDdnclr = clrViolet; // 颜色设置
int TRENDper = 7, TRENDtf = 0, TRENDshft = 0, TRENDmode = MODE_SMMA, TRENDtype = PRICE_CLOSE;
bool returnBars, calculateTREND;
double TREND[], TRENDbgd[], TRENDdna[], TRENDdnb[], trend[], ccitrend[];
//+------------------------------------------------------------------------------------------------------------------+
string STR08 = "<<<==== 信息框设置 ====>>>";
bool showINFOBOX = true, showSpotLight = true; // 是否显示信息框和聚光灯
color PanelBackColor = C'40,40,40', PanelForeColor = C'20,20,20', PanelBorderColor = C'120,120,120'; // 面板颜色设置
int PanelBorderWidth = 1, InfoBoxCorner = 1, Window = 0, posLR = 6, posUD = -20, tsize = 19;
color Boxbgd = C'30,40,50', Panelcol = clrSnow;
double DecNos, CLOSE, myPoint, mPoint, OpenToday, CloseToday, ADR1, ADR5, ADR10, ADR20, ADRavg;
double SetPoint() { if (Digits < 4) mPoint = 0.01; else mPoint = 0.0001; return mPoint; }
color textcolUP = clrSnow, textcolDN = clrSnow, textcolWT = clrSnow, Panetpgd2 = C'40,50,60';
//+------------------------------------------------------------------------------------------------------------------+
string STR09 = "<<<==== 符号标题设置 ====>>>";
bool showSymbolHeader = true; // 是否显示符号标题
int LR = 310, UD = -10, HDRsize = 50;
//+------------------------------------------------------------------------------------------------------------------+
string STR10 = "<<<==== Xmath 设置 ====>>>";
bool showXmath = true; // 是否显示Xmath计算结果
double dmml = 0, dvtl = 0, sumx = 0, v1x = 0, v2x = 0, mn = 0, mx = 0, x1 = 0, x2 = 0, x3 = 0, x4 = 0, x5 = 0, x6 = 0,
       y1 = 0, y2 = 0, y3 = 0, y4 = 0, y5 = 0, y6 = 0, tx = 0, octave = 0, fractal = 0, rangex = 0, finalH = 0, finalL = 0, mmlx;
string ln_txt, ln_tx, buff_str = "";
int Px = 64, StepBackx = 0, bn_v1x = 0, bn_v2x = 0, OctLinesCnt = 13, mml_thk = 8, mml_clr, mml_shft = 3, nTime = 0,
    CurPeriod = 0, nDigits = 0, frametemp = 0, f = 0, gb = 0, gbT = 0, mP = 0, lperiod = 0, d = 0, ts = 0, mml_wdth;
//+------------------------------------------------------------------------------------------------------------------+
string STR11 = "<<<==== 出价比例设置 ====>>>";
bool showD1 = true; // 是否显示出价比例
int BuyRatio = 90, SellRatio = 10; // 买入/卖出比例
int fontsize1 = 16;
double D1pct;
color clrD1pct, clrPAIR = clrGray;
int X = 0, Y = 0;
//+------------------------------------------------------------------------------------------------------------------+
extern string STR12 = "<<<==== 警报设置 ====>>>";
extern bool alertsOn = true; // 启用警报
extern bool alertsOnStopLight = true; // 启用信号灯警报
extern bool alertsOnCurrent = true; // 对当前柱启用警报
extern bool alertsMessage = true; // 启用消息警报
extern bool alertsSound = false; // 启用声音警报
extern bool alertsNotify = true; // 启用通知
extern bool alertsEmail = false; // 启用邮件警报
string soundFile = "alert2.wav"; // 声音文件
//+------------------------------------------------------------------------------------------------------------------+
bool calculateValue;
string FontType = "Arial Black", SymPair = "", indicatorFileName;
double data1;
int timeFrame, BarsCount = 1000, Type, Type2, win, FontSize = 14, FontSize2 = 12, pipsize;

//+----OnInit Function-----------------------------------------------------------------------------------------------+
   int OnInit(){if(UpdateMode == UpdatePerSecond) EventSetTimer(UpdateEveryXseconds); else
   if(UpdateMode == UpdatePerMilliseconds) EventSetMillisecondTimer(UpdateEveryXmilliseconds);
//+------------------------------------------------------------------------------------------------------------------+
   if(AutoArrangeChart){ChartSetInteger(0,CHART_COLOR_BACKGROUND,chartBackgroundColor);
                        ChartSetInteger(0,CHART_COLOR_FOREGROUND,chartForegroundColor);
                        ChartSetInteger(0,CHART_COLOR_GRID,chartGridColor);
                        ChartSetInteger(0,CHART_COLOR_CHART_UP,chartBarUpColor);
                        ChartSetInteger(0,CHART_COLOR_CHART_DOWN,chartBarDownColor);
                        ChartSetInteger(0,CHART_COLOR_CANDLE_BULL,chartBullCandleColor);
                        ChartSetInteger(0,CHART_COLOR_CANDLE_BEAR,chartBearCandleColor);
                        ChartSetInteger(0,CHART_COLOR_CHART_LINE,chartLineGraphColor);
                        ChartSetInteger(0,CHART_COLOR_VOLUME,charttradeEntryColor);
                        ChartSetInteger(0,CHART_COLOR_ASK,chartAskLineColor);
                        ChartSetInteger(0,CHART_COLOR_STOP_LEVEL,charttradeLevelColor);
                        ChartSetInteger(0,CHART_MODE,CHART_CANDLES);
                        ChartSetInteger(0,CHART_SHIFT,true);
                        ChartSetInteger(0,CHART_SHOW_OHLC,false);
                        ChartSetInteger(0,CHART_SHOW_GRID,false);}
//+------------------------------------------------------------------------------------------------------------------+   
   int Buffers=32,Buf=-1;IndicatorBuffers(Buffers);TMA2per=MathMax(TMA2per,1);
   if(TimeFrame==0 || TimeFrame<Period()) TimeFrame=Period();timeFrame=stringToTimeFrame(TimeFrame);
   IndicatorDigits(Digits); IndicatorShortName(ID); win=WindowFind(ID);
//+------------------------------------------------------------------------------------------------------------------+
   if(AutoRefresh)hWindow=WindowHandle(Symbol(),Period());oldBars=iBars(NULL,RefreshPeriod);
//+------------------------------------------------------------------------------------------------------------------+
   if(showRIBBON)         Type=DRAW_HISTOGRAM; else Type=DRAW_NONE;
   Buf+=1; SetIndexBuffer(Buf,MA1);      
   Buf+=1; SetIndexBuffer(Buf,MA2);      
   Buf+=1; SetIndexBuffer(Buf,MA3);      
   Buf+=1; SetIndexBuffer(Buf,MA4);       fSetBuffers();
   if(showTMA1)         Type=DRAW_LINE; else Type=DRAW_NONE;
   Buf+=1; SetIndexBuffer(Buf,TMA1);       SetIndexStyle(Buf,DRAW_NONE);      SetIndexDrawBegin(Buf,TMA1per);
   Buf+=1; SetIndexBuffer(Buf,TMA1bandUp); SetIndexStyle(Buf,Type,0,1,clrRed);SetIndexDrawBegin(Buf,TMA1per);
   Buf+=1; SetIndexBuffer(Buf,TMA1bandDn); SetIndexStyle(Buf,Type,0,1,clrRed);SetIndexDrawBegin(Buf,TMA1per);
   if(showTMA2)         Type=DRAW_LINE; else Type=DRAW_NONE;
   Buf+=1; SetIndexBuffer(Buf,TMA2);       SetIndexStyle(Buf,DRAW_NONE);      SetIndexDrawBegin(Buf,TMA2per);
   Buf+=1; SetIndexBuffer(Buf,TMA2up);   SetIndexStyle(Buf,DRAW_NONE);      SetIndexDrawBegin(Buf,TMA2per);
   Buf+=1; SetIndexBuffer(Buf,TMA2dn);   SetIndexStyle(Buf,DRAW_NONE);      SetIndexDrawBegin(Buf,TMA2per);
   Buf+=1; SetIndexBuffer(Buf,TMA2bandUp); SetIndexStyle(Buf,Type,0,2,clrSnow); SetIndexDrawBegin(Buf,TMA2per);
   Buf+=1; SetIndexBuffer(Buf,TMA2bandDn); SetIndexStyle(Buf,Type,0,2,clrSnow); SetIndexDrawBegin(Buf,TMA2per);
   Buf+=1; SetIndexBuffer(Buf,slope);      SetIndexStyle(Buf,DRAW_NONE);
   Buf+=1; SetIndexBuffer(Buf,trend1);   SetIndexStyle(Buf,DRAW_NONE);
   Buf+=1; SetIndexBuffer(Buf,trend2);   SetIndexStyle(Buf,DRAW_NONE);
//+------------------------------------------------------------------------------------------------------------------+
   if(showSemafor)      ZZPoint=getPoint(true);ZZdelta=deltaPips*ZZPoint;int CDev=0,CSt=0,Mass[],C=0;
   if(Period2>0) HPeriod=MathCeil(Period2*Period()); else HPeriod=0;
   if(Period3>0) ZPeriod=MathCeil(Period3*Period()); else ZPeriod=0;
//+------------------------------------------------------------------------------------------------------------------+
   if(Period2>0){cU=clrSnow; cD=clrSnow; Type=DRAW_ARROW;
   Buf+=1; SetIndexBuffer(Buf,HPup);      SetIndexStyle(Buf,Type,0,S2size,cU);
         SetIndexArrow(Buf,S2kod);      SetIndexEmptyValue(Buf,0.0);
   Buf+=1; SetIndexBuffer(Buf,HPdn);      SetIndexStyle(Buf,Type,0,S2size,cD);
         SetIndexArrow(Buf,S2kod);      SetIndexEmptyValue(Buf,0.0);}
//+------------------------------------------------------------------------------------------------------------------+
   if(showSemafor)
   if(Period3>0){cU=clrBlue; cD=clrRed; Type=DRAW_ARROW;
   Buf+=1; SetIndexBuffer(Buf,ZPup);      SetIndexStyle(Buf,Type,0,S3size,cU);
            SetIndexArrow(Buf,S3kod);   SetIndexEmptyValue(Buf,0.0);
   Buf+=1; SetIndexBuffer(Buf,ZPdn);      SetIndexStyle(Buf,Type,0,S3size,cD);
            SetIndexArrow(Buf,S3kod);   SetIndexEmptyValue(Buf,0.0);}
//+------------------------------------------------------------------------------------------------------------------+
   if(IntFromStr(DevStep2,C,Mass)==1){Stp2=Mass; Dev2=Mass;}
   if(IntFromStr(DevStep3,C,Mass)==1){Stp3=Mass; Dev3=Mass;}
//+------------------------------------------------------------------------------------------------------------------+
   if(showOpenline)       Type=DRAW_LINE; else Type=DRAW_NONE; if(Period()>=PERIOD_W1) Type=DRAW_NONE;
   Buf+=1; SetIndexBuffer(Buf,POLb);      SetIndexStyle(Buf,Type,0,3+2,clrBlack);
   Buf+=1; SetIndexBuffer(Buf,POL0);      SetIndexStyle(Buf,Type,0,3,clrYellow);
   Buf+=1; SetIndexBuffer(Buf,POL1);      SetIndexStyle(Buf,Type,0,3,clrAqua);
//+------------------------------------------------------------------------------------------------------------------+
   if(showHA)             Type=DRAW_HISTOGRAM; else Type=DRAW_NONE;
   Buf+=1; SetIndexBuffer(Buf,haLowHigh); SetIndexEmptyValue(Buf,0); SetIndexStyle(Buf,Type,0,1,cBearish);
        Buf+=1; SetIndexBuffer(Buf,haHighLow); SetIndexEmptyValue(Buf,0); SetIndexStyle(Buf,Type,0,1,cBullish);
        Buf+=1; SetIndexBuffer(Buf,haOpen);    SetIndexEmptyValue(Buf,0);
        Buf+=1; SetIndexBuffer(Buf,haClose);   SetIndexEmptyValue(Buf,0); fSetBuffers();
//+------------------------------------------------------------------------------------------------------------------+
   if(showTREND)          Type=DRAW_LINE; else Type=DRAW_NONE;
   Buf+=1; SetIndexBuffer(Buf,TRENDbgd);SetIndexDrawBegin(Buf,TRENDper+1);
   Buf+=1; SetIndexBuffer(Buf,TREND);   SetIndexDrawBegin(Buf,TRENDper+1);
   Buf+=1; SetIndexBuffer(Buf,TRENDdna);SetIndexDrawBegin(Buf,TRENDper+1);
   Buf+=1; SetIndexBuffer(Buf,TRENDdnb);SetIndexDrawBegin(Buf,TRENDper+1);
   Buf+=1; SetIndexBuffer(Buf,trend);   SetIndexStyle(Buf,DRAW_NONE); fSetBuffers();
//+------------------------------------------------------------------------------------------------------------------+
   Buf+=1; SetIndexBuffer(Buf,ccitrend);SetIndexStyle(Buf,DRAW_NONE);
   if(Buffers != Buf+1) Print("*******Buffer MisMatch!!!   ",Buffers," ",Buf);
   for(int Bufx=0;Bufx<indicator_buffers;Bufx++){SetIndexLabel(Bufx,NULL);}
//+------------------------------------------------------------------------------------------------------------------+
   if(SymPair=="") SymPair=Symbol(); myPoint=SetPoint();
      if(StringFind(Symbol(),"JPY",0) != -1)   DecNos=2;
   else if(StringSubstr(Symbol(),0,5)=="UKOil")    DecNos=2;
   else if(StringSubstr(Symbol(),0,6)=="BTCUSD")   DecNos=1;
   else if(StringSubstr(Symbol(),0,7)=="CHINA50")DecNos=0;
   else if(StringSubstr(Symbol(),0,6)=="US2000")   DecNos=1;
   else if(StringSubstr(Symbol(),0,5)=="US500")    DecNos=1;
   else if(StringSubstr(Symbol(),0,6)=="ETHUSD")   DecNos=2;
   else if(StringSubstr(Symbol(),0,6)=="LTCUSD")   DecNos=3;
   else if(StringSubstr(Symbol(),0,6)=="USOUSD")   DecNos=3;
   else if(StringSubstr(Symbol(),0,6)=="SPX500")   DecNos=1;
   else if(StringSubstr(Symbol(),0,8)=="USDOLLAR") DecNos=3;
   else if(StringSubstr(Symbol(),0,5)=="JP225")    DecNos=0;
   else if(StringSubstr(Symbol(),0,4)=="HK50")   DecNos=0;
   else if(StringSubstr(Symbol(),0,5)=="UK100")    DecNos=0;
   else if(StringSubstr(Symbol(),0,7)=="FTSE100")DecNos=1;
   else if(StringSubstr(Symbol(),0,6)=="XAUUSD")   DecNos=1;
   else if(StringSubstr(Symbol(),0,6)=="XAGUSD")   DecNos=3;
   else if(StringSubstr(Symbol(),0,6)=="USDMXN")   DecNos=3;
   else if(StringSubstr(Symbol(),0,6)=="NDX100")   DecNos=1;
   else if(StringSubstr(Symbol(),0,4)=="WS30")   DecNos=0; else DecNos=4;
   if(SymPair=="") SymPair=Symbol();
      if(StringFind(Symbol(),"JPY",0) != -1)   pipsize=10;
   else if(StringSubstr(Symbol(),0,8)=="USDOLLAR") pipsize=10;
   else if(StringSubstr(Symbol(),0,6)=="BTCUSD")   pipsize=100;
   else if(StringSubstr(Symbol(),0,7)=="CHINA50")pipsize=100;
   else if(StringSubstr(Symbol(),0,6)=="LTCUSD")   pipsize=1;
   else if(StringSubstr(Symbol(),0,6)=="ASX200")   pipsize=100;
   else if(StringSubstr(Symbol(),0,4)=="HK50")   pipsize=100;
   else if(StringSubstr(Symbol(),0,5)=="JP225")    pipsize=100;
   else if(StringSubstr(Symbol(),0,6)=="USDTRY")   pipsize=100;
   else if(StringSubstr(Symbol(),0,5)=="UK100")    pipsize=100;
   else if(StringSubstr(Symbol(),0,7)=="FTSE100")pipsize=100;
   else if(StringSubstr(Symbol(),0,6)=="USDMXN")   pipsize=100;
   else if(StringSubstr(Symbol(),0,6)=="XAUUSD")   pipsize=10;
   else if(StringSubstr(Symbol(),0,6)=="XAGUSD")   pipsize=1;
   else if(StringSubstr(Symbol(),0,4)=="WS30")   pipsize=100;
   else if(StringSubstr(Symbol(),0,6)=="NDX100")   pipsize=100; else pipsize=10;
//+----Xmath---------------------------------------------------------------------------------------------------------+
   switch(Period()){
   case    1: Px=15360;tx=10; break;   case    5: Px=3072; tx=20; break;
   case   15: Px=1024;   tx=20; break;   case   30: Px=512;tx=20; break;
   case   60: Px=256;    tx=50; break;   case240: Px=64;   tx=50; break;
   case 1440:            tx=50; break;   case 10080:         tx=50; break;default:tx=50; break;}
   ln_txt ="                               [-2/8] "; mml_wdth =0; ln_tx =""; mml_clr=clrSnow;
   ln_txt ="                               [-1/8] "; mml_wdth =0; ln_tx =""; mml_clr=clrSnow;
   ln_txt ="                               ";mml_wdth =0; ln_tx =""; mml_clr=clrSnow;
   ln_txt ="                               ";mml_wdth =0; ln_tx =""; mml_clr=clrSnow;
   ln_txt ="                               ";mml_wdth =0; ln_tx =""; mml_clr=clrSnow;
   ln_txt ="                               ";mml_wdth =0; ln_tx =""; mml_clr=clrSnow;
   ln_txt ="                               ";mml_wdth =0; ln_tx =""; mml_clr=clrSnow;
   ln_txt ="                               ";mml_wdth =0; ln_tx =""; mml_clr=clrSnow;
   ln_txt ="                               ";mml_wdth =0; ln_tx =""; mml_clr=clrSnow;
   ln_txt ="                               ";mml_wdth =0; ln_tx =""; mml_clr=clrSnow;
   ln_txt="                               ";mml_wdth=0; ln_tx=""; mml_clr=clrSnow; mml_shft=0;
   ln_txt="                               [+1/8] "; mml_wdth=0; ln_tx=""; mml_clr=clrSnow;mml_thk=3;
   ln_txt="                               [+2/8] "; mml_wdth=0; ln_tx=""; mml_clr=clrSnow;
   indicatorFileName = WindowExpertName();
   calculateValue    = (TimeFrame=="calculateValue"); if (calculateValue) return(0);
   returnBars      = (TimeFrame=="returnBars");   if (returnBars)   return(0);
   timeFrame         = stringToTimeFrame(TimeFrame);return(INIT_SUCCEEDED);}//End OnInit
//+----deinit Function-----------------------------------------------------------------------------------------------+
   void deinit(){ int reason; switch(reason){
      case REASON_CHARTCHANGE :
      case REASON_RECOMPILE   :
      case REASON_CLOSE       : break;
                      default : {
   for(int i=0;i<OctLinesCnt;i++){buff_str="mmlx"+i;
   ObjectDelete(buff_str); buff_str = "mml_txtx"+i; ObjectDelete(buff_str);}            
      CleanUpAisle1(ID); string lookFor = ID+":"; int lookForLength = StringLen(lookFor);
   for(int io=ObjectsTotal()-1; io>=0; io--){string objectName=ObjectName(io);
   if(StringSubstr(objectName,0,lookForLength)==lookFor) ObjectDelete(objectName);}}}}
//+------------------------------------------------------------------------------------------------------------------+
   class CFix { } ExtFix;
//+----OnCalculate Function------------------------------------------------------------------------------------------+
   int OnCalculate(const int rates_total,
                   const int prev_calculated,
                   const datetime &time[],
                   const double &open[],
                   const double &high[],
                   const double &low[],
                   const double &close[],
                   const long &tick_volume[],
                   const long &volume[],
                   const int &spread[]){fSetBuffers();
//+------------------------------------------------------------------------------------------------------------------+
   if(AutoRefresh){if(oldBars<iBars(NULL,RefreshPeriod) && hWindow!=0){int message;
   switch(Period()){case   1: message= 33137; break;
                  case   5: message= 33138; break;
                  case    15: message= 33139; break;
                  case    30: message= 33140; break;
                  case    60: message= 33135; break;
                  case   240: message= 33136; break;
                  case1440: message= 33134; break;
                  case 10080: message= 33141; break;
                     default: message= 33137; break;}
   PostMessageA (hWindow,WM_COMMAND,33141,0);   // switch to weekly TF
   PostMessageA (hWindow,WM_COMMAND,message,0); // switch to original TF
   oldBars=iBars(NULL,RefreshPeriod);}}//End AutoRefresh
   int counted_bars=IndicatorCounted();
   int i,j,k,limit; double ld_Range;
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--; limit=MathMin(Bars-counted_bars+TMA2per,Bars-1);
   if(returnBars){TMA2 = limit+1; return(0);}
//+---TMA1 Function--------------------------------------------------------------------------------------------------+
   for (i=limit; i>=0; i--){
          TMA1 = EMPTY_VALUE;
      TMA1up = EMPTY_VALUE;
      TMA1dn = EMPTY_VALUE;
          TMA1 = iMA(NULL,0,TMA1per,0,MODE_LWMA,PRICE_CLOSE,i);
         ld_Range = iATR(NULL,0,TMA1atr,i+10);
    TMA1bandUp = TMA1 + (ld_Range * TMA1atrMulti);
    TMA1bandDn = TMA1 - (ld_Range * TMA1atrMulti);}
//+---TMA2 Function--------------------------------------------------------------------------------------------------+
   if(calculateValue || timeFrame==Period()){
   if(slope==-1) CleanPoint(limit,TMA2up,TMA2dn);
   for(i=limit;i>=0;i--){
   if(Extrapolate || (!Extrapolate && i>TMA2per)){
            double sum= (TMA2per+1)*iMA(NULL,0,1,0,MODE_SMA,TMA2price,i);
            double sumw = (TMA2per+1);
   for(j=1, k=TMA2per; j<=TMA2per; j++, k--){
             sum+= k*iMA(NULL,0,1,0,MODE_SMA,TMA2price,i+j);
             sumw += k;
   if(j<=i){ sum+= k*iMA(NULL,0,1,0,MODE_SMA,TMA2price,i-j);
             sumw += k;}}
   double range = iATR(NULL,0,TMA2atr,i+10)*TMA2atrMulti;
            TMA2 = sum/sumw;
      TMA2bandUp = TMA2+range;
      TMA2bandDn = TMA2-range;} else {
            TMA2 = TMA2;
      TMA2bandUp = TMA2bandUp;
      TMA2bandDn = TMA2bandDn;}         
          TMA2up = EMPTY_VALUE;
          TMA2dn = EMPTY_VALUE;
         slope = slope;
          trend1 = 0;
          trend2 = trend2;
   if(TMA2> TMA2) slope = 1;
   if(TMA2< TMA2) slope =-1;
   //if(High   > TMA2bandUp)    trend1 = 1;
   //if(Low    < TMA2bandDn)    trend1 =-1;
   if(Close> TMA2bandUp)    trend2 = 1;
   if(Close< TMA2bandDn)    trend2 =-1;
   if(slope==-1) PlotPoint(i,TMA2up,TMA2dn,TMA2);}
//+---Ribbon Function------------------------------------------------------------------------------------------------+
   for(i=0; i<limit; i++){
   if(TMA1bandUp>TMA2bandUp){MA2=TMA1bandUp;MA1=TMA2bandUp;MA4=EMPTY_VALUE;MA3=EMPTY_VALUE;}
   if(TMA1bandDn<TMA2bandDn){MA4=TMA1bandDn;MA3=TMA2bandDn;MA2=EMPTY_VALUE;MA1=EMPTY_VALUE;}}
//+---Semafor Function-----------------------------------------------------------------------------------------------+
   if(Period2>0) CountZZ(HPup,HPdn,Period2,Dev2,Stp2);
   if(Period3>0) CountZZ(ZPup,ZPdn,Period3,Dev3,Stp3);
//+---Open Line Function---------------------------------------------------------------------------------------------+
   double XardPer; if(Period()<=PERIOD_H1){XardPer=PERIOD_D1;}   if(Period()>=PERIOD_H4){XardPer=PERIOD_W1;}
   if(Bars<=3) return(0); int ExtCountedBars=IndicatorCounted(); if(ExtCountedBars<0) return(-1); limit=Bars-2;
   if(ExtCountedBars>2) limit=Bars-ExtCountedBars-1; int pos2,index; pos2=limit; while(pos2>=0){
   if(tFrame<10){index=iBarShift(NULL,XardPer,Time,false);}
    else {index=iBarShift(NULL,XardPer,BofYr(Time),false);}
   BufPOL=iMA(Symbol(),0,2,0,MODE_SMMA,PRICE_CLOSE,pos2); VAL=iOpen(NULL,XardPer,index);
   POL0=VAL; POL1=VAL; POLb=POL0; if((VAL>BufPOL)){POL1=EMPTY_VALUE;}pos2--;}
//+---Xmath Function-------------------------------------------------------------------------------------------------+
   bn_v1x =Lowest(NULL,0, MODE_LOW,Px+StepBackx,0);
   bn_v2x = Highest(NULL,0,MODE_HIGH,Px+StepBackx,0);v1x = Low;v2x = High;
//+------------------------------------------------------------------------------------------------------------------+
   if(v2x<=250000   && v2x>25000)    fractal=100000;if(v2x<=25000    && v2x>2500)   fractal=10000;
   if(v2x<=2500   && v2x>250)      fractal=1000;    if(v2x<=250      && v2x>25)       fractal=100;
   if(v2x<=25       && v2x>12.5)   fractal=12.5;    if(v2x<=12.5   && v2x>6.25)   fractal=12.5;
   if(v2x<=6.25   && v2x>3.125)    fractal=6.25;    if(v2x<=3.125    && v2x>1.5625)   fractal=3.125;
   if(v2x<=1.5625   && v2x>0.390625) fractal=1.5625;if(v2x<=0.390625 && v2x>0)      fractal=0.1953125;
//+------------------------------------------------------------------------------------------------------------------+
   rangex=(v2x-v1x); sumx=MathFloor(MathLog(fractal/rangex)/MathLog(2)); octave=fractal*(MathPow(0.5,sumx));
   mn=MathFloor(v1x/octave)*octave; if((mn+octave+(octave*0.3333))>v2x) mx=mn+octave; else mx=mn+(2*octave);
//+------------------------------------------------------------------------------------------------------------------+
   if((v1x>=(3*(mx-mn)/16+mn)) && (v2x<=(9*(mx-mn)/16+mn))) x2=mn+(mx-mn)/2; else x2=0;
   if((v1x>=(mn-(mx-mn)/8)) && (v2x<=(5*(mx-mn)/8+mn)) && (x2 == 0)) x1=mn+(mx-mn)/2; else x1=0;
   if((v1x>=(mn+7*(mx-mn)/16)) && (v2x<=(13*(mx-mn)/16+mn))) x4=mn+3*(mx-mn)/4; else x4=0;
   if((v1x>=(mn+3*(mx-mn)/8)) && (v2x<=(9*(mx-mn)/8+mn)) && (x4==0)) x5=mx; else x5=0;
   if((v1x>=(mn+(mx-mn)/8)) && (v2x<=(7*(mx-mn)/8+mn)) && (x1==0) && (x2==0) && (x4==0) && (x5==0))
      x3 = mn+3*(mx-mn)/4; else x3=0;if((x1+x2+x3+x4+x5)==0) x6=mx; else x6=0;   finalH=x1+x2+x3+x4+x5+x6;
   if(x1>0) y1=mn; else y1=0;if(x2>0) y2=mn+(mx-mn)/4; else y2=0;if(x3>0) y3=mn+(mx-mn)/4; else y3=0;
   if(x4>0) y4=mn+(mx-mn)/2; else y4=0;   if(x5>0) y5=mn+(mx-mn)/2; else y5=0;
   if((finalH>0) && ((y1+y2+y3+y4+y5)==0)) y6=mn; else y6=0;   finalL = y1+y2+y3+y4+y5+y6;
//+------------------------------------------------------------------------------------------------------------------+
   double xo = (finalH-finalL),xmm = xo/8;
   for(f=0; f<OctLinesCnt; f++){mmlx = 0;}dmml=(finalH-finalL)/8;mmlx=(finalL-dmml*2);
   for(f=1; f<OctLinesCnt; f++){mmlx = mmlx + dmml;}
   for(f=0; f<OctLinesCnt; f++){buff_str = "mmlx"+f; buff_str = "mml_txtx"+f; ObjectDelete(buff_str);
   if(showXmath){
    ObjectCreate(buff_str,OBJ_TEXT, 0, Time, mml_shft);
   ObjectSetText(buff_str,ln_txt+DoubleToStr(mmlx,DecNos)+ln_tx,12,"MV Boli",mml_clr);
       ObjectSet(buff_str,OBJPROP_BACK,1);ObjectMove(buff_str,0,Time,mmlx+Point*tx);}}//End Xmath
//+------------------------------------------------------------------------------------------------------------------+
   int countedbars=prev_calculated; if(countedbars<0) return(-1); if(countedbars>0) countedbars--;
   limit=MathMin(rates_total-countedbars,rates_total-1);
//+----HA Function---------------------------------------------------------------------------------------------------+
   int i_Bar = fmax(1, rates_total - prev_calculated + (prev_calculated > 0));
        if(prev_calculated == 0){i_Bar--;
                  if(Open < Close) {
                haLowHigh =   Low;
                haHighLow =High;} else {
                haLowHigh =High;
                haHighLow =   Low;}
                   haOpen =Open;
                  haClose = Close;}
//+----
        double d_Open,d_Close,d_High,d_Low;
        i_Bar = fmin(rates_total - 2,i_Bar);
        while(i_Bar-- >0) {
       d_Open = (haOpen + haClose) / 2;
        d_Close = (Open + High + Low + Close) / 4;
       d_High = fmax(High, fmax(d_Open, d_Close));
          d_Low = fmin(Low, fmin(d_Open, d_Close));
//+----
        if(d_Open < d_Close){
                haLowHigh = d_Low;
                haHighLow = d_High;} else {
                haLowHigh = d_High;
                haHighLow = d_Low;}
                   haOpen = d_Open;
                  haClose = d_Close;} //End HA
//+---Trend Function-------------------------------------------------------------------------------------------------+
   if(returnBars){TREND=limit+1; return(0);} if(calculateTREND || timeFrame == Period()){
   if(!calculateTREND && trend==-1) CleanPoint(limit,TRENDdna,TRENDdnb);
   for(i=limit;i>=0;i--){TRENDdna=EMPTY_VALUE;TRENDdnb=EMPTY_VALUE; trend=trend;
                   if(Close>iMA(Symbol(),TRENDtf,TRENDper,TRENDshft,TRENDmode,PRICE_HIGH,i+1)) trend= 1;
                   if(Close<iMA(Symbol(),TRENDtf,TRENDper,TRENDshft,TRENDmode,PRICE_LOW, i+1)) trend=-1;
   if(trend==-1)   TREND=iMA(Symbol(),TRENDtf,TRENDper,TRENDshft,TRENDmode,TRENDtype,i+1);
                elseTREND=iMA(Symbol(),TRENDtf,TRENDper,TRENDshft,TRENDmode,TRENDtype,i+1);
   if(!calculateTREND && trend==-1) PlotPoint(i,TRENDdna,TRENDdnb,TREND); TRENDbgd=TREND;}}//End Trend
//+---ccitrend Function----------------------------------------------------------------------------------------------+
   for(i=0; i<=limit; i++){ccitrend=iCCI(NULL,0,28,PRICE_TYPICAL,i);}
//+---Alert Function-------------------------------------------------------------------------------------------------+
   for(i=limit;i>=0;i--){
   if(trend== 1 && TMA1bandDn<TMA2bandDn && ccitrend>=0.){trend1= 1;}
   if(trend==-1 && TMA1bandUp>TMA2bandUp && ccitrend<-0.){trend1=-1;}}
//+---InfoBOX Display------------------------------------------------------------------------------------------------+
   int LightButp=Determine_StopLight(); Show_TrafficLights(LightButp); if(showINFOBOX){
   iPanel(ID+"Xard0",4,129,"g",70,"Webdings",Panelcol); iPanel(ID+"Xard1",4,212,"g",70,"Webdings",Panelcol);
   iPanel(ID+"Xard2",4,236,"g",70,"Webdings",Panelcol);
   iPanel(ID+"Xard3",9,134,"g",62,"Webdings",Boxbgd);   iPanel(ID+"Xard4",9,216,"g",62,"Webdings",Boxbgd);
//+------------------------------------------------------------------------------------------------------------------+
   double ydayhigh=iHigh(Symbol(),PERIOD_D1,1), ydaylow=iLow(Symbol(),PERIOD_D1,1);
   double spd=(MarketInfo(SymPair,MODE_BID)); string MarketPrice=DoubleToStr(Bid,Digits-1);
   if(spd>=1 && spd<=9.99)         int spx=+13; else if(spd>=0 && spd<=0.9999)      spx=+12;
   else if(spd>=10 && spd<=99.99)      spx=+13; else if(spd>=100 && spd<=999.99)    spx=+12;
   else if(spd>=1000 && spd<=9999.99)spx=+12; else if(spd>=10000 && spd<=99999.99)spx=+14;
   iPanel(ID+"Xard5",spx,155,DoubleToStr(MarketInfo(SymPair,MODE_BID),DecNos),16,"Arial Black",clrAqua);
//+------------------------------------------------------------------------------------------------------------------+
   double sprd=(Ask-Bid)/myPoint; if(sprd>=1 && sprd<=9.99) int spdx=-1; else if(sprd>=10 && sprd<=99.99)spdx=-3;
   else if(sprd>=100 && sprd<=999.99)spdx=-6; iPanel(ID+"Xard6",18+spdx,179,"SPD:"+
   DoubleToStr((Ask-Bid)*MathPow(10,Digits)/pipsize,1),12,"Consolas Bold",Snow); Show_Timer(); RefreshRates();
//+------------------------------------------------------------------------------------------------------------------+
   string OPEN=""; OpenToday=iOpen(SymPair,1440,0); OPEN=(DoubleToStr(OpenToday,DecNos));
   string PIPS=""; CLOSE=iClose(SymPair,1440,0); PIPS=DoubleToStr((CLOSE-OpenToday)/Point/pipsize,0);
   color cPIPS; if(CLOSE>=OpenToday){cPIPS=clrAqua;} if(CLOSE<OpenToday){cPIPS=clrViolet;}
   iPanel(ID+"Xard8",13,134,StringSubstr(SymPair,0,7),18,"Impact",clrWhite);
   iPanel(ID+"Xard9",12,211,"Daily Open",10,"Arial Black",cPIPS); iPanel(ID+"Xard10",21,224,OPEN,13,FontType,cPIPS);
   iPanel(ID+"Xard11",52,246,"P2Op",10,"Arial Bold",clrSnow); iPanel(ID+"Xard12",14,246,PIPS,11,"Arial Bold",cPIPS);
//+------------------------------------------------------------------------------------------------------------------+
   string HILO=""; double HiToday=iHigh(NULL,1440,0),LoToday=iLow(NULL,1440,0);
   HILO=DoubleToStr((HiToday-LoToday)/Point/pipsize,0); iPanel(ID+"Xard13",52,263,"HiLo",10,"Arial Bold",clrSilver);
                                                      iPanel(ID+"Xard14",14,263, HILO ,11,"Arial Bold",clrSilver);
//+---ADR------------------------------------------------------------------------------------------------------------+
   ADR1=0; ADR5=0; ADR10=0; ADR20=0; ADRavg=0; int a,b,c; int ypos=0;
                           ADR1=(iHigh(NULL,PERIOD_D1,1)-iLow(NULL,PERIOD_D1,1));
   for(a=1;a<= 5;a++)ADR5= ADR5+(iHigh(NULL,PERIOD_D1,a)-iLow(NULL,PERIOD_D1,a));
   for(b=1;b<=10;b++) ADR10=ADR10+(iHigh(NULL,PERIOD_D1,b)-iLow(NULL,PERIOD_D1,b));
   for(c=1;c<=20;c++) ADR20=ADR20+(iHigh(NULL,PERIOD_D1,c)-iLow(NULL,PERIOD_D1,c));
   ADR5=ADR5/5;ADR10=ADR10/10;ADR20=ADR20/20;ADRavg=(((ADR1+ADR5+ADR10+ADR20)/4))/Point/pipsize;
   double avYest=(iHigh(NULL,PERIOD_D1,1)-iLow(NULL,PERIOD_D1,1))/Point/pipsize; color colorDAV=LimeGreen;
   if(ADRavg>avYest){colorDAV=DarkOrange;} iPanel(ID+"Xard15",52,280,"D.Avg",10,"Arial Bold",clrSnow);
   iPanel(ID+"Xard16",14,280,DoubleToStr(ADRavg,0),11,"Arial Bold",colorDAV);}//EO InfoBox
//+---Symbol Header Function-----------------------------------------------------------------------------------------+
   color SymClr=clrGray; if(Close>OpenToday){SymClr=clrDodgerBlue;} if(Close<OpenToday){SymClr=C'238,130,238';}
   if(showSymbolHeader){color Sbg=clrSnow;//C'161,161,161';
   iOBOS(ID+"ObOs1",LR+1,UD+1,StringSubstr(SymPair,0,8),HDRsize,"Arial Black",Sbg);
   iOBOS(ID+"ObOs2",LR+0,UD+0,StringSubstr(SymPair,0,8),HDRsize,"Arial Black",SymClr);}//End Symboltext
//+---BidRatio Function----------------------------------------------------------------------------------------------+
   if(showD1){if((iHigh(SymPair,PERIOD_D1,0)-iLow(SymPair,PERIOD_D1,0)!=0))
   D1pct=100.0*((iClose(SymPair,PERIOD_D1,0)-iLow(SymPair,PERIOD_D1,0))/
   (iHigh(SymPair,PERIOD_D1,0)-iLow(SymPair,PERIOD_D1,0))); else D1pct=0.0;
   clrD1pct=clrGray; if(D1pct<=SellRatio){clrD1pct=clrRed;} if(D1pct>=BuyRatio){clrD1pct=clrLime;}
   iPanel(ID+"Xard21",15,300,DoubleToStr(D1pct,0)+"%",18,"Arial Bold",clrD1pct);}
//+------------------------------------------------------------------------------------------------------------------+
      manageAlerts();return(0);}
   for(i=limit;i>=0;i--) if(slope==-1) PlotPoint(i,TMA2up,TMA2dn,TMA2);return(rates_total);}
//+---Timer Function-------------------------------------------------------------------------------------------------+
   void Show_Timer(){double rx; int mt,s; mt=Time+Period()*60-CurTime(); rx=mt/60.0; s=mt%60; mt=(mt-mt%60)/60;
   if(showINFOBOX){iPanel(ID+"Xard7",13,192,mt+":"+s,13,"Arial Black",clrLime);}}
//+------------------------------------------------------------------------------------------------------------------+
   void manageAlerts(){if(!calculateValue && alertsOn){if(alertsOnCurrent)
   int whichBar = 0; else whichBar = 1;
       whichBar = iBarShift(NULL,0,iTime(NULL,timeFrame,whichBar));
      static datetime time2 = 0;static string   mess2 = "";
   if(alertsOnStopLight && trend1 != trend1){
   if(trend1 ==1) doAlert(time2,mess2,whichBar,"BUY");
   if(trend1 == -1) doAlert(time2,mess2,whichBar,"SELL");}}}
//+------------------------------------------------------------------------------------------------------------------+
   void doAlert(datetime& previousTime, string& previousAlert, int forBar, string doWhat){string msg;
   if(previousAlert != doWhat || previousTime != Time){previousAlert = doWhat;previousTime = Time;
   msg=StringConcatenate(Symbol()," ",timeFrameToString(timeFrame)," @ ",
       TimeToStr(TimeLocal(),TIME_MINUTES),"StopLight is a ",doWhat);
   if(alertsMessage) Alert(msg);if(alertsNotify)SendNotification(msg);
   if(alertsEmail)   SendMail(StringConcatenate(Symbol()," "),msg);if(alertsSound)   PlaySound("alert2.wav");}}
//+------------------------------------------------------------------------------------------------------------------+
   void CleanPoint(int i,double& first[],double& second[]){
   if((second!=EMPTY_VALUE) && (second!=EMPTY_VALUE)) second=EMPTY_VALUE;
   else if((first!=EMPTY_VALUE) && (first!=EMPTY_VALUE) && (first==EMPTY_VALUE)) first=EMPTY_VALUE;}
//+------------------------------------------------------------------------------------------------------------------+
   void PlotPoint(int i,double& first[],double& second[],double& from[]){ if(first==EMPTY_VALUE){
   if(first==EMPTY_VALUE){ first=from; first=from; second=EMPTY_VALUE;} else {
   second=from; second=from; first=EMPTY_VALUE;}} else {first=from; second=EMPTY_VALUE;}}
//+------------------------------------------------------------------------------------------------------------------+
   string sTfTable[] = {"M1","M5","M15","M30","H1","H4","D1","W1","MN"};
   int    iTfTable[] = {1,5,15,30,60,240,1440,10080,43200};
//+------------------------------------------------------------------------------------------------------------------+
   int stringToTimeFrame(string tfs){ tfs=stringUpperCase(tfs);for(int i=ArraySize(iTfTable)-1; i>=0; i--)
   if(tfs==sTfTable || tfs==""+iTfTable) return(MathMax(iTfTable,Period()));return(Period());}
//+------------------------------------------------------------------------------------------------------------------+
   string timeFrameToString(int tf){
   for(int i=ArraySize(iTfTable)-1;i>=0;i--)if(tf==iTfTable) return(sTfTable); return("");}
//+------------------------------------------------------------------------------------------------------------------+
   string stringUpperCase(string str){ string s=str; for(int length=StringLen(str)-1; length>=0; length--){
   int tchar=StringGetChar(s,length); if((tchar>96 && tchar<123) || (tchar>223 && tchar<256))
   s=StringSetChar(s,length,tchar-32); else if(tchar>-33 && tchar<0) s=StringSetChar(s,length,tchar+224);} return(s);}
//+--- Semafor ------------------------------------------------------------------------------------------------------+
   int CountZZ(double& ZZBufUp[],double& ZZBufDn[],int ExtDepth,int ExtDeviation,int ExtBackstep){
   int shiftZZ,back,lasthighpos,lastlowpos; double val,res,curlow,curhigh,lasthigh,lastlow;
   for(shiftZZ=Bars-ExtDepth; shiftZZ>=0; shiftZZ--){val=Low;
   if(val==lastlow) val=0.0;else {lastlow=val;
   if((Low-val)>(ExtDeviation*ZZPoint)) val=0.0;else {
   for(back=1; back<=ExtBackstep; back++){res=ZZBufUp;
   if(res!=0.0) res=res+ZZdelta;if((res!=0.0)&&(res>val)) ZZBufUp=0.0;}}}
   if(val==0.0) ZZBufUp=0.0; else ZZBufUp=val-ZZdelta;
   val=High;
   if(val==lasthigh) val=0.0;else { lasthigh=val;
   if((val-High)>(ExtDeviation*ZZPoint)) val=0.0; else {
   for(back=1; back<=ExtBackstep; back++){ res=ZZBufDn;
   if(res!=0.0) res=res-ZZdelta;if((res!=0.0)&&(res<val)) ZZBufDn=0.0;}}}
   if(val==0.0) ZZBufDn=0.0; else ZZBufDn=val+ZZdelta;}
//+--- Semafor final cutting ----------------------------------------------------------------------------------------+
   lasthigh=-1;lasthighpos=-1;lastlow=-1;lastlowpos=-1;
   for(shiftZZ=Bars-ExtDepth; shiftZZ>=0; shiftZZ--){ curlow=ZZBufUp;
   if( curlow != 0.0)curlow =curlow+ZZdelta;   curhigh=ZZBufDn;
   if(curhigh != 0.0) curhigh = curhigh-ZZdelta;if((curlow==0.0)&&(curhigh==0.0)) continue;
   if(curhigh!=0.0){if(lasthigh>0.0){ if(lasthigh<curhigh) ZZBufDn=0.0; else ZZBufDn=0.0;}
   if(lasthigh<curhigh || lasthigh<0.0){lasthigh=curhigh; lasthighpos=shiftZZ;} lastlow=-1;}
   if(curlow!=0.0){if(lastlow>0.0){   if(lastlow>curlow) ZZBufUp=0.0; else ZZBufUp=0.0;}
   if((curlow<lastlow)||(lastlow<0.0)){lastlow=curlow; lastlowpos=shiftZZ;} lasthigh=-1;}}
   for(shiftZZ=Bars-1;shiftZZ>=0;shiftZZ--){if(shiftZZ>=Bars-ExtDepth)ZZBufUp=0.0; else {break;}} return(0);}
//+------------------------------------------------------------------------------------------------------------------+
   int Str2Massive(string VStr,int& MCount,int& VMass[]){int val=StrToInteger(VStr); if(val>0){MCount++;
   int mc=ArrayResize(VMass,MCount); if(mc==0)return(-1); VMass=val; return(1);} else return(0);}
//+------------------------------------------------------------------------------------------------------------------+
   int IntFromStr(string ValStr,int& MCount, int& VMass[]){if(StringLen(ValStr)==0) return(-1);
   string SS=ValStr; int NP=0; string CS; MCount=0; ArrayResize(VMass,MCount);
   while(StringLen(SS)>0){NP=StringFind(SS,",");
   if(NP>0){CS=StringSubstr(SS,0,NP); SS=StringSubstr(SS,NP+1,StringLen(SS));} else {
   if(StringLen(SS)>0){CS=SS; SS="";}} if(Str2Massive(CS,MCount,VMass)==0){return(-2);}} return(1);}
//+------------------------------------------------------------------------------------------------------------------+
   double getPoint(bool custommode){string symbol=Symbol();double point = MarketInfo(symbol,MODE_POINT);
   int pluspos = StringFind(symbol,"+",0);int minuspos = StringFind(symbol,"-",0);
   if(pluspos>0) symbol=StringSubstr(symbol,0,pluspos); else if(minuspos>0) symbol=StringSubstr(symbol,0,minuspos);
   if(point<0.000000001) point=MarketInfo(symbol,MODE_POINT);if(! custommode) return(point); else {
   if(symbol=="NOKJPY"||symbol=="SEKJPY"||symbol=="GBPDKK"||symbol=="GBPNOK"||symbol=="USDSKK"||symbol=="XAG")
   point=MarketInfo(symbol,MODE_POINT);
      else if (StringFind(symbol,"JPY",3) == 3 || symbol == "XAUUSD") point = 0.01;
      else if (StringFind(symbol,"USD",0) >= 0
            || StringFind(symbol,"EUR",0) >= 0
            || StringFind(symbol,"GBP",0) >= 0
            || StringFind(symbol,"CAD",0) >= 0
            || StringFind(symbol,"NZD",0) >= 0) point = 0.0001;}
   if(point<0.000000001) point=Point; if(point<0.000000001) point=0.01; return(point);}//end of getPoint
//+------------------------------------------------------------------------------------------------------------------+
   datetime BofYr(datetime T){return (StrToTime(TimeYear(T)+".1.1 00:00"));}
//+------------------------------------------------------------------------------------------------------------------+
   void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam){
        if(id==CHARTEVENT_OBJECT_CLICK && ObjectGet(sparam,OBJPROP_TYPE)==OBJ_BUTTON){
   if(StringFind(sparam,ID+":back:",0)==0) ObjectSet(sparam,OBJPROP_STATE,false);
        if(IsStopped()) return; fSetBuffers();} OnInit();}
//+------------------------------------------------------------------------------------------------------------------+
   void fSetBuffers(){int iChartScale = int(ChartGetInteger(0,CHART_SCALE));
        if(getChartScale == iChartScale) return;
        getChartScale = iChartScale; int iWidth=0; switch(iChartScale){
                case 0: iWidth = 1; break;
                case 1: iWidth = 1; break;
                case 2: iWidth = 2; break;
                case 3: iWidth = 4; break;
                case 4: iWidth = 7; break;
                case 5: iWidth =14; break;}
        if(showRIBBON)         Type=DRAW_HISTOGRAM; else Type=DRAW_NONE;
   SetIndexStyle(0,Type,0,iWidth,RibColUP);
   SetIndexStyle(1,Type,0,iWidth,RibColDN);
   SetIndexStyle(2,Type,0,iWidth,RibColUP);
   SetIndexStyle(3,Type,0,iWidth,RibColDN);
        if(showHA)             Type=DRAW_HISTOGRAM; else Type=DRAW_NONE;
        SetIndexStyle(24,Type,0,iWidth,cBearish);
        SetIndexStyle(25,Type,0,iWidth,cBullish);
        if(showTREND)          Type=DRAW_LINE; else Type=DRAW_NONE;
        SetIndexStyle(26,Type,0,iWidth+4,TRENDbgdclr);
        SetIndexStyle(27,Type,0,iWidth+2,TRENDupclr);
        SetIndexStyle(28,Type,0,iWidth+2,TRENDdnclr);
        SetIndexStyle(29,Type,0,iWidth+2,TRENDdnclr);        ChartRedraw();}
//+---StopLight Function---------------------------------------------------------------------------------------------+
        int Determine_StopLight(){int xpos=18,ypos=66;if(showSpotLight){if(!IsConnected())return(PowerFailure);
   if(trend== 1 && TMA1bandDn<TMA2bandDn && ccitrend>=0.){
   ObjectDelete(ID+"tls0102");ObjectDelete(ID+"tls0103");
   makeSTOP(ID+"tls0101",xpos+4,ypos+2,"BUY", tsize,FontType,textcolUP);return(GreenLight);}
   if(trend==-1 && TMA1bandUp>TMA2bandUp && ccitrend<-0.){
   ObjectDelete(ID+"tls0101");ObjectDelete(ID+"tls0103");
   makeSTOP(ID+"tls0102",xpos-2,ypos+2,"SELL",tsize,FontType,textcolDN);return(RedLight);}
   ObjectDelete(ID+"tls0101");ObjectDelete(ID+"tls0102");
   makeSTOP(ID+"tls0103",xpos-3,ypos+2,"WAIT",tsize,FontType,textcolWT);return(OrangeLight);} return(PowerFailure);}
//+------------------------------------------------------------------------------------------------------------------+
   void Show_TrafficLights(int TrafficLight){color cStopLights; switch(TrafficLight){
   case GreenLight:   cStopLights=clrGreen;                  Color_Chart(GreenLight); break;
   case OrangeLight:    cStopLights=clrOrange;                  Color_Chart(OrangeLight); break;
   case RedLight:       cStopLights=C'238,130,238';                Color_Chart(RedLight); break;
   case PowerFailure:   cStopLights=Panetpgd2; break;   default:cStopLights=Panetpgd2; break;}
//+------------------------------------------------------------------------------------------------------------------+
   if(showSpotLight){double OpToday=iOpen(NULL,1440,0); color Panetpgd1=C'80,90,100';
   if(Close>OpToday){Panetpgd1=clrLime;} else Panetpgd1=clrDeepPink;
   makeTLS(ID+"tls0001",5,31); ObjectSetText(ID+"tls0001","g",70,"Webdings",Panelcol);
   makeTLS(ID+"tls0004",8,35); ObjectSetText(ID+"tls0004","n",65,"Webdings",Panetpgd1); for(int is=0;is<1;is++){
   makeTLS(ID+"tls00"+(is+4),13,40+is*92); ObjectSetText(ID+"tls00"+(is+4),"n",58,"Webdings",cStopLights);}}}
//+------------------------------------------------------------------------------------------------------------------+
   void makeSTOP(string tls1,int x,int y,string Text,int fontSize,string Font,color Color){
         ObjectDelete(tls1); ObjectCreate(tls1,OBJ_LABEL,Window,0,0);
            ObjectSet(tls1,OBJPROP_CORNER,InfoBoxCorner);
            ObjectSet(tls1,OBJPROP_XDISTANCE,x-1+posLR);
            ObjectSet(tls1,OBJPROP_YDISTANCE,y+3+posUD);
            ObjectSet(tls1,OBJPROP_BACK,false);
          ObjectSetText(tls1,Text,tsize,FontType,Color);}
//+------------------------------------------------------------------------------------------------------------------+
   void makeTLS(string tls2,int x,int y){ObjectCreate(tls2,OBJ_LABEL,Window,0,0);
             ObjectSet(tls2,OBJPROP_CORNER,InfoBoxCorner);
             ObjectSet(tls2,OBJPROP_XDISTANCE,x-1+posLR);
             ObjectSet(tls2,OBJPROP_YDISTANCE,y+9+posUD);}
//+------------------------------------------------------------------------------------------------------------------+
   void iPanel(string tls3,int x,int y,string Text,int fontSize,string Font,color Color){
         ObjectCreate(tls3,OBJ_LABEL,Window,0,0);
            ObjectSet(tls3,OBJPROP_CORNER,InfoBoxCorner);
            ObjectSet(tls3,OBJPROP_XDISTANCE,x+posLR);
            ObjectSet(tls3,OBJPROP_YDISTANCE,y+2+posUD);
            ObjectSet(tls3,OBJPROP_BACK,false);
      ObjectSetText(tls3,Text,fontSize,Font,Color);}
//+------------------------------------------------------------------------------------------------------------------+
   void iOBOS(string tls4,int x,int y,string Text,int fontSize,string Font,color Color){
      ObjectCreate(tls4,OBJ_LABEL,0,0,0);
         ObjectSet(tls4,OBJPROP_CORNER,0);
         ObjectSet(tls4,OBJPROP_XDISTANCE,x);
         ObjectSet(tls4,OBJPROP_YDISTANCE,y);
         ObjectSet(tls4,OBJPROP_BACK,false);
       ObjectSetText(tls4,Text,fontSize,Font,Color);}
//+------------------------------------------------------------------------------------------------------------------+
   void Color_Chart(int signal){static color LastColor;color Color=C'20,20,40';if(Color==LastColor)return;
   LastColor=Color; ChartSetInteger(0,CHART_COLOR_BACKGROUND,Color); ChartRedraw(0);}
//+----Clean Chart Function------------------------------------------------------------------------------------------+
   void CleanUpAisle1(string nature){int obj_total= ObjectsTotal(); for(int il=obj_total; il>=0; il--){
   string name=ObjectName(il); if(StringSubstr(name,0,5)==(nature)) ObjectDelete(name);}}//End CleanUpAisle1
//+----END OF FILE---------------------------------------------------------------------------------------------------+

ZHANG34334 发表于 2024-10-20 15:19:08

//+------------------------------------------------------------------------------------------------------------------+
//+                            \!/                                  [!!!-MT4 X-XARDFX-38] +
//+                                                      (ò ó)                                     +
//+-------------------------------------------------o0o---(_)---o0o--------------------------------------------------+
#property copyright "Welcome to the World of Forex"
#property description "Let light shine out of darkness and illuminate your world"
#property description "and with this freedom leave behind your cave of denial"
#property indicator_chart_window
#property indicator_buffers 32
#define Version "XARDFX-38"
string ID="Xard>",tFx,TFx="Current time frame",TimeFrame="Current time frame";
//+------------------------------------------------------------------------------------------------------------------+
#include <WinUser32.mqh>
extern string Indicator = Version;
extern string STR00                      = "<<<==== Chart Settings ====>>>";
enum menuupdatemode   {UpdatePerSecond,UpdatePerMilliseconds};
extern menuupdatemode UpdateMode         = UpdatePerSecond;
   extern int UpdateEveryXseconds      = 1, UpdateEveryXmilliseconds = 1;
extern bool AutoRefresh                = false;
extern ENUM_TIMEFRAMES RefreshPeriod   = PERIOD_M15; int hWindow=0,oldBars=0;
extern bool AutoArrangeChart         = true,cleanChart = false;
extern color chartBackgroundColor       = C'162,162,162', chartForegroundColor = clrBlack,
            chartGridColor             = clrDimGray,
            chartBarUpColor            = clrBlue,   chartBarDownColor = clrRed,
            chartBullCandleColor       = clrBlue,chartBearCandleColor = clrRed,
            chartLineGraphColor      = clrNONE,   charttradeEntryColor = clrLimeGreen,
            chartAskLineColor          = clrOrangeRed,charttradeLevelColor = clrOrangeRed;
//+------------------------------------------------------------------------------------------------------------------+
       string STR01                      = "<<<==== TMA1 Settings ====>>>";
         bool showTMA1                   = false;
          int TMA1per                  = 28,TMA1atr=100;
       double TMA1atrMulti               = 2.618;
       double TMA1[],TMA1up[],TMA1dn[],TMA1bandUp[],TMA1bandDn[];
//+------------------------------------------------------------------------------------------------------------------+
       string STR02                      = "<<<==== TMA2 Settings ====>>>";
         bool showTMA2                   = true, Extrapolate=true;
          int TMA2per                  = 28,TMA2atr=100;
       ENUM_APPLIED_PRICE TMA2price      = PRICE_WEIGHTED;
       double TMA2atrMulti               = 2.618;
       double TMA2[],TMA2up[],TMA2dn[],TMA2bandUp[],TMA2bandDn[];   double slope[],trend1[],trend2[];
//+------------------------------------------------------------------------------------------------------------------+
       string STR03                      = "<<<==== Ribbon Settings ====>>>";
         bool showRIBBON               = true;
          int barWidth                   = 4;double MA1[],MA2[],MA3[],MA4[];
      color RibColUP                   = C'30,144,255',RibColDN=C'255,85,160',LineCol=C'120,140,120';
//+------------------------------------------------------------------------------------------------------------------+
       string STR04                      = "<<<==== Semafor Settings ====>>>";
         bool showSemafor                = true;
          int Period2                  = 34, Period3 = 84;
       string DevStep2="0,5",DevStep3="0,5"; color cU,cD;
          int S2size=4,S3size=5,S2kod=108,S3kod=162; int HPeriod,ZPeriod,Dev2,Dev3,Stp2,Stp3;
       double HPup[],HPdn[],ZPup[],ZPdn[],ZZdelta,ZZPoint,deltaPips=0.05;
//+------------------------------------------------------------------------------------------------------------------+
       string STR05                      = "<<<==== Open Line Settings ====>>>";
         bool showOpenline               = true;
       double TimeShiftMins=0,BufPOL,POLb[],POL0[],POL1[],VAL; int tFrame=0; datetime StartTime;
//+------------------------------------------------------------------------------------------------------------------+
       string STR06                      = "<<<==== HA Settings ====>>>";
         bool showHA                     = false;
      color cBullish                   = clrBlue,cBearish=clrRed;
       double haOpen[],haClose[],haHighLow[],haLowHigh[]; int getChartScale=WRONG_VALUE;
//+------------------------------------------------------------------------------------------------------------------+
       string STR07                      = "<<<==== Trend Line Settings ====>>>";
         bool showTREND                  = true;
      color TRENDbgdclr                = C'100,100,100',
            TRENDupclr               = clrDeepSkyBlue,
            TRENDdnclr               = clrViolet;
          int TRENDper                   = 7,
            TRENDtf                  = 0,
            TRENDshft                  = 0,
            TRENDmode                  = MODE_SMMA,
            TRENDtype                  = PRICE_CLOSE;
         bool returnBars,calculateTREND; double TREND[],TRENDbgd[],TRENDdna[],TRENDdnb[],trend[],ccitrend[];
//+------------------------------------------------------------------------------------------------------------------+
       string STR08                      = "<<<==== InfoBOX Settings ====>>>";
         bool showINFOBOX                = true,showSpotLight=true;
      color PanelBackColor             = C'40,40,40',PanelForeColor=C'20,20,20',PanelBorderColor=C'120,120,120';
          int PanelBorderWidth         = 1,InfoBoxCorner=1,Window=0; int posLR=6,posUD=-20,tsize=19;
      color Boxbgd                     = C'30,40,50',Panelcol=clrSnow;
       double DecNos,CLOSE,myPoint,mPoint,OpenToday,CloseToday,ADR1,ADR5,ADR10,ADR20,ADRavg;
       double SetPoint(){if(Digits<4) mPoint=0.01; else mPoint=0.0001; return(mPoint);}
      color textcolUP=clrSnow,textcolDN=clrSnow,textcolWT=clrSnow,Panetpgd2=C'40,50,60';
#define RedLight -1
#define OverBoughtLight 0
#define OverSoldLight 1
#define GreenLight 2
#define OrangeLight 3
#define PowerFailure -999
//+------------------------------------------------------------------------------------------------------------------+
       string STR09                      = "<<<==== Symbol Header Settings ====>>>";
         bool showSymbolHeader         = true;int LR=310,UD=-10,HDRsize=50;
//+------------------------------------------------------------------------------------------------------------------+
       string STR10                      = "<<<==== Xmath Settings ====>>>";
         bool showXmath                  = true;
double dmml=0,dvtl=0,sumx=0,v1x=0,v2x=0,mn=0,mx=0,x1=0,x2=0,x3=0,x4=0,x5=0,x6=0,y1=0,y2=0,y3=0,y4=0,y5=0,y6=0,
   tx=0,octave=0,fractal=0,rangex=0,finalH=0,finalL=0,mmlx;string ln_txt,ln_tx,buff_str="";
   int Px=64,StepBackx=0,bn_v1x=0,bn_v2x=0,OctLinesCnt=13,mml_thk=8,mml_clr,mml_shft=3,nTime=0,CurPeriod=0,
   nDigits=0,frametemp=0,f=0,gb=0,gbT=0,mP=0,lperiod=0,d=0,ts=0,mml_wdth;
//+------------------------------------------------------------------------------------------------------------------+
       string STR11                      = "<<<==== Bid Ratio Settings ====>>>";
         bool showD1                     = true;
          int BuyRatio                   = 90, SellRatio = 10;
          int fontsize1=16;double D1pct; color clrD1pct,clrPAIR=clrGray; int X=0,Y=0;
//+------------------------------------------------------------------------------------------------------------------+
extern string STR12                      = "<<<==== Alerts Settings ====>>>";
extern bool alertsOn                   = true;
extern bool alertsOnStopLight          = true;
extern bool alertsOnCurrent            = true;
extern bool alertsMessage            = true;
extern bool alertsSound                = false;
extern bool alertsNotify               = true;
extern bool alertsEmail                = false;
       string soundFile                  = "alert2.wav";
//+------------------------------------------------------------------------------------------------------------------+
   bool calculateValue;string FontType="Arial Black",SymPair="",indicatorFileName;
   double data1;int timeFrame,BarsCount=1000,Type,Type2,win,FontSize=14,FontSize2=12,pipsize;
//+----OnInit Function-----------------------------------------------------------------------------------------------+
   int OnInit(){if(UpdateMode == UpdatePerSecond) EventSetTimer(UpdateEveryXseconds); else
   if(UpdateMode == UpdatePerMilliseconds) EventSetMillisecondTimer(UpdateEveryXmilliseconds);
//+------------------------------------------------------------------------------------------------------------------+
   if(AutoArrangeChart){ChartSetInteger(0,CHART_COLOR_BACKGROUND,chartBackgroundColor);
                        ChartSetInteger(0,CHART_COLOR_FOREGROUND,chartForegroundColor);
                        ChartSetInteger(0,CHART_COLOR_GRID,chartGridColor);
                        ChartSetInteger(0,CHART_COLOR_CHART_UP,chartBarUpColor);
                        ChartSetInteger(0,CHART_COLOR_CHART_DOWN,chartBarDownColor);
                        ChartSetInteger(0,CHART_COLOR_CANDLE_BULL,chartBullCandleColor);
                        ChartSetInteger(0,CHART_COLOR_CANDLE_BEAR,chartBearCandleColor);
                        ChartSetInteger(0,CHART_COLOR_CHART_LINE,chartLineGraphColor);
                        ChartSetInteger(0,CHART_COLOR_VOLUME,charttradeEntryColor);
                        ChartSetInteger(0,CHART_COLOR_ASK,chartAskLineColor);
                        ChartSetInteger(0,CHART_COLOR_STOP_LEVEL,charttradeLevelColor);
                        ChartSetInteger(0,CHART_MODE,CHART_CANDLES);
                        ChartSetInteger(0,CHART_SHIFT,true);
                        ChartSetInteger(0,CHART_SHOW_OHLC,false);
                        ChartSetInteger(0,CHART_SHOW_GRID,false);}
//+------------------------------------------------------------------------------------------------------------------+   
   int Buffers=32,Buf=-1;IndicatorBuffers(Buffers);TMA2per=MathMax(TMA2per,1);
   if(TimeFrame==0 || TimeFrame<Period()) TimeFrame=Period();timeFrame=stringToTimeFrame(TimeFrame);
   IndicatorDigits(Digits); IndicatorShortName(ID); win=WindowFind(ID);
//+------------------------------------------------------------------------------------------------------------------+
   if(AutoRefresh)hWindow=WindowHandle(Symbol(),Period());oldBars=iBars(NULL,RefreshPeriod);
//+------------------------------------------------------------------------------------------------------------------+
   if(showRIBBON)         Type=DRAW_HISTOGRAM; else Type=DRAW_NONE;
   Buf+=1; SetIndexBuffer(Buf,MA1);      
   Buf+=1; SetIndexBuffer(Buf,MA2);      
   Buf+=1; SetIndexBuffer(Buf,MA3);      
   Buf+=1; SetIndexBuffer(Buf,MA4);       fSetBuffers();
   if(showTMA1)         Type=DRAW_LINE; else Type=DRAW_NONE;
   Buf+=1; SetIndexBuffer(Buf,TMA1);       SetIndexStyle(Buf,DRAW_NONE);      SetIndexDrawBegin(Buf,TMA1per);
   Buf+=1; SetIndexBuffer(Buf,TMA1bandUp); SetIndexStyle(Buf,Type,0,1,clrRed);SetIndexDrawBegin(Buf,TMA1per);
   Buf+=1; SetIndexBuffer(Buf,TMA1bandDn); SetIndexStyle(Buf,Type,0,1,clrRed);SetIndexDrawBegin(Buf,TMA1per);
   if(showTMA2)         Type=DRAW_LINE; else Type=DRAW_NONE;
   Buf+=1; SetIndexBuffer(Buf,TMA2);       SetIndexStyle(Buf,DRAW_NONE);      SetIndexDrawBegin(Buf,TMA2per);
   Buf+=1; SetIndexBuffer(Buf,TMA2up);   SetIndexStyle(Buf,DRAW_NONE);      SetIndexDrawBegin(Buf,TMA2per);
   Buf+=1; SetIndexBuffer(Buf,TMA2dn);   SetIndexStyle(Buf,DRAW_NONE);      SetIndexDrawBegin(Buf,TMA2per);
   Buf+=1; SetIndexBuffer(Buf,TMA2bandUp); SetIndexStyle(Buf,Type,0,2,clrSnow); SetIndexDrawBegin(Buf,TMA2per);
   Buf+=1; SetIndexBuffer(Buf,TMA2bandDn); SetIndexStyle(Buf,Type,0,2,clrSnow); SetIndexDrawBegin(Buf,TMA2per);
   Buf+=1; SetIndexBuffer(Buf,slope);      SetIndexStyle(Buf,DRAW_NONE);
   Buf+=1; SetIndexBuffer(Buf,trend1);   SetIndexStyle(Buf,DRAW_NONE);
   Buf+=1; SetIndexBuffer(Buf,trend2);   SetIndexStyle(Buf,DRAW_NONE);
//+------------------------------------------------------------------------------------------------------------------+
   if(showSemafor)      ZZPoint=getPoint(true);ZZdelta=deltaPips*ZZPoint;int CDev=0,CSt=0,Mass[],C=0;
   if(Period2>0) HPeriod=MathCeil(Period2*Period()); else HPeriod=0;
   if(Period3>0) ZPeriod=MathCeil(Period3*Period()); else ZPeriod=0;
//+------------------------------------------------------------------------------------------------------------------+
   if(Period2>0){cU=clrSnow; cD=clrSnow; Type=DRAW_ARROW;
   Buf+=1; SetIndexBuffer(Buf,HPup);      SetIndexStyle(Buf,Type,0,S2size,cU);
         SetIndexArrow(Buf,S2kod);      SetIndexEmptyValue(Buf,0.0);
   Buf+=1; SetIndexBuffer(Buf,HPdn);      SetIndexStyle(Buf,Type,0,S2size,cD);
         SetIndexArrow(Buf,S2kod);      SetIndexEmptyValue(Buf,0.0);}
//+------------------------------------------------------------------------------------------------------------------+
   if(showSemafor)
   if(Period3>0){cU=clrBlue; cD=clrRed; Type=DRAW_ARROW;
   Buf+=1; SetIndexBuffer(Buf,ZPup);      SetIndexStyle(Buf,Type,0,S3size,cU);
            SetIndexArrow(Buf,S3kod);   SetIndexEmptyValue(Buf,0.0);
   Buf+=1; SetIndexBuffer(Buf,ZPdn);      SetIndexStyle(Buf,Type,0,S3size,cD);
            SetIndexArrow(Buf,S3kod);   SetIndexEmptyValue(Buf,0.0);}
//+------------------------------------------------------------------------------------------------------------------+
   if(IntFromStr(DevStep2,C,Mass)==1){Stp2=Mass; Dev2=Mass;}
   if(IntFromStr(DevStep3,C,Mass)==1){Stp3=Mass; Dev3=Mass;}
//+------------------------------------------------------------------------------------------------------------------+
   if(showOpenline)       Type=DRAW_LINE; else Type=DRAW_NONE; if(Period()>=PERIOD_W1) Type=DRAW_NONE;
   Buf+=1; SetIndexBuffer(Buf,POLb);      SetIndexStyle(Buf,Type,0,3+2,clrBlack);
   Buf+=1; SetIndexBuffer(Buf,POL0);      SetIndexStyle(Buf,Type,0,3,clrYellow);
   Buf+=1; SetIndexBuffer(Buf,POL1);      SetIndexStyle(Buf,Type,0,3,clrAqua);
//+------------------------------------------------------------------------------------------------------------------+
   if(showHA)             Type=DRAW_HISTOGRAM; else Type=DRAW_NONE;
   Buf+=1; SetIndexBuffer(Buf,haLowHigh); SetIndexEmptyValue(Buf,0); SetIndexStyle(Buf,Type,0,1,cBearish);
        Buf+=1; SetIndexBuffer(Buf,haHighLow); SetIndexEmptyValue(Buf,0); SetIndexStyle(Buf,Type,0,1,cBullish);
        Buf+=1; SetIndexBuffer(Buf,haOpen);    SetIndexEmptyValue(Buf,0);
        Buf+=1; SetIndexBuffer(Buf,haClose);   SetIndexEmptyValue(Buf,0); fSetBuffers();
//+------------------------------------------------------------------------------------------------------------------+
   if(showTREND)          Type=DRAW_LINE; else Type=DRAW_NONE;
   Buf+=1; SetIndexBuffer(Buf,TRENDbgd);SetIndexDrawBegin(Buf,TRENDper+1);
   Buf+=1; SetIndexBuffer(Buf,TREND);   SetIndexDrawBegin(Buf,TRENDper+1);
   Buf+=1; SetIndexBuffer(Buf,TRENDdna);SetIndexDrawBegin(Buf,TRENDper+1);
   Buf+=1; SetIndexBuffer(Buf,TRENDdnb);SetIndexDrawBegin(Buf,TRENDper+1);
   Buf+=1; SetIndexBuffer(Buf,trend);   SetIndexStyle(Buf,DRAW_NONE); fSetBuffers();
//+------------------------------------------------------------------------------------------------------------------+
   Buf+=1; SetIndexBuffer(Buf,ccitrend);SetIndexStyle(Buf,DRAW_NONE);
   if(Buffers != Buf+1) Print("*******Buffer MisMatch!!!   ",Buffers," ",Buf);
   for(int Bufx=0;Bufx<indicator_buffers;Bufx++){SetIndexLabel(Bufx,NULL);}
//+------------------------------------------------------------------------------------------------------------------+
   if(SymPair=="") SymPair=Symbol(); myPoint=SetPoint();
      if(StringFind(Symbol(),"JPY",0) != -1)   DecNos=2;
   else if(StringSubstr(Symbol(),0,5)=="UKOil")    DecNos=2;
   else if(StringSubstr(Symbol(),0,6)=="BTCUSD")   DecNos=1;
   else if(StringSubstr(Symbol(),0,7)=="CHINA50")DecNos=0;
   else if(StringSubstr(Symbol(),0,6)=="US2000")   DecNos=1;
   else if(StringSubstr(Symbol(),0,5)=="US500")    DecNos=1;
   else if(StringSubstr(Symbol(),0,6)=="ETHUSD")   DecNos=2;
   else if(StringSubstr(Symbol(),0,6)=="LTCUSD")   DecNos=3;
   else if(StringSubstr(Symbol(),0,6)=="USOUSD")   DecNos=3;
   else if(StringSubstr(Symbol(),0,6)=="SPX500")   DecNos=1;
   else if(StringSubstr(Symbol(),0,8)=="USDOLLAR") DecNos=3;
   else if(StringSubstr(Symbol(),0,5)=="JP225")    DecNos=0;
   else if(StringSubstr(Symbol(),0,4)=="HK50")   DecNos=0;
   else if(StringSubstr(Symbol(),0,5)=="UK100")    DecNos=0;
   else if(StringSubstr(Symbol(),0,7)=="FTSE100")DecNos=1;
   else if(StringSubstr(Symbol(),0,6)=="XAUUSD")   DecNos=1;
   else if(StringSubstr(Symbol(),0,6)=="XAGUSD")   DecNos=3;
   else if(StringSubstr(Symbol(),0,6)=="USDMXN")   DecNos=3;
   else if(StringSubstr(Symbol(),0,6)=="NDX100")   DecNos=1;
   else if(StringSubstr(Symbol(),0,4)=="WS30")   DecNos=0; else DecNos=4;
   if(SymPair=="") SymPair=Symbol();
      if(StringFind(Symbol(),"JPY",0) != -1)   pipsize=10;
   else if(StringSubstr(Symbol(),0,8)=="USDOLLAR") pipsize=10;
   else if(StringSubstr(Symbol(),0,6)=="BTCUSD")   pipsize=100;
   else if(StringSubstr(Symbol(),0,7)=="CHINA50")pipsize=100;
   else if(StringSubstr(Symbol(),0,6)=="LTCUSD")   pipsize=1;
   else if(StringSubstr(Symbol(),0,6)=="ASX200")   pipsize=100;
   else if(StringSubstr(Symbol(),0,4)=="HK50")   pipsize=100;
   else if(StringSubstr(Symbol(),0,5)=="JP225")    pipsize=100;
   else if(StringSubstr(Symbol(),0,6)=="USDTRY")   pipsize=100;
   else if(StringSubstr(Symbol(),0,5)=="UK100")    pipsize=100;
   else if(StringSubstr(Symbol(),0,7)=="FTSE100")pipsize=100;
   else if(StringSubstr(Symbol(),0,6)=="USDMXN")   pipsize=100;
   else if(StringSubstr(Symbol(),0,6)=="XAUUSD")   pipsize=10;
   else if(StringSubstr(Symbol(),0,6)=="XAGUSD")   pipsize=1;
   else if(StringSubstr(Symbol(),0,4)=="WS30")   pipsize=100;
   else if(StringSubstr(Symbol(),0,6)=="NDX100")   pipsize=100; else pipsize=10;
//+----Xmath---------------------------------------------------------------------------------------------------------+
   switch(Period()){
   case    1: Px=15360;tx=10; break;   case    5: Px=3072; tx=20; break;
   case   15: Px=1024;   tx=20; break;   case   30: Px=512;tx=20; break;
   case   60: Px=256;    tx=50; break;   case240: Px=64;   tx=50; break;
   case 1440:            tx=50; break;   case 10080:         tx=50; break;default:tx=50; break;}
   ln_txt ="                               [-2/8] "; mml_wdth =0; ln_tx =""; mml_clr=clrSnow;
   ln_txt ="                               [-1/8] "; mml_wdth =0; ln_tx =""; mml_clr=clrSnow;
   ln_txt ="                               ";mml_wdth =0; ln_tx =""; mml_clr=clrSnow;
   ln_txt ="                               ";mml_wdth =0; ln_tx =""; mml_clr=clrSnow;
   ln_txt ="                               ";mml_wdth =0; ln_tx =""; mml_clr=clrSnow;
   ln_txt ="                               ";mml_wdth =0; ln_tx =""; mml_clr=clrSnow;
   ln_txt ="                               ";mml_wdth =0; ln_tx =""; mml_clr=clrSnow;
   ln_txt ="                               ";mml_wdth =0; ln_tx =""; mml_clr=clrSnow;
   ln_txt ="                               ";mml_wdth =0; ln_tx =""; mml_clr=clrSnow;
   ln_txt ="                               ";mml_wdth =0; ln_tx =""; mml_clr=clrSnow;
   ln_txt="                               ";mml_wdth=0; ln_tx=""; mml_clr=clrSnow; mml_shft=0;
   ln_txt="                               [+1/8] "; mml_wdth=0; ln_tx=""; mml_clr=clrSnow;mml_thk=3;
   ln_txt="                               [+2/8] "; mml_wdth=0; ln_tx=""; mml_clr=clrSnow;
   indicatorFileName = WindowExpertName();
   calculateValue    = (TimeFrame=="calculateValue"); if (calculateValue) return(0);
   returnBars      = (TimeFrame=="returnBars");   if (returnBars)   return(0);
   timeFrame         = stringToTimeFrame(TimeFrame);return(INIT_SUCCEEDED);}//End OnInit
//+----deinit Function-----------------------------------------------------------------------------------------------+
   void deinit(){ int reason; switch(reason){
      case REASON_CHARTCHANGE :
      case REASON_RECOMPILE   :
      case REASON_CLOSE       : break;
                      default : {
   for(int i=0;i<OctLinesCnt;i++){buff_str="mmlx"+i;
   ObjectDelete(buff_str); buff_str = "mml_txtx"+i; ObjectDelete(buff_str);}            
      CleanUpAisle1(ID); string lookFor = ID+":"; int lookForLength = StringLen(lookFor);
   for(int io=ObjectsTotal()-1; io>=0; io--){string objectName=ObjectName(io);
   if(StringSubstr(objectName,0,lookForLength)==lookFor) ObjectDelete(objectName);}}}}
//+------------------------------------------------------------------------------------------------------------------+
   class CFix { } ExtFix;
//+----OnCalculate Function------------------------------------------------------------------------------------------+
   int OnCalculate(const int rates_total,
                   const int prev_calculated,
                   const datetime &time[],
                   const double &open[],
                   const double &high[],
                   const double &low[],
                   const double &close[],
                   const long &tick_volume[],
                   const long &volume[],
                   const int &spread[]){fSetBuffers();
//+------------------------------------------------------------------------------------------------------------------+
   if(AutoRefresh){if(oldBars<iBars(NULL,RefreshPeriod) && hWindow!=0){int message;
   switch(Period()){case   1: message= 33137; break;
                  case   5: message= 33138; break;
                  case    15: message= 33139; break;
                  case    30: message= 33140; break;
                  case    60: message= 33135; break;
                  case   240: message= 33136; break;
                  case1440: message= 33134; break;
                  case 10080: message= 33141; break;
                     default: message= 33137; break;}
   PostMessageA (hWindow,WM_COMMAND,33141,0);   // switch to weekly TF
   PostMessageA (hWindow,WM_COMMAND,message,0); // switch to original TF
   oldBars=iBars(NULL,RefreshPeriod);}}//End AutoRefresh
   int counted_bars=IndicatorCounted();
   int i,j,k,limit; double ld_Range;
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--; limit=MathMin(Bars-counted_bars+TMA2per,Bars-1);
   if(returnBars){TMA2 = limit+1; return(0);}
//+---TMA1 Function--------------------------------------------------------------------------------------------------+
   for (i=limit; i>=0; i--){
          TMA1 = EMPTY_VALUE;
      TMA1up = EMPTY_VALUE;
      TMA1dn = EMPTY_VALUE;
          TMA1 = iMA(NULL,0,TMA1per,0,MODE_LWMA,PRICE_CLOSE,i);
         ld_Range = iATR(NULL,0,TMA1atr,i+10);
    TMA1bandUp = TMA1 + (ld_Range * TMA1atrMulti);
    TMA1bandDn = TMA1 - (ld_Range * TMA1atrMulti);}
//+---TMA2 Function--------------------------------------------------------------------------------------------------+
   if(calculateValue || timeFrame==Period()){
   if(slope==-1) CleanPoint(limit,TMA2up,TMA2dn);
   for(i=limit;i>=0;i--){
   if(Extrapolate || (!Extrapolate && i>TMA2per)){
            double sum= (TMA2per+1)*iMA(NULL,0,1,0,MODE_SMA,TMA2price,i);
            double sumw = (TMA2per+1);
   for(j=1, k=TMA2per; j<=TMA2per; j++, k--){
             sum+= k*iMA(NULL,0,1,0,MODE_SMA,TMA2price,i+j);
             sumw += k;
   if(j<=i){ sum+= k*iMA(NULL,0,1,0,MODE_SMA,TMA2price,i-j);
             sumw += k;}}
   double range = iATR(NULL,0,TMA2atr,i+10)*TMA2atrMulti;
            TMA2 = sum/sumw;
      TMA2bandUp = TMA2+range;
      TMA2bandDn = TMA2-range;} else {
            TMA2 = TMA2;
      TMA2bandUp = TMA2bandUp;
      TMA2bandDn = TMA2bandDn;}         
          TMA2up = EMPTY_VALUE;
          TMA2dn = EMPTY_VALUE;
         slope = slope;
          trend1 = 0;
          trend2 = trend2;
   if(TMA2> TMA2) slope = 1;
   if(TMA2< TMA2) slope =-1;
   //if(High   > TMA2bandUp)    trend1 = 1;
   //if(Low    < TMA2bandDn)    trend1 =-1;
   if(Close> TMA2bandUp)    trend2 = 1;
   if(Close< TMA2bandDn)    trend2 =-1;
   if(slope==-1) PlotPoint(i,TMA2up,TMA2dn,TMA2);}
//+---Ribbon Function------------------------------------------------------------------------------------------------+
   for(i=0; i<limit; i++){
   if(TMA1bandUp>TMA2bandUp){MA2=TMA1bandUp;MA1=TMA2bandUp;MA4=EMPTY_VALUE;MA3=EMPTY_VALUE;}
   if(TMA1bandDn<TMA2bandDn){MA4=TMA1bandDn;MA3=TMA2bandDn;MA2=EMPTY_VALUE;MA1=EMPTY_VALUE;}}
//+---Semafor Function-----------------------------------------------------------------------------------------------+
   if(Period2>0) CountZZ(HPup,HPdn,Period2,Dev2,Stp2);
   if(Period3>0) CountZZ(ZPup,ZPdn,Period3,Dev3,Stp3);
//+---Open Line Function---------------------------------------------------------------------------------------------+
   double XardPer; if(Period()<=PERIOD_H1){XardPer=PERIOD_D1;}   if(Period()>=PERIOD_H4){XardPer=PERIOD_W1;}
   if(Bars<=3) return(0); int ExtCountedBars=IndicatorCounted(); if(ExtCountedBars<0) return(-1); limit=Bars-2;
   if(ExtCountedBars>2) limit=Bars-ExtCountedBars-1; int pos2,index; pos2=limit; while(pos2>=0){
   if(tFrame<10){index=iBarShift(NULL,XardPer,Time,false);}
    else {index=iBarShift(NULL,XardPer,BofYr(Time),false);}
   BufPOL=iMA(Symbol(),0,2,0,MODE_SMMA,PRICE_CLOSE,pos2); VAL=iOpen(NULL,XardPer,index);
   POL0=VAL; POL1=VAL; POLb=POL0; if((VAL>BufPOL)){POL1=EMPTY_VALUE;}pos2--;}
//+---Xmath Function-------------------------------------------------------------------------------------------------+
   bn_v1x =Lowest(NULL,0, MODE_LOW,Px+StepBackx,0);
   bn_v2x = Highest(NULL,0,MODE_HIGH,Px+StepBackx,0);v1x = Low;v2x = High;
//+------------------------------------------------------------------------------------------------------------------+
   if(v2x<=250000   && v2x>25000)    fractal=100000;if(v2x<=25000    && v2x>2500)   fractal=10000;
   if(v2x<=2500   && v2x>250)      fractal=1000;    if(v2x<=250      && v2x>25)       fractal=100;
   if(v2x<=25       && v2x>12.5)   fractal=12.5;    if(v2x<=12.5   && v2x>6.25)   fractal=12.5;
   if(v2x<=6.25   && v2x>3.125)    fractal=6.25;    if(v2x<=3.125    && v2x>1.5625)   fractal=3.125;
   if(v2x<=1.5625   && v2x>0.390625) fractal=1.5625;if(v2x<=0.390625 && v2x>0)      fractal=0.1953125;
//+------------------------------------------------------------------------------------------------------------------+
   rangex=(v2x-v1x); sumx=MathFloor(MathLog(fractal/rangex)/MathLog(2)); octave=fractal*(MathPow(0.5,sumx));
   mn=MathFloor(v1x/octave)*octave; if((mn+octave+(octave*0.3333))>v2x) mx=mn+octave; else mx=mn+(2*octave);
//+------------------------------------------------------------------------------------------------------------------+
   if((v1x>=(3*(mx-mn)/16+mn)) && (v2x<=(9*(mx-mn)/16+mn))) x2=mn+(mx-mn)/2; else x2=0;
   if((v1x>=(mn-(mx-mn)/8)) && (v2x<=(5*(mx-mn)/8+mn)) && (x2 == 0)) x1=mn+(mx-mn)/2; else x1=0;
   if((v1x>=(mn+7*(mx-mn)/16)) && (v2x<=(13*(mx-mn)/16+mn))) x4=mn+3*(mx-mn)/4; else x4=0;
   if((v1x>=(mn+3*(mx-mn)/8)) && (v2x<=(9*(mx-mn)/8+mn)) && (x4==0)) x5=mx; else x5=0;
   if((v1x>=(mn+(mx-mn)/8)) && (v2x<=(7*(mx-mn)/8+mn)) && (x1==0) && (x2==0) && (x4==0) && (x5==0))
      x3 = mn+3*(mx-mn)/4; else x3=0;if((x1+x2+x3+x4+x5)==0) x6=mx; else x6=0;   finalH=x1+x2+x3+x4+x5+x6;
   if(x1>0) y1=mn; else y1=0;if(x2>0) y2=mn+(mx-mn)/4; else y2=0;if(x3>0) y3=mn+(mx-mn)/4; else y3=0;
   if(x4>0) y4=mn+(mx-mn)/2; else y4=0;   if(x5>0) y5=mn+(mx-mn)/2; else y5=0;
   if((finalH>0) && ((y1+y2+y3+y4+y5)==0)) y6=mn; else y6=0;   finalL = y1+y2+y3+y4+y5+y6;
//+------------------------------------------------------------------------------------------------------------------+
   double xo = (finalH-finalL),xmm = xo/8;
   for(f=0; f<OctLinesCnt; f++){mmlx = 0;}dmml=(finalH-finalL)/8;mmlx=(finalL-dmml*2);
   for(f=1; f<OctLinesCnt; f++){mmlx = mmlx + dmml;}
   for(f=0; f<OctLinesCnt; f++){buff_str = "mmlx"+f; buff_str = "mml_txtx"+f; ObjectDelete(buff_str);
   if(showXmath){
    ObjectCreate(buff_str,OBJ_TEXT, 0, Time, mml_shft);
   ObjectSetText(buff_str,ln_txt+DoubleToStr(mmlx,DecNos)+ln_tx,12,"MV Boli",mml_clr);
       ObjectSet(buff_str,OBJPROP_BACK,1);ObjectMove(buff_str,0,Time,mmlx+Point*tx);}}//End Xmath
//+------------------------------------------------------------------------------------------------------------------+
   int countedbars=prev_calculated; if(countedbars<0) return(-1); if(countedbars>0) countedbars--;
   limit=MathMin(rates_total-countedbars,rates_total-1);
//+----HA Function---------------------------------------------------------------------------------------------------+
   int i_Bar = fmax(1, rates_total - prev_calculated + (prev_calculated > 0));
        if(prev_calculated == 0){i_Bar--;
                  if(Open < Close) {
                haLowHigh =   Low;
                haHighLow =High;} else {
                haLowHigh =High;
                haHighLow =   Low;}
                   haOpen =Open;
                  haClose = Close;}
//+----
        double d_Open,d_Close,d_High,d_Low;
        i_Bar = fmin(rates_total - 2,i_Bar);
        while(i_Bar-- >0) {
       d_Open = (haOpen + haClose) / 2;
        d_Close = (Open + High + Low + Close) / 4;
       d_High = fmax(High, fmax(d_Open, d_Close));
          d_Low = fmin(Low, fmin(d_Open, d_Close));
//+----
        if(d_Open < d_Close){
                haLowHigh = d_Low;
                haHighLow = d_High;} else {
                haLowHigh = d_High;
                haHighLow = d_Low;}
                   haOpen = d_Open;
                  haClose = d_Close;} //End HA
//+---Trend Function-------------------------------------------------------------------------------------------------+
   if(returnBars){TREND=limit+1; return(0);} if(calculateTREND || timeFrame == Period()){
   if(!calculateTREND && trend==-1) CleanPoint(limit,TRENDdna,TRENDdnb);
   for(i=limit;i>=0;i--){TRENDdna=EMPTY_VALUE;TRENDdnb=EMPTY_VALUE; trend=trend;
                   if(Close>iMA(Symbol(),TRENDtf,TRENDper,TRENDshft,TRENDmode,PRICE_HIGH,i+1)) trend= 1;
                   if(Close<iMA(Symbol(),TRENDtf,TRENDper,TRENDshft,TRENDmode,PRICE_LOW, i+1)) trend=-1;
   if(trend==-1)   TREND=iMA(Symbol(),TRENDtf,TRENDper,TRENDshft,TRENDmode,TRENDtype,i+1);
                elseTREND=iMA(Symbol(),TRENDtf,TRENDper,TRENDshft,TRENDmode,TRENDtype,i+1);
   if(!calculateTREND && trend==-1) PlotPoint(i,TRENDdna,TRENDdnb,TREND); TRENDbgd=TREND;}}//End Trend
//+---ccitrend Function----------------------------------------------------------------------------------------------+
   for(i=0; i<=limit; i++){ccitrend=iCCI(NULL,0,28,PRICE_TYPICAL,i);}
//+---Alert Function-------------------------------------------------------------------------------------------------+
   for(i=limit;i>=0;i--){
   if(trend== 1 && TMA1bandDn<TMA2bandDn && ccitrend>=0.){trend1= 1;}
   if(trend==-1 && TMA1bandUp>TMA2bandUp && ccitrend<-0.){trend1=-1;}}
//+---InfoBOX Display------------------------------------------------------------------------------------------------+
   int LightButp=Determine_StopLight(); Show_TrafficLights(LightButp); if(showINFOBOX){
   iPanel(ID+"Xard0",4,129,"g",70,"Webdings",Panelcol); iPanel(ID+"Xard1",4,212,"g",70,"Webdings",Panelcol);
   iPanel(ID+"Xard2",4,236,"g",70,"Webdings",Panelcol);
   iPanel(ID+"Xard3",9,134,"g",62,"Webdings",Boxbgd);   iPanel(ID+"Xard4",9,216,"g",62,"Webdings",Boxbgd);
//+------------------------------------------------------------------------------------------------------------------+
   double ydayhigh=iHigh(Symbol(),PERIOD_D1,1), ydaylow=iLow(Symbol(),PERIOD_D1,1);
   double spd=(MarketInfo(SymPair,MODE_BID)); string MarketPrice=DoubleToStr(Bid,Digits-1);
   if(spd>=1 && spd<=9.99)         int spx=+13; else if(spd>=0 && spd<=0.9999)      spx=+12;
   else if(spd>=10 && spd<=99.99)      spx=+13; else if(spd>=100 && spd<=999.99)    spx=+12;
   else if(spd>=1000 && spd<=9999.99)spx=+12; else if(spd>=10000 && spd<=99999.99)spx=+14;
   iPanel(ID+"Xard5",spx,155,DoubleToStr(MarketInfo(SymPair,MODE_BID),DecNos),16,"Arial Black",clrAqua);
//+------------------------------------------------------------------------------------------------------------------+
   double sprd=(Ask-Bid)/myPoint; if(sprd>=1 && sprd<=9.99) int spdx=-1; else if(sprd>=10 && sprd<=99.99)spdx=-3;
   else if(sprd>=100 && sprd<=999.99)spdx=-6; iPanel(ID+"Xard6",18+spdx,179,"SPD:"+
   DoubleToStr((Ask-Bid)*MathPow(10,Digits)/pipsize,1),12,"Consolas Bold",Snow); Show_Timer(); RefreshRates();
//+------------------------------------------------------------------------------------------------------------------+
   string OPEN=""; OpenToday=iOpen(SymPair,1440,0); OPEN=(DoubleToStr(OpenToday,DecNos));
   string PIPS=""; CLOSE=iClose(SymPair,1440,0); PIPS=DoubleToStr((CLOSE-OpenToday)/Point/pipsize,0);
   color cPIPS; if(CLOSE>=OpenToday){cPIPS=clrAqua;} if(CLOSE<OpenToday){cPIPS=clrViolet;}
   iPanel(ID+"Xard8",13,134,StringSubstr(SymPair,0,7),18,"Impact",clrWhite);
   iPanel(ID+"Xard9",12,211,"Daily Open",10,"Arial Black",cPIPS); iPanel(ID+"Xard10",21,224,OPEN,13,FontType,cPIPS);
   iPanel(ID+"Xard11",52,246,"P2Op",10,"Arial Bold",clrSnow); iPanel(ID+"Xard12",14,246,PIPS,11,"Arial Bold",cPIPS);
//+------------------------------------------------------------------------------------------------------------------+
   string HILO=""; double HiToday=iHigh(NULL,1440,0),LoToday=iLow(NULL,1440,0);
   HILO=DoubleToStr((HiToday-LoToday)/Point/pipsize,0); iPanel(ID+"Xard13",52,263,"HiLo",10,"Arial Bold",clrSilver);
                                                      iPanel(ID+"Xard14",14,263, HILO ,11,"Arial Bold",clrSilver);
//+---ADR------------------------------------------------------------------------------------------------------------+
   ADR1=0; ADR5=0; ADR10=0; ADR20=0; ADRavg=0; int a,b,c; int ypos=0;
                           ADR1=(iHigh(NULL,PERIOD_D1,1)-iLow(NULL,PERIOD_D1,1));
   for(a=1;a<= 5;a++)ADR5= ADR5+(iHigh(NULL,PERIOD_D1,a)-iLow(NULL,PERIOD_D1,a));
   for(b=1;b<=10;b++) ADR10=ADR10+(iHigh(NULL,PERIOD_D1,b)-iLow(NULL,PERIOD_D1,b));
   for(c=1;c<=20;c++) ADR20=ADR20+(iHigh(NULL,PERIOD_D1,c)-iLow(NULL,PERIOD_D1,c));
   ADR5=ADR5/5;ADR10=ADR10/10;ADR20=ADR20/20;ADRavg=(((ADR1+ADR5+ADR10+ADR20)/4))/Point/pipsize;
   double avYest=(iHigh(NULL,PERIOD_D1,1)-iLow(NULL,PERIOD_D1,1))/Point/pipsize; color colorDAV=LimeGreen;
   if(ADRavg>avYest){colorDAV=DarkOrange;} iPanel(ID+"Xard15",52,280,"D.Avg",10,"Arial Bold",clrSnow);
   iPanel(ID+"Xard16",14,280,DoubleToStr(ADRavg,0),11,"Arial Bold",colorDAV);}//EO InfoBox
//+---Symbol Header Function-----------------------------------------------------------------------------------------+
   color SymClr=clrGray; if(Close>OpenToday){SymClr=clrDodgerBlue;} if(Close<OpenToday){SymClr=C'238,130,238';}
   if(showSymbolHeader){color Sbg=clrSnow;//C'161,161,161';
   iOBOS(ID+"ObOs1",LR+1,UD+1,StringSubstr(SymPair,0,8),HDRsize,"Arial Black",Sbg);
   iOBOS(ID+"ObOs2",LR+0,UD+0,StringSubstr(SymPair,0,8),HDRsize,"Arial Black",SymClr);}//End Symboltext
//+---BidRatio Function----------------------------------------------------------------------------------------------+
   if(showD1){if((iHigh(SymPair,PERIOD_D1,0)-iLow(SymPair,PERIOD_D1,0)!=0))
   D1pct=100.0*((iClose(SymPair,PERIOD_D1,0)-iLow(SymPair,PERIOD_D1,0))/
   (iHigh(SymPair,PERIOD_D1,0)-iLow(SymPair,PERIOD_D1,0))); else D1pct=0.0;
   clrD1pct=clrGray; if(D1pct<=SellRatio){clrD1pct=clrRed;} if(D1pct>=BuyRatio){clrD1pct=clrLime;}
   iPanel(ID+"Xard21",15,300,DoubleToStr(D1pct,0)+"%",18,"Arial Bold",clrD1pct);}
//+------------------------------------------------------------------------------------------------------------------+
      manageAlerts();return(0);}
   for(i=limit;i>=0;i--) if(slope==-1) PlotPoint(i,TMA2up,TMA2dn,TMA2);return(rates_total);}
//+---Timer Function-------------------------------------------------------------------------------------------------+
   void Show_Timer(){double rx; int mt,s; mt=Time+Period()*60-CurTime(); rx=mt/60.0; s=mt%60; mt=(mt-mt%60)/60;
   if(showINFOBOX){iPanel(ID+"Xard7",13,192,mt+":"+s,13,"Arial Black",clrLime);}}
//+------------------------------------------------------------------------------------------------------------------+
   void manageAlerts(){if(!calculateValue && alertsOn){if(alertsOnCurrent)
   int whichBar = 0; else whichBar = 1;
       whichBar = iBarShift(NULL,0,iTime(NULL,timeFrame,whichBar));
      static datetime time2 = 0;static string   mess2 = "";
   if(alertsOnStopLight && trend1 != trend1){
   if(trend1 ==1) doAlert(time2,mess2,whichBar,"BUY");
   if(trend1 == -1) doAlert(time2,mess2,whichBar,"SELL");}}}
//+------------------------------------------------------------------------------------------------------------------+
   void doAlert(datetime& previousTime, string& previousAlert, int forBar, string doWhat){string msg;
   if(previousAlert != doWhat || previousTime != Time){previousAlert = doWhat;previousTime = Time;
   msg=StringConcatenate(Symbol()," ",timeFrameToString(timeFrame)," @ ",
       TimeToStr(TimeLocal(),TIME_MINUTES),"StopLight is a ",doWhat);
   if(alertsMessage) Alert(msg);if(alertsNotify)SendNotification(msg);
   if(alertsEmail)   SendMail(StringConcatenate(Symbol()," "),msg);if(alertsSound)   PlaySound("alert2.wav");}}
//+------------------------------------------------------------------------------------------------------------------+
   void CleanPoint(int i,double& first[],double& second[]){
   if((second!=EMPTY_VALUE) && (second!=EMPTY_VALUE)) second=EMPTY_VALUE;
   else if((first!=EMPTY_VALUE) && (first!=EMPTY_VALUE) && (first==EMPTY_VALUE)) first=EMPTY_VALUE;}
//+------------------------------------------------------------------------------------------------------------------+
   void PlotPoint(int i,double& first[],double& second[],double& from[]){ if(first==EMPTY_VALUE){
   if(first==EMPTY_VALUE){ first=from; first=from; second=EMPTY_VALUE;} else {
   second=from; second=from; first=EMPTY_VALUE;}} else {first=from; second=EMPTY_VALUE;}}
//+------------------------------------------------------------------------------------------------------------------+
   string sTfTable[] = {"M1","M5","M15","M30","H1","H4","D1","W1","MN"};
   int    iTfTable[] = {1,5,15,30,60,240,1440,10080,43200};
//+------------------------------------------------------------------------------------------------------------------+
   int stringToTimeFrame(string tfs){ tfs=stringUpperCase(tfs);for(int i=ArraySize(iTfTable)-1; i>=0; i--)
   if(tfs==sTfTable || tfs==""+iTfTable) return(MathMax(iTfTable,Period()));return(Period());}
//+------------------------------------------------------------------------------------------------------------------+
   string timeFrameToString(int tf){
   for(int i=ArraySize(iTfTable)-1;i>=0;i--)if(tf==iTfTable) return(sTfTable); return("");}
//+------------------------------------------------------------------------------------------------------------------+
   string stringUpperCase(string str){ string s=str; for(int length=StringLen(str)-1; length>=0; length--){
   int tchar=StringGetChar(s,length); if((tchar>96 && tchar<123) || (tchar>223 && tchar<256))
   s=StringSetChar(s,length,tchar-32); else if(tchar>-33 && tchar<0) s=StringSetChar(s,length,tchar+224);} return(s);}
//+--- Semafor ------------------------------------------------------------------------------------------------------+
   int CountZZ(double& ZZBufUp[],double& ZZBufDn[],int ExtDepth,int ExtDeviation,int ExtBackstep){
   int shiftZZ,back,lasthighpos,lastlowpos; double val,res,curlow,curhigh,lasthigh,lastlow;
   for(shiftZZ=Bars-ExtDepth; shiftZZ>=0; shiftZZ--){val=Low;
   if(val==lastlow) val=0.0;else {lastlow=val;
   if((Low-val)>(ExtDeviation*ZZPoint)) val=0.0;else {
   for(back=1; back<=ExtBackstep; back++){res=ZZBufUp;
   if(res!=0.0) res=res+ZZdelta;if((res!=0.0)&&(res>val)) ZZBufUp=0.0;}}}
   if(val==0.0) ZZBufUp=0.0; else ZZBufUp=val-ZZdelta;
   val=High;
   if(val==lasthigh) val=0.0;else { lasthigh=val;
   if((val-High)>(ExtDeviation*ZZPoint)) val=0.0; else {
   for(back=1; back<=ExtBackstep; back++){ res=ZZBufDn;
   if(res!=0.0) res=res-ZZdelta;if((res!=0.0)&&(res<val)) ZZBufDn=0.0;}}}
   if(val==0.0) ZZBufDn=0.0; else ZZBufDn=val+ZZdelta;}
//+--- Semafor final cutting ----------------------------------------------------------------------------------------+
   lasthigh=-1;lasthighpos=-1;lastlow=-1;lastlowpos=-1;
   for(shiftZZ=Bars-ExtDepth; shiftZZ>=0; shiftZZ--){ curlow=ZZBufUp;
   if( curlow != 0.0)curlow =curlow+ZZdelta;   curhigh=ZZBufDn;
   if(curhigh != 0.0) curhigh = curhigh-ZZdelta;if((curlow==0.0)&&(curhigh==0.0)) continue;
   if(curhigh!=0.0){if(lasthigh>0.0){ if(lasthigh<curhigh) ZZBufDn=0.0; else ZZBufDn=0.0;}
   if(lasthigh<curhigh || lasthigh<0.0){lasthigh=curhigh; lasthighpos=shiftZZ;} lastlow=-1;}
   if(curlow!=0.0){if(lastlow>0.0){   if(lastlow>curlow) ZZBufUp=0.0; else ZZBufUp=0.0;}
   if((curlow<lastlow)||(lastlow<0.0)){lastlow=curlow; lastlowpos=shiftZZ;} lasthigh=-1;}}
   for(shiftZZ=Bars-1;shiftZZ>=0;shiftZZ--){if(shiftZZ>=Bars-ExtDepth)ZZBufUp=0.0; else {break;}} return(0);}
//+------------------------------------------------------------------------------------------------------------------+
   int Str2Massive(string VStr,int& MCount,int& VMass[]){int val=StrToInteger(VStr); if(val>0){MCount++;
   int mc=ArrayResize(VMass,MCount); if(mc==0)return(-1); VMass=val; return(1);} else return(0);}
//+------------------------------------------------------------------------------------------------------------------+
   int IntFromStr(string ValStr,int& MCount, int& VMass[]){if(StringLen(ValStr)==0) return(-1);
   string SS=ValStr; int NP=0; string CS; MCount=0; ArrayResize(VMass,MCount);
   while(StringLen(SS)>0){NP=StringFind(SS,",");
   if(NP>0){CS=StringSubstr(SS,0,NP); SS=StringSubstr(SS,NP+1,StringLen(SS));} else {
   if(StringLen(SS)>0){CS=SS; SS="";}} if(Str2Massive(CS,MCount,VMass)==0){return(-2);}} return(1);}
//+------------------------------------------------------------------------------------------------------------------+
   double getPoint(bool custommode){string symbol=Symbol();double point = MarketInfo(symbol,MODE_POINT);
   int pluspos = StringFind(symbol,"+",0);int minuspos = StringFind(symbol,"-",0);
   if(pluspos>0) symbol=StringSubstr(symbol,0,pluspos); else if(minuspos>0) symbol=StringSubstr(symbol,0,minuspos);
   if(point<0.000000001) point=MarketInfo(symbol,MODE_POINT);if(! custommode) return(point); else {
   if(symbol=="NOKJPY"||symbol=="SEKJPY"||symbol=="GBPDKK"||symbol=="GBPNOK"||symbol=="USDSKK"||symbol=="XAG")
   point=MarketInfo(symbol,MODE_POINT);
      else if (StringFind(symbol,"JPY",3) == 3 || symbol == "XAUUSD") point = 0.01;
      else if (StringFind(symbol,"USD",0) >= 0
            || StringFind(symbol,"EUR",0) >= 0
            || StringFind(symbol,"GBP",0) >= 0
            || StringFind(symbol,"CAD",0) >= 0
            || StringFind(symbol,"NZD",0) >= 0) point = 0.0001;}
   if(point<0.000000001) point=Point; if(point<0.000000001) point=0.01; return(point);}//end of getPoint
//+------------------------------------------------------------------------------------------------------------------+
   datetime BofYr(datetime T){return (StrToTime(TimeYear(T)+".1.1 00:00"));}
//+------------------------------------------------------------------------------------------------------------------+
   void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam){
        if(id==CHARTEVENT_OBJECT_CLICK && ObjectGet(sparam,OBJPROP_TYPE)==OBJ_BUTTON){
   if(StringFind(sparam,ID+":back:",0)==0) ObjectSet(sparam,OBJPROP_STATE,false);
        if(IsStopped()) return; fSetBuffers();} OnInit();}
//+------------------------------------------------------------------------------------------------------------------+
   void fSetBuffers(){int iChartScale = int(ChartGetInteger(0,CHART_SCALE));
        if(getChartScale == iChartScale) return;
        getChartScale = iChartScale; int iWidth=0; switch(iChartScale){
                case 0: iWidth = 1; break;
                case 1: iWidth = 1; break;
                case 2: iWidth = 2; break;
                case 3: iWidth = 4; break;
                case 4: iWidth = 7; break;
                case 5: iWidth =14; break;}
        if(showRIBBON)         Type=DRAW_HISTOGRAM; else Type=DRAW_NONE;
   SetIndexStyle(0,Type,0,iWidth,RibColUP);
   SetIndexStyle(1,Type,0,iWidth,RibColDN);
   SetIndexStyle(2,Type,0,iWidth,RibColUP);
   SetIndexStyle(3,Type,0,iWidth,RibColDN);
        if(showHA)             Type=DRAW_HISTOGRAM; else Type=DRAW_NONE;
        SetIndexStyle(24,Type,0,iWidth,cBearish);
        SetIndexStyle(25,Type,0,iWidth,cBullish);
        if(showTREND)          Type=DRAW_LINE; else Type=DRAW_NONE;
        SetIndexStyle(26,Type,0,iWidth+4,TRENDbgdclr);
        SetIndexStyle(27,Type,0,iWidth+2,TRENDupclr);
        SetIndexStyle(28,Type,0,iWidth+2,TRENDdnclr);
        SetIndexStyle(29,Type,0,iWidth+2,TRENDdnclr);        ChartRedraw();}
//+---StopLight Function---------------------------------------------------------------------------------------------+
        int Determine_StopLight(){int xpos=18,ypos=66;if(showSpotLight){if(!IsConnected())return(PowerFailure);
   if(trend== 1 && TMA1bandDn<TMA2bandDn && ccitrend>=0.){
   ObjectDelete(ID+"tls0102");ObjectDelete(ID+"tls0103");
   makeSTOP(ID+"tls0101",xpos+4,ypos+2,"BUY", tsize,FontType,textcolUP);return(GreenLight);}
   if(trend==-1 && TMA1bandUp>TMA2bandUp && ccitrend<-0.){
   ObjectDelete(ID+"tls0101");ObjectDelete(ID+"tls0103");
   makeSTOP(ID+"tls0102",xpos-2,ypos+2,"SELL",tsize,FontType,textcolDN);return(RedLight);}
   ObjectDelete(ID+"tls0101");ObjectDelete(ID+"tls0102");
   makeSTOP(ID+"tls0103",xpos-3,ypos+2,"WAIT",tsize,FontType,textcolWT);return(OrangeLight);} return(PowerFailure);}
//+------------------------------------------------------------------------------------------------------------------+
   void Show_TrafficLights(int TrafficLight){color cStopLights; switch(TrafficLight){
   case GreenLight:   cStopLights=clrGreen;                  Color_Chart(GreenLight); break;
   case OrangeLight:    cStopLights=clrOrange;                  Color_Chart(OrangeLight); break;
   case RedLight:       cStopLights=C'238,130,238';                Color_Chart(RedLight); break;
   case PowerFailure:   cStopLights=Panetpgd2; break;   default:cStopLights=Panetpgd2; break;}
//+------------------------------------------------------------------------------------------------------------------+
   if(showSpotLight){double OpToday=iOpen(NULL,1440,0); color Panetpgd1=C'80,90,100';
   if(Close>OpToday){Panetpgd1=clrLime;} else Panetpgd1=clrDeepPink;
   makeTLS(ID+"tls0001",5,31); ObjectSetText(ID+"tls0001","g",70,"Webdings",Panelcol);
   makeTLS(ID+"tls0004",8,35); ObjectSetText(ID+"tls0004","n",65,"Webdings",Panetpgd1); for(int is=0;is<1;is++){
   makeTLS(ID+"tls00"+(is+4),13,40+is*92); ObjectSetText(ID+"tls00"+(is+4),"n",58,"Webdings",cStopLights);}}}
//+------------------------------------------------------------------------------------------------------------------+
   void makeSTOP(string tls1,int x,int y,string Text,int fontSize,string Font,color Color){
         ObjectDelete(tls1); ObjectCreate(tls1,OBJ_LABEL,Window,0,0);
            ObjectSet(tls1,OBJPROP_CORNER,InfoBoxCorner);
            ObjectSet(tls1,OBJPROP_XDISTANCE,x-1+posLR);
            ObjectSet(tls1,OBJPROP_YDISTANCE,y+3+posUD);
            ObjectSet(tls1,OBJPROP_BACK,false);
          ObjectSetText(tls1,Text,tsize,FontType,Color);}
//+------------------------------------------------------------------------------------------------------------------+
   void makeTLS(string tls2,int x,int y){ObjectCreate(tls2,OBJ_LABEL,Window,0,0);
             ObjectSet(tls2,OBJPROP_CORNER,InfoBoxCorner);
             ObjectSet(tls2,OBJPROP_XDISTANCE,x-1+posLR);
             ObjectSet(tls2,OBJPROP_YDISTANCE,y+9+posUD);}
//+------------------------------------------------------------------------------------------------------------------+
   void iPanel(string tls3,int x,int y,string Text,int fontSize,string Font,color Color){
         ObjectCreate(tls3,OBJ_LABEL,Window,0,0);
            ObjectSet(tls3,OBJPROP_CORNER,InfoBoxCorner);
            ObjectSet(tls3,OBJPROP_XDISTANCE,x+posLR);
            ObjectSet(tls3,OBJPROP_YDISTANCE,y+2+posUD);
            ObjectSet(tls3,OBJPROP_BACK,false);
      ObjectSetText(tls3,Text,fontSize,Font,Color);}
//+------------------------------------------------------------------------------------------------------------------+
   void iOBOS(string tls4,int x,int y,string Text,int fontSize,string Font,color Color){
      ObjectCreate(tls4,OBJ_LABEL,0,0,0);
         ObjectSet(tls4,OBJPROP_CORNER,0);
         ObjectSet(tls4,OBJPROP_XDISTANCE,x);
         ObjectSet(tls4,OBJPROP_YDISTANCE,y);
         ObjectSet(tls4,OBJPROP_BACK,false);
       ObjectSetText(tls4,Text,fontSize,Font,Color);}
//+------------------------------------------------------------------------------------------------------------------+
   void Color_Chart(int signal){static color LastColor;color Color=C'20,20,40';if(Color==LastColor)return;
   LastColor=Color; ChartSetInteger(0,CHART_COLOR_BACKGROUND,Color); ChartRedraw(0);}
//+----Clean Chart Function------------------------------------------------------------------------------------------+
   void CleanUpAisle1(string nature){int obj_total= ObjectsTotal(); for(int il=obj_total; il>=0; il--){
   string name=ObjectName(il); if(StringSubstr(name,0,5)==(nature)) ObjectDelete(name);}}//End CleanUpAisle1
//+----END OF FILE---------------------------------------------------------------------------------------------------+
页: [1]
查看完整版本: 找X-XARDFX-38源码