.
Jump to content

AlexGanov

Members
  • Posts

    3
  • Joined

  • Last visited

  • Days Won

    1

AlexGanov last won the day on February 9

AlexGanov had the most liked content!

AlexGanov's Achievements

Newbie

Newbie (1/14)

1

Reputation

  1. Дополнительная информация: побарный (не потоковый) кубик: https://docs.tslab.pro/pages/viewpage.action?pageId=38961293 папка Handlers и создание индикаторов на API: https://docs.tslab.pro/pages/viewpage.action?pageId=20185716
  2. Кубик "IntervalsBetweenDates" Периодически встает задача подсчитать конкретное кол-во дней между двумя датами. В ТСЛаб нет способа сделать это быстро, особенно учитывая формат времени ТСЛАБ в видео ГГММДД, то есть ГОД, Месяц, ДЕНЬ. Данный кубик автоматически рассчитывает необходимое кол-во интервалов между двумя датами, для чего необходимо на вход №1 подать дату начала интервала, на вход №2 - дату окончания интервала. В кубике имеется выбор необходимо интервала для расчета: дней, часов, минут. В зависимости от настройки будет выдаваться необходимо значение. Кубик не потоковый, что говорит о том, что кубик рассчитывается в торговом цикле и оперирует конкретными значениями, а не списками значений, однако это не мешает вывести данные значения на график и обратиться к предыдущим данным через индекс, например, [i-1] или [-1], ТСЛаб достаточно умен, чтобы обыграть этот момент автоматически созданием и заполнением списка необходимых данные, которые будут рассчитаны и добавлены в данный список на каждом баре. Входные параметры проверяются по следующим критериям: Дата начала и дата окончания не должны быть равны нулю Дата начала и дата окончания не могут быть менее 10101, то есть 01.01.2001 года Дата начала не может быть больше даты окончания Дата начала и дата окончания не могут иметь дробные части, несмотря не то, что имеют тип Double Длина числа не может быть менее 5-ти символов Во всех вышеуказанных случаях кубик будет выдавать ноль. Код кубика: using System; using System.ComponentModel; using GanovCubes; using TSLab.Script.Handlers; namespace CubesLib { public enum IntervalType { Дней, Часов, Минут }; #region CubeDescription [Obsolete] [HandlerCategory("Ganov Cubes. Different")] [HandlerName("Интервалов между датами", Language = "ru-ru")] [Description("Считает количество интервалов: Дней, Часов, Минут между датами")] [InputsCount(2)] [Input(0, TemplateTypes.DOUBLE, Name = "StartDate (меньшая дата)")] [Input(1, TemplateTypes.DOUBLE, Name = "EndDate (бОльшая дата)")] [OutputsCount(1)] [OutputType(TemplateTypes.DOUBLE)] #endregion public class IntervalsBetweenDates : IContextUses, IValuesHandler { /// <summary> /// Минимальная дата для тестировании на истории /// </summary> private const double minHistoryData = 10101; // 01.01.2001 public IContext Context { set; get; } [HandlerParameter(true, "Дней", NotOptimized = true, Name = "Интервал", IsVisibleInBlock = true)] [Description("Интервал: Дней, Часов, Минут")] public IntervalType IntType { get; set; } public double Execute() => CalculateInterval(0, 0); public double Execute(double startDate) => CalculateInterval(startDate, 0); public double Execute(double startDate, double endDate) => CalculateInterval(startDate, endDate); private double CalculateInterval(double startDate, double endDate) { if (startDate == 0 || endDate == 0 || startDate.ToString().Length < 5 || endDate.ToString().Length < 5 || startDate < minHistoryData || endDate < minHistoryData || startDate % 1 != 0 || endDate % 1 != 0) return 0; var dtStartDate = ((int)startDate).ConvertTSLabDateToDateTime(); var dtEndDate = ((int)endDate).ConvertTSLabDateToDateTime(); if (dtStartDate > dtEndDate) return 0; var interval = dtEndDate - dtStartDate; return IntType switch { IntervalType.Дней => interval.TotalDays, IntervalType.Часов => interval.TotalHours, IntervalType.Минут => interval.TotalMinutes, _ => 0 }; } } } Для корректной работы кубика необходимо в папку Handlers также поместить общую библиотеку для кубиков. Библиотека содержит методы логирования, расчета и т.д., которые применяются в разных кубиках, поэтому весь этот функционал вынесен в отдельную dll, чтобы не повторяться и всегда иметь "свежие" версии кода. gaaCommon_ServiceLib.dll gaaDifferent_IntervalsBetweenDates.dll
  3. В данном разделе размещены кубики, выполненные пользователями ТСЛаб. Кубики размещены as is, то есть автор провел определенное тестирование, но не гарантирует работоспособность во всех случаях применения Правила: -- каждый кубик выкладывается в новую ветку с описанием функционала и целей применения -- кубик распространяется свободно, то есть бесплатно, любое желающий может воспользоваться, в том числе изменить код кубика для личных целей -- в случае выявления ошибок и/или наличия предложений, они (ошибки, предложения и т.д.) указываются в ветке соответствующего кубика, автор кубика по наличию времени и желания дорабатывает замечания и выкладывает новую версию кубика
×
×
  • Create New...