public BfParentOrderRequest CreateOCO(BfParentOrderRequestParameter first, BfParentOrderRequestParameter second, TimeSpan?minuteToExpire = null, BfTimeInForce timeInForce = BfTimeInForce.NotSpecified) { var request = new BfParentOrderRequest { OrderMethod = BfOrderType.OCO }; if (minuteToExpire.HasValue) { request.MinuteToExpire = (int)minuteToExpire.Value.TotalMinutes; } request.TimeInForce = timeInForce; request.Paremters.Add(first); request.Paremters.Add(second); CheckParentOrderRequestValid(request); return(request); }
// Market/Limit/Stop/StopLimit/Trail of parent order public BfxChildOrder(BfParentOrderRequestParameter request) { ProductCode = request.ProductCode; OrderType = request.ConditionType; Side = request.Side; OrderSize = request.Size; if (OrderType == BfOrderType.Limit || OrderType == BfOrderType.StopLimit) { OrderPrice = request.Price; } if (OrderType == BfOrderType.Stop || OrderType == BfOrderType.StopLimit) { TriggerPrice = request.TriggerPrice; } if (OrderType == BfOrderType.Trail) { TrailOffset = request.Offset; } // ChildOrderAcceptanceId will be update when update order event }
public BfxChildOrder(BfParentOrderRequestParameter request) { RequestElement = request; }
static void ParentOrderMain() { while (true) { Console.WriteLine("======== Parent order operations"); Console.WriteLine("S)top Stop L)imit T)rail"); Console.WriteLine("I)FD O)CO IFD)OCO"); Console.WriteLine(""); Console.WriteLine("Time in F)orce"); Console.WriteLine("M)inutes to expire"); Console.WriteLine(""); Console.WriteLine("C) Cancel parent order"); Console.WriteLine("G)et parent orders"); Console.WriteLine(""); Console.WriteLine("R) Return to main"); try { switch (GetCh()) { case 'S': { var request = BfParentOrderRequest.Stop(ProductCode, BfTradeSide.Buy, _ticker.BestAsk + UnexecuteGap, OrderSize); var content = _client.SendParentOrder(request).GetContent(); _parentOrderAcceptanceIds.Enqueue(content.ParentOrderAcceptanceId); } break; case 'L': { var request = BfParentOrderRequest.StopLimit(ProductCode, BfTradeSide.Buy, _ticker.BestAsk + UnexecuteGap, _ticker.BestAsk + UnexecuteGap, OrderSize); var content = _client.SendParentOrder(request).GetContent(); _parentOrderAcceptanceIds.Enqueue(content.ParentOrderAcceptanceId); } break; case 'T': { var request = BfParentOrderRequest.Trail(ProductCode, BfTradeSide.Buy, UnexecuteGap, OrderSize); var content = _client.SendParentOrder(request).GetContent(); _parentOrderAcceptanceIds.Enqueue(content.ParentOrderAcceptanceId); } break; case 'I': { var request = BfParentOrderRequest.IFD( BfParentOrderRequestParameter.Limit(ProductCode, BfTradeSide.Sell, _ticker.BestAsk + UnexecuteGap, OrderSize), BfParentOrderRequestParameter.Limit(ProductCode, BfTradeSide.Buy, _ticker.BestBid - UnexecuteGap, OrderSize) ); var content = _client.SendParentOrder(request).GetContent(); _parentOrderAcceptanceIds.Enqueue(content.ParentOrderAcceptanceId); } break; case 'O': { var request = BfParentOrderRequest.OCO( BfParentOrderRequestParameter.Limit(ProductCode, BfTradeSide.Sell, _ticker.BestAsk + UnexecuteGap, OrderSize), BfParentOrderRequestParameter.Limit(ProductCode, BfTradeSide.Buy, _ticker.BestBid - UnexecuteGap, OrderSize) ); var content = _client.SendParentOrder(request).GetContent(); _parentOrderAcceptanceIds.Enqueue(content.ParentOrderAcceptanceId); } break; case 'D': { var request = BfParentOrderRequest.IFDOCO( BfParentOrderRequestParameter.Limit(ProductCode, BfTradeSide.Sell, _ticker.BestAsk + UnexecuteGap, OrderSize), BfParentOrderRequestParameter.Limit(ProductCode, BfTradeSide.Sell, _ticker.BestAsk + UnexecuteGap, OrderSize), BfParentOrderRequestParameter.Limit(ProductCode, BfTradeSide.Buy, _ticker.BestBid - UnexecuteGap, OrderSize) ); var content = _client.SendParentOrder(request).GetContent(); _parentOrderAcceptanceIds.Enqueue(content.ParentOrderAcceptanceId); } break; case 'F': break; case 'M': break; case 'C': { var resp = _client.CancelParentOrder(ProductCode, parentOrderAcceptanceId: _parentOrderAcceptanceIds.Dequeue()); if (!resp.IsErrorOrEmpty) { // Cancel order sent } } break; case 'G': { var resp = _client.GetParentOrders(ProductCode); if (resp.IsOk) { var jobj = JsonConvert.DeserializeObject(resp.Json); var json = JsonConvert.SerializeObject(jobj, Formatting.Indented); Console.WriteLine(json); } } break; case 'R': return; } } catch (Exception ex) { Console.WriteLine($"{ex.Message}"); } } }