Счетчик тренда
Добавлено: 04 май 2021, 15:57
Счетчик тренда смотрит, в какую сторону текущее значение отклонилось от базового значения (Interval баров назад) или от уровня последнего изменения счетчика (Ext).
Если отклонение превышает порог шума (Zero), то счетчик инкрементируется при продолжении тренда и меняет знак, если тренд сменил направление.
Если отклонение в пределах шума, то значение счетчика уменьшается (но без смены знака тренда), если это (маленькое) изменение противоречит текущему тренду.
При смене знака можно рассматривать открытие позиции сразу или ждать двойки или хотя бы нескольких единиц подряд.
Возврат к единице после больших значений - окончание движения или временный застой (можно, например, подтянуть стоп поближе).
Применять можно не только (или даже не столько) к ценам, но и к другим индикаторам (например, к разности бегущих средних в индикаторах вроде Awersome).
Если отклонение превышает порог шума (Zero), то счетчик инкрементируется при продолжении тренда и меняет знак, если тренд сменил направление.
Если отклонение в пределах шума, то значение счетчика уменьшается (но без смены знака тренда), если это (маленькое) изменение противоречит текущему тренду.
Код: Выделить всё
function Initialize()
{
IndicatorName = "TrendCnt";
PriceStudy = false;
AddInput("Input", Inputs.Price);
AddSeries("TrendCnt", DrawAs.Line, Color.Black, AxisType.ZeroBased);
AddLevel(0, Color.Black, "TrendCnt");
AddParameter("Interval", 2, "Интервал рассчета");
AddParameter("Zero", 0.0, "Точность нуля");
AddGlobalVariable("Ext", Types.Double, 0.0);
}
function Evaluate()
{
int ci=(int)CurrentIndex;
if(ci==0) Ext=Input[0];
int h=Math.Min(ci, (int)Interval);
double i0=Input[0];
double i1=Input[-h];
double d=i0-i1;
double z=(double)Zero;
if(Math.Abs(d)<=z) d=i0-Ext;
int p=(ci==0 ? 0 : (int)TrendCnt[-1]);
if(d> z) { p=(p<=0 ? 1 : p+1); Ext=i1; } else
if(d<-z) { p=(p>=0 ? -1 : p-1); Ext=i1; }
else // d~0
{
if(d<0.0 && p> 1) p-=1; else // отмотать счетчик только при "-0"
if(d>0.0 && p<-1) p+=1; // отмотать счетчик только при "+0"
// оставить прежним при точном "0"
}
TrendCnt=p;
}
При смене знака можно рассматривать открытие позиции сразу или ждать двойки или хотя бы нескольких единиц подряд.
Возврат к единице после больших значений - окончание движения или временный застой (можно, например, подтянуть стоп поближе).
Применять можно не только (или даже не столько) к ценам, но и к другим индикаторам (например, к разности бегущих средних в индикаторах вроде Awersome).