MQL5Book/Indicators/p5/UseWPR2.mq5

65 lines
2.5 KiB
MQL5
Raw Permalink Normal View History

2025-05-30 16:09:41 +02:00
//+------------------------------------------------------------------+
//| UseWPR2.mq5 |
//| Copyright 2021, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_buffers 0
#property indicator_plots 0
#include "..\..\Include\PRTF.mqh"
// parameter to pass into subordinate indicator (0 is deliberately incorrect for IndWPR)
input int WPRPeriod = 0;
// global variable for subordinate indicator
int handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
// use most simple way of creation with the name only, and the parameter
handle = PRTF(iCustom(_Symbol, _Period, "IndWPR", WPRPeriod));
// the next check should not be done here normally, because we need to wait
// when the indicator is get executed and calculated (only for demo purpose)
PRTF(BarsCalculated(handle));
return handle == INVALID_HANDLE ? INIT_FAILED : INIT_SUCCEEDED;
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const int begin,
const double &data[])
{
// wait until the subindicator is calculated for all bars
if(PRTF(BarsCalculated(handle)) != PRTF(rates_total))
{
return prev_calculated;
}
// ... here will go normal processing relying on the handle
return rates_total;
}
//+------------------------------------------------------------------+
/*
example output 1 (for WPRPeriod = 0):
iCustom(_Symbol,_Period,IndWPR,WPRPeriod)=10 / ok
BarsCalculated(handle)=-1 / INDICATOR_DATA_NOT_FOUND(4806)
Alert: Incorrect Period value (0). Should be 1 or larger
BarsCalculated(handle)=0 / ok
rates_total=20000 / ok
example output 2:
iCustom(_Symbol,_Period,IndWPR,WPRPeriod)=10 / ok
BarsCalculated(handle)=-1 / INDICATOR_DATA_NOT_FOUND(4806)
BarsCalculated(handle)=20000 / ok
rates_total=20000 / ok
*/