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 Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---