donchian_fibo_clouds

Author: Copyright � 2015, Guilherme Santos
0 Views
0 Downloads
0 Favorites
donchian_fibo_clouds
//+------------------------------------------------------------------+
//|                                             Donchian_Fibo_Clouds |
//|                               Copyright © 2015, Guilherme Santos |
//|                                               fishguil@gmail.com |
//|                                                                  |
//|                            Modified Version of Donchian Channels |
//|                                        By Luis Guilherme Damiani |
//|                                      http://www.damianifx.com.br |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, Guilherme Santos"
#property link      "fishguil@gmail.com"
//---- íîìåð âåðñèè èíäèêàòîðà
#property version   "1.00"
//---- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå
#property indicator_chart_window 
//+----------------------------------------------+
//| Îáúÿâëåíèå êîíñòàíò                          |
//+----------------------------------------------+
#define INDTOTAL 6            // êîíñòàíòà äëÿ êîëè÷åñòâà îòîáðàæàåìûõ èíäèêàòîðîâ
#define BUFTOTAL 12           // êîíñòàíòà äëÿ êîëè÷åñòâà áóôôåðîâ èíäèêàòîðîâ BUFTOTAL*2
//+----------------------------------------------+
//---- êîëè÷åñòâî èíäèêàòîðíûõ áóôåðîâ
#property indicator_buffers BUFTOTAL
//---- èñïîëüçîâàíî âñåãî øåñòü ãðàôè÷åñêèõ ïîñòðîåíèé
#property indicator_plots   INDTOTAL
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè èíäèêàòîðà 1             |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà â âèäå öâåòíîãî îáëàêà
#property indicator_type1   DRAW_FILLING
//--- â êà÷åñòâå öâåòà èíäèêàòîðà èñïîëüçîâàí
#property indicator_color1  clrDodgerBlue
//--- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label1  "Fibo 1.000"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè èíäèêàòîðà 2             |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà â âèäå öâåòíîãî îáëàêà
#property indicator_type2   DRAW_FILLING
//--- â êà÷åñòâå öâåòà èíäèêàòîðà èñïîëüçîâàí
#property indicator_color2  clrDeepSkyBlue
//--- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label2  "Fibo 0.786"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè èíäèêàòîðà 3             |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà â âèäå öâåòíîãî îáëàêà
#property indicator_type3   DRAW_FILLING
//--- â êà÷åñòâå öâåòà èíäèêàòîðà èñïîëüçîâàí
#property indicator_color3  clrAqua
//--- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label3  "Fibo 0.618"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè èíäèêàòîðà 4             |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà â âèäå öâåòíîãî îáëàêà
#property indicator_type4   DRAW_FILLING
//--- â êà÷åñòâå öâåòà èíäèêàòîðà èñïîëüçîâàí
#property indicator_color4  clrYellow
//--- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label4  "Fibo 0.500"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè èíäèêàòîðà 5             |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà â âèäå öâåòíîãî îáëàêà
#property indicator_type5   DRAW_FILLING
//--- â êà÷åñòâå öâåòà èíäèêàòîðà èñïîëüçîâàí
#property indicator_color5  clrGold
//--- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label5  "Fibo 0.382"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè èíäèêàòîðà 6             |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà â âèäå öâåòíîãî îáëàêà
#property indicator_type6   DRAW_FILLING
//--- â êà÷åñòâå öâåòà èíäèêàòîðà èñïîëüçîâàí
#property indicator_color6  clrRed
//--- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label6  "Fibo 0.214"
//+-----------------------------------+
//| Enumeration declaration           |
//+-----------------------------------+
enum Applied_Extrem //type of extreme points
  {
   HIGH_LOW,
   HIGH_LOW_OPEN,
   HIGH_LOW_CLOSE,
   OPEN_HIGH_LOW,
   CLOSE_HIGH_LOW
  };
//+-----------------------------------+
//| Input parameters of the indicator |
//+-----------------------------------+
input uint FiboPeriod=72;                 // Period of averaging
input Applied_Extrem Extremes=HIGH_LOW;   // Type of extreme points
input int Margins=-2;
input double Level1=0.786;
input double Level2=0.618;
input double Level3=0.500;
input double Level4=0.382;
input double Level5=0.214;
input int Shift=0;                        // Horizontal shift of the indicator in bars
//+-----------------------------------+
//+------------------------------------------------------------------+
//| Êëàññ èíäèêàòîðíûõ áóôåðîâ                                       |
//+------------------------------------------------------------------+  
class CIndBuffers
  {
public:
   double            m_UpBuffer[];
   double            m_DnBuffer[];
  };
//--- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå â äàëüíåéøåì
//--- áóäóò èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
CIndBuffers Ind[INDTOTAL];
//+------------------------------------------------------------------+    
//| Donchian Channel indicator initialization function               | 
//+------------------------------------------------------------------+  
void OnInit()
  {
   for(int numb=0; numb<INDTOTAL; numb++)
     {
      int count=numb*2;
      //---- ïðåâðàùåíèå äèíàìè÷åñêèõ ìàññèâîâ â èíäèêàòîðíûå áóôåðû
      SetIndexBuffer(count,Ind[numb].m_UpBuffer,INDICATOR_DATA);
      SetIndexBuffer(count+1,Ind[numb].m_DnBuffer,INDICATOR_DATA);
      //---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðîâ ïî ãîðèçîíòàëè
      PlotIndexSetInteger(numb,PLOT_SHIFT,Shift);
      //---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
      PlotIndexSetDouble(numb,PLOT_EMPTY_VALUE,EMPTY_VALUE);
      //---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà
      PlotIndexSetInteger(numb,PLOT_DRAW_BEGIN,FiboPeriod);
      //---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðàõ êàê â òàéìñåðèÿõ
      ArraySetAsSeries(Ind[numb].m_UpBuffer,true);
      ArraySetAsSeries(Ind[numb].m_DnBuffer,true);
     }
//---- èíèöèàëèçàöèè ïåðåìåííîé äëÿ êîðîòêîãî èìåíè èíäèêàòîðà
   string shortname;
   StringConcatenate(shortname,"Donchian Fibo(Period = ",FiboPeriod,")");
//--- ñîçäàíèå èìåíè äëÿ îòîáðàæåíèÿ â îòäåëüíîì ïîäîêíå è âî âñïëûâàþùåé ïîäñêàçêå
   IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//--- îïðåäåëåíèå òî÷íîñòè îòîáðàæåíèÿ çíà÷åíèé èíäèêàòîðà
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- çàâåðøåíèå èíèöèàëèçàöèè
  }
//+------------------------------------------------------------------+  
//| Donchian Channel 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[])
  {
//---- checking the number of bars to be enough for the calculation
   if(rates_total<int(FiboPeriod)+1) return(0);
//---- declaration of variables with a floating point  
   double smin=0,smax=0,sdiff=0;
//---- îáúÿâëåíèÿ ëîêàëüíûõ ïåðåìåííûõ 
   int limit,bar;
//---- ðàñ÷åòû íåîáõîäèìîãî êîëè÷åñòâà êîïèðóåìûõ äàííûõ è ñòàðòîâîãî íîìåðà limit äëÿ öèêëà ïåðåñ÷åòà áàðîâ
   if(prev_calculated>rates_total || prev_calculated<=0)// ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷åòà èíäèêàòîðà
     {
      limit=rates_total-1-int(FiboPeriod); // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà âñåõ áàðîâ
     }
   else
     {
      limit=rates_total-prev_calculated; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà íîâûõ áàðîâ
     }
//---- èíäåêñàöèÿ ýëåìåíòîâ â ìàññèâàõ êàê â òàéìñåðèÿõ  
   ArraySetAsSeries(open,true);
   ArraySetAsSeries(high,true);
   ArraySetAsSeries(low,true);
   ArraySetAsSeries(close,true);
//---- îñíîâíîé öèêë èñïðàâëåíèÿ è îêðàøèâàíèÿ ñâå÷åé
   for(bar=limit; bar>=0 && !IsStopped(); bar--)
     {
      switch(Extremes)
        {
         case HIGH_LOW:
            smax=high[ArrayMaximum(high,bar,FiboPeriod)];
            smin=low[ArrayMinimum(low,bar,FiboPeriod)];
            break;
            //---
         case HIGH_LOW_OPEN:
            smax=(open[ArrayMaximum(open,bar,FiboPeriod)]+high[ArrayMaximum(high,bar,FiboPeriod)])/2;
            smin=(open[ArrayMinimum(open,bar,FiboPeriod)]+low[ArrayMinimum(low,bar,FiboPeriod)])/2;
            break;
            //---
         case HIGH_LOW_CLOSE:
            smax=(close[ArrayMaximum(close,bar,FiboPeriod)]+high[ArrayMaximum(high,bar,FiboPeriod)])/2;
            smin=(close[ArrayMinimum(close,bar,FiboPeriod)]+low[ArrayMinimum(low,bar,FiboPeriod)])/2;
            break;
            //---
         case OPEN_HIGH_LOW:
            smax=open[ArrayMinimum(open,bar,FiboPeriod)];
            smin=open[ArrayMaximum(open,bar,FiboPeriod)];
            break;
            //---
         case CLOSE_HIGH_LOW:
            smax=close[ArrayMaximum(close,bar,FiboPeriod)];
            smin=close[ArrayMinimum(close,bar,FiboPeriod)];
            break;
        }
      sdiff=smax-smin;
      Ind[0].m_UpBuffer[bar]=smax;
      Ind[0].m_DnBuffer[bar]=Ind[1].m_UpBuffer[bar]=smin+sdiff*Level1;
      Ind[1].m_DnBuffer[bar]=Ind[2].m_UpBuffer[bar]=smin+sdiff*Level2;
      Ind[2].m_DnBuffer[bar]=Ind[3].m_UpBuffer[bar]=smin+sdiff*Level3;
      Ind[3].m_DnBuffer[bar]=Ind[4].m_UpBuffer[bar]=smin+sdiff*Level4;
      Ind[4].m_DnBuffer[bar]=Ind[5].m_UpBuffer[bar]=smin+sdiff*Level5;
      Ind[5].m_DnBuffer[bar]=smin;
     }
//----    
   return(rates_total);
  }
//+------------------------------------------------------------------+

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