Постов с тегом "ПРОГРАММИРОВАНИЕ": 333

ПРОГРАММИРОВАНИЕ


Вебинары-практикумы "C# для начинающих"

На прошлой неделе мы обсуждали формат идеального подхода к обучению программированию. Тема оказалась несколько более популярной, нежели мне изначально представлялось, поэтому на следующей неделе (предположительно 5 февраля 2014) стартует серия консультационных вебинаров-практикумов для тех, кто по какой-либо причине считает что ему неплохо было бы в первом приближении познакомиться с современными подходами к разработке компьютерных программ.

На вебинары приглашаются слушатели (зрители-участники), не имеющие опыта программирования совсем, или к примеру не имеющие такового успешного опыта. Поскольку наша цель коммунизм приобретение первичных навыков, присущих профессиональным программистам, то лекций не будет, все занятия будут практическими от начала и до конца.

Писать код будем на языке C#, используя бесплатную среду разработки Microsoft Visual Studio Express для Windows Desktop. Все сущности и понятия, реализуемые во время занятий, конечно же будут в основном из предметной области алгоритмической торговли.


( Читать дальше )

Автоматизация торговли с нуля

    • 25 января 2014, 17:08
    • |
    • butteff
  • Еще
Здравствуйте, господа.
Т.к. у меня есть опыт веб и десктоп программирования, решил попробовать силы в написании торговых роботов\советников, вроде это по моему профилю ПОГРОМИСТА и удовлетворяю интерес и страсть к трейдингу, который появился у меня пару месяцев назад.

В связи с этим есть к Вам просьба:

1. Посоветуйте простую стратегию и финансовый инструмент, на котором она работает, которую знают все и которая секретом не является, именно ее я буду автоматизировать изначально, чтобы обучиться

2. Если кто-то уже программирует, буду рад советам, ссылкам, видео, книгам по теме.

Спасибо.

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

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


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

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


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

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

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

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


Интеграция таблиц гугл в смартлаб

Что было бы интересно?

Если бы я мог сделать интеграцию таблиц гугл в смартлаб (google docs).

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

Зачем? Затем, что если делать это через программиста, то потратишь много сил и времени. А так бы все нафигачил сам формулами, пользователь смартлаба бы только заполнил форму и автоматом для него создалась невидимая для других таблица его статистики с автоматически считаемыми чартами и параметрами...

Как такое провернуть, чтобы сильно не расходовать программистские человекочасы? 

Миграция адаптера 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>>();


Как собрать историю стакана?

Тема нового видео предложена трейдерами, изучающими возможности библиотеки. В общем фильма отвечает на вопрос «Как за десять минут написать сборщика статистики очереди заявок (стакана) для финансового инструмента?».

Если вам для решения вашей проблемы не требуются исторические данные о сделках и заявках за несколько прошедших лет, а достаточно статистики за неделю, или две, то вы легко можете собрать на основе нашего скальпирующего робота инструмент, который будет «слушать» очереди заявок и записывать их результаты в текстовые файлы с разделителями. А уже эти текстовые файлы вы легко сможете распотрошить с помощью популярных средств работы с табличными данными, такими как Microsoft Excel или OpenOffice Calc или LibreOffice Calc.

Однако, не забывайте пожалуйста что нет смысла записывать данные с тестового контура Ай Ти Инвест. Там данные идут с задержкой и в них вносятся какие-то искажения.


Исходный код скальпера все там же, в открытом репозитории битбакет.

Развиваем навык программирования обработчиков

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

Алгоритм нового обработчика в двух словах: Берем набор тиков за последние N секунд. Если разница между максимальной и минимальной ценой в наборе тиков меньше значения M, то не торгуем, считая что тренда нет. Если цена самого старого тика в наборе, меньше цены самого свежего тика в наборе, открываем позицию в лонг. Если цена самого старого тика в наборе, больше цены самого свежего тика в наборе, открываем позицию в шорт.

Видео в этот раз на 40 минут, потому что пишем код, и потому что пишем тест, до того, как пишем код.


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