MQL5Book/Indicators/p5/IndBarIndex.mq5

75 lines
2.8 KiB
MQL5
Raw Permalink Normal View History

2025-05-30 16:09:41 +02:00
//+------------------------------------------------------------------+
//| IndBarIndex.mq5 |
//| Copyright 2021, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2021, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property description "WARNINIG: this indicator is intentionally made with a malfunction!\n"
#property description "When run with SimulateCalculation=true it'll stop redraw"
" of existing and new indicators on the same symbol! "
"Do not forget to remove it from a chart, after examination of the problem!\n"
#property description "Normally, the indicator displays bar indices."
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots 1
#property indicator_type1 DRAW_LINE
#property indicator_color1 DodgerBlue
// setting this input to true will freeze all indicators drawing on
// all charts of the same symbol, until you remove the indicator
input bool SimulateCalculation = false;
double Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
void OnInit()
{
SetIndexBuffer(0, Buffer, INDICATOR_DATA);
IndicatorSetInteger(INDICATOR_DIGITS, 0);
if(SimulateCalculation)
{
EventSetTimer(1);
}
}
//+------------------------------------------------------------------+
//| Timer handler |
//+------------------------------------------------------------------+
void OnTimer()
{
Comment("Calculation started at ", TimeLocal());
// the endless loop emulates lengthy calculations
while(!IsStopped())
{
}
Comment("");
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const int begin,
const double &price[])
{
if(prev_calculated <= 0)
{
ArrayInitialize(Buffer, EMPTY_VALUE);
}
const int N = MathMin(rates_total, TerminalInfoInteger(TERMINAL_MAXBARS));
for(int i = MathMax(prev_calculated - 1, 0); i < N && !IsStopped(); i++)
{
Buffer[i] = i;
}
return rates_total;
}
//+------------------------------------------------------------------+