1
Views
0
Downloads
0
Favorites
RJTX_Matches_Smoothed
//+------------------------------------------------------------------+
//| RJTX_Matches_Smoothed.mq5 |
//| Copyright 2015, Rafael Jimenez Tocino |
//| http://www.tradingrafa.com/indicadores/rjt_matches |
//+------------------------------------------------------------------+
//--- àâòîðñòâî èíäèêàòîðà
#property copyright "Copyright 2015, Rafael Jimenez Tocino"
//--- ññûëêà íà ñàéò àâòîðà
#property link "http://www.tradingrafa.com/indicadores/rjt_matches"
#property description "We recommend adjust the body and head size of the matches for better visualization."
//--- íîìåð âåðñèè èíäèêàòîðà
#property version "4.00"
//---- îòðèñîâêà èíäèêàòîðà â îòäåëüíîì îêíå
#property indicator_separate_window
//--- äëÿ ðàñ÷åòà è îòðèñîâêè èíäèêàòîðà èñïîëüçîâàíî äâà áóôåðà
#property indicator_buffers 5
//--- èñïîëüçîâàíî âñåãî äâà ãðàôè÷åñêèõ ïîñòðîåíèÿ
#property indicator_plots 5
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè èíäèêàòîðà 1 |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 1 â âèäå ëèíèè
#property indicator_type1 DRAW_LINE
//---- â êà÷åñòâå öâåòà ëèíèè èíäèêàòîðà èñïîëüçîâàí ôèîëåòîâûé öâåò
#property indicator_color1 clrDarkViolet
//---- ëèíèÿ èíäèêàòîðà 1 - íåïðåðûâíàÿ êðèâàÿ
#property indicator_style1 STYLE_SOLID
//---- òîëùèíà ëèíèè èíäèêàòîðà 1 ðàâíà 2
#property indicator_width1 2
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label1 "match 1"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè èíäèêàòîðà 2 |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 2 â âèäå ëèíèè
#property indicator_type2 DRAW_LINE
//---- â êà÷åñòâå öâåòà ëèíèè èíäèêàòîðà èñïîëüçîâàí ôèîëåòîâûé öâåò
#property indicator_color2 clrDarkViolet
//---- ëèíèÿ èíäèêàòîðà 2 - íåïðåðûâíàÿ êðèâàÿ
#property indicator_style2 STYLE_SOLID
//---- òîëùèíà ëèíèè èíäèêàòîðà 2 ðàâíà 2
#property indicator_width2 2
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label2 "match 2"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè èíäèêàòîðà 3 |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 3 â âèäå ëèíèè
#property indicator_type3 DRAW_LINE
//---- â êà÷åñòâå öâåòà ëèíèè èíäèêàòîðà èñïîëüçîâàí ôèîëåòîâûé öâåò
#property indicator_color3 clrDarkViolet
//---- ëèíèÿ èíäèêàòîðà 3 - íåïðåðûâíàÿ êðèâàÿ
#property indicator_style3 STYLE_SOLID
//---- òîëùèíà ëèíèè èíäèêàòîðà 3 ðàâíà 2
#property indicator_width3 2
//---- îòîáðàæåíèå ìåäâåæüåé ìåòêè èíäèêàòîðà
#property indicator_label3 "match 3"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè ìåäâåæüåãî èíäèêàòîðà |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà 4 â âèäå ñèìâîëà
#property indicator_type4 DRAW_ARROW
//--- â êà÷åñòâå öâåòà ìåäâåæüåãî èíäèêàòîðà èñïîëüçîâàí ðîçîâûé öâåò
#property indicator_color4 clrDeepPink
//--- òîëùèíà ëèíèè èíäèêàòîðà 4 ðàâíà 2
#property indicator_width4 2
//--- îòîáðàæåíèå ìåäâåæüåé ìåòêè èíäèêàòîðà
#property indicator_label4 "RJTX_Matches_Smoothed Sell"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè áû÷üåãî èíäèêàòîðà |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà 5 â âèäå ñèìâîëà
#property indicator_type5 DRAW_ARROW
//--- â êà÷åñòâå öâåòà áû÷üåãî èíäèêàòîðà èñïîëüçîâàí ãîëóáîé öâåò
#property indicator_color5 clrDodgerBlue
//--- òîëùèíà ëèíèè èíäèêàòîðà 5 ðàâíà 2
#property indicator_width5 2
//--- îòîáðàæåíèå áû÷üåé ìåòêè èíäèêàòîðà
#property indicator_label5 "RJTX_Matches_Smoothed Buy"
//+----------------------------------------------+
//| Îáúÿâëåíèå êîíñòàíò |
//+----------------------------------------------+
#define RESET 0 // êîíñòàíòà äëÿ âîçâðàòà òåðìèíàëó êîìàíäû íà ïåðåñ÷åò èíäèêàòîðà
//+----------------------------------------------+
//| Îïèñàíèå êëàññà CXMA |
//+----------------------------------------------+
#include <SmoothAlgorithms.mqh>
//+----------------------------------------------+
//---- îáúÿâëåíèå ïåðåìåííûõ êëàññà CXMA èç ôàéëà SmoothAlgorithms.mqh
CXMA XMAO,XMAC;
//+----------------------------------------------+
//| Îáúÿâëåíèå ïåðå÷èñëåíèé |
//+----------------------------------------------+
/*enum SmoothMethod - ïåðå÷èñëåíèå îáúÿâëåíî â ôàéëå 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 uint iPeriod=10; // Ïåðèîä èíäèêàòîðà ñâå÷åê
input Smooth_Method XMA_Method=MODE_SMA; // Ìåòîä óñðåäíåíèÿ
input uint XLength=12; // Ãëóáèíà ñãëàæèâàíèÿ
input int XPhase=15; // Ïàðàìåòð ñãëàæèâàíèÿ
//---- äëÿ JJMA èçìåíÿþùèéñÿ â ïðåäåëàõ -100 ... +100, âëèÿåò íà êà÷åñòâî ïåðåõîäíîãî ïðîöåññà;
//---- äëÿ VIDIA ýòî ïåðèîä CMO, äëÿ AMA ýòî ïåðèîä ìåäëåííîé ñêîëüçÿùåé
//+----------------------------------------------+
//--- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå â äàëüíåéøåì
//--- áóäóò èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double LineBuffer0[];
double LineBuffer1[];
double LineBuffer2[];
double SellBuffer[];
double BuyBuffer[];
//---
int min_rates_total;
//---- îáúÿâëåíèå ãëîáàëüíûõ ïåðåìåííûõ
int Count[];
double xOpen[];
//+------------------------------------------------------------------+
//| Ïåðåñ÷åò ïîçèöèè ñàìîãî íîâîãî ýëåìåíòà â ìàññèâå |
//+------------------------------------------------------------------+
void Recount_ArrayZeroPos(int &CoArr[],// âîçâðàò ïî ññûëêå íîìåðà òåêóùåãî çíà÷åíèÿ öåíîâîãî ðÿäà
int Size)
{
//----
int numb,Max1,Max2;
static int count=1;
//----
Max2=Size;
Max1=Max2-1;
//----
count--;
if(count<0) count=Max1;
//----
for(int iii=0; iii<Max2; iii++)
{
numb=iii+count;
if(numb>Max1) numb-=Max2;
CoArr[iii]=numb;
}
}
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---- èíèöèàëèçàöèÿ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
min_rates_total=GetStartBars(XMA_Method,XLength,XPhase);
min_rates_total=int(MathMax(iPeriod,min_rates_total));
//---- ðàñïðåäåëåíèå ïàìÿòè ïîä ìàññèâû ïåðåìåííûõ
ArrayResize(Count,iPeriod+1);
ArrayResize(xOpen,iPeriod+1);
//---- èíèöèàëèçàöèÿ èíäèêàòîðíîãî áóôåðîâ
IndInit(0,LineBuffer0,0,min_rates_total,0);
IndInit(1,LineBuffer1,0,min_rates_total,0);
IndInit(2,LineBuffer2,0,min_rates_total,0);
IndInit(3,SellBuffer,0,min_rates_total,0);
IndInit(4,BuyBuffer,0,min_rates_total,0);
//--- ñèìâîë äëÿ èíäèêàòîðà
PlotIndexSetInteger(3,PLOT_ARROW,174);
PlotIndexSetInteger(4,PLOT_ARROW,174);
//--- óñòàíîâêà ôîðìàòà òî÷íîñòè îòîáðàæåíèÿ èíäèêàòîðà
IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//--- èìÿ äëÿ îêîí äàííûõ è ìåòêà äëÿ ïîäîêîí
string short_name="RJTX_Matches_Smoothed";
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Èíèöèàëèçàöèÿ èíäèêàòîðíîãî áóôåðà |
//+------------------------------------------------------------------+
void IndInit(int Number,double &Buffer[],double Empty_Value,int Draw_Begin,int nShift)
{
//---- ïðåâðàùåíèå äèíàìè÷åñêèõ ìàññèâîâ â èíäèêàòîðíûå áóôåðû
SetIndexBuffer(Number,Buffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà
PlotIndexSetInteger(Number,PLOT_DRAW_BEGIN,Draw_Begin);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
PlotIndexSetDouble(Number,PLOT_EMPTY_VALUE,Empty_Value);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà ïî ãîðèçîíòàëè íà Shift
PlotIndexSetInteger(Number,PLOT_SHIFT,nShift);
}
//+------------------------------------------------------------------+
//| Custom indicator 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(rates_total<min_rates_total) return(RESET);
//--- îáúÿâëåíèå ëîêàëüíûõ ïåðåìåííûõ
int first,bar;
static uint p=0;
double xclose;
//---- ðàñ÷åò ñòàðòîâîãî íîìåðà first äëÿ öèêëà ïåðåñ÷åòà áàðîâ
if(prev_calculated>rates_total || prev_calculated<=0) // ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷åòà èíäèêàòîðà
{
first=0; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà âñåõ áàðîâ
ArrayInitialize(Count,0);
ArrayInitialize(xOpen,open[first]);
}
else first=prev_calculated-1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà íîâûõ áàðîâ
//--- îñíîâíîé öèêë ðàñ÷åòà èíäèêàòîðà
for(bar=first; bar<rates_total && !IsStopped(); bar++)
{
xOpen[Count[0]]=XMAO.XMASeries(0,prev_calculated,rates_total,XMA_Method,XPhase,XLength,open[bar],bar,false);
xclose=XMAC.XMASeries(0,prev_calculated,rates_total,XMA_Method,XPhase,XLength,close[bar],bar,false);
//--- the color of matchstick heads
if(xclose>xOpen[Count[iPeriod]])
{
SellBuffer[bar]=0.0;
BuyBuffer[bar]=xclose;
}
else
{
SellBuffer[bar]=xclose;
BuyBuffer[bar]=0.0;
}
//---
switch(p)
{
case 0:
{
LineBuffer0[bar]=xOpen[Count[iPeriod-1]];
LineBuffer1[bar]=0.0;
LineBuffer2[bar]=xclose;
break;
}
case 1:
{
LineBuffer0[bar]=xclose;
LineBuffer1[bar]=xOpen[Count[iPeriod-1]];
LineBuffer2[bar]=0.0;
break;
}
case 2:
{
LineBuffer0[bar]=0.0;
LineBuffer1[bar]=xclose;
LineBuffer2[bar]=xOpen[Count[iPeriod-1]];
}
}
if(bar<rates_total-1)
{
Recount_ArrayZeroPos(Count,iPeriod+1);
p++;
}
if(p>2) p=0;
}
//---
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
---