Author: valenok2003@mail.ru
Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
Speed_MA
//+------------------------------------------------------------------+
//|                                                  Speed_MA_V3.mq4 |
//|×òî  íîâîãî:                                                      |
//|  V3 îò 15.04.2010 äîáàâëåíî:                                     |
//|  - âîçìîæíîñòü îòîáðàæåíèÿ ñóììû â âèäå ãèñòîãðàììû              |
//|  - ïðîâåðêà çíà÷åíèé ïàðàìåòðîâ ÌÀ ââîäèìûõ ïîëüçîâàòåëåì        |
//|  V2.2 îò 12.03.2010 äîáàâëåíî:                                   |
//|  - íàñòðîéêà ïåðèîäà ñãëàæèâàíèÿ ñóììû (îòîáðàæàåòñÿ êðàñíîé     |
//|    ëèíèåé)                                                       |
//|  V2.1 îò 11.03.2010 äîáàâëåíî:                                   |
//|  - âîçìîæíîñòü îòêëþ÷åíèÿ âèçóàëèçàöèè ëèíèé                     |
//|  V2   îò 09.03.2010 äîáàâëåíî:                                   |
//|  - íàñòðîéêà ìåòîäà óñðåäíåíèÿ ÌÀ è òî÷êè áàðà äëÿ ðàñ÷¸òà,      |
//|  - îòîáðàæåíèå çíà÷åíèé ñêîðîñòåé â îêíå èíäèêàòîðà.             |
//|  - âîçìîæíîñòü ïîçèöèîíèðîâàíèÿ îòîáðàæàåìîé èíôîðìàöèè ïî îñè X.|
//|  - çàäàíèå ó÷àñòêà äëÿ ïîèñêà ìàêñèìàëüíîãî çíà÷åíèÿ             |
//|                                              valenok2003@mail.ru |
//|                                                    ICQ 365919666 |
//|                                   Ïèøó íà çàêàç, öåíà äîãîâîðíàÿ.|
//|                                http://mebel-for-you.com/programs |
//+------------------------------------------------------------------+
//Ðèñóåò ñêîðîñòè òð¸õ, çàäàííûõ ïîëüçîâàòåëåì, MA 
//â ïðîöåíòàõ îò ìàêñèìàëüíîãî çíà÷åíèÿ ñêîðîñòè çà íåêîòîðûé ïåðèîä âðåìåíè. 
//Ðèñóåò èõ ñóììàðíîå çíà÷åíèå ñ âîçìîæíîñòüþ ñãëàæèâàíèÿ.
//Çà 100% ïðèíèìàåòñÿ ìàêñèìàëüíîå èçìåíåíèå MA ìåæäó äâóìÿ ñîñåäíèìè áàðàìè
//íàéäåííîå íà ó÷àñòêå ãðàôèêà äëèííîé â search_Max, ïî óìîë÷àíèþ 500 áàð.
#property copyright "valenok2003@mail.ru"
#property link      "http://mebel-for-you.com/programs"
#property indicator_separate_window

//#property indicator_minimum -120
//#property indicator_maximum 120

#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_MA_fast = 5;
extern int Period_MA_med  = 15;
extern int Period_MA_slow = 60;
extern int Period_Average_Sum = 15;

#include <Check_MA_Parametrs.mqh>

extern string Rem_1      = "-âèäèìîñòü êðèâûõ-";
extern bool Show_Average = true;
extern bool Show_Sum     = false;
extern bool Show_fast    = false;
extern bool Show_med     = false;
extern bool Show_slow    = false;

extern string Rem_2      = "-ïîêàçàòü êàê ãèñòîãðàììó-";
extern bool Show_Histogram = false; 

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

extern string Rem_4  = "--Ñìåù. òåêñòà ïî îñè Õ--";
extern int shift_txt = 920;

// öâåò íàçâàíèÿ äîëæåí ñîîòâåòñòâîâàòü öâåòó êðèâîé
color Color_Txt_Comment = Gray,
      Color_Txt_MA_fast = Yellow,
      Color_Txt_MA_med  = LimeGreen,
      Color_Txt_MA_slow = 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_MA_fast[],
       Speed_MA_med[],
       Speed_MA_slow[],
       Nul_Line[];
     
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- name for indicator window
   string name_window="Speed_MA";
   IndicatorShortName(name_window);
  
//---- indicators - ïðåäóñìîòðåíà âîçìîæíîñòü îòêëþ÷åíèÿ ëèíèé
  if(Show_Average == true)
  {
    if(Show_Histogram == true) SetIndexStyle(0,DRAW_HISTOGRAM);
    else SetIndexStyle(0,DRAW_LINE);
  }
  else SetIndexStyle(0,DRAW_NONE);
  SetIndexBuffer(0,Sum_Average);
  
  if(Show_Sum == true)   SetIndexStyle(1,DRAW_LINE); else SetIndexStyle(1,DRAW_NONE);
  SetIndexBuffer(1,Sum_Speed);
  
  if(Show_fast == true)   SetIndexStyle(2,DRAW_LINE); else SetIndexStyle(2,DRAW_NONE);
  SetIndexBuffer(2,Speed_MA_fast);
  
  if(Show_med == true)   SetIndexStyle(3,DRAW_LINE); else SetIndexStyle(3,DRAW_NONE);
  SetIndexBuffer(3,Speed_MA_med);
  
  if(Show_slow == true)   SetIndexStyle(4,DRAW_LINE); else SetIndexStyle(4,DRAW_NONE);
  SetIndexBuffer(4,Speed_MA_slow);
  
  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; // ïåðåìåííàÿ äëÿ çàäàíèÿ ïîçèöèè ïî îñè Õ
//ïðîâåðêà óñëîâèé ïîëüçîâàòåëÿ --------------------------------------   
  Check_MA_Parametrs("Speed MA");
//--------------------------------------------------------------------
 
//- ÈÙÅÌ ÌÀÊÑÈÌÀËÜÍÎÅ ÈÇÌÅÍÅÍÈÅ _Ì_À ÇÀ 1 ÁÀÐ ------------------------
//--- (ïðèíèìàåì ýòî çíà÷åíèå çà 100 ïðîöåíòîâ)-----------------------
   int i;
   double MA_0,
          MA_1,
          Dif_MA_fast = 0,
          Max_MA_fast = 0,
          Dif_MA_med = 0,
          Max_MA_med = 0,
          Dif_MA_slow = 0,
          Max_MA_slow = 0;
   i = 0;
   while(i < search_Max)                      
     {
      // Äëÿ  MA_fast
      MA_0  = iMA(NULL,ma_tf,Period_MA_fast,0,ma_method,ma_price,i);
      MA_1  = iMA(NULL,ma_tf,Period_MA_fast,0,ma_method,ma_price,i+1);
      Dif_MA_fast = MA_0 - MA_1;
      if(Max_MA_fast < Dif_MA_fast) Max_MA_fast = Dif_MA_fast;
 
      // Äëÿ  MA_med
      MA_0  = iMA(NULL,ma_tf,Period_MA_med,0,ma_method,ma_price,i);
      MA_1  = iMA(NULL,ma_tf,Period_MA_med,0,ma_method,ma_price,i+1);
      Dif_MA_med = MA_0 - MA_1;
      if(Max_MA_med < Dif_MA_med) Max_MA_med = Dif_MA_med;
 
      // Äëÿ  MA_slow
      MA_0  = iMA(NULL,ma_tf,Period_MA_slow,0,ma_method,ma_price,i);
      MA_1  = iMA(NULL,ma_tf,Period_MA_slow,0,ma_method,ma_price,i+1);
      Dif_MA_slow = MA_0 - MA_1;
      if(Max_MA_slow < Dif_MA_slow) Max_MA_slow = Dif_MA_slow;
 
      i++;                          // Ðàñ÷¸ò èíäåêñà ñëåäóþùåãî áàðà
     }
//--------------------------------------------------------------------
//-------------ñòðîèì êðèâûå èçìåíåíèÿ ñêîðîñòè ÌÀ â ïðîöåíòàõ--------
   int Counted_bars=IndicatorCounted(); // Êîëè÷åñòâî ïðîñ÷èòàííûõ áàðîâ 
   i=Bars-Counted_bars;               // Èíäåêñ ïåðâîãî íåïîñ÷èòàííîãî
   if(Counted_bars==0) i-=Period_Average_Sum+1;
   while(i>=0)                      
     {
      // Äëÿ  MA_fast     
      MA_0  = iMA(NULL,ma_tf,Period_MA_fast,0,ma_method,ma_price,i);
      MA_1  = iMA(NULL,ma_tf,Period_MA_fast,0,ma_method,ma_price,i+1);
      Speed_MA_fast[i] = ((MA_0 - MA_1)/(0.01*Max_MA_fast));
      
      //Äëÿ  MA_med
      MA_0  = iMA(NULL,ma_tf,Period_MA_med,0,ma_method,ma_price,i);
      MA_1  = iMA(NULL,ma_tf,Period_MA_med,0,ma_method,ma_price,i+1);
      Speed_MA_med[i] = ((MA_0 - MA_1)/(0.01*Max_MA_med));
      
      //Äëÿ  MA_slow
      MA_0  = iMA(NULL,ma_tf,Period_MA_slow,0,ma_method,ma_price,i);
      MA_1  = iMA(NULL,ma_tf,Period_MA_slow,0,ma_method,ma_price,i+1);
      Speed_MA_slow[i] = ((MA_0 - MA_1)/(0.01*Max_MA_slow));
      
      // Äëÿ ñóììû áûñòðîé è ìåäëåííîé ÌÀ
      Sum_Speed[i] = (Speed_MA_fast[i] + Speed_MA_med[i] + Speed_MA_slow[i])/3;
      // óñðåäíÿåì ñóììó
      double Tmp_Sum = 0;
      for(int n=0; n < Period_Average_Sum; n++) 
      {
        Tmp_Sum = Tmp_Sum + Sum_Speed[i+n];
      }
      Sum_Average[i] =  Tmp_Sum/Period_Average_Sum;
      
      // Íóëåâàÿ ëèíèÿ
      Nul_Line[i] = 0;
      i--;                          // Ðàñ÷¸ò èíäåêñà ñëåäóþùåãî áàðà
     } 
   color_txt = Color_Txt_Comment; 
   ObjectCreate("Label", OBJ_LABEL, WindowFind("Speed_MA"), 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_MA_fast; 
   ObjectCreate("Speed_MA_fast", OBJ_LABEL, WindowFind("Speed_MA"), 0, 0);
   ObjectSetText("Speed_MA_fast","MA"+(string)Period_MA_fast,7, "Verdana", color_txt);
   ObjectSet("Speed_MA_fast", OBJPROP_CORNER, 0);
   ObjectSet("Speed_MA_fast", OBJPROP_XDISTANCE, shift_txt);
   ObjectSet("Speed_MA_fast", OBJPROP_YDISTANCE, 20);
   if(Speed_MA_fast[0]>0)color_txt = Color_Txt_UP;
   if(Speed_MA_fast[0]<0)color_txt = Color_Txt_DOWN;
   X = shift_txt + 30;
   ObjectCreate("Speed_MA_fast_value", OBJ_LABEL, WindowFind("Speed_MA"), 0, 0);
   ObjectSetText("Speed_MA_fast_value"," = "+DoubleToStr(Speed_MA_fast[0],2),7, "Verdana", color_txt);
   ObjectSet("Speed_MA_fast_value", OBJPROP_CORNER, 0);
   ObjectSet("Speed_MA_fast_value", OBJPROP_XDISTANCE, X);
   ObjectSet("Speed_MA_fast_value", OBJPROP_YDISTANCE, 20);
 
   color_txt = Color_Txt_MA_med; 
   ObjectCreate("Speed_MA_med", OBJ_LABEL, WindowFind("Speed_MA"), 0, 0);
   ObjectSetText("Speed_MA_med","MA"+(string)Period_MA_med,7, "Verdana", color_txt);
   ObjectSet("Speed_MA_med", OBJPROP_CORNER, 0);
   ObjectSet("Speed_MA_med", OBJPROP_XDISTANCE, shift_txt);
   ObjectSet("Speed_MA_med", OBJPROP_YDISTANCE, 35);
   if(Speed_MA_med[0]>0)color_txt = Color_Txt_UP;
   if(Speed_MA_med[0]<0)color_txt = Color_Txt_DOWN;
   X = shift_txt + 30;
   ObjectCreate("Speed_MA_med_value", OBJ_LABEL, WindowFind("Speed_MA"), 0, 0);
   ObjectSetText("Speed_MA_med_value"," = "+DoubleToStr(Speed_MA_med[0],2),7, "Verdana", color_txt);
   ObjectSet("Speed_MA_med_value", OBJPROP_CORNER, 0);
   ObjectSet("Speed_MA_med_value", OBJPROP_XDISTANCE, X);
   ObjectSet("Speed_MA_med_value", OBJPROP_YDISTANCE, 35);
 
   color_txt = Color_Txt_MA_slow;
   ObjectCreate("Speed_MA_slow", OBJ_LABEL, WindowFind("Speed_MA"), 0, 0);
   ObjectSetText("Speed_MA_slow","MA"+(string)Period_MA_slow,7, "Verdana", color_txt);
   ObjectSet("Speed_MA_slow", OBJPROP_CORNER, 0);
   ObjectSet("Speed_MA_slow", OBJPROP_XDISTANCE, shift_txt);
   ObjectSet("Speed_MA_slow", OBJPROP_YDISTANCE, 50);
   if(Speed_MA_slow[0]>0)color_txt = Color_Txt_UP;
   if(Speed_MA_slow[0]<0)color_txt = Color_Txt_DOWN;
   X = shift_txt + 30;
   ObjectCreate("Speed_MA_slow_value", OBJ_LABEL, WindowFind("Speed_MA"), 0, 0);
   ObjectSetText("Speed_MA_slow_value"," = "+DoubleToStr(Speed_MA_slow[0],2),7, "Verdana", color_txt);
   ObjectSet("Speed_MA_slow_value", OBJPROP_CORNER, 0);
   ObjectSet("Speed_MA_slow_value", OBJPROP_XDISTANCE, X);
   ObjectSet("Speed_MA_slow_value", OBJPROP_YDISTANCE, 50);
  
   color_txt = Color_Txt_Sum; // öâåò íàçâàíèÿ ñîîòâåòñòâóåò öâåòó êðèâîé
   ObjectCreate("Sum_Speed", OBJ_LABEL, WindowFind("Speed_MA"), 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"), 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"), 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"), 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_Sum", OBJ_LABEL, WindowFind("Speed_MA"), 0, 0);
   ObjectSetText("Period_Average_Sum","Period_Average",7, "Verdana", color_txt);
   ObjectSet("Period_Average_Sum", OBJPROP_CORNER, 0);
   ObjectSet("Period_Average_Sum", OBJPROP_XDISTANCE, shift_txt);
   ObjectSet("Period_Average_Sum", OBJPROP_YDISTANCE, 110);
   X = shift_txt + 40;
   ObjectCreate("Period_Average_Sum_value", OBJ_LABEL, WindowFind("Speed_MA"), 0, 0);
   ObjectSetText("Period_Average_Sum_value",DoubleToStr(Period_Average_Sum,0),7, "Verdana", color_txt);
   ObjectSet("Period_Average_Sum_value", OBJPROP_CORNER, 0);
   ObjectSet("Period_Average_Sum_value", OBJPROP_XDISTANCE, X);
   ObjectSet("Period_Average_Sum_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 ---