Esempio n. 1
0
        private void RealTimeDataReader_RealTimeChanged(object sender, RealTimeChangedArgument e)
        {
            lock (lockObj)
            {
                this.time = e.Time;
                //过了新的一天,昨日的委托需要全部清除
                if (e.TradingDayChanged)
                {
                    CancelAllOrder();
                    return;
                }

                loopOrders.Clear();
                loopOrders.AddRange(waitingOrders);

                //TODO 价格变化后需要修改现金余额
                for (int i = 0; i < loopOrders.Count; i++)
                {
                    OrderInfo order = loopOrders[i];
                    if (AccountSetting.TradeType == AccountTradeType.DELAYTIME)
                    {
                        double delayTime   = AccountSetting.DelayTime;
                        double betweenTime = e.Time - order.OrderTime;
                        if (betweenTime <= delayTime)
                        {
                            continue;
                        }
                    }
                    else if (accountSetting.TradeType == AccountTradeType.DELAYTICK)
                    {
                        ITickData tickData = this.realTimeDataReader.GetRealTimeData(order.Instrumentid).GetTickData();
                        if (tickData != null)
                        {
                            if (this.dic_Code_OrderDelayInfo.ContainsKey(order.OrderID))
                            {
                                OrderDelayInfo delayInfo = this.dic_Code_OrderDelayInfo[order.OrderID];
                                int            tickIndex = delayInfo.orderTickIndex;
                                int            delayTick = AccountSetting.DelayTick;
                                if (tickData.BarPos - tickIndex < delayTick)
                                {
                                    continue;
                                }
                            }
                        }
                    }
                    DoTrade(order);
                }
            }
        }
Esempio n. 2
0
        private OrderInfo OpenInternal(string code, double price, OrderSide orderSide, int mount)
        {
            //准备委托
            double    buymoney;
            OrderInfo orderInfo = PrepareOrderInfo(code, price, orderSide, mount, out buymoney);

            if (orderInfo == null)
            {
                return(null);
            }

            //将委托加入列表,并锁定金额
            this.waitingOrders.Add(orderInfo);
            this.historyOrders.Add(orderInfo);
            this.money -= buymoney;
            this.dic_OrderID_LockMoney.Add(orderInfo.OrderID, buymoney);

            //执行委托后事件
            if (orderInfo != null)
            {
                OnReturnOrder?.Invoke(this, ref orderInfo);
            }

            //立即成交或用市场价格成交,则立即执行交易
            if (AccountSetting.TradeType == AccountTradeType.IMMEDIATELY ||
                accountSetting.TradeType == AccountTradeType.MARKETPRICE
                )
            {
                this.DoTrade(orderInfo);
            }
            else if (AccountSetting.TradeType == AccountTradeType.DELAYTICK)
            {
                ITickData tickData = this.realTimeDataReader.GetRealTimeData(code).GetTickData();
                if (tickData != null)
                {
                    OrderDelayInfo delayInfo = new OrderDelayInfo();
                    delayInfo.orderTickIndex = tickData.BarPos;
                    this.dic_Code_OrderDelayInfo.Add(orderInfo.OrderID, delayInfo);
                }
            }
            return(orderInfo);
        }