Indicators Used
Moving average indicatorMoving average indicator
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
MACD_full
//+------------------------------------------------------------------+
//|                                                    MACD full.mq4 |
//|Èíäèêàòîð ñîñòîèò èç:                                             |
//| - ñòàíäàðòíîãî MACD (FastEMA[12]-SlowEMA[26] è SignalISMA[9]);   |
//| - ãèñòîãðàììû MACD ñ ïðèìåíåíèåì ïÿòèïåðèîäíîãî SMA â êà÷åñòâå   | 
//|   ñèãíàëüíîé ëèíèè (MACD[12,26]- SignalISMA[9] è SignSMA[5]).    |
//|                                                                  |
//|Âõîäíûå ïàðàìåòðû, ïðåäëàãàåìûå Metatrader 4:                     |
//| - FastEMA=12;                                                    |
//| - SlowEMA=26;                                                    |
//| - SignalSMA=9;                                                   |                                                    
//|Äëÿ ìåòîäèêè ÄèÍàïîëè ïåðâûå òðè çíà÷åíèÿ çàìåíåíû íà 8           |
//|(îêðóãë¸ííîå 8,3897), 18 (îêðóãë¸ííîå 17,5185) è 9 (îêðóãë¸ííîå   |
//|9,0503) ñîîòâåòñòâåííî.                                           |
//+------------------------------------------------------------------+
#property  copyright "Copyright © 2010, LenIFCHIK"
//---- íàñòðîéêè èíäèêàòîðà
#property  indicator_separate_window                //â îòäåëüíîì îêíå
#property  indicator_buffers 8                      //èçïîëüçóåòñÿ 6 áóôåðîâ
//---- öâåòîâàÿ ïàëèòðà
//---- ãèñòîãðàììà MACD
#define COL_1 RoyalBlue                             //öâåò âîñõîäÿùåé ëèíèè ãèñòîãðàììû MACD                             
#define COL_2 FireBrick                             //öâåò íèñõîäÿùåé ëèíèè ãèñòîãðàììû MACD                             
#define COL_3 MidnightBlue                          //öâåò ñèãíàëüíîé ëèíèè ãèñòîãðàììû MACD 
#define COL_4 LightSteelBlue                        //öâåò âîñõîäÿùåé ëèíèè ãèñòîãðàììû MACD
#define COL_5 CornflowerBlue                        //öâåò íèñõîäÿùåé ëèíèè ãèñòîãðàììû MACD
#define COL_6 C'86,138,235'                         //öâåò "îáâîäêè" ãèñòîãðàììû MACD                         
#define COL_7 Red                                   //ñèãíàëüíîé ëèíèè ãèñòîãðàììû MACD                                    
//---- MACD                            
#define COL_8 LightGray                             //öâåò âîñõîäÿùåé MACD 
#define COL_9 DarkGray                              //öâåò íèñõîäÿùåé MACD 
#define COL_10 DarkSlateGray                        //öâåò "îáâîäêè" MACD
#define COL_11 Red                                  //öâåò ñèãíàëüíîé ëèíèè MACD
//---- ïàðàìåòðû èíäèêàòîðà
extern int FastEMA=8;                               //ïåðèîä áûñòðîãî EMA
extern int SlowEMA=18;                              //ïåðèîä ìåäëåííîãî EMA
extern int SignalSMA=9;                             //ïåðèîä ñèãíàëüíîé ëèíèè MACD
extern int SignSMA=5;                               //ïåðèîä ñèãíàëüíîé ëèíèè ãèñòîãðàììû MACD
extern string MACD_Hist_display_mode="0 - nothing, 1 - line, 2 - histogram";
extern int MACD_Hist_disp=0;                        //ðåæèì îòîáðàæåíèÿ ãèñòîãðàììû MACD (0-íå îòîáðàæàåòñÿ, 1-îòîáðàæàåòñÿ)
extern string MACD_display_mode="0 - nothing, 1 - line, 2 - histogram";
extern int MACD_disp=2;                             //ðåæèì îòîáðàæåíèÿ MACD (0-íå îòîáðàæàåòñÿ, 1-îòîáðàæàåòñÿ)
//---- áóôåðû èíäèêàòîðà:
//---- áóôåðû ãèñòîãðàììû MACD
double     ExtBuffer1[];                            //áóôåð âîñõîäÿùåé ëèíèè ãèñòîãðàììû MACD 
double     ExtBuffer2[];                            //áóôåð íèñõîäÿùåé ëèíèè ãèñòîãðàììû MACD 
double     OsmaBuffer[];                            //áóôåð ãèñòîãðàììû MACD
double     SignSMABuffer[];                         //áóôåð ñèãíàëüíîé ëèíèè ãèñòîãðàììû MACD
//---- áóôåðû MACD
double     ExtBuffer3[];                            //áóôåð âîñõîäÿùåãî MACD
double     ExtBuffer4[];                            //áóôåð íèñõîäÿùåãî MACD
double     MacdBuffer[];                            //áóôåð MACD
double     SignalBuffer[];                          //áóôåð ñèãíàëüíîé ëèíèè MACD

//+------------------------------------------------------------------+
//| Èíèöèàëèçàöèÿ. Ôóíêöèÿ init                                      |
//+------------------------------------------------------------------+
int init()
  {
//---- 2 äîïîëíèòåëüíûõ áóôåðà èñïîëüçóþòñÿ äëÿ âû÷èñëåíèé
   IndicatorBuffers(8);                             //÷èñëî áóôåðîâ èíäèêàòîðà
//---- ïàðàìåòðû îòðèñîâêè:
//---- ãèñòîãðàììû MACD 
   switch(MACD_Hist_disp)                           //ðåæèì îòîáðàæåíèÿ ãèñòîãðàììû MACD
     {
      case 0 :                                      //ÍÅ ÎÒÎÁÐÀÆÀÅÒÑß
        SetIndexStyle(0,DRAW_NONE);                 //ñòèëü âîñõîäÿùåé ëèíèè ãèñòîãðàììû MACD 
        SetIndexStyle(1,DRAW_NONE);                 //ñòèëü íèñõîäÿùåé ëèíèè ãèñòîãðàììû MACD 
        SetIndexStyle(2,DRAW_NONE);                 //ñòèëü îñíîâíîé ãèñòîãðàììû MACD 
        SetIndexStyle(3,DRAW_NONE);                 //ñòèëü ñèãíàëüíîé ëèíèè ãèñòîãðàììû MACD 
        break;
      case 1 :                                           //ÎÒÎÁÐÀÆÀÅÒÑß Â ÂÈÄÅ ËÈÍÈÉ 
        SetIndexStyle(0,DRAW_LINE, STYLE_SOLID,1,COL_1); //ñòèëü âîñõîäÿùåé ëèíèè ãèñòîãðàììû MACD
        SetIndexStyle(1,DRAW_LINE, STYLE_SOLID,1,COL_2); //ñòèëü íèñõîäÿùåé ëèíèè ãèñòîãðàììû MACD
        SetIndexStyle(2,DRAW_NONE, STYLE_SOLID,1,NULL);  //ñòèëü îñíîâíîé ëèíèè ãèñòîãðàììû MACD
        SetIndexStyle(3,DRAW_LINE, STYLE_SOLID,1,COL_3); //ñòèëü ñèãíàëüíîé ëèíèè ãèñòîãðàììû MACD
        break;
      case 2 :                                                 //ÎÒÎÁÐÀÆÀÅÒÑß Â ÂÈÄÅ ÃÈÑÒÎÃÐÀÌÌÛ Ñ ÑÈÃÍÀËÜÍÎÉ ËÈÍÈÅÉ
        SetIndexStyle(0,DRAW_HISTOGRAM, STYLE_SOLID,1,COL_4);  //ñòèëü âîñõîäÿùåé ëèíèè ãèñòîãðàììû MACD
        SetIndexStyle(1,DRAW_HISTOGRAM, STYLE_SOLID,1,COL_5);  //ñòèëü íèñõîäÿùåé ëèíèè ãèñòîãðàììû MACD
        SetIndexStyle(2,DRAW_LINE, STYLE_SOLID,1,COL_6);       //ñòèëü "îáâîäêè" ãèñòîãðàììû MACD 
        SetIndexStyle(3,DRAW_LINE, STYLE_SOLID,1,COL_7);       //ñòèëü ñèãíàëüíîé ëèíèè ãèñòîãðàììû MACD      
      default :
        MACD_Hist_disp=0;                                //ïî óìîë÷àíèþ ÍÅ ÎÒÎÁÐÀÆÀÅÒÑß
     }
//---- MACD
   switch(MACD_disp)                                     //ðåæèì îòîáðàæåíèÿ MACD
     {
      case 0 :                                           //ÍÅ ÎÒÎÁÐÀÆÀÅÒÑß
        SetIndexStyle(4,DRAW_NONE);                      //ñòèëü âîñõîäÿùåé MACD 
        SetIndexStyle(5,DRAW_NONE);                      //ñòèëü íèñõîäÿùåé MACD 
        SetIndexStyle(6,DRAW_NONE);                      //ñòèëü "îáâîäêè" MACD  
        SetIndexStyle(7,DRAW_NONE);                      //ñòèëü ñèãíàëüíîé ëèíèè MACD 
        break;
      case 1 :                                            //ÎÒÎÁÐÀÆÀÅÒÑß Â ÂÈÄÅ ËÈÍÈÉ
        SetIndexStyle(4,DRAW_NONE);                       //ñòèëü âîñõîäÿùåé MACD 
        SetIndexStyle(5,DRAW_NONE);                       //ñòèëü íèñõîäÿùåé MACD 
        SetIndexStyle(6,DRAW_LINE, STYLE_SOLID,1,COL_10); //ñòèëü ëèíèè MACD  
        SetIndexStyle(7,DRAW_LINE, STYLE_SOLID,1,COL_11); //ñòèëü ñèãíàëüíîé ëèíèè MACD
        break;
      case 2 :                                                 //ÎÒÎÁÐÀÆÀÅÒÑß Â ÂÈÄÅ ÃÈÑÒÎÃÐÀÌÌÛ Ñ ÑÈÃÍÀËÜÍÎÉ ËÈÍÈÅÉ
        SetIndexStyle(4,DRAW_HISTOGRAM, STYLE_SOLID,1,COL_8);  //ñòèëü âîñõîäÿùåé MACD 
        SetIndexStyle(5,DRAW_HISTOGRAM, STYLE_SOLID,1,COL_9);  //ñòèëü íèñõîäÿùåé MACD 
        SetIndexStyle(6,DRAW_LINE, STYLE_SOLID,1,COL_10);      //ñòèëü "îáâîäêè" MACD  
        SetIndexStyle(7,DRAW_LINE, STYLE_SOLID,1,COL_11);      //ñòèëü ñèãíàëüíîé ëèíèè MACD
        break;
      default :
        MACD_disp=2;                                //ïî óìîë÷àíèþ ÎÒÎÁÐÀÆÀÅÒÑß ÃÈÑÒÎÃÐÀÌÌÀ Ñ ÑÈÃÍÀËÜÍÎÉ ËÈÍÈÅÉ
     }       
//---- êîîðäèíàòû íà÷àëà îòðèñîâêè:
//---- ãèñòîãðàììû MACD
   SetIndexDrawBegin(0,SlowEMA);                    //áàð, ñ êîòîðîãî íà÷í¸òñÿ îòðèñîâêà âîñõîäÿùåé ëèíèè ãèñòîãðàììû MACD
   SetIndexDrawBegin(1,SlowEMA);                    //áàð, ñ êîòîðîãî íà÷í¸òñÿ îòðèñîâêà íèñõîäÿùåé ëèíèè ãèñòîãðàììû MACD
   SetIndexDrawBegin(2,SlowEMA);                    //áàð, ñ êîòîðîãî íà÷í¸òñÿ îòðèñîâêà ãèñòîãðàììû MACD
   SetIndexDrawBegin(3,SlowEMA);                    //áàð, ñ êîòîðîãî íà÷í¸òñÿ îòðèñîâêà ñèãíàëüíîé ëèíèè ãèñòîãðàììû MACD
//---- MACD
   SetIndexDrawBegin(4,SlowEMA);                    //àð, ñ êîòîðîãî íà÷í¸òñÿ îòðèñîâêà âîñõîäÿùåé MACD
   SetIndexDrawBegin(5,SlowEMA);                    //àð, ñ êîòîðîãî íà÷í¸òñÿ îòðèñîâêà íèñõîäÿùåé MACD
   SetIndexDrawBegin(6,SlowEMA);                    //áàð, ñ êîòîðîãî íà÷í¸òñÿ îòðèñîâêà MACD
   SetIndexDrawBegin(7,SlowEMA);                    //áàð, ñ êîòîðîãî íà÷í¸òñÿ îòðèñîâêà ñèãíàëüíîé ëèíèè MACD   
//---- ïàðàìåòðû îêðóãëåíèÿ
   IndicatorDigits(Digits);                         //îêðóãëåíèå äî ïàðàìàòðîâ îêðóãëåíèÿ öåíû
//---- ðàçìåòêà áóôåðîâ:
//---- ãèñòîãðàììû MACD
   SetIndexBuffer(0,ExtBuffer1);                    //áóôåð âîñõîäÿùåé ëèíèè ãèñòîãðàììû MACD 
   SetIndexBuffer(1,ExtBuffer2);                    //áóôåð íèñõîäÿùåé ëèíèè ãèñòîãðàììû MACD  
   SetIndexBuffer(2,OsmaBuffer);                    //áóôåð ãèñòîãðàììû MACD
   SetIndexBuffer(3,SignSMABuffer);                 //áóôåð ñèãíàëüíîé ëèíèè ãèñòîãðàììû MACD
//---- MACD
   SetIndexBuffer(4,ExtBuffer3);                    //áóôåð âîñõîäÿùåé MACD
   SetIndexBuffer(5,ExtBuffer4);                    //áóôåð íèñõîäÿùåé MACD
   SetIndexBuffer(6,MacdBuffer);                    //áóôåð MACD
   SetIndexBuffer(7,SignalBuffer);                  //áóôåð ñèãíàëüíîé ëèíèè MACD
//---- íàçàíèå îêíà äàííûõ è îêíà èíäèêàòîðà
   IndicatorShortName("MACD full("+FastEMA+","+SlowEMA+","+SignalSMA+","+SignSMA+")"); 
//---- êîíåö èíèöèàëèçàöèè
   return(0);
  }
//+------------------------------------------------------------------+
//| MACD è ãèñòîãðàììà MACD                                          |
//+------------------------------------------------------------------+
int start()
  {
   double current, current1, prev, prev1;
//---- ïåðåñ÷¸ò ïîñëåäíåãî ðàñ÷èòàííîãî áàðà
   int counted_bars=IndicatorCounted();
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   int limit=Bars-counted_bars;
   if(counted_bars==0) limit-=1+2;   
   
//---- ðàñ÷¸ò MACD 
   for(int i=0; i<limit; i++)
      MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
//---- ðàñ÷¸ò ñèãíàëüíîé ëèíèè MACD
   for(i=0; i<limit; i++)
      SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);
//---- ðàñ÷¸ò ãèñòîãðàììû MACD
   for(i=0; i<limit; i++)
      OsmaBuffer[i]=MacdBuffer[i]-SignalBuffer[i];
//---- ðàñ÷¸ò ñèãíàëüíîé ëèíèè äëÿ ãèñòîãðàììû MACD    
   for(i=0; i<limit; i++)
      SignSMABuffer[i]=iMAOnArray(OsmaBuffer,Bars,SignSMA,0,MODE_SMA,i);
//---- ðàçáèåíèå çíà÷åíèé íà âîñõîäÿùèå è íèñõîäÿùèå è ðàñïðåäåëåíèå ïî áóôåðàì
   for(i=limit-1; i>=0; i--)
     {
      current=OsmaBuffer[i];                         //òåêóùåå çíà÷åíèå ãèñòîãðàììû MACD
      prev=OsmaBuffer[i+1];                          //ïðåäûäóùåå çíà÷åíèå ãèñòîãðàììû MACD
      current1=MacdBuffer[i];                        //òåêóùåå çíà÷åíèå MACD                           
      prev1=MacdBuffer[i+1];                         //ïðåäûäóùåå çíà÷åíèå MACD
//---- äëÿ ãèñòîãðàììû MACD
      if(current>=prev)                              //åñëè òåêóùåå çíà÷åíèå ãèñòîãðàììû MACD ðàâíî èëè ïðåâûøàåò ïðåäûäóùåå, òî...
        {
         ExtBuffer1[i]=current;                      //...îòîáðàæàåòñÿ áóôåð âîñõîäÿùåé ãèñòîãðàììû MACD,
         ExtBuffer2[i]=EMPTY_VALUE;                  //áóôåð íèñõîäÿùåé ãèñòîãðàììû MACD íå îòîáðàæàåòñÿ
        }
      else                                           //â èíîì ñëó÷àå...
        {
         ExtBuffer1[i]=current;                      //...îòîáðàæàåòñÿ áóôåð íèñõîäÿùåé ãèñòîãðàììû MACD,
         ExtBuffer2[i]=current;                      //è áóôåð íèñõîäÿùåé (÷òîáû ëèíèÿ îòðèñîâûâàëàñü áåç ðàçðûâîâ)
        }
//---- äëÿ MACD
     if(current1>=prev1)                             //åñëè òåêóùåå çíà÷åíèå MACD ðàâíî èëè ïðåâûøàåò ïðåäûäóùåå, òî...
        {
         ExtBuffer3[i]=current1;                     //...îòîáðàæàåòñÿ áóôåð âîñõîäÿùåãî MACD,
         ExtBuffer4[i]=EMPTY_VALUE;                  //áóôåð íèñõîäÿùåãî MACD íå îòîáðàæàåòñÿ
        }
      else                                           //â èíîì ñëó÷àå...
        {
         ExtBuffer4[i]=current1;                     //...îòîáðàæàåòñÿ áóôåð íèñõîäÿùåãî MACD,
         ExtBuffer3[i]=EMPTY_VALUE;                  //áóôåð âîñõîäÿùåãî MACD íå îòîáðàæàåòñÿ
        {
     }
//---- êîíåö
     }
     }
   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 ---