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);
        }
Exemplo n.º 3
0
 private void SetSubSide(ExecutionCommand cmd, SubSide subSide)
 {
     ExecutionCommandSerializer.subSide.Setter(cmd, subSide);
 }
Exemplo n.º 4
0
 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);
        }