Версия 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)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
Такое может быть только при синхронной отправке.
Сделайте 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 Заявка отправлена
Поставьте 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, но такие задержки на одном компе это долго... Быть может стоит
в SamleGUI включить по умолчанию.
Trader.UseLocalProtocol=true
Пока отключили по дефолту, есть проблемы с дисконнектом в этом случае у плазовского шлюза.