/// <summary> /// Перерегистрировать заявку на бирже. /// </summary> /// <param name="oldOrder">Заявка, которую нужно снять.</param><param name="newOrder">Новая заявка, которую нужно зарегистрировать.</param> protected override void OnReRegisterOrder(Order oldOrder, Order newOrder) { if (oldOrder.Security.Board.IsSupportAtomicReRegister) { var newOrderId1 = oldOrder.Id; var newOrderId2 = 0L; string res; var resCode = _slot.MoveOrders(1, ref newOrderId1, (double)newOrder.Price, (int)newOrder.Volume, newOrder.TransactionId.To <string>(), ref newOrderId2, 0, 0, "", out res); var exception = AlorExceptionHelper.GetException(resCode, res); if (exception != null) { RaiseOrderFailed(newOrder, exception); RaiseOrderFailed(oldOrder, exception); } newOrder.Messages.Add(res); } else { base.OnReRegisterOrder(oldOrder, newOrder); } }
/// <summary> /// Перерегистрировать пару заявок на бирже. /// </summary> /// <param name="oldOrder1">Первая заявка, которую нужно снять.</param><param name="newOrder1">Первая новая заявка, которую нужно зарегистрировать.</param><param name="oldOrder2">Вторая заявка, которую нужно снять.</param><param name="newOrder2">Вторая новая заявка, которую нужно зарегистрировать.</param> protected override void OnReRegisterOrderPair(Order oldOrder1, Order newOrder1, Order oldOrder2, Order newOrder2) { //если хоть одна заявка не поддерживает перестановку они выполняются отдельно if (!(oldOrder1.Security.Board.IsSupportAtomicReRegister) || !(oldOrder2.Security.Board.IsSupportAtomicReRegister)) { OnReRegisterOrder(oldOrder1, newOrder1); OnReRegisterOrder(oldOrder2, newOrder2); return; } var newOrderId1 = oldOrder1.Id; var newOrderId2 = oldOrder2.Id; string res; var resCode = _slot.MoveOrders(1, ref newOrderId1, (double)newOrder1.Price, (int)newOrder1.Volume, newOrder1.TransactionId.To <string>(), ref newOrderId2, (double)newOrder2.Price, (int)newOrder2.Volume, newOrder2.TransactionId.To <string>(), out res); var exception = AlorExceptionHelper.GetException(resCode, res); if (exception != null) { RaiseOrderFailed(oldOrder1, exception); RaiseOrderFailed(newOrder1, exception); if (newOrderId2 != 0) { RaiseOrderFailed(oldOrder2, exception); RaiseOrderFailed(newOrder2, exception); } } newOrder1.Messages.Add(res); newOrder2.Messages.Add(res); }
/// <summary> /// Зарегистрировать заявку на бирже. /// </summary> /// <param name="order">Заявка, содержащая информацию для регистрации.</param> protected override void OnRegisterOrder(Order order) { string exexCondition; switch (order.TimeInForce) { case TimeInForce.PutInQueue: exexCondition = " "; break; case TimeInForce.MatchOrCancel: exexCondition = "N"; break; case TimeInForce.CancelBalance: exexCondition = "W"; break; default: throw new ArgumentOutOfRangeException(); } const string enterType = "P"; const string splitFlag = "S"; const string issueCode = ""; var direction = order.Direction == OrderDirections.Buy ? "B" : "S"; var extRef = order.TransactionId.To <String>(); int resCode; string res; if (order.Type == OrderTypes.Conditional) { var condition = (AlorOrderCondition)order.Condition; resCode = _slot.AddStopOrder(order.Portfolio.Name, direction, order.Price == 0 ? "M" : "L", splitFlag, exexCondition, enterType, order.Security.Board.Code, order.Security.Code, issueCode, condition.Type.ToAlorConditionType(), order.ExpiryDate, (double)condition.StopPrice, (double)order.Price, (int)order.Volume, _slot.BrokerRef, extRef, out res); } else { resCode = _slot.AddOrder(order.Portfolio.Name, direction, order.Type == OrderTypes.Market ? "M" : "L", splitFlag, exexCondition, enterType, order.Security.Board.Code, order.Security.Code, issueCode, (double)order.Price, (int)order.Volume, _slot.BrokerRef, extRef, out res); } var exception = AlorExceptionHelper.GetException(resCode, res); if (exception != null) { RaiseOrderFailed(order, exception); } order.Messages.Add(res); }
/// <summary> /// Отменить заявку на бирже. /// </summary> /// <param name="order">Заявка, которую нужно отменять.</param> protected override void OnCancelOrder(Order order) { var id = order.Id; string res; var resCode = order.Type == OrderTypes.Conditional ? _slot.DeleteStopOrder(id, out res) : _slot.DeleteOrder(id, out res); var exception = AlorExceptionHelper.GetException(resCode, res); if (exception != null) { RaiseOrderFailed(order, exception); } order.Messages.Add(res); }
private void SlotError(int slotId, int code, string description) { RaiseConnectionError(AlorExceptionHelper.GetException(code, description)); }