← 返回

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

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

本主题对您有帮助吗?

分享主题

评论 (8)

登录创建账户, 登录或注册以发表评论

Alexander
Alexander

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

Сделайте IsAsync = true

Макс
Макс 作者

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
pyhta4og

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

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

Макс
Макс 作者

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

http://stocksharp.com/forum/1897/Tormoza-na-Plazie/?page=2 только что сам доехал😀

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

Спасибо!

Макс
Макс 作者

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

Trader.UseLocalProtocol=true

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

Alexander
Alexander

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

Trader.UseLocalProtocol=true

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


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

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

Макс
Макс 作者

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