Программирование - это просто
Advertisement
Главная arrow Биржевые роботы arrow Виртуальная биржа. Битва роботов arrow Проект "Битва роботов". Шаг 3. Унификация виртуальной биржи.
26.04.2024 г.
Главное меню
Главная
Интернет магазин
Программные продукты
Биржевые роботы
Искусственный интеллект
Математика и информатика
1С:Предприятие
Уроки C#
Уроки Delphi
Уроки программирования
Web-программирование
Дизайн и графика
Компьютер для блондинок
Исходники
Статьи
Платный раздел
Рассказы про компьютеры
Хитрости и секреты
Системный подход
Размышления
Наука для чайников
Друзья сайта
Excel-это не сложно
Все о финансах
.
Проект "Битва роботов". Шаг 3. Унификация виртуальной биржи. Печать E-mail
Автор megabax   
17.10.2013 г.
Структура программы на примере простейшей программы

Проект "Битва роботов". Шаг 3. Унификация виртуальной биржи.

В прошлый раз я реализовал механизм взаиморасчетов на виртуальной бирже: виртуальные счет, виртуальные денежные средства. На третьем шаге я сделал унификацию. Дело в том, что биржевых терминалов существует превеликое множество: Quik, AlorTrade, AlfaDirect - это только одни из них. Для программирования торговых алгоритмов к каждому из них требуется совершенно разный подход. Согласитесь, неудобно будет переделывать обученных на виртуальной бирже роботов каждый раз. Конечно, от адаптации к другим терминалам никуда не уйти. Но можно свести эту работу к минимуму. Ранее я разработал два интерфейса ITerminalDriver, IAddTerminalDriver, которые реализовал для симулятора стратегий и для терминала АлорТрейд (см. анонсы уроков "Пишем биржевого робота на C#" и "Программирование в TEClient AlorTrade", а так же ряд уроков по программированию в AlorTrade из бесплатного раздела). Если я унифицирую виртуальную биржу для этих интерфейсов, то роботы, торгующие на этой виртуальной биржи, без какой либо переделки смогут торговать и через Алор. Разумеется, для других брокеров и торговых терминалов придется писать отдельные библиотеки.

И так, вот как выглядят эти интерфейсы:

ITerminalDriver:

    /// <summary>

    /// Структура заявки на соврешение сделки.

    /// </summary>

    public struct StockOrderInfo

    {

        /// <summary>

        /// Тикер  инструмента

        /// </summary>

        public string ticker;

 

        /// <summary>

        /// Доп. информация (рынок, режим торгов и так далее, в зависимости от биржы, брокера и терминала)

        /// </summary>

        public string market;

 

        /// <summary>

        /// Тип стоп приказа "stoploss" или "takeprofit", если это не стоп приказ, то ""

        /// </summary>

        public string stopType;

 

        /// <summary>

        /// Тип приказа "buy" или "sell"

        /// </summary>

        public string type;

 

        public int count;

        public double price;

        public double signalPrice;

 

        /// <summary>

        /// Номер торгового счета

        /// </summary>

        public string account;

 

        /// <summary>

        /// Срок действия заявки

        /// </summary>

        public DateTime expiry;

    }

 

    /// <summary>

    /// Структура результата отправки ордера

    /// </summary>

    public struct ResultSendOrder

    {

        /// <summary>

        /// Код результата выставления заявки

        /// </summary>

        public int resCode;

 

        /// <summary>

        /// Сообщения о результате выставления заявки

        /// </summary>

        public string resMessage;

 

        /// <summary>

        /// Код выставленной заявки

        /// </summary>

        public string orderCode;

 

        /// <summary>

        /// Время начала выставления заявки

        /// </summary>

        public DateTime time_beg;

 

        /// <summary>

        /// Время окончания выставления заявки

        /// </summary>

        public DateTime time_end;

    }

 

 

 

    /// <summary>

    /// Интерфейс доступа к драйверу биржевого терминала

    /// </summary>

    public interface ITerminalDriver

    {

 

        /// <summary>

        /// Подключиться к терминалу

        /// </summary>

        void connection();

 

        /// <summary>

        /// Отключиться от терминала

        /// </summary>

        void disconnection();

 

       

        /// <summary>

        /// Послать ордер (заявку)

        /// </summary>

        /// <param name="info">Структура заявки</param>

        /// <returns>Результат ввода заявки</returns>

        ResultSendOrder sendOrder(StockOrderInfo info);

 

        /// <summary>

        /// Количество данного инструмента на эмулируемом счете

        /// </summary>

        /// <param name="ticker">Тикер финансового инструмента</param>

        /// <returns>Количество данного инструмента на эмулируемом счете</returns>

        int itemCountOnAccount(string ticker);

 

        /// <summary>

        /// Количество доступных денежных средств

        /// </summary>

        /// <returns>Количество доступных денежных средств</returns>

        double moneyAvailable();

 

        /// <summary>

        /// Количество разновидностей финансовых инструментов, доступных для торгов

        /// </summary>

        /// <returns>Количество разновидностей финансовых инструментов, доступных для торгов</returns>

        int itemsCount();

 

        /// <summary>

        /// Количество заявок

        /// </summary>

        /// <returns>Количество заявок</returns>

        int ordersCount();

 

        /// <summary>

        /// Получить список заявок

        /// </summary>

        /// <returns>Список заявок</returns>

        List<Order> getOrders();

 

        /// <summary>

        /// Получить все открытые позиции

        /// </summary>

        /// <returns>Список открытых позиций</returns>

        List<StockItem> GetPositions();

 

        /// <summary>

        /// Получить стоимость портфеля

        /// </summary>

        /// <returns>Стоимость портфеля</returns>

        double getPortfolioPrice();

 

    }

 

IAddTerminalDriver:

    /// <summary>

    /// Класс структуры элемента "стакана"

    /// </summary>

    [Serializable]

    public class OrderBookItem

    {

 

        /// <summary>

        /// Уникальный идентификатор

        /// </summary>

        public int ID;

 

        /// <summary>

        /// Финансовый инструмент

        /// </summary>

        [field: NonSerialized]

        public StockItem item;

       

        /// <summary>

        /// Направление заявок

        /// +1 - на покупку (спрос)

        /// -1 - на продажу (предложение)

        /// </summary>

        public int direction;

 

        /// <summary>

        /// Цена

        /// </summary>

        public double price;

 

        /// <summary>

        /// Количество

        /// </summary>

        public int count;

 

        /// <summary>

        /// Возвращает тип заявки, buy или sell, Только для чтения

        /// </summary>

        public string type

        {

            get

            {

                if (direction == 1) return "buy"; else return "sell";

            }

        }

 

       

    }

 

    /// <summary>

    /// Дополнительный интерфейс доступа к драйверу биржевого терминала

    /// </summary>

    public interface IAddTerminalDriver

    {

 

        /// <summary>

        /// Возвращает содержимое "стакана"

        /// </summary>

        /// <returns>Содержимое стакана</returns>

        /// <param name="a_ticker">Инструмент, по которому нужно вернуть стакан</param>

        List<OrderBookItem> getOrderBook(string a_ticker);

 

        /// <summary>

        /// Удалить заявку с указанным номером

        /// </summary>

        /// <param name="ID">Номер заявки (ее идентификационный код</param>

        /// <returns>Результат операции</returns>

        ResultSendOrder deleteOrder(string ID);

 

        /// <summary>

        /// Получить  список всех инструментов

        /// </summary>

        /// <returns>Список инструментов</returns>

        List<StockItem> getItems();

 

 

    }

 

После унификации я немного доработал и интерфейс "биржи", вот как теперь выглядит программа:

Проект "Битва роботов". Шаг 3. Унификация виртуальной биржи.

 

Последнее обновление ( 17.10.2013 г. )
 
« След.   Пред. »
 
© 2024 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги