ZCOMFX daily trend v2

Download script
Author: ZCOMFX
ZCOMFX daily trend v2

This script is designed to act as a comprehensive market trend dashboard for the MetaTrader platform. Its primary purpose is to provide a real-time visual summary of the price direction for six major currency pairs simultaneously, allowing traders to see "at a glance" which markets are trending upwards, downwards, or remaining neutral.

Core Functionality and Logic

The script operates by analyzing two specific technical indicators—Moving Averages (EMA) and the Stochastic Oscillator—across multiple timeframes to determine market sentiment.

1. Multi-Pair Dashboard

Instead of forcing the user to switch between different charts, the script monitors six customizable currency pairs (defaulting to EURUSD, GBPUSD, AUDUSD, USDCHF, USDCAD, and USDJPY). It gathers data from these pairs in the background and displays their statuses on a single visual panel on your current chart.

2. Trend Identification Logic

The script classifies each currency pair into one of three states based on the following rules:

  • Bullish Trend (Upward): The market is considered to be trending up when the shorter-term moving average is above the longer-term moving average, and the Stochastic Oscillator is in the upper half of its range (above 50).
  • Bearish Trend (Downward): The market is considered to be trending down when the shorter-term moving average is below the longer-term moving average, and the Stochastic Oscillator is in the lower half of its range (below 50).
  • Neutral/Flat Trend: If the moving averages and the Stochastic Oscillator provide conflicting signals (e.g., the moving averages suggest an uptrend but the Stochastic suggests a downtrend), the script labels the trend as "Flat."

3. Visual Representation

The script creates a clean, organized text panel on your screen:

  • Labels: It lists the names of the currency pairs clearly.
  • Directional Icons: Next to each pair, it displays a specific symbol (using Wingdings icons) and color-codes the status:
    • Lime/Green for Upward trends.
    • Red for Downward trends.
    • DodgerBlue for Flat or neutral markets.

4. On-Chart Signals and Alerts

In addition to the dashboard, the script performs a deeper calculation on the active chart you are currently viewing:

  • Dynamic Arrows: It calculates "Cross" signals where moving averages intersect or Stochastic levels shift. When these specific conditions are met, it places visual arrows (Up, Down, or Flat) directly on your price candles.
  • Audio Notifications: The script includes an alert system that can trigger a sound notification when a significant trend crossover occurs on the current chart, ensuring you don't miss key price action transitions.

Summary for the User

This tool is essentially a "Trend Radar." It eliminates the need to manually check six different charts by aggregating technical data into a single color-coded dashboard. It uses a balanced approach—combining moving averages (which show momentum) with Stochastic oscillators (which show overbought/oversold conditions)—to give you a filtered view of where the market is heading.

Indicators Used
Moving average indicatorStochastic oscillator
Miscellaneous
It issuies visual alerts to the screen
13 Views
0 Downloads
0 Favorites
ZCOMFX daily trend v2
//+------------------------------------------------------------------+
//|                                        ZCOMFX daily trend v2.mq4 |
//|                                                                  |
/*

It shows a direction of 6 pairs (EUR/USD, GBP/USD, AUD/USD, USD/CHF, USD/CAD, USD/JPY) by indicators EMA and Stochastic.
You can change pairs whatever You would like to show daily trend.

*/
//+------------------------------------------------------------------+
#property copyright "ZCOMFX"

#property indicator_chart_window
#define Pref "ZCOMFX"
#property indicator_buffers 3
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_color3 DodgerBlue
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2

double CrossUp[];
double CrossDown[];
double CrossFlat[];
double prevtime;
double Range, AvgRange;
double ema1,ema2;
double ema1pr,ema2pr;
double sto,stopr;
//----
 int SoundAlert =    0; // 0 = disabled

extern string note="Write 6 pairs to show trend:";
extern   string symbol1="EURUSD";
extern   string symbol2="GBPUSD";
extern   string symbol3="AUDUSD";
extern   string symbol4="USDCHF";
extern   string symbol5="USDCAD";
extern   string symbol6="USDJPY";
extern bool ShowArrows = True;

 string note1="Parameters of MACD:";
 int FastEMA=12;
 int SlowEMA=26;
 int SignalSMA=9;
extern string note2="Coordinates:";
extern int X=40;
extern int Y=20;
 int RowStep=12;
 int ColStep=17;
extern int Corner=1; 
 int FSize=10;
//extern int H=0;
 string note3="Colors, two themes:";
 color RectClr=Gray;
 color TxtClr=White;
 color UpClr=Lime;
 color DnClr=Red;
 bool White_Chart_Theme=True;
 color RectClr1=Gray;
 color TxtClr1=Gray;
 color UpClr1=Lime;
 color DnClr1=Red;
 color FlatClr=DodgerBlue;


int TimeX;
double PriceY;

int codeAO,
    codeAO2,
    codeAO3,
    codeAO4,
    codeAO5,
    codeAO6, codeAC, codeMACD;
color ClrAO,
      ClrAO2,
      ClrAO3,
      ClrAO4,
      ClrAO5,
      ClrAO6, ClrAC, ClrMACD ;

//bool Alert_=False;
//color Alert_Clr=Red;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators

   SetIndexStyle (0, DRAW_ARROW, EMPTY);
   SetIndexArrow (0, 233);
   SetIndexBuffer(0, CrossUp);
   SetIndexStyle (1, DRAW_ARROW, EMPTY);
   SetIndexArrow (1, 234);
   SetIndexBuffer(1, CrossDown);
   SetIndexStyle (2, DRAW_ARROW, EMPTY);
   SetIndexArrow (2, 220);
   SetIndexBuffer(2, CrossFlat);

      
      if(White_Chart_Theme)
            {
                RectClr=RectClr1;
                TxtClr=TxtClr1;
                UpClr=UpClr1;
                DnClr=DnClr1;
            }
       
       DrawPanel();
      
      
//----

   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   Delete_My_Obj(Pref);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
  
   { 
   int limit, i, counter; 
   int counted_bars=IndicatorCounted();
   //---- check for possible errors
   if(counted_bars<0) return(-1);
   //---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
//----
   limit=Bars-counted_bars;
//----   
   for(i = 0; i <= limit; i++)
    {      
      counter=i;
      Range=0;
      AvgRange=0;
      for (counter=i ;counter<=i+9;counter++)
       {
         AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);
       }
      Range=AvgRange/10;
//----       
//----      
      ema1=iMA(NULL,PERIOD_H1,100,0,MODE_SMMA,PRICE_CLOSE,i+1);
      ema2=iMA(NULL,PERIOD_H1,50,0,MODE_SMMA,PRICE_CLOSE,i+1);
      ema1pr=iMA(NULL,PERIOD_H1,100,0,MODE_SMMA,PRICE_CLOSE,i+2);
      ema2pr=iMA(NULL,PERIOD_H1,50,0,MODE_SMMA,PRICE_CLOSE,i+2);
      sto=iStochastic(NULL,PERIOD_H1,120,1,8,MODE_SMA,0,MODE_MAIN,i+1);      
      stopr=iStochastic(NULL,PERIOD_H1,120,1,8,MODE_SMA,0,MODE_MAIN,i+2);      

      if ( (ema2>ema1 && sto<50 && stopr>50) || (ema2<ema1 && sto>50 && stopr<50) )
         {
         CrossFlat[i] = Low[i] - Range*0.5;
         }
      
      if ((ema2>ema1 && ema2pr<ema1pr && sto>50)
         || (sto>50 && stopr<50 && ema2>ema1)
         )
       {
         CrossUp[i] = Low[i] - Range*0.5;
       }       
      if ((ema2<ema1 && ema2pr>ema1pr && sto<50)
         || (sto<50 && stopr>50 && ema2<ema1)
         )
       {
         CrossDown[i] = High[i] + Range*0.5;
       }      
    }   
      if ((CrossUp[0] > 2000) && (CrossDown[0] > 2000)) { prevtime = 0; } 
      if ((CrossUp[0] == Low[0] - Range*0.5) && (prevtime != Time[0]) && (SoundAlert != 0))
       {
         prevtime = Time[0];
         Alert(Symbol()," 3 MA Cross Up @  Hour ",Hour(),"  Minute ",Minute());
       }      
      if ((CrossDown[0] == High[0] + Range*0.5) && (prevtime != Time[0]) && (SoundAlert != 0))
       {
         prevtime = Time[0];
         Alert(Symbol()," 3 MA Cross Down @  Hour ",Hour(),"  Minute ",Minute());
       }   
   //Comment("  CrossUp[0]  ",CrossUp[0]," ,  CrossDown[0]  ",CrossDown[0]," ,  prevtime  ",prevtime);
   //Comment("");   
   
 }

  
 //  int    counted_bars=IndicatorCounted();
//----
   double ema1,ema2,sto;
   ema1=iMA(symbol1,PERIOD_H1,100,0,MODE_SMMA,PRICE_CLOSE,0);
   ema2=iMA(symbol1,PERIOD_H1,50,0,MODE_SMMA,PRICE_CLOSE,0);
   sto=iStochastic(symbol1,PERIOD_H4,30,3,3,MODE_SMA,0,MODE_MAIN,0);      
   
      if ( ema2>ema1 && sto>50 ) 
         {codeAO=241; ClrAO=UpClr;} 
      if ( ema2<ema1 && sto<50 )
         {codeAO=242; ClrAO=DnClr;}
      if ( (ema2>ema1 && sto<50) || (ema2<ema1 && sto>50) )
         {codeAO=240; ClrAO=FlatClr;}

   double ema12,ema22,sto2;
   ema12=iMA(symbol2,PERIOD_H1,100,0,MODE_SMMA,PRICE_CLOSE,0);
   ema22=iMA(symbol2,PERIOD_H1,50,0,MODE_SMMA,PRICE_CLOSE,0);
   sto2=iStochastic(symbol2,PERIOD_H4,30,3,3,MODE_SMA,0,MODE_MAIN,0);      
   
      if ( ema22>ema12 && sto2>50 ) 
         {codeAO2=241; ClrAO2=UpClr;} 
      if ( ema22<ema12 && sto2<50 )
         {codeAO2=242; ClrAO2=DnClr;}
      if ( (ema22>ema12 && sto2<50) || (ema22<ema12 && sto2>50) )
         {codeAO2=240; ClrAO2=FlatClr;}
         
   double ema13,ema23,sto3;
   ema13=iMA(symbol3,PERIOD_H1,100,0,MODE_SMMA,PRICE_CLOSE,0);
   ema23=iMA(symbol3,PERIOD_H1,50,0,MODE_SMMA,PRICE_CLOSE,0);
   sto3=iStochastic(symbol3,PERIOD_H4,30,3,3,MODE_SMA,0,MODE_MAIN,0);      
   
      if ( ema23>ema13 && sto3>50 ) 
         {codeAO3=241; ClrAO3=UpClr;} 
      if ( ema23<ema13 && sto3<50 )
         {codeAO3=242; ClrAO3=DnClr;}
      if ( (ema23>ema13 && sto3<50) || (ema23<ema13 && sto3>50) )
         {codeAO3=240; ClrAO3=FlatClr;}

   double ema14,ema24,sto4;
   ema14=iMA(symbol4,PERIOD_H1,100,0,MODE_SMMA,PRICE_CLOSE,0);
   ema24=iMA(symbol4,PERIOD_H1,50,0,MODE_SMMA,PRICE_CLOSE,0);
   sto4=iStochastic(symbol4,PERIOD_H4,30,3,3,MODE_SMA,0,MODE_MAIN,0);      
   
      if ( ema24>ema14 && sto4>50 ) 
         {codeAO4=241; ClrAO4=UpClr;} 
      if ( ema24<ema14 && sto4<50 )
         {codeAO4=242; ClrAO4=DnClr;}
      if ( (ema24>ema14 && sto4<50) || (ema24<ema14 && sto4>50) )
         {codeAO4=240; ClrAO4=FlatClr;}
         
   double ema15,ema25,sto5;
   ema15=iMA(symbol5,PERIOD_H1,100,0,MODE_SMMA,PRICE_CLOSE,0);
   ema25=iMA(symbol5,PERIOD_H1,50,0,MODE_SMMA,PRICE_CLOSE,0);
   sto5=iStochastic(symbol5,PERIOD_H4,30,3,3,MODE_SMA,0,MODE_MAIN,0);      
   
      if ( ema25>ema15 && sto5>50 ) 
         {codeAO5=241; ClrAO5=UpClr;} 
      if ( ema25<ema15 && sto5<50 )
         {codeAO5=242; ClrAO5=DnClr;}
      if ( (ema25>ema15 && sto5<50) || (ema25<ema15 && sto5>50) )
         {codeAO5=240; ClrAO5=FlatClr;}

   double ema16,ema26,sto6;
   ema16=iMA(symbol6,PERIOD_H1,100,0,MODE_SMMA,PRICE_CLOSE,0);
   ema26=iMA(symbol6,PERIOD_H1,50,0,MODE_SMMA,PRICE_CLOSE,0);
   sto6=iStochastic(symbol6,PERIOD_H4,30,3,3,MODE_SMA,0,MODE_MAIN,0);      
   
      if ( ema26>ema16 && sto6>50 ) 
         {codeAO6=241; ClrAO6=UpClr;} 
      if ( ema25<ema15 && sto5<50 )
         {codeAO6=242; ClrAO6=DnClr;}
      if ( (ema26>ema16 && sto6<50) || (ema26<ema16 && sto6>50) )
         {codeAO6=240; ClrAO6=FlatClr;}


 //     if (iAC( NULL , Period(), 1)<iAC( NULL , Period(), 0)) 
  //       {codeAC=217; ClrAC=UpClr;} else
  //       {codeAC=218; ClrAC=DnClr;} /* */
       
  //    if( iMACD( NULL , Period(),  
  //          FastEMA, SlowEMA, SignalSMA, PRICE_CLOSE, MODE_MAIN, 1)< iMACD( NULL , Period(),  
 //           FastEMA, SlowEMA, SignalSMA, PRICE_CLOSE, MODE_MAIN, 0) ) 
  //        {codeMACD=217; ClrMACD=UpClr;} else
  //       {codeMACD=218; ClrMACD=DnClr;} 
         
          
     /* if(Alert_)
            {
               
               if(codeAO==217 && codeAC==217 && codeMACD==217)
                  {Alert(Symbol()+" "+PeriodToStr(Period())
                  +" : AO, AC and MACD are UP at "+TimeToStr(TimeCurrent(),TIME_MINUTES)); 
                  ObjectDelete(Pref+"Unidirection Alert"); }
               
               if(codeAO==218 && codeAC==218 && codeMACD==218)
                  {Alert(Symbol()+" "+PeriodToStr(Period())
                  +" : AO, AC and MACD are DOWN at "+TimeToStr(TimeCurrent(),TIME_MINUTES) ); 
                  ObjectDelete(Pref+"Unidirection Alert"); }
               
            }
          
      if(ObjectFind(Pref+"Unidirection Alert")<0)
            Alert_=!Alert_;
      if(Alert_)Alert_Clr=UpClr; else Alert_Clr=DnClr;*/ 
      
            
      DrawPanel();
//----
   return(0);
  }
//+------------------------------------------------------------------+
int DrawText( string name, datetime T, double P, string Text, int code=0, color Clr=Green,  int Fsize=10, int Win=0)
   { 
      if (name=="") name="Text_"+T;
      
      int Error=ObjectFind(name);// Çàïðîñ 
   if (Error!=Win)// Åñëè îáúåêòà â óê. îêíå íåò :(
    { 
      ObjectCreate(name, OBJ_TEXT, Win, T, P);
      }
      
      ObjectSet(name, OBJPROP_TIME1, T);
      ObjectSet(name, OBJPROP_PRICE1, P);
      
      if(code==0)
      ObjectSetText(name, Text ,Fsize,"Arial",Clr);
      else
      ObjectSetText(name, CharToStr(code), Fsize,"Wingdings",Clr);
   }
   
//--------------------------------------
void DrawPanel()
{     if(Y<0) Y=0;
      //if(Y>(WindowPriceMax()-WindowPriceMin())/Point-H)
      // Y=(WindowPriceMax()-WindowPriceMin())/Point-H;
      
     // TimeX=Time[WindowFirstVisibleBar()]+X*Period()*60; 
     // PriceY=WindowPriceMax()-Y*Point;
      
     // DrawRect( Pref+"Rect", TimeX, PriceY, TimeX+TimeW ,PriceY-PriceH, RectClr, 1, "");
      
     // DrawText( Pref+"Allow Hand Moving", TimeX+1*Period()*60, PriceY-1*Point, "", 73, HandClr );
      //DrawText( Pref+"Unidirection Alert", TimeX+1*Period()*60, PriceY-(1+StepS)*Point, "", 37, Alert_Clr );
      
     // DrawText( Pref+"AO", TimeX+4*Period()*60, PriceY-1*Point, "AO", 0,TxtClr );//0, 10, 0
    //  DrawText( Pref+"AC", TimeX+4*Period()*60, PriceY-(1+StepS)*Point, "AC", 0,TxtClr );
     // DrawText( Pref+"MACD", TimeX+3*Period()*60, PriceY-(1+2*StepS)*Point, "MACD", 0,TxtClr );
      
     // DrawText( Pref+"AO direction", TimeX+8*Period()*60, PriceY-1*Point, "", codeAO, ClrAO );
     // DrawText( Pref+"AC direction", TimeX+8*Period()*60, PriceY-(1+StepS)*Point, "", codeAC, ClrAC );
     // DrawText( Pref+"MACD direction", TimeX+8*Period()*60, PriceY-(1+2*StepS)*Point, "", codeMACD, ClrMACD );

       DrawLabels(Pref+"AO",  Corner, X+20, Y+10, symbol1, 0,TxtClr, 0, 10);
       DrawLabels(Pref+"AO2",  Corner, X+20, Y+60, symbol2, 0,TxtClr, 0, 10);
       DrawLabels(Pref+"AO3",  Corner, X+20, Y+110, symbol3, 0,TxtClr, 0, 10);
       DrawLabels(Pref+"AO4",  Corner, X+20, Y+160, symbol4, 0,TxtClr, 0, 10);
       DrawLabels(Pref+"AO5",  Corner, X+20, Y+210, symbol5, 0,TxtClr, 0, 10);
       DrawLabels(Pref+"AO6",  Corner, X+20, Y+260, symbol6, 0,TxtClr, 0, 10);

//     DrawLabels(Pref+" ",  Corner, X, Y+RowStep, " ",0, TxtClr, 0, FSize);
//     DrawLabels(Pref+"MACD",  Corner, X, Y+RowStep*2, " ", 0,TxtClr, 0, FSize);
     
       DrawLabels(Pref+"AO direction",  Corner, X-ColStep, Y, "bv", codeAO,ClrAO, 0, 30);
       DrawLabels(Pref+"AO2 direction",  Corner, X-ColStep, Y+50, "", codeAO2,ClrAO2, 0, 30);
       DrawLabels(Pref+"AO3 direction",  Corner, X-ColStep, Y+100, "", codeAO3,ClrAO3, 0, 30);
       DrawLabels(Pref+"AO4 direction",  Corner, X-ColStep, Y+150, "", codeAO4,ClrAO4, 0, 30);
       DrawLabels(Pref+"AO5 direction",  Corner, X-ColStep, Y+200, "", codeAO5,ClrAO5, 0, 30);
       DrawLabels(Pref+"AO6 direction",  Corner, X-ColStep, Y+250, "", codeAO6,ClrAO6, 0, 30);

//     DrawLabels(Pref+"AC direction",  Corner, X-ColStep, Y+RowStep, "", codeAC, ClrAC, 0, FSize);
//     DrawLabels(Pref+"MACD direction",  Corner, X-ColStep, Y+RowStep*2, "", codeMACD, ClrMACD, 0, FSize);
      
      
      
      
      

}

//---------------------------------
int DrawRect( string name, datetime T1, double P1,datetime T2, double P2,
                    color Clr=Green, int Width=1, string Text="", int Win=0)
   { 
      if (name=="") name="Text_"+T1;
      
      int Error=ObjectFind(name);// Çàïðîñ 
    if (Error!=Win)// Åñëè îáúåêòà â óê. îêíå íåò :(
    {  
      ObjectCreate(name, OBJ_RECTANGLE, Win,T1,P1,T2,P2);//ñîçäàíèå òðåíäîâîé ëèíèè
    }
     
    ObjectSet(name, OBJPROP_TIME1 ,T1);
    ObjectSet(name, OBJPROP_PRICE1,P1);
    ObjectSet(name, OBJPROP_TIME2 ,T2);
    ObjectSet(name, OBJPROP_PRICE2,P2);
    ObjectSet(name,OBJPROP_BACK, false);
    ObjectSet(name,OBJPROP_STYLE,0);
    ObjectSet(name, OBJPROP_COLOR , Clr);
    ObjectSet(name, OBJPROP_WIDTH , Width);
    ObjectSetText(name,Text);
    
    }
///-----------------------
void Delete_My_Obj(string Prefix)
   {//Alert(ObjectsTotal());
   for(int k=ObjectsTotal()-1; k>=0; k--)  // Ïî êîëè÷åñòâó âñåõ îáúåêòîâ 
     {
      string Obj_Name=ObjectName(k);   // Çàïðàøèâàåì èìÿ îáúåêòà
      string Head=StringSubstr(Obj_Name,0,StringLen(Prefix));// Èçâëåêàåì ïåðâûå ñèì

      if (Head==Prefix)// Íàéäåí îáúåêò, ..
         {
         ObjectDelete(Obj_Name);
         //Alert(Head+";"+Prefix);
         }                
        
     }
   }
///=====================
string PeriodToStr(int Per)
   {
      switch(Per)                 // Ðàñ÷¸ò  äëÿ..     
      {                              // .. ðàçëè÷íûõ ÒÔ     
      case     1: return("M1"); break;// Òàéìôðåéì Ì1      
      case     5: return("M5"); break;// Òàéìôðåéì Ì5      
      case    15: return("M15"); break;// Òàéìôðåéì Ì15      
      case    30: return("M30"); break;// Òàéìôðåéì Ì30      
      case    60: return("H1"); break;// Òàéìôðåéì H1      
      case   240: return("H4"); break;// Òàéìôðåéì H4      
      case  1440: return("D1"); break;// Òàéìôðåéì D1      
      case 10080: return("W1"); break;// Òàéìôðåéì W1      
      case 43200: return("ÌN"); break;// Òàéìôðåéì ÌN     
      }
 }
//==================================
/*int CalculeH()
   {
      switch(Period())                 // Ðàñ÷¸ò  äëÿ..     
      {                              // .. ðàçëè÷íûõ ÒÔ     
      case     1: return(15); break;// Òàéìôðåéì Ì1      
      case     5: return(15); break;// Òàéìôðåéì Ì5      
      case    15: return(30); break;// Òàéìôðåéì Ì15      
      case    30: return(45); break;// Òàéìôðåéì Ì30      
      case    60: return(60); break;// Òàéìôðåéì H1      
      case   240: return(180); break;// Òàéìôðåéì H4      
      case  1440: return(270); break;// Òàéìôðåéì D1      
      case 10080: return(450); break;// Òàéìôðåéì W1      
      case 43200: return(900); break;// Òàéìôðåéì ÌN     
      }   
    }*/
    
int DrawLabels(string name, int corn, int X, int Y, string Text, int code=0, color Clr=Green, int Win=0, int FSize=10)
   {
     int Error=ObjectFind(name);// Çàïðîñ 
   if (Error!=Win)// Åñëè îáúåêòà â óê. îêíå íåò :(
    {  
      ObjectCreate(name,OBJ_LABEL,Win, 0,0); // Ñîçäàíèå îáúåêòà
    }
     
     ObjectSet(name, OBJPROP_CORNER, corn);     // Ïðèâÿçêà ê óãëó   
     ObjectSet(name, OBJPROP_XDISTANCE, X);  // Êîîðäèíàòà Õ   
     ObjectSet(name,OBJPROP_YDISTANCE,Y);// Êîîðäèíàòà Y   
     ObjectSetText(name,Text,FSize,"Arial",Clr);
          if(code==0)
      ObjectSetText(name, Text ,FSize,"Arial",Clr);
      else
      ObjectSetText(name, CharToStr(code), FSize,"Wingdings",Clr);
   }

Comments