Максим Милованов
Максим Милованов личный блог
17 сентября 2013, 08:11

Пишем торгового робота на C#. Часть 1. Основы языка программирования и связь с терминалом

В последнее время всё чаще слышу от многих трейдеров заявления, что очень здорово знать язык программирования и самому писать роботов. Многие усиленно пытаются изучать модный в последнее время язык C#. Однако новичку с нуля написать какое-либо стоящее приложение будет довольно сложно. В этой статье я попытаюсь дать минимальные знания языка программирования, показать логику построения приложения, спроектировать и запустить торгового робота для терминала QUIK.


Сразу хотелось бы отметить, что данная статья более всего ориентирована на новичков в программировании, знания которых ограничиваются школьной/университетской программой и опытом программирования на языках типа Pascal, Basic. В качестве литературы по языку C# лучше всего подойдут книги Шилдта и справка Microsoft.
В начале посмотрим, какие средства представлены в настоящий момент, для разработки роботов и создания автоматизированных алгоритмических торговых систем:
1)      Инструменты встроенные в терминал
  1. Qpile – встроенный язык в наиболее популярный терминал для торговли QUIK, язык довольно просто. Однако у этой простоты помимо очевидного плюса в легком освоении, есть очевидные минусы, как ограниченный функционал, сложность отладки.
  2. LUA – еще один несложный язык для терминала QUIK. Имеет больший функционал, чем Qpile. Однако большую популярность еще не приобрел. Сам код работает непосредственно в терминале QUIK.

2)      Внешние коробочные продукты – очень схожие по функционалу:  возможность тестирования на исторических данных, написание торговых систем на языке платформы .NET (обычно C#), интеграция с торговым терминалом.
  1. TradeMatic — система для создания торговых систем со встроенным механизмом тестирования на истории.
  2. TSLab – система аналогичная TradeMatic. Имеет визуальный редактор для проектирования торговой стратегии.
  3. LiveTrade RobotLab – терминал и визуальный конструктор роботов с возможностью написания кода самому.
3)      Внешние программы, разработанные самостоятельно. В данном случае можно использовать любой язык программирования, который знает человек.  Несколько лет назад была популярна связка терминала QUIK и Excel с роботом, написанным на Visual Basic. В настоящий момент можно воспользоваться довольно мощной и гибкой библиотекой для написания роботов Stock#, однако не программисту будет довольно сложно в ней разобраться.
Для разработки своего робота «с нуля» определимся со списком задач:
1)      Реализация импорта данных из терминала QUIK в нашу программу
2)      Программирование торгового алгоритма
3)      Создание механизма отправки заявок на совершение торговых операций в терминал
Этот список можно разбить на множество подпунктов, которые мы будем формулировать по ходу реализации этих этапов.
Прежде чем начать реализовывать импорт данных из терминала QUIK в нашу программу, вспомним основы программирования. Чтобы не превращать статью в очередной нудный учебник по программированию, опишем основные конструкции языка, которые нам понадобятся только для разработки программы.
В C# есть два способа построения интерфейсов клиентских приложений. Первый – использовать Windows Forms – технология построения приложений, которая уже более 10 лет применяется при проектировании визуального интерфейса. Второй — Windows Presentation Foundation (WPF) – довольно новая система для построения интерфейса, имеет возможность создавать привлекательный элементы с использованием 3D-графики, использует MVC-подход, однако требует больших ресурсов компьютера, чем WinForms. Поскольку Windows Forms проще и менее требователен к ресурсам, мы будем использовать именно эту технологию.
Начнем с создания приложения. Для этого надо запустить Visual Studio 2010 и создать проект «Приложение Windows Forms» (Рис. 1).
 Пишем торгового робота на C#. Часть 1. Основы языка программирования и связь с терминалом
создание приложения Windows Forms


Подробнее на robostroy.ru


получить данные из терминала QUIK. Из QUIK данные можно получить тремя способами:
1) экспортировать данные через ODBC
2) экспортировать данные через DDE
3) брать данные непосредственно из памяти
Третий способ очень трудозатратный для программирования, хотя является самым быстрым для получения данных. Вывод данных через ODBC, как пишут разработчики Quik, работает медленнее, чем вывод через DDE. Поэтому мы воспользуемся наиболее простым способом – выводом через DDE.
Настроим сразу же QUIK для вывода данных (Рис. 7). Для этого нужно выделить нужную таблицу и нажать в меню Экспорт данных – Вывод по DDE. В качестве DDE сервера нужно указать имя «DDEServer». В качестве рабочей книги нужно указать следующее:
1)      для таблицы исторических свечей – «candles»
2)      для таблицы котировок и инструментов – «quotes»
3)      для таблицы заявок – «orders»
Не забудьте установить галочку «Вывод при нажатии Ctrl+Shift+L».
 Пишем торгового робота на C#. Часть 1. Основы языка программирования и связь с терминалом
Настройка вывода таблицы по DDE
 
 
В итоге окно QUIK будет выглядеть следующим образом:
 Пишем торгового робота на C#. Часть 1. Основы языка программирования и связь с терминалом
QUIK
 
Для импорта по DDE нам потребуется:
1) Класс XLTable, реализующий приведение данных из формата Excel к обычному виду (все необходимые файлы есть в приложении к статье)
2) Библиотека NDde.dll для создания DDE сервера



Сформируем класс для работы с DDE сервером:
class MyDDEServer: DdeServer
{
    public MyDDEServer(string service): base(service)
    {
    }
}
В этом классе должны быть предусмотрен минимальный набор функции:
1)      Регистрация сервера
2)      Разрегистрация сервера
3)      Событие срабатывания таймера для получения новых данных
4)      Метод для обработки принятия данных
 
На форму приложения я также добавил визуальные объекты для отображения пришедших данных. В результате компиляции (F5)  приложения и запуска импорта по DDE получилось следующее (Рис. 11):
 Пишем торгового робота на C#. Часть 1. Основы языка программирования и связь с терминалом

Импорт данных их QUIK в окно приложения

 
Как мы видим, данные успешно импортируются в наше приложение из терминала QUIK, теперь перед нами встает задача создания логики торгового робота и его программная реализация, о чем я постараюсь написать в следующей статье.
Структура архива:
1)      NDde.dll — динамическая библиотека, в которой реализованы функции для работы с DDE сервером
2)      XLTable.cs – класс для обработки данных из QUIK в приложение
3)      charts.qpl – портфель для QUIK на языке Qplie для формирования исторических счевек
4)      INFO.wnd – настройки QUIK
5)      Robot – код робота на C#
 
Посмотреть оригинал статьи и скачать код приложения Вы можете на сайте robostroy.ru 
3 Комментария
  • DGD
    17 сентября 2013, 08:29
    +++ спасибо
  • Nemo_2000
    17 сентября 2013, 08:41
    полезный пост, собираюсь этой осенью перейти с форекса на фортс. На форексе в мт4 с програмированием не очень сложно, но по фортс пока полный ноль. надеюсь разобраться:)
  • Юра
    18 сентября 2013, 05:13
    ++++++++

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн