Постов с тегом "ru.sazan.trader": 8

ru.sazan.trader


Разрабатываем простейший бэктестер (часть завершающая)

Собираем из нескольких запчастей наш элементарно-концептуальный консольный бэктестер. Наш план вполне удался и у нас появилась возможность тестировать придуманные и реализованные нами обработчики на исторических данных без дополнительных программ и переписывания кода алгоритмов.

Конструктив, как и все что мы разрабатываем, можно развивать и обвешивать опциями ибо архитектурно все у нас как обычно слабосвязано и все зависимости инвертированы. Желающие могут постепенно добавить возможность тестирования на тиках и стаканах, вычисление дродаунов, эквитей и оптимизацию параметров.


Программируем простейший бэктестер (часть 4)

Реализацию обработчика, который предназначен для закрытия позиции с фиксацией убытка, начинаем с рефакторинга. Выделяем из обработчика, реализованного в предыдущем видео, код, который можно повторно использовать, в отдельный абстрактный класс и класс нового обработчика наследуем от этого абстрактного, избавляя себя таким образом от необходимости повторно описывать уже имеющееся в проекте поведение.


Программируем простейший бэктестер (часть 3)

Целеустремленно и неотвратимо продолжаем кодировать компоненты для простейшего бэктестера. Тема сегодняшнего видео — обработчик, который фиксирует прибыль, генерируя сигнал на закрытие позиции, когда цена достигает границы, определенной нами в настройках. Как мы и договаривались обработчик щелкает каждый раз, когда в контекст торговых данных падает новая свечка (Bar).


Программируем простейший бэктестер (часть 2)

Продолжаем двигаться по пути строительства коммунизма простейшего собственного бэктестера.

Поскольку оказалось что инструмент для загрузки свечей (Bar) из текстовых файлов уже существует в проекте ru.sazan.trader, то в этом видео мы смотрим как реализовать пробойный обработчик на открытие позиции, который как мы и договаривались реагирует на добавление новых свечей в контекст торговых данных.


Программируем простейший бэктестер (часть 1)

Один из самых частых вопросов, который начинающие программисты-трейдеры задают мне в почту или скайп это — «Как написать бэктестер?». Глобализовать задачу не хочется, дабы она не умерла из-за потери концентрации и мотивированности, поэтому пойдем поступательно, от простейшего, к простому и за несколько итераций реализуем набор алгоритмов, которые позволят тестировать торговые стратегии, базирующиеся на свечках (Bar). Первый бэктестер должен будет уметь исполнять рыночные заявки, по цене закрытия самого последнего бара, присутствующего в контексте торговых данных, для нашего финансового инструмента. Примерный план действий такой:

  1. Реализуем класс, который эмулирует сделки для наших заявок.
  2. Реализуем класс, который последовательно читает свечки из текстового файла и добавляет их в контекст торговых данных.
  3. Реализуем к примеру пробойный обработчик на открытие позиции.
  4. Реализуем обработчик на закрытие позиции.
  5. Реализуем консольное приложение, которому можно будет передавать имя текстового файла с историческими данными и которое будет выполнять бэктест для этих данных.

Видео по первому пункту:


Как получить информацию о сделках?

Продолжаем рассматривать контекст торговых данных (ru.sazan.trader.Data.TradingDataContext). В этом видео показано как пользоваться вызовами методов расширения GetTrades для того, чтобы получить коллекцию (IEnumerable<Trade>) сделок для торгуемой стратегии или для конкретной заявки.

Кроме того, в видео показано как пользоваться одним из методов, позволяющих эмулировать комплект, содержащий сигнал (Signal), заявку (Order) и сделку (Trade), которые могут потребоваться в тестовых классах для проверки правильности срабатывания обработчиков на вход и выход.


Миграция адаптера ru.sazan.trader.smartcom

Поскольку новые тестовые счета Ай Ти Инвест регистрирует на торговом контуре Matrix, то мы убираем адаптер для SmartCOM 2 на дальнюю полку и начинаем переезд на SmartCOM версии 3. Новое видео показывает что нужно изменить в нашем демонстрационном роботе ru.sazan.scalper, чтобы он начал работать на новом тестовом торговом контуре. Не забудьте предварительно установить себе саму третью версию компонента SmartCOM.


Где робот хранит свои данные?

Класс, представляющий основную структуру данных торгующего робота, называется TradingDataContext (контекст торговых данных). Внутри этого контекста содержится вся необходимая для торговли информация, описания и настройки торговых алгоритмов, сигналы, заявки, сделки. Следующее видео представляет собой двадцатиминутную шпаргалку, демонстрирующую способы получения доступа к коллекциям объектов, помещенных в контексте торговых данных, в зависимости от того, какие манипуляции вы собираетесь производить с этими данными.


Контекст торговых данных реализует интерфейс:

public interface DataContext
{
    T Get<T>();
}

Поэтому у вас есть по-меньшей мере три способа обращения к коллекциям и наборам, содержащимся в контексте торговых данных:

/// Получите ссылку на контекст торговых данных
DataContext tradingDataContext = TradingData.Instance;

/// Если вам нужно только читать данные из коллекции, используйте такой вызов
IEnumerable<Tick> ticks = tradingDataContext.Get<IEnumerable<Tick>>();

/// Если вы хотите изменять содержимое коллекции, добавляя или удаляя ее элементы
/// но чтобы при этом не срабатывали алгоритмы, наблюдающие изменение коллекции
/// используйте следующий вызов
ICollection<Bar> bars = tradingDataContext.Get<ICollection<Bar>>();

/// Если вы хотите изменять содержимое коллекции, заставляя при этом срабатывать
/// алгоритмы, наблюдающие за ее содержимым, используйте такой вызов
ObservableCollection<Trade> trades = tradingDataContext.Get<ObservableCollection<Trade>>();


....все тэги
UPDONW
Новый дизайн