Бесплатная библиотека StockSharp предоставляет широкие возможности при разработке торговых роботов различной сложности. Но самое трудное для многих пользователей - сделать первые шаги при разработке своего робота. Поэтому представляем вашему вниманию статью-инструкцию по созданию простого привода для терминала QUIK с использованием S#.API.
Для создания простого привода нам понадобится:
1) Quik;
2) Библиотека S#;
3) Visual Studio Express;
4) Немного навыков программирования.
Подготовка рабочего места
После установки Quik, его нужно настроить для работы со S#. Для этого нужно проделать 3 базовых шага:
1) Включить обработку внешних транзакций. "Торговля" → "Внешние Транзакции" → "Начать обработку" и поставить галочку "Запускать процесс обработки внешних транзацкий автоматически"
2) Далее нужно открыть соответствующий Wnd-файл с настройками: "Настройки" → "Загрузить настройки из файла" → выбрать wnd-файл по пути "Разахивированная папка"\Samples\Quik\info.wnd
3) Далее настраиваем счета : "Торговля" → "Настройка счетов" → добавить все счета в выбранные счета депо.
4) В итоге можно настроить окошки - подтянуть их, уменьшить, но
названия столбцов менять нельзя, так же как и удалять их. У разных брокеров (квиков) есть особенности , стоят определённые фильтры на таблицах "Мои сделки", "Мои заявки". Нажав правой кнопкой мышки на таблицу "Мои сделки", выделить все. Аналогично и в таблице “Мои заявки”.
Добавьте торгующийся на данный момент инструмент в таблицу "Инструменты"; по нему в дальнейшем мы будем отправлять заявки.
Создание торгового привода
Открываем Visual Studio.
Создаём новый проект → "Приложение Wpf".
Настраиваем наш проект на работу S#:- Правой кнопкой мыши на "Проект" → "Свойства" и меняем "Требуемая версия NetFrameWork" (Net FrameWork 4 Client Profile ) на просто Net FrameWork 4(после этого меняется целевая среда разарботки).
- Добавляем нужные библиотеки в наш проект "Ссылки" → "Добавить ссылку" → "Обзор".
- Выбираем нужные нам библиотеки, которые лежат в "Разахрихированая папка"\References:
1)StockSharp.Quik
2)StockSharp.BusinessEntites
3)StockSharp.Algo
4)Ecng.Common
5)Ecng.ComponentModel
6)Ecng.Xaml
- Прописываем соответсвующие using на наши библиотеки в классе MainWindow.xaml.cs
Code
using System.Windows;
using StockSharp.Quik;
using Ecng.Xaml;
using StockSharp.BusinessEntities;
Заходим в MainWindow.Xaml, создаём соответсвующие кнопки и другие элементы на форме нашего приложения, перетягивая их из панели элементов. Получаем следующую форму:
Даем каждому элементу на нашей форме название, чтобы потом из кода обращаться к нему.
Нажимаем два раза на кнопку, чтобы создать метод, который будет вызываться по нажатию на эту кнопку (метод обработчик).
Прописываем код под кнопку подключения.Это простой код демонстрирующий подключение и выгрузку данных из Quik в асинхронном режиме. Теперь осталось дополнить код выводом информации на главную форму, то есть сделать вывод в наши выпадающие списки "Портфели" и "Инструменты".
Code
//обьявляем переменную
private QuikTrader _trader;
/// <summary>
/// Подключение к квику
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Connect_Click(object sender, RoutedEventArgs e)
{
//создаём квик трейдера, передавая ему сразу место расположения нашего терминала
_trader= new QuikTrader(QuikTerminal.GetDefaultPath());
//подписываемся на событие подключения, как только подлючимся, сразу запустим Экспорт
//Connect- просто подключение к потоку
//StartExport- получение он-лайн данных из квика Инструменты,Заявки , Портфели и так далее
_trader.Connected += () => _trader.StartExport();
// подключаем квик
_trader.Connect();
}
Дописываем графический вывод на нашу форму в выпадающие списки:
Code
private void Connect_Click(object sender, RoutedEventArgs e)
{
//создаём квик трейдера, передавая ему сразу место расположения нашего терминала
_trader= new QuikTrader(QuikTerminal.GetDefaultPath());
//подписываемся на событие появление новых инструментов
//оно сработает когда включится экспорт
_trader.NewSecurities += securities =>this.GuiAsync(()=>//GuiASync используется чтобы выводить графику из другого потока
{
//заполняем коллекцию у нашего выпадающего списка (ComboBox)
Securitites.ItemsSource = _trader.Securities;
});
//подписываемся на событие появления новых портфелей
//сработает после запуска экспорта
_trader.NewPortfolios += portfolios =>this.GuiAsync(()=>
{
//заполняем коллекцию у нашего выпадающего списка (ComboBox)
Portfolios.ItemsSource = _trader.Portfolios;
});
//подписываемся на событие подключения, как только подлючимся, сразу запустим Экспорт
//Connect - просто подключение к потоку
//StartExport- получение онлайн данных из квика Инструменты, Заявки, Портфели и так далее
_trader.Connected += () => _trader.StartExport();
// подключаем квик
_trader.Connect();
}
Запускаем проект (F5), нажимаем на кнопку "Подключиться" (в это время у нас уже работает Quik, который подключен к котировкам). После этого наш робот включает эскпорт DDE в Quik и через некоторое время мы получаем заполненные выпадающие списки в нашем проекте.
Остается дописать функционал под две оставшиеся кнопки "Купить", "Снять все заявки":
- "Купить" - отправляем заявку (портфель и инструмент берется из выпадающих списков) по той цене, которая будет указана в нашем текстовом окне;
- "Снять все заявки" - снимаем все выставленные нами заявки.
Код для отправки заявки:
Code
private void Buy_Click(object sender, RoutedEventArgs e)
{
//создаём ордер
//заполняем его нужными свойствами
// портфель и инструмент вынимаем из выпадающих списков
//цену для отправки заявки вынимаем из тесктового окна
var order = new Order
{
Trader = _trader,
Portfolio = (Portfolio)Portfolios.SelectedItem,
Security = (Security) Securitites.SelectedItem,
Volume = 1,
Price = decimal.Parse(PRICE.Text),
Direction = OrderDirections.Buy
};
//регистрируем ордер
_trader.RegisterOrder(order);
}
Код для снятия всех заявок:
Code
private void CancelOrders_Click(object sender, RoutedEventArgs e)
{
//отменить все заявки
_trader.CancelOrders();
}
Пример работы простого привода:
Скачать исходники также можно здесь.
Видео-урок по созданию простого торгового робота с использованием библиотеки StockSharp:
Автор статьи: Самунджян Артём