Speed_MA_V2

Author: valenok2003@mail.ru
Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
Speed_MA_V2
//+------------------------------------------------------------------+
//|                                                Speed_MA_V2/2.mq4 |
//|×òî  íîâîãî:                                                      |
//|  V2/2 îò 12.03.2010 äîáàâëåíî:                                   |
//|  - íàñòðîéêà ïåðèîäà óñðåäíåíèÿ ñóììû, îòîáðàæàåòñÿ              |
//|    äîïîëíèòåëüíîé ëèíèåé                                         |
//|  V2/1 îò 11.03.2010 äîáàâëåíî:                                   |
//|  - âîçìîæíîñòü îòêëþ÷åíèÿ âèçóàëèçàöèè ëèíèé                     |
//|  V2   îò 09.03.2010 äîáàâëåíî:                                   |
//|  - íàñòðîéêà ìåòîäà óñðåäíåíèÿ ÌÀ è òî÷êè áàðà äëÿ ðàñ÷¸òà,      |
//|  - îòîáðàæåíèå çíà÷åíèé ñêîðîñòåé â îêíå èíäèêàòîðà.             |
//|  - âîçìîæíîñòü ïîçèöèîíèðîâàíèÿ îòîáðàæàåìîé èíôîðìàöèè ïî îñè X.|
//|  - îïðåäåëÿòü ó÷àñòîê ïîèñêà ìàêñèìàëüíîãî çíà÷åíèÿ              |
//|                                              valenok2003@mail.ru |
//|                                                    ICQ 365919666 |
//|                                   Ïèøó íà çàêàç, öåíà äîãîâîðíàÿ.|
//|                                     http://www.mebel-for-you.com |
//+------------------------------------------------------------------+
//Îïðåäåëÿåò ñêîðîñòè MA â ïðîöåíòàõ Âû÷èñëÿåò èõ ñóììàðíîå çíà÷åíèå.
//Çà 100% ïðèíèìàåòñÿ ìàêñèìàëüíîå èçìåíåíèå MA ìåæäó äâóìÿ ñîñåäíèìè áàðàìè
//íàéäåííîå íà ó÷àñòêå ãðàôèêà äëèííîé â 500 áàð.

 
#property copyright "valenok2003@mail.ru"
#property link      "http://www.mebel-for-you.com"
#property indicator_separate_window
 
//#property indicator_minimum -150
//#property indicator_maximum 150
 
#property indicator_buffers 6       // Êîëè÷åñòâî áóôåðîâ
#property indicator_color1 Red
#property indicator_color2 Gray
#property indicator_color3 Yellow
#property indicator_color4 LimeGreen
#property indicator_color5 DodgerBlue
#property indicator_color6 Gray
 



extern int Period_MA5    = 5;
extern int Period_MA15   = 15;
extern int Period_MA60   = 60;
extern string MA_method  = "SMA";
extern string MA_price   = "CLOSE";
extern int Period_Average = 5;
extern int tf            = 0;

extern string Rem_0       = "-ïåðèîä óñðåäíåíèÿ ñóììû-";


extern string Rem_1     = "-âèäèìîñòü êðèâûõ-";
extern bool Viz_05     = true;
extern bool Viz_15      = true;
extern bool Viz_60      = true;
extern bool Viz_Sum     = true;
extern bool Viz_Average = true;

extern string Rem_2    = "Ó÷àñòîê ïîèñêà ìàêñèìóìà (áàð)";
extern int search_Max   = 500;

extern string Rem_3   = "--Ñìåù. òåêñòà ïî îñè Õ--";
extern int shift_txt = 920;
 
int method;
int price;
// öâåò íàçâàíèÿ äîëæåí ñîîòâåòñòâîâàòü öâåòó êðèâîé
extern color Color_Txt_Comment = Gray,
             Color_Txt_MA5     = Yellow,
             Color_Txt_MA15    = LimeGreen,
             Color_Txt_MA60    = DodgerBlue,
             Color_Txt_Sum     = Gray,
          Color_Txt_Average    = Red,
             Color_Txt_UP      = Lime,
             Color_Txt_DOWN    = Red;
      
 color color_txt;
 
//---- buffers
double Sum_Average[],
       Sum_Speed[],
       Speed_MA5[],
       Speed_MA15[],
       Speed_MA60[],
       Nul_Line[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- name for indicator window
   string name_window="Speed_MA_V2";
   IndicatorShortName(name_window);
  
//---- indicators - ïðåäóñìîòðåíà âîçìîæíîñòü îòêëþ÷åíèÿ ëèíèé
  if(Viz_Average == true) SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2); else SetIndexStyle(0,DRAW_NONE);
  SetIndexBuffer(0,Sum_Average);
  
  if(Viz_Sum == true)   SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2); else SetIndexStyle(1,DRAW_NONE);
  SetIndexBuffer(1,Sum_Speed);
  
  if(Viz_05 == true)   SetIndexStyle(2,DRAW_LINE); else SetIndexStyle(2,DRAW_NONE);
  SetIndexBuffer(2,Speed_MA5);
  
  if(Viz_15 == true)   SetIndexStyle(3,DRAW_LINE); else SetIndexStyle(3,DRAW_NONE);
  SetIndexBuffer(3,Speed_MA15);
  
  if(Viz_60 == true)   SetIndexStyle(4,DRAW_LINE); else SetIndexStyle(4,DRAW_NONE);
  SetIndexBuffer(4,Speed_MA60);
  
  SetIndexStyle(5,DRAW_LINE);
  SetIndexBuffer(5,Nul_Line);

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   int X;
   int met = 0;
   if(MA_method == "SMA") { method = MODE_SMA;  met = 1;}
   if(MA_method == "EMA") { method = MODE_EMA;  met = 1;}
   if(MA_method == "SMMA"){ method = MODE_SMMA; met = 1;}
   if(MA_method == "LWMA"){ method = MODE_LWMA; met = 1;}
   if(met == 0)
   {
     Alert("Ñîîáùåíèå îò èíäèêàòîðà 00_Speed_MA:",
     "\nÇíà÷åíèå ", MA_method," îøèáî÷íî. Óñòàíîâëåíî çíà÷åíèå ïî óìîë÷àíèþ - SMA",
     "\nÂåðíûå çíà÷åíèÿ - SMA, EMA, SMMA, LWMA" );
     method = MODE_SMA; MA_method = "SMA";
   }
   int prc = 0;
   if(MA_price == "CLOSE"){ price = PRICE_CLOSE;    prc = 1;}
   if(MA_price == "OPEN") { price = PRICE_OPEN;     prc = 1;}
   if(MA_price == "HIGH") { price = PRICE_HIGH;     prc = 1;}
   if(MA_price == "LOW")  { price = PRICE_LOW;      prc = 1;}
   if(MA_price == "MED")  { price = PRICE_MEDIAN;   prc = 1;}
   if(MA_price == "TYP")  { price = PRICE_TYPICAL;  prc = 1;}
   if(MA_price == "WEI")  { price = PRICE_WEIGHTED; prc = 1;}
   if(prc == 0)
   {  
     Alert("Ñîîáùåíèå îò èíäèêàòîðà 00_Speed_MA:",
     "\nÇíà÷åíèå ", MA_price," îøèáî÷íî. Óñòàíîâëåíî çíà÷åíèå  ïî óìîë÷àíèþ - CLOSE",
     "\nÂåðíûå çíà÷åíèÿ - CLOSE, OPEN, HIGH, LOW, MED, TYP,WEI");
     price = PRICE_CLOSE; MA_price = "CLOSE";
   }
 
//- ÈÙÅÌ ÌÀÊÑÈÌÀËÜÍÎÅ ÈÇÌÅÍÅÍÈÅ _Ì_À ÇÀ 1 ÁÀÐ ------------------------
//--- (ïðèíèìàåì ýòî çíà÷åíèå çà 100 ïðîöåíòîâ)-----------------------
   int i;
   double MA_0,
          MA_1,
          Dif_MA5 = 0,
          Max_MA5 = 0,
          Dif_MA15 = 0,
          Max_MA15 = 0,
          Dif_MA60 = 0,
          Max_MA60 = 0;
   i = 0;
   while(i < search_Max)                      
     {
      // Äëÿ  MA5
      MA_0  = iMA(NULL,tf,Period_MA5,0,method,price,i);
      MA_1  = iMA(NULL,tf,Period_MA5,0,method,price,i+1);
      Dif_MA5 = MA_0 - MA_1;
      if(Max_MA5 < Dif_MA5) Max_MA5 = Dif_MA5;
 
      // Äëÿ  MA15
      MA_0  = iMA(NULL,tf,Period_MA15,0,method,price,i);
      MA_1  = iMA(NULL,tf,Period_MA15,0,method,price,i+1);
      Dif_MA15 = MA_0 - MA_1;
      if(Max_MA15 < Dif_MA15) Max_MA15 = Dif_MA15;
 
      // Äëÿ  MA60
      MA_0  = iMA(NULL,tf,Period_MA60,0,method,price,i);
      MA_1  = iMA(NULL,tf,Period_MA60,0,method,price,i+1);
      Dif_MA60 = MA_0 - MA_1;
      if(Max_MA60 < Dif_MA60) Max_MA60 = Dif_MA60;
 
      i++;                          // Ðàñ÷¸ò èíäåêñà ñëåäóþùåãî áàðà
     }
//--------------------------------------------------------------------
//-------------ñòðîèì êðèâûå èçìåíåíèÿ ñêîðîñòè ÌÀ â ïðîöåíòàõ--------
   int Counted_bars=IndicatorCounted(); // Êîëè÷åñòâî ïðîñ÷èòàííûõ áàðîâ 
   i=Bars-Counted_bars-1;               // Èíäåêñ ïåðâîãî íåïîñ÷èòàííîãî
   while(i>=0)                      
     {
      // Äëÿ  MA5     
      MA_0  = iMA(NULL,tf,Period_MA5,0,method,price,i);
      MA_1  = iMA(NULL,tf,Period_MA5,0,method,price,i+1);
      Speed_MA5[i] = ((MA_0 - MA_1)/(0.01*Max_MA5));
      
      //Äëÿ  MA15
      MA_0  = iMA(NULL,tf,Period_MA15,0,method,price,i);
      MA_1  = iMA(NULL,tf,Period_MA15,0,method,price,i+1);
      Speed_MA15[i] = ((MA_0 - MA_1)/(0.01*Max_MA15));
      
      //Äëÿ  MA60
      MA_0  = iMA(NULL,tf,Period_MA60,0,method,price,i);
      MA_1  = iMA(NULL,tf,Period_MA60,0,method,price,i+1);
      Speed_MA60[i] = ((MA_0 - MA_1)/(0.01*Max_MA60));
      
      // Äëÿ ñóììû áûñòðîé è ìåäëåííîé ÌÀ
      Sum_Speed[i] = (Speed_MA5[i] + Speed_MA15[i] + Speed_MA60[i])/3;
      // óñðåäíÿåì ñóììó
      double Tmp_Sum = 0;
      for(int n=0; n < Period_Average; n++) 
      {
        Tmp_Sum = Tmp_Sum + Sum_Speed[i+n];
      }
      Sum_Average[i] =  Tmp_Sum/Period_Average;
      
      // Íóëåâàÿ ëèíèÿ
      Nul_Line[i] = 0;
      i--;                          // Ðàñ÷¸ò èíäåêñà ñëåäóþùåãî áàðà
     } 
   color_txt = Color_Txt_Comment; 
   ObjectCreate("Label", OBJ_LABEL, WindowFind("Speed_MA_V2"), 0, 0);
   ObjectSetText("Label",MA_method+" "+MA_price,7, "Verdana", color_txt);
   ObjectSet("Label", OBJPROP_CORNER, 0);
   ObjectSet("Label", OBJPROP_XDISTANCE, shift_txt);
   ObjectSet("Label", OBJPROP_YDISTANCE, 5);
 
   color_txt = Color_Txt_MA5; 
   ObjectCreate("Speed_MA5", OBJ_LABEL, WindowFind("Speed_MA_V2"), 0, 0);
   ObjectSetText("Speed_MA5","MA"+Period_MA5,7, "Verdana", color_txt);
   ObjectSet("Speed_MA5", OBJPROP_CORNER, 0);
   ObjectSet("Speed_MA5", OBJPROP_XDISTANCE, shift_txt);
   ObjectSet("Speed_MA5", OBJPROP_YDISTANCE, 20);
   if(Speed_MA5[0]>0)color_txt = Color_Txt_UP;
   if(Speed_MA5[0]<0)color_txt = Color_Txt_DOWN;
   X = shift_txt + 30;
   ObjectCreate("Speed_MA5_value", OBJ_LABEL, WindowFind("Speed_MA_V2"), 0, 0);
   ObjectSetText("Speed_MA5_value"," = "+DoubleToStr(Speed_MA5[0],2),7, "Verdana", color_txt);
   ObjectSet("Speed_MA5_value", OBJPROP_CORNER, 0);
   ObjectSet("Speed_MA5_value", OBJPROP_XDISTANCE, X);
   ObjectSet("Speed_MA5_value", OBJPROP_YDISTANCE, 20);
 
   color_txt = Color_Txt_MA15; 
   ObjectCreate("Speed_MA15", OBJ_LABEL, WindowFind("Speed_MA_V2"), 0, 0);
   ObjectSetText("Speed_MA15","MA"+Period_MA15,7, "Verdana", color_txt);
   ObjectSet("Speed_MA15", OBJPROP_CORNER, 0);
   ObjectSet("Speed_MA15", OBJPROP_XDISTANCE, shift_txt);
   ObjectSet("Speed_MA15", OBJPROP_YDISTANCE, 35);
   if(Speed_MA15[0]>0)color_txt = Color_Txt_UP;
   if(Speed_MA15[0]<0)color_txt = Color_Txt_DOWN;
   X = shift_txt + 30;
   ObjectCreate("Speed_MA15_value", OBJ_LABEL, WindowFind("Speed_MA_V2"), 0, 0);
   ObjectSetText("Speed_MA15_value"," = "+DoubleToStr(Speed_MA15[0],2),7, "Verdana", color_txt);
   ObjectSet("Speed_MA15_value", OBJPROP_CORNER, 0);
   ObjectSet("Speed_MA15_value", OBJPROP_XDISTANCE, X);
   ObjectSet("Speed_MA15_value", OBJPROP_YDISTANCE, 35);
 
   color_txt = Color_Txt_MA60;
   ObjectCreate("Speed_MA60", OBJ_LABEL, WindowFind("Speed_MA_V2"), 0, 0);
   ObjectSetText("Speed_MA60","MA"+Period_MA60,7, "Verdana", color_txt);
   ObjectSet("Speed_MA60", OBJPROP_CORNER, 0);
   ObjectSet("Speed_MA60", OBJPROP_XDISTANCE, shift_txt);
   ObjectSet("Speed_MA60", OBJPROP_YDISTANCE, 50);
   if(Speed_MA60[0]>0)color_txt = Color_Txt_UP;
   if(Speed_MA60[0]<0)color_txt = Color_Txt_DOWN;
   X = shift_txt + 30;
   ObjectCreate("Speed_MA60_value", OBJ_LABEL, WindowFind("Speed_MA_V2"), 0, 0);
   ObjectSetText("Speed_MA60_value"," = "+DoubleToStr(Speed_MA60[0],2),7, "Verdana", color_txt);
   ObjectSet("Speed_MA60_value", OBJPROP_CORNER, 0);
   ObjectSet("Speed_MA60_value", OBJPROP_XDISTANCE, X);
   ObjectSet("Speed_MA60_value", OBJPROP_YDISTANCE, 50);
  
   color_txt = Color_Txt_Sum; // öâåò íàçâàíèÿ ñîîòâåòñòâóåò öâåòó êðèâîé
   ObjectCreate("Sum_Speed", OBJ_LABEL, WindowFind("Speed_MA_V2"), 0, 0);
   ObjectSetText("Sum_Speed","Sum",7, "Verdana", color_txt);
   ObjectSet("Sum_Speed", OBJPROP_CORNER, 0);
   ObjectSet("Sum_Speed", OBJPROP_XDISTANCE, shift_txt);
   ObjectSet("Sum_Speed", OBJPROP_YDISTANCE, 65);
   if(Sum_Speed[0]>0)color_txt = Color_Txt_UP;
   if(Sum_Speed[0]<0)color_txt = Color_Txt_DOWN;
   X = shift_txt + 30;
   ObjectCreate("Sum_Speed_value", OBJ_LABEL, WindowFind("Speed_MA_V2"), 0, 0);
   ObjectSetText("Sum_Speed_value"," = "+DoubleToStr(Sum_Speed[0],2),7, "Verdana", color_txt);
   ObjectSet("Sum_Speed_value", OBJPROP_CORNER, 0);
   ObjectSet("Sum_Speed_value", OBJPROP_XDISTANCE, X);
   ObjectSet("Sum_Speed_value", OBJPROP_YDISTANCE, 65);
   
   color_txt = Color_Txt_Average; // öâåò íàçâàíèÿ ñîîòâåòñòâóåò öâåòó êðèâîé
   ObjectCreate("Sum_Average", OBJ_LABEL, WindowFind("Speed_MA_V2"), 0, 0);
   ObjectSetText("Sum_Average","Sum_Average",7, "Verdana", color_txt);
   ObjectSet("Sum_Average", OBJPROP_CORNER, 0);
   ObjectSet("Sum_Average", OBJPROP_XDISTANCE, shift_txt);
   ObjectSet("Sum_Average", OBJPROP_YDISTANCE, 80);
   if(Sum_Average[0]>0)color_txt = Color_Txt_UP;
   if(Sum_Average[0]<0)color_txt = Color_Txt_DOWN;
   X = shift_txt + 20;
   ObjectCreate("Sum_Average_value", OBJ_LABEL, WindowFind("Speed_MA_V2"), 0, 0);
   ObjectSetText("Sum_Average_value",DoubleToStr(Sum_Average[0],2),7, "Verdana", color_txt);
   ObjectSet("Sum_Average_value", OBJPROP_CORNER, 0);
   ObjectSet("Sum_Average_value", OBJPROP_XDISTANCE, X);
   ObjectSet("Sum_Average_value", OBJPROP_YDISTANCE, 95);

   color_txt = Color_Txt_Comment; 
   ObjectCreate("Period_Average", OBJ_LABEL, WindowFind("Speed_MA_V2"), 0, 0);
   ObjectSetText("Period_Average","Period_Average",7, "Verdana", color_txt);
   ObjectSet("Period_Average", OBJPROP_CORNER, 0);
   ObjectSet("Period_Average", OBJPROP_XDISTANCE, shift_txt);
   ObjectSet("Period_Average", OBJPROP_YDISTANCE, 110);
   X = shift_txt + 40;
   ObjectCreate("Period_Average_value", OBJ_LABEL, WindowFind("Speed_MA_V2"), 0, 0);
   ObjectSetText("Period_Average_value",DoubleToStr(Period_Average,0),7, "Verdana", color_txt);
   ObjectSet("Period_Average_value", OBJPROP_CORNER, 0);
   ObjectSet("Period_Average_value", OBJPROP_XDISTANCE, X);
   ObjectSet("Period_Average_value", OBJPROP_YDISTANCE, 125);
   
      
//----
   return(0);
}

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