.
Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation since 09/05/2019 in Posts

  1. Кубик "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
    1 point
  2. attached script check indicator calc_zltema.tscript VervoortHeikenAshiCandlestickOscillator.tscript
    1 point
  3. В ближайшее время эту биржу подключать не будем. У них есть проблемы, которые не решены. И не рекомендуем Вам торговать на ней, используя апи. Только ручной режим с их сайта.
    1 point
  4. Цена, Номер сделки, Направление сделки Номер сделки - не обязательное
    1 point
  5. По идее S,B. Как то так: <DATE>,<TIME>,<LAST>,<VOL>,<ID>,<OPER> 20190617,103413,60.000000000,2,2305599188,S 20190617,104108,59.950000000,2,2305610001,S 20190617,104353,60.050000000,1,2305614385,B 20190617,104353,60.050000000,2,2305614386,S
    1 point
  6. Всем привет! Нашел на Смартлабе пост про то как использовать функционал платформы TSLab для управления размером позиции на реальном счете. Выкладываю без изменений: Автор: Дмитрий Власов- эксперт по платформе TSLab. В течении долгого времени я создавал торговые стратегии в программе Wealth-Lab, а затем переделывал код и проторговывал эту стратегию в ТСЛаб. Мне было так удобно поступать в том числе и потому, что в Wealth-lab есть уже готовые методы управления размером позиции (так называемые PosSizer). Однако как оказалось в ТСЛаб можно создавать самостоятельно модули управления размером позиции с помощью написания кода. Потратив несколько часов, мне удалось создать несколько «кубиков», которые по определённым методам рассчитывают количество контрактов которые нужно купить (или продать) в момент сделки.Сегодня я покажу как они выглядят и как их можно получить и использовать.Для начала создадим простейшую стратегию — для демонстрации работы кубиков: Правила такие: 1) Строим по ценам High верхний уровень, а по ценам Low нижний уровень. 2) Сдвигаем эти уровни на одну свечу вправо.3) Если цена закрытия (Close) закрывается выше сдвинутого верхнего уровеня — входим в длинную позицию на следующем баре с помощью лимитной заявки (по цене Close). 4) Выходим из длинной позиции в тот момент, когда цена закрытия (Close) закрывается ниже сдвинутого уровня — на следующем баре с помощью лимитной заявки (по цене Close). Торгуемый инструмент: Si (склейка) таймфрейм 5 минут.Вот как выглядят правила этой стратегии в графическом виде: Получить код этой стратегии можно в телеграм-канале Лаборатория Трейдинга ( http://t.me/TradingLaboratory )Выполняем стратегию и смотрим результат:а) График доходности: б) Сделки: в) Результаты: Как видим, торговля идёт всё время одним контрактом.А что, если мы хотели бы проводить расчёт — каким количеством контрактов нужно входить в сделку в зависимости от располагаемого капитала в момент входа в сделку. Вот технология расчёта:1. Узнаём количество денег в момент входа в сделку. Такая возможность в ТСЛаб уже есть. Есть специальный кубик, который называется "Оценка портфеля". 2. Мы должны указать, сколько процентов готовы терять за одну сделку. В результате умножив количество денег в момент входа в сделку на процент возможной потери мы определяем сумму, которой готовы рисковать в одной сделке.3. Чтобы определить кол-во контрактов на покупку (продажу) мы должны понять, сколько рублей теряем при срабатывании стоп-лоса при торговле одним контрактом.Для этого нам нужны следующие сведения:а) цена входа в позициюб) уровень стоп-Лосс в момент входа в позициюв) количество акций в одном лотег) стоимость пунктаАлгоритм расчёта будет такой: узнаём сколько пунктов теряем при торговле одной акцией, умножаем на количество акций в лоте, переводим пункты потери в рубли (умножая на стоимость пункта)4. На последнем этапе мы делим сумму, которую готовы терять в одной сделке на сумму потерь при торговле одним лотом и узнаём количество лотов, которое можно использовать в сделке (при этом дробная часть отбрасывается).Как раз всё то, что перечислено в пунктах со 2-го по 4-й делает кубик, который я создал.Вот как он выглядит: В результате схема стратегии будет выглядеть так: Эквити приобретёт такой вид: Сделки уже будут совершаться не одним контрактом, а в полном соответствии с тем алгоритмом, который я описал выше: Ну и результаты, соответственно изменятся. Обратите внимание сколько была доходность в год и максимальная просадка и фактор восстановления («До» и «После») применения метода управления размером позиции (lots_maxPercentRisk). Ну и естественно, вопрос — а как сделать так, чтобы раздел «Управление размером позиции» появился в Вашей программе?Всё очень просто:1) Забираете файлы:LaboratoryTrading_Indicators.dllLaboratoryTrading_Indicators.pdbв телеграм-канале Лаборатория Трейдинга ( http://t.me/TradingLaboratory )2) Выкладываете эти файлы по этому адресу:c:\Users\<NAME>\AppData\Local\TSLab\TSLab 2.0\Handlers\ 3) Перезапускаете ТСЛаб4) Пользуйтесь на здоровье! Надеемся, что материал, который подготовил Дмитрий, окажется для Вас полезным в практической деятельности. PS: Приглашаем всех желающих на бесплатную онлайн — встречу в среду, 7-го марта. Тема Кубики VS API (часть 2) - доделываем алгоритм системы Аллигатор. Ссылка на вебинар будет выложена в телеграм-канале t.me/TradingLaboratory Запасная (рабочая) ссылка на телеграм канал: t-do.ru/TradingLaboratory Подписывайтесь на канал! Там уже достаточно большая тусовка алготрейдеров. Для тех, кому интересна тема, вот ссылка на обучающие материалы по платформе TSLab: https://www.tslab.pro/learning/home
    1 point
×
×
  • Create New...