public static void AddPosition2( Framework framework, SmartQuant.Portfolio pf, DateTime dateTime, Instrument instrument, byte currencyId, OrderSide side, SubSide subSide, double qty, double price, string text) { // 强行改变Portfolio,无法存盘,所以被淘汰 var order = new Order(null, pf, instrument, OrderType.Limit, side, qty, price, 0, TimeInForce.Day, 0, text); order.SubSide = subSide; var er = new ExecutionReport(order); er.DateTime = dateTime; er.CurrencyId = currencyId; er.LastQty = qty; er.LastPx = price; er.Text = text; var f = new Fill(er); pf.Add(f); }
public static void AddPosition( Framework framework, SmartQuant.Portfolio pf, DateTime dateTime, Instrument instrument, byte currencyId, OrderSide side, SubSide subSide, double qty, double price, string text) { // 创建Order var order = new Order(null, pf, instrument, OrderType.Limit, side, qty, price, 0, TimeInForce.Day, 0, text); order.SubSide = subSide; // 想记录下来就得注册 framework.OrderManager.Register(order); // 模拟下单 var executionCommand = new ExecutionCommand(ExecutionCommandType.Send, order); executionCommand.DateTime = dateTime; executionCommand.IsLoaded = true; framework.OrderManager.Messages.Add(executionCommand); order.OnExecutionCommand(executionCommand); framework.EventServer.OnEvent(executionCommand); // 直接保存不管用 //if (framework.StrategyManager.Persistence == StrategyPersistence.Save || framework.StrategyManager.Persistence == StrategyPersistence.Full) //{ // framework.OrderServer.Save(executionCommand); //} // 模拟成交 var executionReport = new ExecutionReport(executionCommand); executionReport.OrdStatus = OrderStatus.Filled; executionReport.ExecType = ExecType.ExecTrade; executionReport.DateTime = dateTime; executionReport.LastPx = price; executionReport.LastQty = qty; executionReport.LeavesQty = 0; executionReport.CumQty = qty; executionReport.IsLoaded = true; // 成交不需要额外添加 // framework.OrderManager.Messages.Add(executionReport); order.OnExecutionReport(executionReport); framework.EventServer.OnEvent(executionReport); }
private void SetSubSide(ExecutionCommand cmd, SubSide subSide) { ExecutionCommandSerializer.subSide.Setter(cmd, subSide); }
public static void SetSubSide(this Order order, SubSide side) { SubSideField.Setter(order, side); }
private ExecutionCommand _AddCommand(DateTime datetime, string portfolio, string instrument, OrderType type, OrderSide side, SubSide subSide, double qty, double price = 0, string text = "") { var _provider = framework.ExecutionSimulator; var _portfolio = framework.PortfolioManager.GetByName(portfolio); var _instrument = framework.InstrumentManager.Instruments[instrument]; var order = new Order(_provider, _portfolio, _instrument, type, side, qty, price); order.SubSide = subSide; order.Id = ++last_order_id; order.DateTime = datetime; order.Text = text; var result = new ExecutionCommand(ExecutionCommandType.Send, order); return(result); }
/// <summary> /// 添加定单并全成 /// 主要用于改变仓位 /// /// 可将这个时间的记录改成16点,表示此单是人工修改 /// </summary> /// <param name="messages"></param> /// <param name="datetime"></param> /// <param name="portfolio"></param> /// <param name="instrument"></param> /// <param name="type"></param> /// <param name="side"></param> /// <param name="subSide"></param> /// <param name="qty"></param> /// <param name="price"></param> /// <param name="text"></param> /// <returns></returns> public List <ExecutionMessage> AddOrder(List <ExecutionMessage> messages, DateTime datetime, string portfolio, string instrument, OrderType type, OrderSide side, SubSide subSide, double qty, double price = 0, string text = "Manual" ) { // 撤单与OCA单混在一起,会导致出错 // 一起撤单时,正好撤到下一个的OCA单 var cmd = _AddCommand(datetime, portfolio, instrument, type, side, subSide, qty, price, text); messages.Add(cmd); var rpt = _AddReport(cmd); messages.Add(rpt); return(messages); }