Версия 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 милсекунд. Режим шлюза д.б. асинхронный, по крайней мере при установке выбор не предоставил.
Comentarios (8)
Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario
Такое может быть только при синхронной отправке.
Сделайте 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
Пока отключили по дефолту, есть проблемы с дисконнектом в этом случае у плазовского шлюза.