Индикатор расчета спреда двух инструментов
Индикатор считает спред двух инструментов по формуле (K1 * sec1 - K2 * sec2). Возвращает новый инструмент.
Показан пример работы метода sec.CloneAndReplaceBars(bars).
using System; using System.ComponentModel; using TSLab.DataSource; using TSLab.Script; using TSLab.Script.Handlers; namespace MyLib_net.Handlers { [HandlerCategory("MyLib")] [HandlerName("Spread")] [InputsCount(2)] [Input(0, TemplateTypes.SECURITY, Name = "SECURITYSource")] [Input(1, TemplateTypes.SECURITY, Name = "SECURITYSource")] [OutputsCount(1)] [OutputType(TemplateTypes.SECURITY)] [Description("Считает спред двух инструментов по формуле (K1 * sec1 - K2 * sec2)." + "Возвращает новый инструмент.")] public class Spread : IStreamHandler { [HandlerParameter(true, "1")] public double K1 { get; set; } [HandlerParameter(true, "1")] public double K2 { get; set; } public ISecurity Execute(ISecurity sec1, ISecurity sec2) { // Получаем нужные данные var bars1 = sec1.Bars; var closePrices = sec1.ClosePrices; var highPrices = sec1.HighPrices; var lowPrices = sec1.LowPrices; var openPrices = sec1.OpenPrices; var closePrices2 = sec2.ClosePrices; var highPrices2 = sec2.HighPrices; var lowPrices2 = sec2.LowPrices; var openPrices2 = sec2.OpenPrices; // Создаем пустой массив в котором будут новые бары var barsNew = new DataBar[closePrices.Count]; for (int i = 0; i < closePrices.Count; i++) { // Считаем для каждого бара новые Open, Low, High, Close var open = K1 * openPrices[i] - K2 * openPrices2[i]; var high = K1 * highPrices[i] - K2 * highPrices2[i]; var low = K1 * lowPrices[i] - K2 * lowPrices2[i]; var close = K1 * closePrices[i] - K2 * closePrices2[i]; low = Math.Min(Math.Min(open, low), Math.Min(high, close)); high = Math.Max(Math.Max(open, low), Math.Max(high, close)); // Создаем новый бар и помещаем в массив. barsNew[i] = new DataBar(bars1[i].Date, open, high, low, close); } // Клонируем инструмент в котором бары будут из нашего списка. return sec1.CloneAndReplaceBars(barsNew); } } }

