.
Проект "Битва роботов". Шаг 4. Эмулятор "пьяного трейдера".
Автор megabax   
27.10.2013 г.
Структура программы на примере простейшей программы

Проект "Битва роботов". Шаг 4. Эмулятор "пьяного трейдера".

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

    /// <summary>

    /// Абстрактный класс торгового робота (эмулятора трейдера)

    /// </summary>

    public abstract class AbstractTrader

    {

 

        /// <summary>

        /// Драйвер биржевого терминала

        /// </summary>

        public ITerminalDriver driver;

 

        /// <summary>

        /// Обработчик кванта времени, который система предоставляет роботу для торговли

        /// </summary>

        public abstract void handle_trade();

    }

 

А вот как выглядит простейший робот, просто выставляющий заявки по рандому (случайным образом):

    /// <summary>

    /// Эмулятор трейдера, который высталвяет заявки по рандому

    /// </summary>

    public class RandomTrader : AbstractTrader

    {

        /// <summary>

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

        /// </summary>

        public string account;

 

        /// <summary>

        /// Драйвер биржевого терминала

        /// </summary>

        public ITerminalDriver driver;

 

        /// <summary>

        /// Максимальная цена, по которой он высталвяет заявки

        /// </summary>

        public int maxPrice=200;

 

        /// <summary>

        /// Максимльаное количество инструментов в выставляемой заявке

        /// </summary>

        public int maxCount = 10;

 

        private Random rnd;

 

        public RandomTrader()

        {

            rnd = new Random();

        }

 

        /// <summary>

        /// Обработчик кванта времени, который система предоставляет роботу для торговли

        /// </summary>

        public override void handle_trade()

        {

            List<StockItem> items = (driver as IAddTerminalDriver).getItems();

            StockOrderInfo info = new StockOrderInfo();

            info.account = account;

            info.count = rnd.Next(1, maxCount);

            info.price = rnd.Next(1, maxPrice);

            info.ticker = items[rnd.Next(items.Count)].ticker;

            if (rnd.Next(100) >= 50) info.type = "buy"; else info.type = "sell";

            info.stopType = "";

            ResultSendOrder res = driver.sendOrder(info);

        }

 

Этот алгоритм (когда заявки выставляться случайно) я обозвал "пьяный трейдер".

 

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

 

Проект "Битва роботов". Шаг 4. Эмулятор "пьяного трейдера".

 

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

Оживить торговлю в данному случае вижу следующими способами:

  • Разрешить шорты. Тогда придется писать блок контроля маржи.

  • Удалять заявки, которые долго висят. Это явно несколько оживит торговлю.

  • Добавить иные торговые алгоритмы. Разумеется, это я собираюсь сделать в ближайшее время.

Последнее обновление ( 27.10.2013 г. )