.
Проект "Битва роботов". Шаг 2. Реализация взаиморасчетов на виртуальной бирже
Автор megabax   
02.10.2013 г.
Структура программы на примере простейшей программы

Проект "Битва роботов". Шаг 2. Реализация взаиморасчетов на виртуальной бирже

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

 

Проект "Битва роботов". Шаг 2. Реализация взаиморасчетов на виртуальной бирже

 

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

 

        private void button2_Click(object sender, EventArgs e)

        {

            string path = "C:\\1\\om\\";

            Random rnd = new Random();

            StockOrder order;

            StringBuilder sb1 = new StringBuilder();

            StringBuilder sb2 = new StringBuilder();

            for (int i = 1; i < 1000000; i++)

            {

                order = new StockOrder();

                order.volume = rnd.Next(1, 10);

                order.price = rnd.Next(1,100);

                order.state = OrderState.active;

                if (rnd.Next(100) >= 50)

                {

                    order.operation = OrderOperation.buy;

                }

                else

                {

                    order.operation = OrderOperation.sell;

                }

                if (rnd.Next(100) >= 50)

                {

                    order.ticker = stock.tickers[0];

                }

                else

                {

                    order.ticker = stock.tickers[1];

                }

                order.account=stock.accounts[rnd.Next(3)];

                stock.putOrder(order);

            }

            for (int i = 1; i < (stock.tickers[0].orderManager as Glass).ticks.Count; i++)   

            {

                sb1.AppendFormat("{0}; {1};\n", i, (stock.tickers[0].orderManager as Glass).ticks[i].ToString());

            }

            System.IO.File.WriteAllText(path+"log1.txt", sb1.ToString());

            for (int i = 1; i < (stock.tickers[1].orderManager as Glass).ticks.Count; i++)

            {

                sb2.AppendFormat("{0}; {1};\n", i, (stock.tickers[1].orderManager as Glass).ticks[i].ToString());

            }

            System.IO.File.WriteAllText(path + "log2.txt", sb2.ToString());

        }

 

Получилось довольно таки забавно: сначала есть движения, а потом нет. И самих тиков не так уж и много, при чем, они мало зависят от количества циклов выставления заявки. Тоесть, если я делаю 1000 циклов и 1000000 циклов, количество тиков примерно одинаковое:

 

 

Проект "Битва роботов". Шаг 2. Реализация взаиморасчетов на виртуальной бирже

 

Газпром

 

Проект "Битва роботов". Шаг 2. Реализация взаиморасчетов на виртуальной бирже

 

Сбербанк

 

 

Я думаю, такое поведение модели можно объяснить тем, что денежные средства перетекают со счета на счет и на этом торговля заканчивается. Эту догадку, конечно, надо проверить. Для этого я решил построить еще и график изменения стоимости портфеля и баланса  виртуальных трейдеров. Получилось, что у одного трейдера деньги уменьшились наполовину, у другого увеличились на 50%, у третьего почти не изменились:

 

Проект "Битва роботов". Шаг 2. Реализация взаиморасчетов на виртуальной бирже

 

Проект "Битва роботов". Шаг 2. Реализация взаиморасчетов на виртуальной бирже

 

Проект "Битва роботов". Шаг 2. Реализация взаиморасчетов на виртуальной бирже

 

Как видим, после определенного перераспределения средств сделки почти прекратились (есть редкие маленькие всплески, но они погоды не делают).  Действительно, когда у трейдера нет денег, его заявки на покупку с большими ценами не могут быть исполнены. Соответственно, вероятность выставления исполнимых заявок резко падает.

Следующим шагом будет создание драйвера вирутуальной биржи на основе интерфейса ITerminalDriver(см. анонсы к урокам Пишем биржевого робота на C# (платный раздел))

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