0
Views
0
Downloads
0
Favorites
ColorXvaMA_Digit_StDev
//+---------------------------------------------------------------------+
//| ColorXvaMA_Digit_StDev.mq5 |
//| Copyright © 2013, J.B |
//| |
//+---------------------------------------------------------------------+
//| Äëÿ ðàáîòû èíäèêàòîðà ñëåäóåò ïîëîæèòü ôàéë SmoothAlgorithms.mqh |
//| â ïàïêó (äèðåêòîðèþ): êàòàëîã_äàííûõ_òåðìèíàëà\\MQL5\Include |
//+---------------------------------------------------------------------+
#property copyright "Copyright © 2013, J.B"
#property link ""
//---- íîìåð âåðñèè èíäèêàòîðà
#property version "1.00"
//---- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå
#property indicator_chart_window
//---- äëÿ ðàñ÷¸òà è îòðèñîâêè èíäèêàòîðà èñïîëüçîâàíî øåñòü áóôåðîâ
#property indicator_buffers 6
//---- èñïîëüçîâàíî âñåãî ïÿòü ãðàôè÷åñêèõ ïîñòðîåíèé
#property indicator_plots 5
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè èíäèêàòîðà |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà â âèäå ëèíèè
#property indicator_type1 DRAW_COLOR_LINE
//---- â êà÷åñòâå öâåòîâ ëèíèè èñïîëüçîâàíû
#property indicator_color1 clrDeepPink,clrDodgerBlue
//---- ëèíèÿ èíäèêàòîðà - íåïðåðûâíàÿ êðèâàÿ
#property indicator_style1 STYLE_SOLID
//---- òîëùèíà ëèíèè èíäèêàòîðà ðàâíà 3
#property indicator_width1 3
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label1 "ColorXvaMA_Digit"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè ìåäâåæüåãî èíäèêàòîðà |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 2 â âèäå ñèìâîëà
#property indicator_type2 DRAW_ARROW
//---- â êà÷åñòâå öâåòà ìåäâåæüåãî èíäèêàòîðà èñïîëüçîâàí æ¸ëòûé öâåò
#property indicator_color2 clrGold
//---- òîëùèíà ëèíèè èíäèêàòîðà 2 ðàâíà 2
#property indicator_width2 2
//---- îòîáðàæåíèå ìåäâåæüåé ìåòêè èíäèêàòîðà
#property indicator_label2 "Dn_Signal 1"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè áû÷üãî èíäèêàòîðà |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 3 â âèäå ñèìâîëà
#property indicator_type3 DRAW_ARROW
//---- â êà÷åñòâå öâåòà áû÷üåãî èíäèêàòîðà èñïîëüçîâàí àêâàìàðèíîâûé öâåò
#property indicator_color3 clrAqua
//---- òîëùèíà ëèíèè èíäèêàòîðà 3 ðàâíà 2
#property indicator_width3 2
//---- îòîáðàæåíèå áû÷åé ìåòêè èíäèêàòîðà
#property indicator_label3 "Up_Signal 1"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè ìåäâåæüåãî èíäèêàòîðà |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 4 â âèäå ñèìâîëà
#property indicator_type4 DRAW_ARROW
//---- â êà÷åñòâå öâåòà ìåäâåæüåãî èíäèêàòîðà èñïîëüçîâàí æ¸ëòûé öâåò
#property indicator_color4 clrGold
//---- òîëùèíà ëèíèè èíäèêàòîðà 4 ðàâíà 4
#property indicator_width4 4
//---- îòîáðàæåíèå ìåäâåæüåé ìåòêè èíäèêàòîðà
#property indicator_label4 "Dn_Signal 2"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè áû÷üãî èíäèêàòîðà |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 5 â âèäå ñèìâîëà
#property indicator_type5 DRAW_ARROW
//---- â êà÷åñòâå öâåòà áû÷üåãî èíäèêàòîðà èñïîëüçîâàí àêâàìàðèíîâûé öâåò
#property indicator_color5 clrAqua
//---- òîëùèíà ëèíèè èíäèêàòîðà 5 ðàâíà 4
#property indicator_width5 4
//---- îòîáðàæåíèå áû÷åé ìåòêè èíäèêàòîðà
#property indicator_label5 "Up_Signal 2"
//+----------------------------------------------+
//| Îïèñàíèå êëàññà CXMA |
//+----------------------------------------------+
#include <SmoothAlgorithms.mqh>
//+----------------------------------------------+
//---- îáúÿâëåíèå ïåðåìåííûõ êëàññà CXMA èç ôàéëà SmoothAlgorithms.mqh
CXMA XMA1,XMA2;
//+----------------------------------------------+
//| îáúÿâëåíèå ïåðå÷èñëåíèé |
//+----------------------------------------------+
enum Applied_price_ //Òèï êîíñòàíòû
{
PRICE_CLOSE_ = 1, //Close
PRICE_OPEN_, //Open
PRICE_HIGH_, //High
PRICE_LOW_, //Low
PRICE_MEDIAN_, //Median Price (HL/2)
PRICE_TYPICAL_, //Typical Price (HLC/3)
PRICE_WEIGHTED_, //Weighted Close (HLCC/4)
PRICE_SIMPL_, //Simpl Price (OC/2)
PRICE_QUARTER_, //Quarted Price (HLOC/4)
PRICE_TRENDFOLLOW0_, //TrendFollow_1 Price
PRICE_TRENDFOLLOW1_, //TrendFollow_2 Price
PRICE_DEMARK_ //Demark Price
};
//+----------------------------------------------+
//| îáúÿâëåíèå ïåðå÷èñëåíèé |
//+----------------------------------------------+
/*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 string SirName="ColorXvaMA_Digit"; //Ïåðâàÿ ÷àñòü èìåíè ãðàôè÷åñêèõ îáúåêòîâ
input Smooth_Method XMA_Method1=MODE_EMA_;//ìåòîä óñðåäíåíèÿ
input uint XLength1=15; //ãëóáèíà óñðåäíåíèÿ
input int XPhase1=15; //ïàðàìåòð óñðåäíåíèÿ,
//---- äëÿ JJMA èçìåíÿþùèéñÿ â ïðåäåëàõ -100 ... +100, âëèÿåò íà êà÷åñòâî ïåðåõîäíîãî ïðîöåññà;
//---- Äëÿ VIDIA ýòî ïåðèîä CMO, äëÿ AMA ýòî ïåðèîä ìåäëåííîé ñêîëüçÿùåé
input Smooth_Method XMA_Method2=MODE_JJMA;//ìåòîä ñãëàæèâàíèÿ
input uint XLength2=5; //ãëóáèíà ñãëàæèâàíèÿ
input int XPhase2=100; //ïàðàìåòð ñãëàæèâàíèÿ,
//---- äëÿ JJMA èçìåíÿþùèéñÿ â ïðåäåëàõ -100 ... +100, âëèÿåò íà êà÷åñòâî ïåðåõîäíîãî ïðîöåññà;
//---- Äëÿ VIDIA ýòî ïåðèîä CMO, äëÿ AMA ýòî ïåðèîä ìåäëåííîé ñêîëüçÿùåé
input Applied_price_ IPC=PRICE_CLOSE_; //öåíîâàÿ êîíñòàíòà
input int Shift=0; //ñäâèã èíäèêàòîðà ïî ãîðèçîíòàëè â áàðàõ
input int PriceShift=0; //cäâèã èíäèêàòîðà ïî âåðòèêàëè â ïóíêòàõ
input uint Digit=2; //êîëè÷åñòâî ðàçðÿäîâ îêðóãëåíèÿ
input bool ShowPrice=true; //ïîêàçûâàòü öåíîâóþ ìåòêó
//---- öâåòà öåíîâûõ ìåòîê
input color Price_color=clrGray; //öâåò öåíîâîé ìåòêè
input double dK1=1.5; //êîýôôèöèåíò 1 äëÿ êâàäðàòè÷íîãî ôèëüòðà
input double dK2=2.5; //êîýôôèöèåíò 2 äëÿ êâàäðàòè÷íîãî ôèëüòðà
input uint std_period=9; //ïåðèîä êâàäðàòè÷íîãî ôèëüòðà
//+----------------------------------------------+
//---- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå áóäóò â äàëüíåéøåì èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double ExtLineBuffer[],ColorExtLineBuffer[];
double BearsBuffer1[],BullsBuffer1[];
double BearsBuffer2[],BullsBuffer2[];
//---- Îáúÿâëåíèå ïåðåìåííîé çíà÷åíèÿ âåðòèêàëüíîãî ñäâèãà ìóâèíãà
double dPriceShift;
double PointPow10;
//---- Îáúÿâëåíèå öåëûõ ïåðåìåííûõ íà÷àëà îòñ÷¸òà äàííûõ
int min_rates,min_rates_total,XLength4,XLength8,XLength12,std_period1;
//---- îáúÿâëåíèå ãëîáàëüíûõ ïåðåìåííûõ
int Count1[],Count2[];
double Xma[],dXVama[],XVama[];
//---- Îáúÿâëåíèå ñòðèíãîâ äëÿ òåêñòîâûõ ìåòîê
string Price_name;
//+------------------------------------------------------------------+
//| Ïåðåñ÷åò ïîçèöèè ñàìîãî íîâîãî ýëåìåíòà â ìàññèâå |
//+------------------------------------------------------------------+
void Recount_ArrayZeroPos1(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;
}
//----
}
//+------------------------------------------------------------------+
//| Ïåðåñ÷åò ïîçèöèè ñàìîãî íîâîãî ýëåìåíòà â ìàññèâå |
//+------------------------------------------------------------------+
void Recount_ArrayZeroPos2(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;
}
//----
}
//+------------------------------------------------------------------+
//| XvaMA indicator initialization function |
//+------------------------------------------------------------------+
void OnInit()
{
//---- Èíèöèàëèçàöèÿ ïåðåìåííûõ íà÷àëà îòñ÷¸òà äàííûõ
min_rates=GetStartBars(XMA_Method1,XLength1,XPhase1);
min_rates_total=min_rates+GetStartBars(XMA_Method2,XLength2,XPhase2)+int(std_period);
std_period1=int(std_period)+1;
XLength4=int(XLength1/4);
XLength8=int(XLength1/8);
XLength12=int(XLength1/12);
PointPow10=_Point*MathPow(10,Digit);
//---- Èíèöèàëèçàöèÿ ñòðèíãîâ
Price_name=SirName+"Price";
//---- óñòàíîâêà àëåðòîâ íà íåäîïóñòèìûå çíà÷åíèÿ âíåøíèõ ïåðåìåííûõ
XMA1.XMALengthCheck("XLength1",XLength1);
XMA1.XMALengthCheck("XLength2",XLength2);
XMA1.XMAPhaseCheck("XPhase1",XPhase1,XMA_Method1);
XMA1.XMAPhaseCheck("XPhase2",XPhase2,XMA_Method2);
//---- Èíèöèàëèçàöèÿ ñäâèãà ïî âåðòèêàëè
dPriceShift=_Point*PriceShift;
//---- ðàñïðåäåëåíèå ïàìÿòè ïîä ìàññèâû ïåðåìåííûõ
ArrayResize(Count1,XLength1);
ArrayResize(Xma,XLength1);
//---- Ðàñïðåäåëåíèå ïàìÿòè ïîä ìàññèâû ïåðåìåííûõ
ArrayResize(Count2,std_period1);
ArrayResize(XVama,std_period1);
ArrayResize(dXVama,std_period1);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà ExtLineBuffer â èíäèêàòîðíûé áóôåð
SetIndexBuffer(0,ExtLineBuffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷¸òà îòðèñîâêè èíäèêàòîðà
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//--- çàïðåò íà îòðèñîâêó èíäèêàòîðîì ïóñòûõ çíà÷åíèé
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 2 ïî ãîðèçîíòàëè
PlotIndexSetInteger(0,PLOT_SHIFT,Shift);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â öâåòîâîé, èíäåêñíûé áóôåð
SetIndexBuffer(1,ColorExtLineBuffer,INDICATOR_COLOR_INDEX);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà BearsBuffer â èíäèêàòîðíûé áóôåð
SetIndexBuffer(2,BearsBuffer1,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 2 ïî ãîðèçîíòàëè
PlotIndexSetInteger(1,PLOT_SHIFT,Shift);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷¸òà îòðèñîâêè èíäèêàòîðà
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);
//---- âûáîð ñèìâîëà äëÿ îòðèñîâêè
PlotIndexSetInteger(1,PLOT_ARROW,159);
//---- çàïðåò íà îòðèñîâêó èíäèêàòîðîì ïóñòûõ çíà÷åíèé
PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà BullsBuffer â èíäèêàòîðíûé áóôåð
SetIndexBuffer(3,BullsBuffer1,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 3 ïî ãîðèçîíòàëè
PlotIndexSetInteger(2,PLOT_SHIFT,Shift);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷¸òà îòðèñîâêè èíäèêàòîðà
PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,min_rates_total);
//---- âûáîð ñèìâîëà äëÿ îòðèñîâêè
PlotIndexSetInteger(2,PLOT_ARROW,159);
//---- çàïðåò íà îòðèñîâêó èíäèêàòîðîì ïóñòûõ çíà÷åíèé
PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà BearsBuffer â èíäèêàòîðíûé áóôåð
SetIndexBuffer(4,BearsBuffer2,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 2 ïî ãîðèçîíòàëè
PlotIndexSetInteger(3,PLOT_SHIFT,Shift);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷¸òà îòðèñîâêè èíäèêàòîðà
PlotIndexSetInteger(3,PLOT_DRAW_BEGIN,min_rates_total);
//---- âûáîð ñèìâîëà äëÿ îòðèñîâêè
PlotIndexSetInteger(3,PLOT_ARROW,159);
//---- çàïðåò íà îòðèñîâêó èíäèêàòîðîì ïóñòûõ çíà÷åíèé
PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà BullsBuffer â èíäèêàòîðíûé áóôåð
SetIndexBuffer(5,BullsBuffer2,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 3 ïî ãîðèçîíòàëè
PlotIndexSetInteger(4,PLOT_SHIFT,Shift);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷¸òà îòðèñîâêè èíäèêàòîðà
PlotIndexSetInteger(4,PLOT_DRAW_BEGIN,min_rates_total);
//---- âûáîð ñèìâîëà äëÿ îòðèñîâêè
PlotIndexSetInteger(4,PLOT_ARROW,159);
//---- çàïðåò íà îòðèñîâêó èíäèêàòîðîì ïóñòûõ çíà÷åíèé
PlotIndexSetDouble(4,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- èíèöèàëèçàöèè ïåðåìåííîé äëÿ êîðîòêîãî èìåíè èíäèêàòîðà
string shortname;
string Smooth1=XMA1.GetString_MA_Method(XMA_Method1);
StringConcatenate(shortname,"XvaMA(",XLength1,", ",Smooth1,")");
//--- ñîçäàíèå èìåíè äëÿ îòîáðàæåíèÿ â îòäåëüíîì ïîäîêíå è âî âñïëûâàþùåé ïîäñêàçêå
IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//--- îïðåäåëåíèå òî÷íîñòè îòîáðàæåíèÿ çíà÷åíèé èíäèêàòîðà
IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1);
//---- çàâåðøåíèå èíèöèàëèçàöèè
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//----
ObjectDelete(0,Price_name);
//----
ChartRedraw(0);
}
//+------------------------------------------------------------------+
//| XvaMA 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(0);
//---- Îáúÿâëåíèå ïåðåìåííûõ ñ ïëàâàþùåé òî÷êîé
double price,vel,acc,aaa,vama,xvama,trend;
//---- Îáúÿâëåíèå öåëûõ ïåðåìåííûõ
int first,bar;
double SMAdif,Sum,StDev,dstd,BEARS1,BULLS1,BEARS2,BULLS2,Filter1,Filter2;
//---- ðàñ÷¸ò ñòàðòîâîãî íîìåðà first äëÿ öèêëà ïåðåñ÷¸òà áàðîâ
if(prev_calculated>rates_total || prev_calculated<=0) // ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷¸òà èíäèêàòîðà
{
first=0; // ñòàðòîâûé íîìåð äëÿ ðàñ÷¸òà âñåõ áàðîâ
//---- Îáíóëåíèå ñîäåðæèìîãî öèêëè÷åñêèõ áóôåðîâ
ArrayInitialize(Count1,0);
ArrayInitialize(Xma,0.0);
ArrayInitialize(Count2,0);
ArrayInitialize(XVama,0.0);
}
else first=prev_calculated-1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷¸òà íîâûõ áàðîâ
//---- Îñíîâíîé öèêë ðàñ÷¸òà èíäèêàòîðà
for(bar=first; bar<rates_total && !IsStopped(); bar++)
{
price=PriceSeries(IPC,bar,open,low,high,close); //Ïîëó÷åíèå öåíû
Xma[Count1[0]]=XMA1.XMASeries(0,prev_calculated,rates_total,XMA_Method1,XPhase1,XLength1,price,bar,false); //Óñðåäíåíèå öåíû
vel=Xma[Count1[0]]-Xma[Count1[XLength4]]; //Ïðèðàùåíèå ìåæäó áàðàìè
acc=Xma[Count1[0]]-2*Xma[Count1[XLength4]]+Xma[Count1[XLength8]]; //Ïðèðàùåíèå ïðèðàùåíèÿ ìåæäó áàðàìè
aaa=Xma[Count1[0]]-3*Xma[Count1[XLength4]]+3*Xma[Count1[XLength8]]-Xma[Count1[XLength12]]; //Ïðèðàùåíèå ïðèðàùåíèÿ ïðèðàùåíèÿ...
vama=Xma[Count1[0]]+vel+acc/2+aaa/6; //Àëõèìè÷åñêèé ìèêñ
xvama=XMA2.XMASeries(min_rates,prev_calculated,rates_total,XMA_Method2,XPhase2,XLength2,vama,bar,false); //Ñãëàæèâàíèå èíäèêàòîðà
XVama[Count2[0]]=xvama;
ExtLineBuffer[bar]=PointPow10*MathRound(xvama/PointPow10); //èíèöèàëèçàöèÿ áóôåðà è îêðóãëåíèå ïîñëåäíèõ ðàçðÿäîâ èíäèêàòîðà
ExtLineBuffer[bar]+=dPriceShift; //Äîáàâëåíèå âåðòèêàëüíîãî øèôòà
//---- çàãðóæàåì ïðèðàùåíèÿ èíäèêàòîðà â ìàññèâ äëÿ ïðîìåæóòî÷íûõ âû÷èñëåíèé
for(int iii=0; iii<int(std_period); iii++) dXVama[iii]=XVama[Count2[iii]]-XVama[Count2[iii+1]];
//---- íàõîäèì ïðîñòîå ñðåäíåå ïðèðàùåíèé èíäèêàòîðà
Sum=0.0;
for(int iii=0; iii<int(std_period); iii++) Sum+=dXVama[iii];
SMAdif=Sum/std_period;
//---- íàõîäèì ñóììó êâàäðàòîâ ðàçíîñòåé ïðèðàùåíèé è ñðåäíåãî
Sum=0.0;
for(int iii=0; iii<int(std_period); iii++) Sum+=MathPow(dXVama[iii]-SMAdif,2);
//---- îïðåäåëÿåì èòîãîâîå çíà÷åíèå ñðåäíåêâàäðàòè÷íîãî îòêëîíåíèÿ StDev îò ïðèðàùåíèÿ èíäèêàòîðà
StDev=MathSqrt(Sum/std_period);
//---- èíèöèàëèçàöèÿ ïåðåìåííûõ
dstd=NormalizeDouble(dXVama[0],_Digits+2);
Filter1=NormalizeDouble(dK1*StDev,_Digits+2);
Filter2=NormalizeDouble(dK2*StDev,_Digits+2);
BEARS1=EMPTY_VALUE;
BULLS1=EMPTY_VALUE;
BEARS2=EMPTY_VALUE;
BULLS2=EMPTY_VALUE;
xvama=ExtLineBuffer[bar];
//---- âû÷èñëåíèå èíäèêàòîðíûõ çíà÷åíèé
if(dstd<-Filter1 && dstd>=-Filter2) BEARS1=xvama; //åñòü íèñõîäÿùèé òðåíä
if(dstd<-Filter2) BEARS2=xvama; //åñòü íèñõîäÿùèé òðåíä
if(dstd>+Filter1 && dstd<=+Filter2) BULLS1=xvama; //åñòü âîñõîäÿùèé òðåíä
if(dstd>+Filter2) BULLS2=xvama; //åñòü âîñõîäÿùèé òðåíä
//---- èíèöèàëèçàöèÿ ÿ÷ååê èíäèêàòîðíûõ áóôåðîâ ïîëó÷åííûìè çíà÷åíèÿìè
BullsBuffer1[bar]=BULLS1;
BearsBuffer1[bar]=BEARS1;
BullsBuffer2[bar]=BULLS2;
BearsBuffer2[bar]=BEARS2;
if(bar<rates_total-1)
{
Recount_ArrayZeroPos1(Count1,XLength1); //Ñìåùåíèå íóëåâîé ïîçèöèè â öèêëè÷åñêîì áóôåðå 1
Recount_ArrayZeroPos2(Count2,std_period1); //Ñìåùåíèå íóëåâîé ïîçèöèè â öèêëè÷åñêîì áóôåðå 2
}
}
//---- îòîáðàæåíèå öåíîâîé ìåòêè
if(ShowPrice)
{
int bar0=rates_total-1;
datetime time0=time[bar0]+1*PeriodSeconds();
SetRightPrice(0,Price_name,0,time0,ExtLineBuffer[bar0],Price_color);
}
//---- êîððåêòèðîâêà çíà÷åíèÿ ïåðåìåííîé first
if(prev_calculated>rates_total || prev_calculated<=0) // ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷åòà èíäèêàòîðà
first++; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà âñåõ áàðîâ
//---- Îñíîâíîé öèêë ðàñêðàñêè ñèãíàëüíîé ëèíèè
for(bar=first; bar<rates_total && !IsStopped(); bar++)
{
double clr=ColorExtLineBuffer[bar-1];
trend=ExtLineBuffer[bar]-ExtLineBuffer[bar-1];
if(trend>0) clr=1;
if(trend<0) clr=0;
ColorExtLineBuffer[bar]=clr;
}
//----
ChartRedraw(0);
return(rates_total);
}
//+------------------------------------------------------------------+
//| RightPrice creation |
//+------------------------------------------------------------------+
void CreateRightPrice(long chart_id,// chart ID
string name, // object name
int nwin, // window index
datetime time, // price level time
double price, // price level
color Color // Text color
)
//----
{
//----
ObjectCreate(chart_id,name,OBJ_ARROW_RIGHT_PRICE,nwin,time,price);
ObjectSetInteger(chart_id,name,OBJPROP_COLOR,Color);
ObjectSetInteger(chart_id,name,OBJPROP_BACK,true);
ObjectSetInteger(chart_id,name,OBJPROP_WIDTH,2);
//----
}
//+------------------------------------------------------------------+
//| RightPrice reinstallation |
//+------------------------------------------------------------------+
void SetRightPrice(long chart_id,// chart ID
string name, // object name
int nwin, // window index
datetime time, // price level time
double price, // price level
color Color // Text color
)
//----
{
//----
if(ObjectFind(chart_id,name)==-1) CreateRightPrice(chart_id,name,nwin,time,price,Color);
else ObjectMove(chart_id,name,0,time,price);
//----
}
//+------------------------------------------------------------------+
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
---