Приведенный индикатор достаточно вставить в обрамление:
Code:
using System;
using System.Collections.Generic;
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.Script.Helpers;
public class MyIndic: BasePeriodIndicatorHandler, IBar2DoubleHandler
{
public IList<double> Execute(ISecurity source)
{
var Bars = source.Bars;
var res = new double[Bars.Count];
int FirstValidValue = Period;
double rangePeriod; // Значение периода
double highValue, lowValue; // Значения границ флета
for (int bar = FirstValidValue; bar < Bars.Count; bar++) // Пробегаемся по всем свечкам
{
rangePeriod = 100d; // Для каждой свечки изначально считаем, что она - трендовая
highValue = double.MinValue;
lowValue = double.MaxValue;
for (int i = bar - 1; i > bar - 1 - Period; i--) // Для каждой свечки будем пробегаться по истории на величину Period
{
if (highValue < Bars[i].High) highValue = Bars[i].High; // Поднимаем верхнюю границу
if (lowValue > Bars[i].Low) lowValue = Bars[i].Low; // Опускаем нижнюю границу
if (Bars[bar].High <= highValue && Bars[bar].Low >= lowValue) // Нашли флет, в который вписываем текущую свечку
{
rangePeriod = 100d / Period * (bar - i - 1);
break;
}
}
res[bar] = 100d - rangePeriod;// Значение Осцилятора флета
}
return res;
}
}