7. 其它常见问题 - 7.2 如何实现限价单和市价单的开平仓

优质
小牛编辑
130浏览
2023-12-01

OpenQuant支持的订单类型很多,但是国内交易市场很多不支持。下面主要介绍几种国内市场支持的订单类型,限价单和市价单的开平仓。
想要实现国内开平仓操作,需要下载安装64位CTP插件,并在项目中引用QuantBox.Extensions,下载地址:http://www.smartquant.cn/cjxz.html

这里有个简单的例子描述如何开多和平多,并直接下单(开空和平空和这个类似,方向相反而已)。

  1. using QuantBox.Extensions;
  2. Order openLimitOrder;
  3. Order openMarketOrder;
  4. private Order closeLimitOrder;
  5. private void OnBar(Instrument instrument,Bar bar)
  6. {
  7. //开仓买限价单
  8. openLimitOrder = BuyLimitOrder(instrument, 1, bar.Open, "buy limit order");
  9. openLimitOrder.Open();
  10. Send(openLimitOrder);
  11. AddReminder(Clock.DateTime.AddMinutes(1),"cancel buy limit order");//添加定时器,下单1分钟后还未成交的话做撤单处理
  12. //开仓买市价单
  13. openMarketOrder = BuyOrder(instrument, 2, "buy market order");//买市价单
  14. openMarketOrder.Open();
  15. Send(openMarketOrder);
  16. }
  17. protected override void OnOrderFilled(Order order)
  18. {
  19. if (order.Text == "buy market order")
  20. {
  21. //平仓卖限价单
  22. closeLimitOrder = SellLimitOrder(order.Instrument, order.Qty, order.Price + order.Instrument.TickSize * 2);
  23. closeLimitOrder.Close();
  24. Send(closeLimitOrder);
  25. }
  26. }
  27. protected override void OnReminder(DateTime dateTime, object data)
  28. {
  29. if (data != null && data.ToString() == "cancel buy limit order")
  30. { //是撤单定时器触发的
  31. if (!openLimitOrder.IsDone)
  32. {//openLimitOrder还未成交
  33. Cancel(openLimitOrder);
  34. }
  35. }
  36. }