PercentChange

Author: Yuriy Tokman (YTG)
0 Views
0 Downloads
0 Favorites
PercentChange
//+------------------------------------------------------------------+
//|                                                PercentChange.mq4 |
//|                                               Yuriy Tokman (YTG) |
//|                                               http://ytg.com.ua/ |
//+------------------------------------------------------------------+
#property copyright "Yuriy Tokman (YTG)"
#property link      "http://ytg.com.ua/"
#property version   "1.00"
#property strict
#property indicator_chart_window

input int   MaxBars          = 300;
input int   DisplayDistance  = 5;
input color DisplayGainColor = clrGreen;
input color DisplayLossColor = clrRed;
input int   DisplayFontSize = 8;
input int   DisplayAfterComma = 2;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   GetDell();
   Comment("");
//---   
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration 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[])
  {
//---
   string perc,name;
   double _start;
//---
   int limit=rates_total-prev_calculated;
   if(prev_calculated==0)limit--;
   else  limit++;  
   if(MaxBars>0 && limit>MaxBars) limit=MaxBars;
//---
   for( int i=0; i<limit && !IsStopped(); i++)
    {
      //((a-b):((a+b):2))*100 
      //à-öåíà îòêðûòèÿ b-öåíà çàêðûòèÿ     
      _start = - ((Open[i]-Close[i])/((Open[i]+Close[i])/2)) * 100;
      //---
      if(_start>=0)
        {       
         name = "ytg_A-" + TimeToStr(Time[i], TIME_DATE|TIME_MINUTES);
         perc =DoubleToStr(_start, DisplayAfterComma) + "%";        
         TextCreate(0,name,0,Time[i],Low[i]-DisplayDistance*Point,perc,"Arial",DisplayFontSize,DisplayGainColor,90,ANCHOR_RIGHT);         
        }
      else if(_start<0)
        {
         name = "ytg_Y-" + TimeToStr(Time[i], TIME_DATE|TIME_MINUTES);
         perc =DoubleToStr(_start, DisplayAfterComma) + "%";        
         TextCreate(0,name,0,Time[i],High[i]+DisplayDistance*Point,perc,"Arial",DisplayFontSize,DisplayLossColor,90,ANCHOR_LEFT);
        }
     } 
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+ 
//| Ñîçäàåò îáúåêò "Òåêñò"                                           | 
//+------------------------------------------------------------------+ 
bool TextCreate(const long              chart_ID=0,               // ID ãðàôèêà 
                const string            name="Text",              // èìÿ îáúåêòà 
                const int               sub_window=0,             // íîìåð ïîäîêíà 
                datetime                time=0,                   // âðåìÿ òî÷êè ïðèâÿçêè 
                double                  price=0,                  // öåíà òî÷êè ïðèâÿçêè 
                const string            text="Text",              // ñàì òåêñò 
                const string            font="Arial",             // øðèôò 
                const int               font_size=10,             // ðàçìåð øðèôòà 
                const color             clr=clrRed,               // öâåò 
                const double            angle=0.0,                // íàêëîí òåêñòà 
                const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // ñïîñîá ïðèâÿçêè 
                const bool              back=false,               // íà çàäíåì ïëàíå 
                const bool              selection=false,          // âûäåëèòü äëÿ ïåðåìåùåíèé 
                const bool              hidden=true,              // ñêðûò â ñïèñêå îáúåêòîâ 
                const long              z_order=0)                // ïðèîðèòåò íà íàæàòèå ìûøüþ 
  { 
//---
 if(ObjectFind(name)>=0)ObjectDelete(name);//åñëè text óæå ñîçäàí óäàëÿåì åãî, ââèäó ñëó÷àéíîãî ïåðåòàñêèâàíèÿ ìûøüþ
//--- ñáðîñèì çíà÷åíèå îøèáêè 
   ResetLastError(); 
//--- ñîçäàäèì îáúåêò "Òåêñò" 
   if(!ObjectCreate(chart_ID,name,OBJ_TEXT,sub_window,time,price)) 
     { 
      Print(__FUNCTION__, 
            ": íå óäàëîñü ñîçäàòü îáúåêò \"Òåêñò\"! Êîä îøèáêè = ",GetLastError()); 
      return(false); 
     } 
//--- óñòàíîâèì òåêñò 
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text); 
//--- óñòàíîâèì øðèôò òåêñòà 
   ObjectSetString(chart_ID,name,OBJPROP_FONT,font); 
//--- óñòàíîâèì ðàçìåð øðèôòà 
   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size); 
//--- óñòàíîâèì óãîë íàêëîíà òåêñòà 
   ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle); 
//--- óñòàíîâèì ñïîñîá ïðèâÿçêè 
   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor); 
//--- óñòàíîâèì öâåò 
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); 
//--- îòîáðàçèì íà ïåðåäíåì (false) èëè çàäíåì (true) ïëàíå 
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); 
//--- âêëþ÷èì (true) èëè îòêëþ÷èì (false) ðåæèì ïåðåìåùåíèÿ îáúåêòà ìûøüþ 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); 
//--- ñêðîåì (true) èëè îòîáðàçèì (false) èìÿ ãðàôè÷åñêîãî îáúåêòà â ñïèñêå îáúåêòîâ 
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); 
//--- óñòàíîâèì ïðèîðèòåò íà ïîëó÷åíèå ñîáûòèÿ íàæàòèÿ ìûøè íà ãðàôèêå 
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); 
//--- óñïåøíîå âûïîëíåíèå 
   return(true); 
  } 
//----
void GetDell( string name = "ytg_")
 {
  string vName;
  for(int i=ObjectsTotal()-1; i>=0;i--)
   {
    vName = ObjectName(i);
    if (StringFind(vName,name) !=-1) ObjectDelete(vName);
   }
 }
//----

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 ---