Indicators Used
0
Views
0
Downloads
0
Favorites
binarywavesign
//+---------------------------------------------------------------------+
//| BinaryWaveSign.mq5 |
//| Copyright © 2009, LeMan |
//| b-market@mail.ru |
//+---------------------------------------------------------------------+
//| Äëÿ ðàáîòû èíäèêàòîðà ñëåäóåò ïîëîæèòü ôàéë SmoothAlgorithms.mqh |
//| â ïàïêó (äèðåêòîðèþ): êàòàëîã_äàííûõ_òåðìèíàëà\\MQL5\Include |
//+---------------------------------------------------------------------+
#property copyright "Copyright © 2009, LeMan"
#property link "b-market@mail.ru"
//---- íîìåð âåðñèè èíäèêàòîðà
#property version "1.01"
//---- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå
#property indicator_chart_window
//---- äëÿ ðàñ÷¸òà è îòðèñîâêè èíäèêàòîðà èñïîëüçîâàíî äâà áóôåðà
#property indicator_buffers 2
//---- èñïîëüçîâàíî äâà ãðàôè÷åñêèõ ïîñòðîåíèÿ
#property indicator_plots 2
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè ìåäâåæüåãî èíäèêàòîðà |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà 1 â âèäå ñèìâîëà
#property indicator_type1 DRAW_ARROW
//--- â êà÷åñòâå öâåòà ìåäâåæüåé ëèíèè èíäèêàòîðà èñïîëüçîâàí Magenta öâåò
#property indicator_color1 clrMagenta
//--- òîëùèíà ëèíèè èíäèêàòîðà 1 ðàâíà 2
#property indicator_width1 2
//--- îòîáðàæåíèå ìåäâåæüåé ìåòêè èíäèêàòîðà
#property indicator_label1 "BinaryWaveSign Sell"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè áû÷üåãî èíäèêàòîðà |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà 2 â âèäå ñèìâîëà
#property indicator_type2 DRAW_ARROW
//--- â êà÷åñòâå öâåòà áû÷üåé ëèíèè èíäèêàòîðà èñïîëüçîâàí LimeGreen öâåò
#property indicator_color2 clrLimeGreen
//--- òîëùèíà ëèíèè èíäèêàòîðà 2 ðàâíà 2
#property indicator_width2 2
//--- îòîáðàæåíèå áû÷üåé ìåòêè èíäèêàòîðà
#property indicator_label2 "BinaryWaveSign Buy"
//+-----------------------------------------------+
//| Îáúÿâëåíèå êîíñòàíò |
//+-----------------------------------------------+
#define RESET 0 // êîíñòàíòà äëÿ âîçâðàòà òåðìèíàëó êîìàíäû íà ïåðåñ÷¸ò èíäèêàòîðà
//+-----------------------------------------------+
//| Îïèñàíèå êëàññà CXMA |
//+-----------------------------------------------+
#include <SmoothAlgorithms.mqh>
//+-----------------------------------------------+
//---- îáúÿâëåíèå ïåðåìåííûõ êëàññà CXMA èç ôàéëà SmoothAlgorithms.mqh
CXMA XMA1;
//+-----------------------------------------------+
//| Îáúÿâëåíèå ïåðå÷èñëåíèé |
//+-----------------------------------------------+
/*enum Smooth_Method - ïåðå÷èñëåíèå îáúÿâëåíî â ôàéëå SmoothAlgorithms.mqh
{
MODE_SMA_, //SMA
MODE_EMA_, //EMA
MODE_SMMA_, //SMMA
MODE_LWMA_, //LWMA
MODE_JJMA, //JJMA
MODE_JurX, //JurX
MODE_ParMA, //ParMA
MODE_T3, //T3
MODE_VIDYA, //VIDYA
MODE_AMA, //AMA
}; */
//+-----------------------------------------------+
//| Âõîäíûå ïàðàìåòðû èíäèêàòîðà |
//+-----------------------------------------------+
//--- âåñ èíäèêàòîðîâ. Åñëè íîëü, èíäèêàòîð íå ó÷àñòâóåò â ðàñ÷åòå âîëíû
input double WeightMA = 1.0;
input double WeightMACD = 1.0;
input double WeightOsMA = 1.0;
input double WeightCCI = 1.0;
input double WeightMOM = 1.0;
input double WeightRSI = 1.0;
input double WeightADX = 1.0;
//---- ïàðàìåòðû ñêîëüçÿùåãî ñðåäíåãî
input int MAPeriod=13;
input ENUM_MA_METHOD MAType=MODE_EMA;
input ENUM_APPLIED_PRICE MAPrice=PRICE_CLOSE;
//---- ïàðàìåòðû MACD
input int FastMACD = 12;
input int SlowMACD = 26;
input int SignalMACD = 9;
input ENUM_APPLIED_PRICE PriceMACD=PRICE_CLOSE;
//---- ïàðàìåòðû OsMA
input int FastPeriod = 12;
input int SlowPeriod = 26;
input int SignalPeriod = 9;
input ENUM_APPLIED_PRICE OsMAPrice=PRICE_CLOSE;
//---- ïàðàìåòðû CCI
input int CCIPeriod=14;
input ENUM_APPLIED_PRICE CCIPrice=PRICE_MEDIAN;
//---- ïàðàìåòðû Ìîìåíòà
input int MOMPeriod=14;
input ENUM_APPLIED_PRICE MOMPrice=PRICE_CLOSE;
//---- ïàðàìåòðû RSI
input int RSIPeriod=14;
input ENUM_APPLIED_PRICE RSIPrice=PRICE_CLOSE;
//---- ïàðàìåòðû ADX
input int ADXPeriod=14;
//---- âêëþ÷åíèå ñãëàæèâàíèÿ âîëíû
input Smooth_Method bMA_Method=MODE_JJMA; // Ìåòîä óñðåäíåíèÿ
input int bLength=5; // Ãëóáèíà ñãëàæèâàíèÿ
input int bPhase=100; // Ïàðàìåòð ñãëàæèâàíèÿ
// äëÿ JJMA èçìåíÿþùèéñÿ â ïðåäåëàõ -100 ... +100, âëèÿåò íà êà÷åñòâî ïåðåõîäíîãî ïðîöåññà;
// äëÿ VIDIA ýòî ïåðèîä CMO, äëÿ AMA ýòî ïåðèîä ìåäëåííîé ñêîëüçÿùåé
input int Shift=0; // Ñäâèã èíäèêàòîðà ïî ãîðèçîíòàëè â áàðàõ
//+-----------------------------------------------+
//---- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå áóäóò â
//---- äàëüíåéøåì èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double SellBuffer[],BuyBuffer[];
//---- îáúÿâëåíèå öåëûõ ïåðåìåííûõ íà÷àëà îòñ÷¸òà äàííûõ
int min_rates_total,min_rates_total_1;
//---- îáúÿâëåíèå öåëûõ ïåðåìåííûõ äëÿ õåíäëîâ èíäèêàòîðîâ
int ATR_Handle,MA_Handle,MACD_Handle,OsMA_Handle,CCI_Handle,MOM_Handle,RSI_Handle,ADX_Handle;
//+------------------------------------------------------------------+
//| Îïðåäåëÿåì ïîëîæåíèå öåíû çàêðûòèÿ îòíîñèòåëüíî ñðåäíåãî |
//+------------------------------------------------------------------+
double MAClose(int bar,double &MaArray[],const double &Close[])
{
if(WeightMA>0)
{
if(Close[bar]-MaArray[bar]>0) return(+WeightMA);
if(Close[bar]-MaArray[bar]<0) return(-WeightMA);
//if(Close[bar]-MaArray[bar]==0) return(0);
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| Îïðåäåëÿåì íàêëîí MACD |
//+------------------------------------------------------------------+
double MACD(int bar,double &MacdArray[])
{
if(WeightMACD>0)
{
if(MacdArray[bar]-MacdArray[bar+1]>0) return(+WeightMACD);
if(MacdArray[bar]-MacdArray[bar+1]<0) return(-WeightMACD);
//if(MacdArray[bar]-MacdArray[bar+1]==0) return(0);
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| Îïðåäåëÿåì ïîëîæåíèå OsMa îòíîñèòåëüíî íóëÿ |
//+------------------------------------------------------------------+
double OsMA(int bar,double &OsMAArray[])
{
if(WeightOsMA>0)
{
if(OsMAArray[bar]>0) return(+WeightOsMA);
if(OsMAArray[bar]<0) return(-WeightOsMA);
//if(OsMAArray[bar]==0) return(0);
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| Îïðåäåëÿåì ïîëîæåíèå CCI îòíîñèòåëüíî íóëÿ |
//+------------------------------------------------------------------+
double CCI(int bar,double &CCIArray[])
{
if(WeightCCI>0)
{
if(CCIArray[bar]>0) return(+WeightCCI);
if(CCIArray[bar]<0) return(-WeightCCI);
//if(CCIArray[bar]==0) return(0);
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| Îïðåäåëÿåì ïîëîæåíèå Momentum îòíîñèòåëüíî 100 |
//+------------------------------------------------------------------+
double MOM(int bar,double &MOMArray[])
{
if(WeightMOM>0)
{
if(MOMArray[bar]>100) return(+WeightMOM);
if(MOMArray[bar]<100) return(-WeightMOM);
//if(MOMArray[bar]==100) return(0);
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| Îïðåäåëÿåì ïîëîæåíèå RSI îòíîñèòåëüíî 50 |
//+------------------------------------------------------------------+
double RSI(int bar,double &RSIArray[])
{
if(WeightRSI>0)
{
if(RSIArray[bar]>50) return(+WeightRSI);
if(RSIArray[bar]<50) return(-WeightRSI);
//if(RSIArray[bar]==100) return(0);
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| Îïðåäåëÿåì ïîëîæåíèå DMI |
//+------------------------------------------------------------------+
double ADX(int bar,double &DMIPArray[],double &DMIMArray[])
{
if(WeightADX>0)
{
if(DMIPArray[bar]>DMIMArray[bar]) return(+WeightADX);
if(DMIPArray[bar]<DMIMArray[bar]) return(-WeightADX);
//if(DMIPArray[bar]==DMIMArray[bar]) return(0);
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| BinaryWave indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---- èíèöèàëèçàöèÿ ãëîáàëüíûõ ïåðåìåííûõ
int ATR_Period=15;
//---- ïîëó÷åíèå õåíäëà èíäèêàòîðà ATR
ATR_Handle=iATR(NULL,0,ATR_Period);
if(ATR_Handle==INVALID_HANDLE)
{
Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà ATR");
return(INIT_FAILED);
}
//---- èíèöèàëèçàöèÿ ïåðåìåííûõ íà÷àëà îòñ÷¸òà äàííûõ
min_rates_total_1=MathMax(MAPeriod,MathMax(SlowPeriod,MathMax(CCIPeriod,MathMax(SlowMACD,MOMPeriod))))+1;
min_rates_total=min_rates_total_1+XMA1.GetStartBars(bMA_Method,bLength,bPhase);
min_rates_total=MathMax(min_rates_total,ATR_Period)+3;
//---- óñòàíîâêà àëåðòîâ íà íåäîïóñòèìûå çíà÷åíèÿ âíåøíèõ ïåðåìåííûõ
XMA1.XMALengthCheck("bLength", bLength);
XMA1.XMAPhaseCheck("bPhase", bPhase, bMA_Method);
//---- ïîëó÷åíèå õåíäëà èíäèêàòîðà iMA
MA_Handle=iMA(NULL,0,MAPeriod,0,MAType,MAPrice);
if(MA_Handle==INVALID_HANDLE)
{
Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà iMA");
return(INIT_FAILED);
}
//---- ïîëó÷åíèå õåíäëà èíäèêàòîðà iMACD
MACD_Handle=iMACD(NULL,0,FastMACD,SlowMACD,SignalMACD,PriceMACD);
if(MACD_Handle==INVALID_HANDLE)
{
Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà iMACD");
return(INIT_FAILED);
}
//---- ïîëó÷åíèå õåíäëà èíäèêàòîðà iOsMA
OsMA_Handle=iOsMA(NULL,0,FastPeriod,SlowPeriod,SignalPeriod,OsMAPrice);
if(OsMA_Handle==INVALID_HANDLE)
{
Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà iOsMA");
return(INIT_FAILED);
}
//---- ïîëó÷åíèå õåíäëà èíäèêàòîðà iCCI
CCI_Handle=iCCI(NULL,0,CCIPeriod,CCIPrice);
if(CCI_Handle==INVALID_HANDLE)
{
Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà iCCI");
return(INIT_FAILED);
}
//---- ïîëó÷åíèå õåíäëà èíäèêàòîðà iMomentum
MOM_Handle=iMomentum(NULL,0,MOMPeriod,MOMPrice);
if(MOM_Handle==INVALID_HANDLE)
{
Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà iMomentum");
return(INIT_FAILED);
}
//---- ïîëó÷åíèå õåíäëà èíäèêàòîðà iRSI
RSI_Handle=iRSI(NULL,0,RSIPeriod,RSIPrice);
if(RSI_Handle==INVALID_HANDLE)
{
Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà iRSI");
return(INIT_FAILED);
}
//---- ïîëó÷åíèå õåíäëà èíäèêàòîðà iADX
ADX_Handle=iADX(NULL,0,ADXPeriod);
if(ADX_Handle==INVALID_HANDLE)
{
Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà iADX");
return(INIT_FAILED);
}
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(0,SellBuffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷¸òà îòðèñîâêè èíäèêàòîðà 1
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//---- ñèìâîë äëÿ èíäèêàòîðà
PlotIndexSetInteger(0,PLOT_ARROW,124);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 1 ïî ãîðèçîíòàëè
PlotIndexSetInteger(0,PLOT_SHIFT,Shift);
//---- çàïðåò íà îòðèñîâêó èíäèêàòîðîì ïóñòûõ çíà÷åíèé
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
//---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(SellBuffer,true);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(1,BuyBuffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷¸òà îòðèñîâêè èíäèêàòîðà 2
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);
//---- ñèìâîë äëÿ èíäèêàòîðà
PlotIndexSetInteger(1,PLOT_ARROW,124);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 1 ïî ãîðèçîíòàëè
PlotIndexSetInteger(1,PLOT_SHIFT,Shift);
//---- çàïðåò íà îòðèñîâêó èíäèêàòîðîì ïóñòûõ çíà÷åíèé
PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);
//---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(BuyBuffer,true);
//---- èíèöèàëèçàöèÿ ïåðåìåííûõ äëÿ êîðîòêîãî èìåíè èíäèêàòîðà
string shortname;
string Smooth1=XMA1.GetString_MA_Method(bMA_Method);
StringConcatenate(shortname,"BinaryWaveSign(",bLength,", ",Smooth1,")");
//--- ñîçäàíèå èìåíè äëÿ îòîáðàæåíèÿ â îòäåëüíîì ïîäîêíå è âî âñïëûâàþùåé ïîäñêàçêå
IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//--- îïðåäåëåíèå òî÷íîñòè îòîáðàæåíèÿ çíà÷åíèé èíäèêàòîðà
IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- çàâåðøåíèå èíèöèàëèçàöèè
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| BinaryWave 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(MA_Handle)<rates_total
|| BarsCalculated(MACD_Handle)<rates_total
|| BarsCalculated(OsMA_Handle)<rates_total
|| BarsCalculated(CCI_Handle)<rates_total
|| BarsCalculated(MOM_Handle)<rates_total
|| BarsCalculated(RSI_Handle)<rates_total
|| BarsCalculated(ADX_Handle)<rates_total
|| BarsCalculated(ATR_Handle)<rates_total
|| rates_total<min_rates_total)
return(RESET);
//---- îáúÿâëåíèÿ ëîêàëüíûõ ïåðåìåííûõ
int to_copy,limit,bar,maxbar;
double wave0,tmp,MA_[],MACD_[],OsMA_[],CCI_[],MOM_[],RSI_[],DMIP_[],DMIM_[],ATR[];
static double wave1,wave2;
//---- ðàñ÷¸òû íåîáõîäèìîãî êîëè÷åñòâà êîïèðóåìûõ äàííûõ è
//---- ñòàðòîâîãî íîìåðà limit äëÿ öèêëà ïåðåñ÷¸òà áàðîâ
if(prev_calculated>rates_total || prev_calculated<=0)// ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷¸òà èíäèêàòîðà
{
to_copy=rates_total; // ðàñ÷¸òíîå êîëè÷åñòâî âñåõ áàðîâ
limit=rates_total-2; // ñòàðòîâûé íîìåð äëÿ ðàñ÷¸òà âñåõ áàðîâ
}
else
{
to_copy=rates_total-prev_calculated+1; // ðàñ÷¸òíîå êîëè÷åñòâî òîëüêî íîâûõ áàðîâ
limit=rates_total-prev_calculated; // ñòàðòîâûé íîìåð äëÿ ðàñ÷¸òà íîâûõ áàðîâ
}
//---- êîïèðóåì âíîâü ïîÿâèâøèåñÿ äàííûå â ìàññèâû
if(CopyBuffer(MA_Handle,0,0,to_copy,MA_)<=0) return(RESET);
if(CopyBuffer(MACD_Handle,0,0,to_copy+1,MACD_)<=0) return(RESET);
if(CopyBuffer(OsMA_Handle,0,0,to_copy,OsMA_)<=0) return(RESET);
if(CopyBuffer(CCI_Handle,0,0,to_copy,CCI_)<=0) return(RESET);
if(CopyBuffer(MOM_Handle,0,0,to_copy,MOM_)<=0) return(RESET);
if(CopyBuffer(RSI_Handle,0,0,to_copy,RSI_)<=0) return(RESET);
if(CopyBuffer(ADX_Handle,1,0,to_copy,DMIP_)<=0) return(RESET);
if(CopyBuffer(ADX_Handle,2,0,to_copy,DMIM_)<=0) return(RESET);
if(CopyBuffer(ATR_Handle,0,0,to_copy,ATR)<=0) return(RESET);
//---- èíäåêñàöèÿ ýëåìåíòîâ â ìàññèâàõ êàê â òàéìñåðèÿõ
ArraySetAsSeries(MA_,true);
ArraySetAsSeries(MACD_,true);
ArraySetAsSeries(OsMA_,true);
ArraySetAsSeries(CCI_,true);
ArraySetAsSeries(MOM_,true);
ArraySetAsSeries(RSI_,true);
ArraySetAsSeries(DMIP_,true);
ArraySetAsSeries(DMIM_,true);
ArraySetAsSeries(ATR,true);
ArraySetAsSeries(low,true);
ArraySetAsSeries(high,true);
ArraySetAsSeries(close,true);
//----
maxbar=rates_total-min_rates_total_1-1;
//---- îñíîâíîé öèêë ðàñ÷¸òà èíäèêàòîðà
for(bar=limit; bar>=0 && !IsStopped(); bar--)
{
tmp=MAClose(bar,MA_,close)+MACD(bar,MACD_)+OsMA(bar,OsMA_)+CCI(bar,CCI_)+MOM(bar,MOM_)+RSI(bar,RSI_)+ADX(bar,DMIP_,DMIM_);
wave0=XMA1.XMASeries(maxbar,prev_calculated,rates_total,bMA_Method,bPhase,bLength,tmp,bar,true);
BuyBuffer[bar]=0.0;
SellBuffer[bar]=0.0;
if(wave2>wave1 && wave1<wave0) BuyBuffer[bar]=low[bar]-ATR[0]*3/8;
if(wave2<wave1 && wave1>wave0) SellBuffer[bar]=high[bar]+ATR[0]*3/8;
//---
if(bar)
{
wave2=wave1;
wave1=wave0;
}
}
//----
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
---