using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using TSLab.Script; using TSLab.Script.Handlers; using TSLab.Script.Handlers.Options; namespace GanovCubes { #region CubeDescription [Obsolete] [HandlerCategory("Ganov Cubes. DateTime")] [HandlerName("BarDate", Language = "ru-ru")] [Description("Кубик выдает дату конкретного бара формате ТСЛаб. В случае если номера бара меньше нуля, больше номера" + " последнего или текущего бара (в случае если номер подается с непотокового кубика), то кубик выдает ноль. В случае если дата бара" + " будет раньше чем 01.01.2021 00:00:00, то выдаст ноль")] [HelperLink("http://forum.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=870101&page=1", "Страница на форуме TSLab", "ru-ru")] [InputsCount(2)] [Input(0, TemplateTypes.SECURITY, Name = "Sec")] [Input(1, TemplateTypes.DOUBLE, Name = "Double")] [OutputsCount(1)] [OutputType(TemplateTypes.DOUBLE)] #endregion public class BarDate : IStreamHandler, IValuesHandlerWithNumber, ISecurityInput0, IDoubleReturns, IContextUses { private int _lastBarNum; private double _retValue = 0d; public IContext Context { set; get; } public IList Execute(ISecurity sec, IList barNumList) { var _lastBarNum = Context.SetLastBarNum(); var barNum = barNumList.FirstOrDefault(); if (barNum < 0 || barNum > _lastBarNum) return Context.GetValueTypeCollection(_retValue, Context.BarsCount); var barData = sec.Bars[(int)barNum].Date.ConvertDataToTSLabFormat(); return Context.GetValueTypeCollection(barData, Context.BarsCount); } public double Execute(ISecurity sec, double barNum, int curBar) { if (curBar == 0) _lastBarNum = Context.SetLastBarNum(); if (barNum < 0 || barNum > _lastBarNum || barNum > curBar) return _retValue; else return sec.Bars[(int)barNum].Date.ConvertDataToTSLabFormat(); } } }