Как и в моем примере последнем, где нет заглядывания в будущее и использовано [Period].
Заглядыванием в будущее будет, если
Код: Выделить всё
if(!Double.IsNaN(h[Period])) last_high_fractal = h[Period];
if(!Double.IsNaN(l[Period])) last_low_fractal = l[Period];
было бы
Код: Выделить всё
if(!Double.IsNaN(h[Period])) last_high_fractal = h[0];
if(!Double.IsNaN(l[Period])) last_low_fractal = l[0];
в таком варианте конечно работать не будет, но если запустить на нём контртренд тогда будет обманывать.
Например так:
Код: Выделить всё
/**
Algorithm = ТРЕНД;
**/
function Initialize()
{
StrategyName = "My_Fractals";
AddInput("Input1", Inputs.Candle, 60, true, "SBER=МБ ЦК");
AddParameter("Period", 2, "Порядок фрактала");
LongLimit = 1;
ShortLimit = -1;
AddChartIndicator("MY.Fractal", new Dictionary <string, string>{{"Period", "Period"}});
AddGlobalVariable("last_high_fractal", Types.Double, 10000000000.0);
AddGlobalVariable("last_low_fractal", Types.Double, -1.0);
}
function OnUpdate()
{
var fractal = MY.Fractal(Input1, Period);
var h = fractal["H"];
var l = fractal["L"];
/// это максимум
if ( h[0] > 0 )
{
EnterShort();
}
/// это минимум
if ( l[0] > 0 )
{
EnterLong();
}
}
и получим следующее:
Должно быть, если заменить [0] на [Period], вот так