Одновременная отправка 2-х заявок
Atom
18.04.2012


Версия 4.1 вчерашняя.
Пытаюсь сделать простенький арбитраж без котирования на тестовом сервере Плазы.

Дожидаюсь нужного состояния 2-х стаканов по инструментам и нужно одновременно отправить 2 заявки, но 2-я заявка уходит значительно позже 1-ой. Может, что-то не так делаю?

Код

//если покупаем 1-й инструмент и продаем 2-й
if (условие входа)
{
log("Вход 1-й покупаем, 2-й продаем");
noga1_buy(0,0);
noga2_sell(0,0);
}

        void noga1_buy(int pos, decimal price)
        {
            if (pos == 0) pos = 1;
            if (price == 0) price = _ins1.BestAsk.Price;

            var order1 = new Order
            {
                Portfolio = _portfolio,
                Price = price,
                Security = _ins1,
                Volume = unit1 * pos,
                Direction = OrderDirections.Buy,
            };
            log("покупаем 1-ю ногу " + order1.TransactionId + " по цене" + order1.Price + " int1_pos=" + int1_pos + " int2_pos=" + int2_pos + " delta_theory=" + delta_theory + " " + order1.Direction + " delta_real=" + delta_real);

            Trader.RegisterOrder(order1);
            log("Заявка отправлена");
        }



        void noga2_sell(int pos, decimal price)
        {
            if (pos == 0) pos = 1;
            if (price == 0) price = _ins2.BestBid.Price;

            var order2 = new Order
            {
                Portfolio = _portfolio,
                Price = price,
                Security = _ins2,
                Volume = unit2 * pos,
                Direction = OrderDirections.Sell,
            };
            log("продаем 2-ю ногу " + order2.TransactionId + " по цене" + order2.Price + " int1_pos=" + int1_pos + " int2_pos=" + int2_pos + " delta_theory=" + delta_theory + " " + order2.Direction + " delta_real=" + delta_real);

            Trader.RegisterOrder(order2);
            log("Заявка отправлена");
        }


        void log(string s)
        {
            String current_time_str = DateTime.Now.ToString("HH:mm:ss.fff");
            textBox1.AppendText(current_time_str + " " + s + Environment.NewLine);
        }


А вот что выводит лог:

12:08:43.994 Вход 1-й покупаем, 2-й продаем
12:08:43.999 покупаем 1-ю ногу 0 по цене16475 int1_pos=0 int2_pos=0 delta_theory=-863,5 Buy delta_real=-867
12:08:44.367 Заявка отправлена
12:08:44.369 продаем 2-ю ногу 0 по цене17348 int1_pos=0 int2_pos=0 delta_theory=-863,5 Sell delta_real=-867
12:08:44.587 Заявка отправлена


Видно, что Trader.RegisterOrder задерживает процесс на 200-300 милсекунд.
Режим шлюза д.б. асинхронный, по крайней мере при установке выбор не предоставил.



Теги:


Спасибо:


Alexander

Фотография
Дата: 18.04.2012
Ответить


Такое может быть только при синхронной отправке.

Сделайте IsAsync = true
Спасибо:

Макс

Фотография
Дата: 18.04.2012
Ответить


Код

private void ConnectClick(object sender, RoutedEventArgs e)
		{
			try
			{
				if (!_isConnected)
				{
					if (Trader == null)
					{
						// создаем шлюз
						Trader = new PlazaTrader(Address.Text.To<IPEndPoint>());

                        //добавил строку
                        Trader.TransactionManager.IsAsync=true;


Результат не поменялся.

14:40:45.030 Вход 1-й покупаем, 2-й продаем _ins1.BestAsk16311 _ins2.BestBid17182 delta2=-871 разность=9,9 delta_theory-880,9 delta_up=8 live=20
14:40:45.032 продаем 1-ю ногу 0 по цене16309 int1_pos=1 int2_pos=-1 delta_theory=-880,9 Sell delta_real=-894
14:40:45.094 Заявка отправлена
14:40:45.096 покупаем 2-ю ногу 0 по цене17186 int1_pos=1 int2_pos=-1 Buy delta_theory=-880,9 delta_real=-894
14:40:45.333 Заявка отправлена

Спасибо:

pyhta4og

Фотография
Дата: 18.04.2012
Ответить


Поставьте PlazaTrader.UseLocalProtocol=true

http://stocksharp.com/fo...ormoza-na-Plazie/?page=2
Спасибо: Макс

Макс

Фотография
Дата: 18.04.2012
Ответить


pyhta4og Перейти
Поставьте PlazaTrader.UseLocalProtocol=true

http://stocksharp.com/fo...ormoza-na-Plazie/?page=2

только что сам доехал[biggrin]

18:01:21.375 продаем 1-ю ногу 0 по цене16292 int1_pos=0 int2_pos=0 delta_theory=-903,1 Sell delta_real=-986
18:01:21.380 Заявка отправлена
18:01:21.381 покупаем 2-ю ногу 0 по цене17184 int1_pos=0 int2_pos=0 Buy delta_theory=-903,1 delta_real=-986
18:01:21.383 Заявка отправлена

Спасибо!
Спасибо:

Макс

Фотография
Дата: 18.04.2012
Ответить


Вообще, это странно.
Я не спец по TCP, но такие задержки на одном компе это долго...
Быть может стоит
Код
Trader.UseLocalProtocol=true

в SamleGUI включить по умолчанию.
Спасибо:

Alexander

Фотография
Дата: 01.05.2012
Ответить


Макс Перейти
Вообще, это странно.
Я не спец по TCP, но такие задержки на одном компе это долго...
Быть может стоит
Код
Trader.UseLocalProtocol=true

в SamleGUI включить по умолчанию.



Включил по дефолту в PlazaTrader если передаётся localhost или его варианты (127.0.0.1, ...)
Спасибо: Макс

Alexander

Фотография
Дата: 06.05.2012
Ответить


Пока отключили по дефолту, есть проблемы с дисконнектом в этом случае у плазовского шлюза.
Спасибо:

Макс

Фотография
Дата: 06.05.2012
Ответить


Alexander Mukhanchikov Перейти
Пока отключили по дефолту, есть проблемы с дисконнектом в этом случае у плазовского шлюза.

да, иногда после перезапуска робота не работает и приходиться шлюз перезапускать.
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy