0
Views
0
Downloads
0
Favorites
SRm_Cloud
//+------------------------------------------------------------------+
//| SRm_Cloud.mq5 |
//| Copyright © 2013, HgCl2 |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2013, HgCl2"
#property link ""
//---- íîìåð âåðñèè èíäèêàòîðà
#property version "1.00"
//---- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå
#property indicator_chart_window
//---- êîëè÷åñòâî èíäèêàòîðíûõ áóôåðîâ 2
#property indicator_buffers 2
//---- èñïîëüçîâàíî îäíî ãðàôè÷åñêîå ïîñòðîåíèå
#property indicator_plots 1
//+-----------------------------------+
//| Ïàðàìåòðû îòðèñîâêè èíäèêàòîðà |
//+-----------------------------------+
//---- îòðèñîâêà èíäèêàòîðà â âèäå öâåòíîãî îáëàêà
#property indicator_type1 DRAW_FILLING
//---- â êà÷åñòâå öâåòà èíäèêàòîðà èñïîëüçîâàí PaleTurquoise
#property indicator_color1 clrPaleTurquoise
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label1 "SRm_Cloud"
//+-----------------------------------+
//| Îáúÿâëåíèå ïåðå÷èñëåíèÿ |
//+-----------------------------------+
enum Applied_price_ //Òèï êîíñòàíòû
{
PRICE_CLOSE_ = 1, //Close
PRICE_OPEN_, //Open
};
//+-----------------------------------+
//| ÂÕÎÄÍÛÅ ÏÀÐÀÌÅÒÐÛ ÈÍÄÈÊÀÒÎÐÀ |
//+-----------------------------------+
input uint period=14;
input double k_std = 1.0; // Êîýôôèöèåíò ñòàíäàðòíîãî îòêëîíåíèÿ Std
input double k = 1.0; // Êîýôôèöèåíò ñðåäíåãî ìèíèìàëüíîãî êîëåáàíèÿ AV
input Applied_price_ Price=PRICE_OPEN_;
//+-----------------------------------+
double m[10000];
double o[10000];
//---- Îáúÿâëåíèå öåëûõ ïåðåìåííûõ íà÷àëà îòñ÷¸òà äàííûõ
int min_rates_total;
//---- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå áóäóò â
// äàëüíåéøåì èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double ExtABuffer[];
double ExtBBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
void OnInit()
{
//---- Èíèöèàëèçàöèÿ ïåðåìåííûõ íà÷àëà îòñ÷¸òà äàííûõ
min_rates_total=int(period+1);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(0,ExtABuffer,INDICATOR_DATA);
//---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(ExtABuffer,true);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(1,ExtBBuffer,INDICATOR_DATA);
//---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(ExtBBuffer,true);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷¸òà îòðèñîâêè èíäèêàòîðà
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//--- ñîçäàíèå èìåíè äëÿ îòîáðàæåíèÿ â îòäåëüíîì ïîäîêíå è âî âñïëûâàþùåé ïîäñêàçêå
IndicatorSetString(INDICATOR_SHORTNAME,"SRm_Cloud("+DoubleToString(k_std,4)+")");
//--- îïðåäåëåíèå òî÷íîñòè îòîáðàæåíèÿ çíà÷åíèé èíäèêàòîðà
IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- çàâåðøåíèå èíèöèàëèçàöèè
}
//+------------------------------------------------------------------+
//| 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(0);
//---- Îáúÿâëåíèå ïåðåìåííûõ ñ ïëàâàþùåé òî÷êîé
static double LastHigh,LastLow;
double w,gsv1=0.0,gsv2=0.0;
//---- Îáúÿâëåíèå öåëûõ ïåðåìåííûõ
int limit,x=0;
//---- ðàñ÷¸ò ñòàðòîâîãî íîìåðà limit äëÿ öèêëà ïåðåñ÷¸òà áàðîâ
if(prev_calculated>rates_total || prev_calculated<=0)// ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷¸òà èíäèêàòîðà
{
limit=rates_total-min_rates_total-1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷¸òà âñåõ áàðîâ
for(int bar=rates_total-1; bar>=0 && !IsStopped(); bar--)
{
ExtABuffer[bar]=0.0;
ExtBBuffer[bar]=0.0;
}
LastHigh=0;
LastLow=999999999;
}
else limit=rates_total-prev_calculated; // ñòàðòîâûé íîìåð äëÿ ðàñ÷¸òà òîëüêî íîâûõ áàðîâ
//---- èíäåêñàöèÿ ýëåìåíòîâ â ìàññèâàõ êàê â òàéìñåðèÿõ
ArraySetAsSeries(High,true);
ArraySetAsSeries(Low,true);
if(Price==PRICE_OPEN_) ArraySetAsSeries(Open,true);
else ArraySetAsSeries(Close,true);
//---- îñíîâíîé öèêë ðàñ÷¸òà èíäèêàòîðà
for(int bar=limit; bar>=0 && !IsStopped(); bar--)
{
LastHigh=MathMax(LastHigh,High[bar+1]);
LastLow=MathMin(LastLow,Low[bar+1]);
//----
MqlDateTime tm0,tm1;
TimeToStruct(Time[bar],tm0);
TimeToStruct(Time[bar+1],tm1);
//----
if(tm0.day!=tm1.day && (( tm1.day_of_week>0 && tm1.day_of_week<6) || Period()>PERIOD_D1))
{
x++;
if(Price==PRICE_OPEN_) o[x]=Open[bar];
else o[x]=Close[bar];
m[x]=LastHigh-o[x-1];
if(LastHigh-o[x-1]>o[x-1]-LastLow) m[x]=o[x-1]-LastLow;
LastLow=100000;
LastHigh=0;
//----
if(x>int(period))
{
w=0;
for(int y=0; y<int(period); y++) w+=m[x-y];
double v=w/period;
//----
w=0;
for(int y=0; y<int(period); y++) w+=MathPow(m[x-y]-v,2);
double e=w/period;
//----
double std=k*v+k_std*MathPow(e,0.5);
gsv1=o[x]+std;
gsv2=o[x]-std;
}
}
if(x>int(period))
{
ExtABuffer[bar]=gsv1;
ExtBBuffer[bar]=gsv2;
}
}
//----
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
---