0
Views
0
Downloads
0
Favorites
simplebars_v2
//+------------------------------------------------------------------+
//| SimpleBars_V2.mq5 |
//| Copyright © 2012, Ivan Kornilov |
//| excelf@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, Ivan Kornilov"
#property link "excelf@gmail.com"
#property description "SimpleBars"
//--- íîìåð âåðñèè èíäèêàòîðà
#property version "1.00"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè èíäèêàòîðà |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå
#property indicator_chart_window
//--- äëÿ ðàñ÷åòà è îòðèñîâêè èíäèêàòîðà èñïîëüçîâàíî ïÿòü áóôåðîâ
#property indicator_buffers 5
//--- èñïîëüçîâàíî âñåãî îäíî ãðàôè÷åñêîå ïîñòðîåíèå
#property indicator_plots 1
//--- â êà÷åñòâå èíäèêàòîðà èñïîëüçîâàíû öâåòíûå ñâå÷è
#property indicator_type1 DRAW_COLOR_CANDLES
#property indicator_color1 clrSeaGreen,clrYellow,clrBlue,clrYellow,clrRed
//--- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label1 "Upper;lower"
//+----------------------------------------------+
#define SIGNAL_NONE 0 //Ïóñòîé ñèãíàë
#define SIGNAL_BUY 1 //Ñèãíàë íà ïîêóïêó
#define SIGNAL_SELL -1 //Ñèãíàë íà ïðîäàæó
#define SIGNAL_TRADE_ALLOW 3 //Ñèãíàë ðàçðåøàþùèé òîðãîâëþ
//+----------------------------------------------+
//| Âõîäíûå ïàðàìåòðû èíäèêàòîðà |
//+----------------------------------------------+
input int period=6;
input bool useclose=true;
//+----------------------------------------------+
//--- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå áóäóò
//--- â äàëüíåéøåì èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double ExtopenBuffer[];
double ExthighBuffer[];
double ExtlowBuffer[];
double ExtcloseBuffer[];
double ExtColorBuffer[];
//---
int min_rates_total;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
void OnInit()
{
//--- èíèöèàëèçàöèÿ ãëîáàëüíûõ ïåðåìåííûõ
min_rates_total=int(period)+1;
//--- ïðåâðàùåíèå äèíàìè÷åñêèõ ìàññèâîâ â èíäèêàòîðíûå áóôåðû
SetIndexBuffer(0,ExtopenBuffer,INDICATOR_DATA);
SetIndexBuffer(1,ExthighBuffer,INDICATOR_DATA);
SetIndexBuffer(2,ExtlowBuffer,INDICATOR_DATA);
SetIndexBuffer(3,ExtcloseBuffer,INDICATOR_DATA);
//--- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â öâåòîâîé, èíäåêñíûé áóôåð
SetIndexBuffer(4,ExtColorBuffer,INDICATOR_COLOR_INDEX);
//--- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 1
PlotIndexSetInteger(4,PLOT_DRAW_BEGIN,min_rates_total);
//--- óñòàíîâêà ôîðìàòà òî÷íîñòè îòîáðàæåíèÿ èíäèêàòîðà
IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//--- èìÿ äëÿ îêîí äàííûõ è ìåòêà äëÿ ïîäîêîí
string short_name="SimpleBars";
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
}
//+------------------------------------------------------------------+
//| 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);
//--- îáúÿâëåíèÿ ëîêàëüíûõ ïåðåìåííûõ
int first,bar,trend;
static int prev_trend;
double buyPrice,sellPrice;
//--- ðàñ÷åò ñòàðòîâîãî íîìåðà first äëÿ öèêëà ïåðåñ÷åòà áàðîâ
if(prev_calculated>rates_total || prev_calculated<=0) // ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷åòà èíäèêàòîðà
{
first=min_rates_total; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà âñåõ áàðîâ
prev_trend=SIGNAL_NONE;
}
else first=prev_calculated-1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà íîâûõ áàðîâ
//--- îñíîâíîé öèêë ðàñ÷åòà èíäèêàòîðà
for(bar=first; bar<rates_total && !IsStopped(); bar++)
{
if(useclose)
{
buyPrice=close[bar];
sellPrice=close[bar];
}
else
{
buyPrice=low[bar];
sellPrice=high[bar];
}
if(prev_trend==SIGNAL_NONE)
{
if(close[bar]>open[bar]) trend=SIGNAL_BUY;
else trend=SIGNAL_SELL;
}
else
{
if(prev_trend==SIGNAL_BUY)
{
if(buyPrice>low[bar-1]) trend=SIGNAL_BUY;
else
{
for(int j=2; j<=int(period); j++)
{
if(buyPrice>low[bar-j])
{
trend=SIGNAL_BUY;
break;
}
else trend=SIGNAL_SELL;
}
}
}
//---
if(prev_trend==SIGNAL_SELL)
{
if(sellPrice<high[bar-1]) trend=SIGNAL_SELL;
else
{
for(int j=2; j<=int(period); j++)
{
if(sellPrice<high[bar-j])
{
trend=SIGNAL_SELL;
break;
}
else trend=SIGNAL_BUY;
}
}
}
}
//--- ðàñêðàøèâàíèå ñâå÷åé
int clr=2;
if(trend==SIGNAL_SELL)
{
if(open[bar]>close[bar]) clr=4;
else if(open[bar]<close[bar]) clr=3;
}
if(trend==SIGNAL_BUY)
{
if(open[bar]<close[bar]) clr=0;
else if(open[bar]>close[bar]) clr=1;
}
ExtColorBuffer[bar]=clr;
//---
ExtopenBuffer[bar]=open[bar];
ExtcloseBuffer[bar]=close[bar];
ExthighBuffer[bar]=high[bar];
ExtlowBuffer[bar]=low[bar];
//---
if(bar<rates_total-1) prev_trend=trend;
}
//---
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
---