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

Одновременная отправка 2-х заявок
Atom
4/18/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 милсекунд. Режим шлюза д.б. асинхронный, по крайней мере при установке выбор не предоставил.


Tags:


Thanks:


Alexander

Avatar
Date: 4/18/2012
Reply


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

Сделайте IsAsync = true

Thanks:

Макс

Avatar
Date: 4/18/2012
Reply



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 Заявка отправлена

Thanks:

pyhta4og

Avatar
Date: 4/18/2012
Reply


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

http://stocksharp.com/forum/1897/Tormoza-na-Plazie/?page=2

Thanks: Макс

Макс

Avatar
Date: 4/18/2012
Reply


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

http://stocksharp.com/forum/1897/Tormoza-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 Заявка отправлена

Спасибо!

Thanks:

Макс

Avatar
Date: 4/18/2012
Reply


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

Trader.UseLocalProtocol=true

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

Thanks:

Alexander

Avatar
Date: 5/1/2012
Reply


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

Trader.UseLocalProtocol=true

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


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

Alexander

Avatar
Date: 5/6/2012
Reply


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

Thanks:

Макс

Avatar
Date: 5/6/2012
Reply


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

Thanks:


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy