Автор: konstantinio
Область видимости объекта - Sun Jan 08 2017 04:44 PM
Всем салют! С прошедшими праздниками!
Ниже представлен скрипт который выдает ошибку типа:
Не могу понять почему не видит. Подскажите пожалуйста в какую сторону копать?
Ниже представлен скрипт который выдает ошибку типа:
Quote:
08.01.2017 16:32:17 138 System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
в TradeScript.SBRF_VTB_STATIC_SETKA.Execute(IContext ctx, ISecurity secSBRF, ISecurity secVTBR)
в TSLab.User.Script.Execute(IContext context, ISecurity Источник1, ISecurity ТоргуемИнструм)
в TradeScript.SBRF_VTB_STATIC_SETKA.Execute(IContext ctx, ISecurity secSBRF, ISecurity secVTBR)
в TSLab.User.Script.Execute(IContext context, ISecurity Источник1, ISecurity ТоргуемИнструм)
Quote:
Code:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using TSLab.DataSource; using TSLab.Script; using TSLab.Script.Handlers; using TSLab.Script.Helpers; using TSLab.Script.Optimization; namespace TradeScript { public class SBRF_VTB_STATIC_SETKA : IExternalScript2 { #region Параметры оптимизации public OptimProperty SlippageSBRF = new OptimProperty(0, 0, 0, 0); public OptimProperty SlippageVTB = new OptimProperty(0, 0, 0, 0); public OptimProperty SMASub = new OptimProperty(464, 500, 1500, 10); public OptimProperty SizeLevel = new OptimProperty(100, 50, 1000, 10); public OptimProperty SumLevel = new OptimProperty(5, 1, 5, 10); #endregion public void Execute(IContext ctx, ISecurity secSBRF, ISecurity secVTBR) { #region Расчет Индикаторов var sub = Series.Sub(secSBRF.ClosePrices, secVTBR.ClosePrices); //Вычитание значений закрытия инструментов var smaSub = ctx.GetData("SMASub", new string[] { SMASub.Value.ToString() }, () => Series.SMA(sub, SMASub));//Скользящая построенная по разнице var extendable = Series.Sub(smaSub, sub); //Разница от скользящей и разницей цен #endregion for (int i = 0; i < ctx.BarsCount; i++) { ////Прямые позиции ////Прямые позиции var leVtbr = secVTBR.Positions.GetLastActiveForSignal("VTBR_LE", i);// Получаем позицию или null var seSbrf = secSBRF.Positions.GetLastActiveForSignal("SBRF_SE", i);// Получаем позицию или null if (leVtbr == null && seSbrf == null) { if (extendable[i] < 100) { secSBRF.Positions.SellAtMarket(i + 1, 1, "SBRF_SE", "Продажа SBRF");// Входим в шорт secVTBR.Positions.BuyAtMarket(i + 1, 2, "VTBR_LE", "Продажа VTB"); // Входим в лонг } } else { for (int j = 0; j < SumLevel; j++) { if (extendable[i] < SizeLevel && seSbrf.Shares <= j + 1) { leVtbr.ChangeAtMarket(i + 1, leVtbr.Shares + 2, "VTBR_LE2");// <<<<<<<<=======Ссылка не указывает на экземпляр объекта seSbrf.ChangeAtMarket(i + 1, seSbrf.Shares - 1, "SBRF_SE2");// <<<<<<<<=======Ссылка не указывает на экземпляр объекта } if (extendable[i] > SizeLevel && seSbrf.Shares >= j + 1) { leVtbr.ChangeAtMarket(i + 1, leVtbr.Shares - 2, "VTBR_LX2");// <<<<<<<<=======Ссылка не указывает на экземпляр объекта seSbrf.ChangeAtMarket(i + 1, seSbrf.Shares + 1, "SBRF_SX2");// <<<<<<<<=======Ссылка не указывает на экземпляр объекта } } if (extendable[i] >= 0) { seSbrf.CloseAtMarket(i + 1, "SBRF_SX"); } } } #region Визуализация ... #endregion } } }
Не могу понять почему не видит. Подскажите пожалуйста в какую сторону копать?