PChannel_System_HTF Indicator For MT5
The PChannel_System_HTF Indicator For MT5
Installing the PChannel_System_HTF Indicator For MT5
After you downloaded the indicator via the form above you need to unzip the zip-file. Then you need to copy the file PChannel_System_HTF.mq5 into the folder MQL5\Indicators of your MT5 installation. After that please restart MT5 and then you will be able to see the indicator in the list of indicators.
Parameters of the PChannel_System_HTF Indicator For MT5
The PChannel_System_HTF Indicator For MT5 has 3 parameters to configure.
input ENUM_TIMEFRAMES TimeFrame=PERIOD_H4;// Ïåðèîä ãðàôèêà
input uint period=20; // Ïåðèîä ïîèñêà ýêñòðåìóìîâ
input uint Shift=2; // ñäâèã êàíàëà ïî ãîðèçîíòàëè â áàðàõ
Buffers of the PChannel_System_HTF Indicator For MT5
The PChannel_System_HTF Indicator For MT5 provides 7 buffers.
SetIndexBuffer(0,ExtLineBuffer1,INDICATOR_DATA);
SetIndexBuffer(1,ExtLineBuffer2,INDICATOR_DATA);
SetIndexBuffer(2,ExtLineBuffer3,INDICATOR_DATA);
SetIndexBuffer(3,ExtLineBuffer4,INDICATOR_DATA);
SetIndexBuffer(4,ExtLineBuffer5,INDICATOR_DATA);
SetIndexBuffer(5,ExtLineBuffer6,INDICATOR_DATA);
SetIndexBuffer(6,ExtLineBuffer7,INDICATOR_DATA);
Main Parts Of The Code
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 lt min_rates_total) return(RESET);
if(BarsCalculated(Ind_Handle) lt Bars(Symbol(),TimeFrame)) return(prev_calculated);
//--- èíäåêñàöèÿ ýëåìåíòîâ â ìàññèâàõ êàê â òàéìñåðèÿõ
ArraySetAsSeries(time,true);
ArraySetAsSeries(high,true);
ArraySetAsSeries(low,true);
//--- îñíîâíîé öèêë ðàñ÷åòà èíäèêàòîðà
if(!CountIndicator(0,NULL,TimeFrame,Ind_Handle,0,ExtLineBuffer1,time,rates_total,prev_calculated,min_rates_total)) return(RESET);
if(!CountIndicator(1,NULL,TimeFrame,Ind_Handle,1,ExtLineBuffer2,time,rates_total,prev_calculated,min_rates_total)) return(RESET);
if(!CountIndicator(2,NULL,TimeFrame,Ind_Handle,2,ExtLineBuffer3,time,rates_total,prev_calculated,min_rates_total)) return(RESET);
if(!CountIndicator(3,NULL,TimeFrame,Ind_Handle,3,ExtLineBuffer4,time,rates_total,prev_calculated,min_rates_total)) return(RESET);
if(!CountIndicator(4,NULL,TimeFrame,Ind_Handle,8,ExtLineBuffer7,time,rates_total,prev_calculated,min_rates_total)) return(RESET);
if(!CountIndicatorBar(NULL,TimeFrame,Ind_Handle,5,ExtLineBuffer5,6,ExtLineBuffer6,time,high,low,rates_total,prev_calculated,min_rates_total)) return(RESET);
//---
return(rates_total);
}
//+------------------------------------------------------------------+
//| CountIndicator |
//+------------------------------------------------------------------+
bool CountIndicator(uint Numb, // Íîìåð ôóíêöèè CountLine ïî ñïèñêó â êîäå èíäèêàòîðà (ñòàðòîâûé íîìåð - 0)
string Symb, // Ñèìâîë ãðàôèêà
ENUM_TIMEFRAMES TFrame, // Ïåðèîä ãðàôèêà
int IndHandle, // Õåíäë îáðàáàòûâàåìîãî èíäèêàòîðà
uint BuffNumb, // Íîìåð áóôåðà îáðàáàòûâàåìîãî èíäèêàòîðà
double& IndBuf[], // Ïðèåìíûé áóôåð èíäèêàòîðà
const datetime& iTime[], // Òàéìñåðèÿ âðåìåíè
const int Rates_Total, // êîëè÷åñòâî èñòîðèè â áàðàõ íà òåêóùåì òèêå
const int Prev_Calculated,// êîëè÷åñòâî èñòîðèè â áàðàõ íà ïðåäûäóùåì òèêå
const int Min_Rates_Total)// ìèíèìàëüíîå êîëè÷åñòâî èñòîðèè â áàðàõ äëÿ ðàñ÷åòà
{
//---
static int LastCountBar[SIZE];
datetime IndTime[1];
int limit;
//--- ðàñ÷åòû íåîáõîäèìîãî êîëè÷åñòâà êîïèðóåìûõ äàííûõ
//--- è ñòàðòîâîãî íîìåðà limit äëÿ öèêëà ïåðåñ÷åòà áàðîâ
if(Prev_Calculated gt Rates_Total || Prev_Calculated lt =0)// ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷åòà èíäèêàòîðà
{
limit=Rates_Total-Min_Rates_Total-1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà âñåõ áàðîâ
LastCountBar[Numb]=limit;
}
else limit=LastCountBar[Numb]+Rates_Total-Prev_Calculated; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà íîâûõ áàðîâ
//--- îñíîâíîé öèêë ðàñ÷åòà èíäèêàòîðà
for(int bar=limit; bar gt =0 && !IsStopped(); bar--)
{
//--- îáíóëèì ñîäåðæèìîå èíäèêàòîðíûõ áóôåðîâ äî ðàñ÷åòà
IndBuf[bar]=0.0;
//--- êîïèðóåì âíîâü ïîÿâèâøèåñÿ äàííûå â ìàññèâ IndTime
if(CopyTime(Symbol_,TimeFrame,iTime[bar],1,IndTime) lt =0) return(RESET);
//---
if(iTime[bar] gt =IndTime[0] && iTime[bar+1] lt IndTime[0])
{
LastCountBar[Numb]=bar;
double Arr[1];
//--- êîïèðóåì âíîâü ïîÿâèâøèåñÿ äàííûå â ìàññèâ Arr
if(CopyBuffer(IndHandle,BuffNumb,iTime[bar],1,Arr) lt =0) return(RESET);
IndBuf[bar]=Arr[0];
}
else IndBuf[bar]=IndBuf[bar+1];
}
//---
return(true);
}
//+------------------------------------------------------------------+
//| CountIndicatorBar |
//+------------------------------------------------------------------+
bool CountIndicatorBar(string Symb, // Ñèìâîë ãðàôèêà
ENUM_TIMEFRAMES TFrame, // Ïåðèîä ãðàôèêà
int IndHandle, // Õåíäë îáðàáàòûâàåìîãî èíäèêàòîðà
uint HBuffNumb, // Íîìåð áóôåðà îáðàáàòûâàåìîãî èíäèêàòîðà äëÿ High
double& HIndBuf[], // Ïðèåìíûé áóôåð èíäèêàòîðà äëÿ High
uint LBuffNumb, // Íîìåð áóôåðà îáðàáàòûâàåìîãî èíäèêàòîðà äëÿ Low
double& LIndBuf[], // Ïðèåìíûé áóôåð èíäèêàòîðà äëÿ Low
const datetime& iTime[], // Òàéìñåðèÿ âðåìåíè
const double &High[], // Òàéìñåðèÿ iHigh
const double &Low[], // Òàéìñåðèÿ iLow
const int Rates_Total, // êîëè÷åñòâî èñòîðèè â áàðàõ íà òåêóùåì òèêå
const int Prev_Calculated,// êîëè÷åñòâî èñòîðèè â áàðàõ íà ïðåäûäóùåì òèêå
const int Min_Rates_Total)// ìèíèìàëüíîå êîëè÷åñòâî èñòîðèè â áàðàõ äëÿ ðàñ÷åòà
{
//---
static int LastCountBar;
datetime IndTime[1];
int limit;
//--- ðàñ÷åòû íåîáõîäèìîãî êîëè÷åñòâà êîïèðóåìûõ äàííûõ
//--- è ñòàðòîâîãî íîìåðà limit äëÿ öèêëà ïåðåñ÷åòà áàðîâ
if(Prev_Calculated gt Rates_Total || Prev_Calculated lt =0)// ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷åòà èíäèêàòîðà
{
limit=Rates_Total-Min_Rates_Total-1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà âñåõ áàðîâ
LastCountBar=limit;
}
else limit=LastCountBar+Rates_Total-Prev_Calculated; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà íîâûõ áàðîâ
//--- îñíîâíîé öèêë ðàñ÷åòà èíäèêàòîðà
for(int bar=limit; bar gt =0 && !IsStopped(); bar--)
{
//--- îáíóëèì ñîäåðæèìîå èíäèêàòîðíûõ áóôåðîâ äî ðàñ÷åòà
HIndBuf[bar]=NULL;
LIndBuf[bar]=NULL;
//--- êîïèðóåì âíîâü ïîÿâèâøèåñÿ äàííûå â ìàññèâ IndTime
if(CopyTime(Symbol_,TimeFrame,iTime[bar],1,IndTime) lt =0) return(RESET);
//---
if(iTime[bar] gt =IndTime[0] && iTime[bar+1] lt IndTime[0])
{
LastCountBar=bar;
double HArr[1],LArr[1];
//--- êîïèðóåì âíîâü ïîÿâèâøèåñÿ äàííûå â ìàññèâû
if(CopyBuffer(IndHandle,HBuffNumb,iTime[bar],1,HArr) lt =0) return(RESET);
if(CopyBuffer(IndHandle,LBuffNumb,iTime[bar],1,LArr) lt =0) return(RESET);
if(HArr[0]) HIndBuf[bar]=High[bar];
if(LArr[0]) LIndBuf[bar]=Low[bar];
}
else
{
if(HIndBuf[bar+1]) HIndBuf[bar]=High[bar];
if(LIndBuf[bar+1]) LIndBuf[bar]=Low[bar];
}
}
//---
return(true);
}
//+------------------------------------------------------------------+