Indicators Used
2
Views
0
Downloads
0
Favorites
colorbullsbearseyes
//+------------------------------------------------------------------+
//| ColorBullsBearsEyes.mq5 |
//| Copyright © 2007, EmeraldKing, transport_david |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, EmeraldKing, transport_david"
#property link "http://finance.groups.yahoo.com/group/MetaTrader_Experts_and_Indicators/"
#property description "BullsBearsEyes"
//---- íîìåð âåðñèè èíäèêàòîðà
#property version "1.00"
//---- îòðèñîâêà èíäèêàòîðà â îòäåëüíîì îêíå
#property indicator_separate_window
//---- êîëè÷åñòâî èíäèêàòîðíûõ áóôåðîâ
#property indicator_buffers 3
//---- èñïîëüçîâàíî âñåãî îäíî ãðàôè÷åñêîå ïîñòðîåíèå
#property indicator_plots 1
//+----------------------------------------------+
//| Ïàðàìåòðû îòîáðàæåíèÿ ãîðèçîíòàëüíûõ óðîâíåé |
//+----------------------------------------------+
#property indicator_level5 0.0
#property indicator_levelcolor clrLimeGreen
#property indicator_levelstyle STYLE_DASHDOTDOT
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè èíäèêàòîðà |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà â âèäå òðåõöâåòíîé ëèíèè
#property indicator_type1 DRAW_COLOR_LINE
//---- â êà÷åñòâå öâåòîâ òðåõöâåòíîé ëèíèè èñïîëüçîâàíû
#property indicator_color1 clrBlue,clrRed,clrLime
//---- ëèíèÿ èíäèêàòîðà - íåïðåðûâíàÿ êðèâàÿ
#property indicator_style1 STYLE_SOLID
//---- òîëùèíà ëèíèè èíäèêàòîðà ðàâíà 2
#property indicator_width1 2
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label1 "BullsBearsEyes"
//+----------------------------------------------+
//| Îáúÿâëåíèå êîíñòàíò |
//+----------------------------------------------+
#define RESET 0 // êîíñòàíòà äëÿ âîçâðàòà òåðìèíàëó êîìàíäû íà ïåðåñ÷åò èíäèêàòîðà
//+----------------------------------------------+
//| Îáúÿâëåíèå ïåðå÷èñëåíèé |
//+----------------------------------------------+
enum AlgMode
{
twist,//èçìåíåíèå íàïðàâëåíèÿ
breakdown1, //ïðîáîé ñðåäíåé ëèíèè
breakdown2, //ïðîáîé óðîâíåé ïåðåçàêóïà è ïåðåïðîäàííîñòè
breakdown3 //âûõîä èç çîí ïåðåêóïëåííîñòè è ïåðåïðîäàííîñòè + ïðîáîé óðîâíåé ïåðåçàêóïà è ïåðåïðîäàííîñòè
};
//+----------------------------------------------+
//| Âõîäíûå ïàðàìåòðû èíäèêàòîðà |
//+----------------------------------------------+
input int period=13; // Ïåðèîä óñðåäíåíèÿ èíäèêàòîðà
input double gamma=0.6; // Êîýôôèöèåíò ñãëàæèâàíèÿ èíäèêàòîðà
input AlgMode Mode=breakdown2; // Àëãîðèòì ðàñ÷åòà ñèãíàëà âõîäà
input uint HighLevel=75; // Óðîâåíü ïåðåêóïëåííîñòè
input uint MiddleLevel=50; // Óðîâåíü ñåðåäèíû
input uint LowLevel=25; // Óðîâåíü ïåðåïðîäàííîñòè
input int Shift=0; // Ñäâèã èíäèêàòîðà ïî ãîðèçîíòàëè â áàðàõ
//+----------------------------------------------+
//---- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå áóäóò â
//---- äàëüíåéøåì èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double BullsBearsEyes[],ColorBuffer[],SignBuffer[];
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ äëÿ õåíäëîâ èíäèêàòîðîâ
int Bears_Handle,Bulls_Handle;
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
int min_rates_total;
//+------------------------------------------------------------------+
//| BullsBearsEyes indicator initialization function |
//+------------------------------------------------------------------+
void OnInit()
{
//---- èíèöèàëèçàöèÿ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
min_rates_total=int(period+4);
//---- ïîëó÷åíèå õåíäëà èíäèêàòîðà iBearsPower
Bears_Handle=iBearsPower(NULL,0,int(period));
if(Bears_Handle==INVALID_HANDLE) Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà iBearsPower");
//---- ïîëó÷åíèå õåíäëà èíäèêàòîðà iBullsPower
Bulls_Handle=iBullsPower(NULL,0,int(period));
if(Bulls_Handle==INVALID_HANDLE) Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà iBullsPower");
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(0,BullsBearsEyes,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 1 ïî ãîðèçîíòàëè
PlotIndexSetInteger(0,PLOT_SHIFT,Shift);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(BullsBearsEyes,true);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â öâåòîâîé, èíäåêñíûé áóôåð
SetIndexBuffer(1,ColorBuffer,INDICATOR_COLOR_INDEX);
//---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(ColorBuffer,true);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â áóôåð äëÿ õðàíåíèÿ äàííûõ
SetIndexBuffer(2,SignBuffer,INDICATOR_CALCULATIONS);
//---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(SignBuffer,true);
//---- èíèöèàëèçàöèÿ ïåðåìåííîé äëÿ êîðîòêîãî èìåíè èíäèêàòîðà
string shortname;
StringConcatenate(shortname,"BullsBearsEyes(",period,", ",gamma,", ",Shift,")");
//--- ñîçäàíèå èìåíè äëÿ îòîáðàæåíèÿ â îòäåëüíîì ïîäîêíå è âî âñïëûâàþùåé ïîäñêàçêå
IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//--- îïðåäåëåíèå òî÷íîñòè îòîáðàæåíèÿ çíà÷åíèé èíäèêàòîðà
IndicatorSetInteger(INDICATOR_DIGITS,0);
//---- êîëè÷åñòâî ãîðèçîíòàëüíûõ óðîâíåé èíäèêàòîðà 5
IndicatorSetInteger(INDICATOR_LEVELS,5);
//---- çíà÷åíèÿ ãîðèçîíòàëüíûõ óðîâíåé èíäèêàòîðà
IndicatorSetDouble(INDICATOR_LEVELVALUE,0,100);
IndicatorSetDouble(INDICATOR_LEVELVALUE,1,HighLevel);
IndicatorSetDouble(INDICATOR_LEVELVALUE,2,MiddleLevel);
IndicatorSetDouble(INDICATOR_LEVELVALUE,3,LowLevel);
IndicatorSetDouble(INDICATOR_LEVELVALUE,4,0);
//---- â êà÷åñòâå öâåòîâ ëèíèé ãîðèçîíòàëüíûõ óðîâíåé èñïîëüçîâàíû
IndicatorSetInteger(INDICATOR_LEVELCOLOR,0,clrLimeGreen);
IndicatorSetInteger(INDICATOR_LEVELCOLOR,1,clrMagenta);
IndicatorSetInteger(INDICATOR_LEVELCOLOR,2,clrGray);
IndicatorSetInteger(INDICATOR_LEVELCOLOR,3,clrMagenta);
IndicatorSetInteger(INDICATOR_LEVELCOLOR,4,clrLimeGreen);
//---- â ëèíèè ãîðèçîíòàëüíîãî óðîâíÿ èñïîëüçîâàí êîðîòêèé øòðèõ-ïóíêòèð
IndicatorSetInteger(INDICATOR_LEVELSTYLE,0,STYLE_DASH);
IndicatorSetInteger(INDICATOR_LEVELSTYLE,1,STYLE_DASHDOTDOT);
IndicatorSetInteger(INDICATOR_LEVELSTYLE,2,STYLE_DASHDOTDOT);
IndicatorSetInteger(INDICATOR_LEVELSTYLE,3,STYLE_DASHDOTDOT);
IndicatorSetInteger(INDICATOR_LEVELSTYLE,4,STYLE_DASH);
//---- çàâåðøåíèå èíèöèàëèçàöèè
}
//+------------------------------------------------------------------+
//| BullsBearsEyes 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[])
{
//---- ïðîâåðêà êîëè÷åñòâà áàðîâ íà äîñòàòî÷íîñòü äëÿ ðàñ÷åòà
if(BarsCalculated(Bears_Handle)<rates_total
|| BarsCalculated(Bulls_Handle)<rates_total
|| rates_total<min_rates_total)
return(RESET);
//---- îáúÿâëåíèå ïåðåìåííûõ ñ ïëàâàþùåé òî÷êîé
double result,Bears[],Bulls[],CU,CD;
double L0,L1,L2,L3,L0A,L1A,L2A,L3A;
static double L0_,L1_,L2_,L3_;
static int trend_;
//---- îáúÿâëåíèå öåëûõ ïåðåìåííûõ
int limit,bar,to_copy,trend;
//---- ðàñ÷åòû íåîáõîäèìîãî êîëè÷åñòâà êîïèðóåìûõ äàííûõ è
//---- ñòàðòîâîãî íîìåðà limit äëÿ öèêëà ïåðåñ÷åòà áàðîâ
if(prev_calculated>rates_total || prev_calculated<=0)// ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷åòà èíäèêàòîðà
{
limit=int(rates_total-period-1); // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà âñåõ áàðîâ
trend_=0;
}
else limit=rates_total-prev_calculated; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà íîâûõ áàðîâ
to_copy=limit+1;
//---- èíäåêñàöèÿ ýëåìåíòîâ â ìàññèâàõ, êàê â òàéìñåðèÿõ
ArraySetAsSeries(Bears,true);
ArraySetAsSeries(Bulls,true);
//---- êîïèðóåì âíîâü ïîÿâèâøèåñÿ äàííûå â ìàññèâ
if(CopyBuffer(Bears_Handle,0,0,to_copy,Bears)<=0) return(RESET);
if(CopyBuffer(Bulls_Handle,0,0,to_copy,Bulls)<=0) return(RESET);
//---- âîññòàíàâëèâàåì çíà÷åíèÿ ïåðåìåííûõ
L0=L0_;
L1=L1_;
L2=L2_;
L3=L3_;
if(Mode==breakdown3) trend=trend_;
//---- ïåðåñ÷åò çíà÷åíèé èíäèêàòîðîâ
for(bar=limit; bar>=0 && !IsStopped(); bar--)
{
//---- çàïîìèíàåì çíà÷åíèÿ ïåðåìåííûõ ïåðåä ïðîãîíàìè íà òåêóùåì áàðå
if(rates_total!=prev_calculated && bar==0)
{
L0_=L0;
L1_=L1;
L2_=L2;
L3_=L3;
}
//----
L0A=L0;
L1A=L1;
L2A=L2;
L3A=L3;
//----
L0=(1.0-gamma)*(Bears[bar]+Bulls[bar])+gamma*L0A;
L1=-gamma*L0+L0A+gamma*L1A;
L2=-gamma*L1+L1A+gamma*L2A;
L3=-gamma*L2+L2A+gamma*L3A;
//----
CU=0.0;
CD=0.0;
result=0.0;
if(L0>=L1) CU=L0-L1; else CD=L1-L0;
if(L1>=L2) CU+=L1-L2; else CD+=L2-L1;
if(L2>=L3) CU+=L2-L3; else CD+=L3-L2;
if(CU+CD!=0) result=CU/(CU+CD);
result*=100;
//----
BullsBearsEyes[bar]=result;
}
//----
if(prev_calculated>rates_total || prev_calculated<=0) limit-=min_rates_total;
//---- îñíîâíîé öèêë ðàñêðàñêè èíäèêàòîðà
switch(Mode)
{
case twist:
for(bar=limit; bar>=0 && !IsStopped(); bar--)
{
int bar1=bar+1;
ColorBuffer[bar]=0;
if(BullsBearsEyes[bar1]>BullsBearsEyes[bar]) ColorBuffer[bar]=1;
if(BullsBearsEyes[bar1]<BullsBearsEyes[bar]) ColorBuffer[bar]=2;
}
break;
//----
case breakdown1:
for(bar=limit; bar>=0 && !IsStopped(); bar--)
{
ColorBuffer[bar]=0;
if(BullsBearsEyes[bar]<MiddleLevel) ColorBuffer[bar]=1;
if(BullsBearsEyes[bar]>MiddleLevel) ColorBuffer[bar]=2;
}
break;
//----
case breakdown2:
for(bar=limit; bar>=0 && !IsStopped(); bar--)
{
ColorBuffer[bar]=0;
if(BullsBearsEyes[bar]<LowLevel) ColorBuffer[bar]=1;
if(BullsBearsEyes[bar]>HighLevel) ColorBuffer[bar]=2;
}
break;
//----
case breakdown3:
for(bar=limit; bar>=0 && !IsStopped(); bar--)
{
int bar1=bar+1;
if(BullsBearsEyes[bar1]>=HighLevel&&BullsBearsEyes[bar]<HighLevel) trend=-1;
if(BullsBearsEyes[bar1]>=LowLevel&&BullsBearsEyes[bar]<LowLevel) trend=-1;
//----
if(BullsBearsEyes[bar1]<=LowLevel&&BullsBearsEyes[bar]>LowLevel) trend=+1;
if(BullsBearsEyes[bar1]<=HighLevel&&BullsBearsEyes[bar]>HighLevel) trend=+1;
if(bar==1) trend_=trend;
//----
ColorBuffer[bar]=0;
if(trend<0) ColorBuffer[bar]=1;
if(trend>0) ColorBuffer[bar]=2;
}
break;
}
//----
for(bar=limit; bar>=0 && !IsStopped(); bar--)
{
SignBuffer[bar]=0;
int bar1=bar+1;
//----
if(SignBuffer[bar1]>0 && ColorBuffer[bar]==1) SignBuffer[bar]=-2;
else if((SignBuffer[bar1]<=0 && ColorBuffer[bar]==1) || (SignBuffer[bar+1]<0 && !ColorBuffer[bar])) SignBuffer[bar]=-1;
//----
if(SignBuffer[bar+1]<0 && ColorBuffer[bar]==2) SignBuffer[bar]=+2;
else if((SignBuffer[bar1]>=0 && ColorBuffer[bar]==2) || (SignBuffer[bar1]>0 && !ColorBuffer[bar])) SignBuffer[bar]=+1;
}
//----
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
---