Symbol Movement

Author: Copyright 2017, Tanvir Ahmed
Price Data Components
Series array that contains open prices of each barSeries array that contains close prices for each barSeries array that contains the highest prices of each barSeries array that contains the lowest prices of each bar
0 Views
0 Downloads
0 Favorites
Symbol Movement
//+--------------------------------------------------------Bismillahir Rahmanir Rahim----------------------------------------------------+
//+--------------------------------------------------------------------------------------------------------------------------------------+
string indicator_name="Symbol Movement: ";
#property copyright   "Copyright 2017, Tanvir Ahmed"
#property link        "https://www.facebook.com/bd.tanvirahmed"
#property description "----------------------------------------------------------------------------"
#property description "This Custom Indicator is coded by Tanvir Ahmed"
#property description "Email: tanvirmfx@yahoo.com"
#property description "----------------------------------------------------------------------------"
#property version     "1.10"
#property strict
#property indicator_chart_window
#property indicator_buffers 1

enum ENUM_MARKET_PRICE {PRICE_NONE /*None*/,PRICE_BID /*Bid Price*/,PRICE_ASK /*Ask Price*/};
enum CLICK_ACTION {CHART_NEW /*Open New Chart*/,CHART_CHANGE /*Change Current Chart*/};
//---
input int candle_number             = 0;                 // Candle Number
input ENUM_TIMEFRAMES timeframe     = PERIOD_D1;         // Timeframe
input color button_bullish_color    = clrMediumSeaGreen; // Button Bullish Color
input color button_bearish_color    = clrLightCyan;      // Button Bearish Color
input color button_text_color       = clrNavy;           // Button Text Color
input ENUM_MARKET_PRICE market_price=PRICE_BID;          // Show Market Price
input CLICK_ACTION button_action    = CHART_CHANGE;      // On Button Click
input int button_height             = 18;                // Button Height
//---
bool symbol_button_show             = true;              // Symbol Button Show
ENUM_BASE_CORNER symbol_corner      = CORNER_LEFT_UPPER; // Button Chart Corner For Anchoring
string button_font_name             = "Lucida Console";  // Button Font Name
input int button_font_size          = 09;                // Button Font Size
color button_border_color           = clrNONE;           // Button Border Color
bool button_back                    = false;             // Button In Background
bool button_state                   = false;             // button State (Ppressed / Released)
bool button_selection               = false;             // Button Highlight To Move
bool button_selected                = false;             // Button Selected
bool button_hidden                  = true;              // Button Hidden in Object List
long button_zorder                  = 0;                 // Button Priority For Mouse Click
int button_first_y_distance         = 20;                // Button First Y Distance

int button_width;
string symbol_suffix;
string symbol_list[29]={"EURUSD","GBPUSD","USDCHF","USDJPY","USDCAD","AUDUSD","NZDUSD","EURGBP","EURCHF","EURJPY","EURCAD","EURAUD","EURNZD","GBPCHF","GBPJPY","GBPCAD","GBPAUD","GBPNZD","CHFJPY","CADCHF","CADJPY","AUDCHF","AUDJPY","AUDCAD","AUDNZD","NZDCHF","NZDJPY","NZDCAD","GTOTAL"};
//+--------------------------------------------------------------------------------------------------------------------------------------+
//| custom indicator initialization function                                                                                             |
//+--------------------------------------------------------------------------------------------------------------------------------------+
int OnInit()
  {
   Print(indicator_name+Symbol()+" -- Bismillahir Rahmanir Raheem!");
   ChartSetInteger(CHART_MODE,CHART_FOREGROUND,false);
   symbol_suffix=StringSubstr(Symbol(),6,0);
   int symbol_suffix_length=StringLen(symbol_suffix);
//--- button width value set:
   if(button_height<=12)
     {
      button_width=190;
     }
   else
     {
      button_width=260;
     }
   if(market_price==PRICE_BID || market_price==PRICE_ASK)
     {
      button_width=button_width;
     }
   else
     {
      button_width=button_width-60;
     }
//--- symbol name set and enabling function: 
   for(int i=0; i<=27; i++)
     {
      string symbol_name=(symbol_list[i]+symbol_suffix);
      if(bool(SymbolInfoInteger(symbol_name,SYMBOL_SELECT))==false)
        {
         SymbolSelect(symbol_name,true);
        }
     }
   return(INIT_SUCCEEDED);
  }
//+--------------------------------------------------------------------------------------------------------------------------------------+
//| custom indicator deinitialization function                                                                                           |
//+--------------------------------------------------------------------------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- objects delete function:
   for(int i=0; i<=28; i++)
     {
      string symbol_name=(symbol_list[i]+symbol_suffix);
      ObjectDelete(symbol_name);
     }
   Print(indicator_name+Symbol()+" -- Alhamdulillahi Rabbil Al-Ameen!");
  }
//+--------------------------------------------------------------------------------------------------------------------------------------+
//| custom indicator ontick 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[])
  {
   ChartSetInteger(CHART_MODE,CHART_FOREGROUND,false);
   int button_gap=0;
   double total_body_range=0;
   double total_candle_range=0;
//--- start checking 28 symbols bid/ ask price, open-close range and high-low range:
   for(int i=0; i<=28; i++)
     {
      button_gap=i;
      string symbol_name=(symbol_list[i]+symbol_suffix);
      //--- symbol pips count function:
      int digits=int(MarketInfo(symbol_name,MODE_DIGITS));
      string symbol_price=NULL;
      if(market_price==PRICE_BID)
        {
         symbol_price=DoubleToStr(MarketInfo(symbol_name,MODE_BID),digits);
        }
      else if(market_price==PRICE_ASK)
        {
         symbol_price=DoubleToStr(MarketInfo(symbol_name,MODE_ASK),digits);
        }
      else
        {
         symbol_price=NULL;
        }
      if(symbol_price=="0")
        {
         symbol_price=".00000";
        }
      else
        {
         symbol_price=symbol_price;
        }
      if((digits<=3 && StrToDouble(symbol_price)<100.000))
        {
         symbol_price="0"+symbol_price;
        }
      else
        {
         symbol_price=symbol_price;
        }
      string start_bracket=NULL;
      string end_bracket=NULL;
      if(market_price==PRICE_BID || market_price==PRICE_ASK)
        {
         symbol_price=" "+symbol_price;
         if(symbol_name=="GTOTAL"+symbol_suffix)
           {
            symbol_price=" "+"_______";
           }
         else
           {
            symbol_price=symbol_price;
           }
         start_bracket=" [";
         end_bracket="]";
        }
      else
        {
         symbol_price=NULL;
         start_bracket=" ";
         end_bracket=NULL;
        }
      double point= 0;
      double pips = 0;
      if(digits<=3)
        {
         point= 0.01;
         pips = 100.00;
        }
      else
        {
         point=0.0001;
         pips =10000.00;
        }
      double symbol_body_range=NormalizeDouble(((iClose(symbol_name,timeframe,candle_number)-iOpen(symbol_name,timeframe,candle_number))*pips),2);
      double symbol_candle_range=NormalizeDouble(((iHigh(symbol_name,timeframe,candle_number)-iLow(symbol_name,timeframe,candle_number))*pips),2);
      total_body_range+=NormalizeDouble(((iClose(symbol_name,timeframe,candle_number)-iOpen(symbol_name,timeframe,candle_number))*pips),2);
      total_candle_range+=NormalizeDouble(((iHigh(symbol_name,timeframe,candle_number)-iLow(symbol_name,timeframe,candle_number))*pips),2);
      if(symbol_name=="GTOTAL"+symbol_suffix)
        {
         button_gap=(button_gap+1);
         symbol_body_range=total_body_range;
         symbol_candle_range=total_candle_range;
        }
      else
        {
         button_gap=button_gap;
         symbol_body_range=symbol_body_range;
         symbol_candle_range=symbol_candle_range;
        }
      double symbol_body_ranges=0;
      if(symbol_body_range<0)
        {
         symbol_body_ranges=(symbol_body_range*(-1));
        }
      else
        {
         symbol_body_ranges=symbol_body_range;
        }
      string symbol_bd_range = NULL;
      if(symbol_body_ranges <= 9.99)
        {
         symbol_bd_range="000"+DoubleToStr(symbol_body_ranges,2);
        }
      else if(symbol_body_ranges>9.99 && symbol_body_ranges<=99.99)
        {
         symbol_bd_range="00"+DoubleToStr(symbol_body_ranges,2);
        }
      else if(symbol_body_ranges>99.99 && symbol_body_ranges<=999.99)
        {
         symbol_bd_range="0"+DoubleToStr(symbol_body_ranges,2);
        }
      else
        {
         symbol_bd_range=DoubleToStr(symbol_body_ranges,2);
        }
      double symbol_candle_ranges=0;
      if(symbol_candle_range<0)
        {
         symbol_candle_ranges=(symbol_candle_range*(-1));
        }
      else
        {
         symbol_candle_ranges=symbol_candle_range;
        }
      string symbol_cndle_range=NULL;
      if(symbol_candle_ranges<=9.99)
        {
         symbol_cndle_range="000"+DoubleToStr(symbol_candle_ranges,2);
        }
      else if(symbol_candle_ranges>9.99 && symbol_candle_ranges<=99.99)
        {
         symbol_cndle_range="00"+DoubleToStr(symbol_candle_ranges,2);
        }
      else if(symbol_candle_ranges>99.99 && symbol_candle_ranges<=999.99)
        {
         symbol_cndle_range="0"+DoubleToStr(symbol_candle_ranges,2);
        }
      else
        {
         symbol_cndle_range=DoubleToStr(symbol_candle_ranges,2);
        }
      string symbol_text=StringSubstr(symbol_name,0,6)+symbol_price+start_bracket+symbol_bd_range+" : "+symbol_cndle_range+end_bracket;
      //--- symbol button show with information:
      int symbol_x_distance = 5;
      int symbol_y_distance = (button_first_y_distance+(button_height*button_gap));
      color button_color=clrNONE;
      if(symbol_body_range>=0)
        {
         button_color=button_bullish_color;
        }
      else
        {
         button_color=button_bearish_color;
        }
      //--- set button on chart:
      ObjectCreate(0,symbol_name,OBJ_BUTTON,0,0,0);
      ObjectSetInteger(0,symbol_name,OBJPROP_XDISTANCE,symbol_x_distance);
      ObjectSetInteger(0,symbol_name,OBJPROP_YDISTANCE,symbol_y_distance);
      ObjectSetInteger(0,symbol_name,OBJPROP_XSIZE,button_width);
      ObjectSetInteger(0,symbol_name,OBJPROP_YSIZE,button_height);
      ObjectSetInteger(0,symbol_name,OBJPROP_CORNER,symbol_corner);
      ObjectSetString(0,symbol_name,OBJPROP_TEXT,symbol_text);
      ObjectSetString(0,symbol_name,OBJPROP_FONT,button_font_name);
      ObjectSetInteger(0,symbol_name,OBJPROP_FONTSIZE,button_font_size);
      ObjectSetInteger(0,symbol_name,OBJPROP_COLOR,button_text_color);
      ObjectSetInteger(0,symbol_name,OBJPROP_BORDER_COLOR,button_border_color);
      ObjectSetInteger(0,symbol_name,OBJPROP_BACK,button_back);
      ObjectSetInteger(0,symbol_name,OBJPROP_SELECTABLE,button_selection);
      ObjectSetInteger(0,symbol_name,OBJPROP_SELECTED,button_selected);
      ObjectSetInteger(0,symbol_name,OBJPROP_HIDDEN,button_hidden);
      ObjectSetInteger(0,symbol_name,OBJPROP_BGCOLOR,button_color);
      ObjectSetInteger(0,symbol_name,OBJPROP_ZORDER,button_zorder);
      ObjectSetInteger(0,symbol_name,OBJPROP_STATE,button_state);
     }
   return(rates_total);
  } //--- on calculate function completed;
//+--------------------------------------------------------------------------------------------------------------------------------------+
//| chart handling event                                                                                                                 |
//+--------------------------------------------------------------------------------------------------------------------------------------+
void OnChartEvent(const int    id,
                  const long   &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//--- set button preesed for opening the symbol chart:
   for(int i=0; i<=27; i++)
     {
      string symbol_name=(symbol_list[i]+symbol_suffix);
      if(sparam==symbol_name)
        {
         if(button_action==CHART_NEW)
           {
            ChartOpen(symbol_name,PERIOD_CURRENT);
           }
         else if(button_action==CHART_CHANGE)
           {
            ChartSetSymbolPeriod(0,symbol_name,PERIOD_CURRENT);
           }
        }
     }
  }
//+------------------------------------------------(= indicator coding finished =)-------------------------------------------------------+
//+-----------------------------------------------(ALhamdulillahi Rabbil Al-Ameen)-------------------------------------------------------+

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---