Esempio n. 1
0
        public override Trade FilterTrade(Trade trade, string symbol)
        {
            // 进行Trade过滤下面只给一个示例
            return trade;

            Trade lastGoodTrade = null;

            //检查数据表中是否有正常交易
            if (goodTrades.TryGetValue(symbol, out lastGoodTrade))
            {
                // 检查是否有数据特征

                //检查新的交易与上一个正常交易相比,价差是否在0.5%以上
                if (Math.Abs((1 - lastGoodTrade.Price / trade.Price) * 100) < 0.5)
                {
                    //是正常交易,就更新为上一个正常交易
                    goodTrades[symbol] = trade;
                    return trade;
                }
                else
                {
                    return null;
                }
            }
            else
            {
                // 将第一次交易数据作为初始正常数据
                goodTrades[symbol] = trade;
                // 将此数据添加到数据表里(第一个数据)
                return trade;
            }
        }
            public override OpenQuant.API.Trade FilterTrade(OpenQuant.API.Trade trade, string symbol)
            {
                _trades[symbol] = trade;

                // 在这之前可以做自己的过滤
                Trade t = trade;

                if (filter != null)
                {
                    t = filter.FilterTrade(trade, symbol);
                }
                if (t != null)
                {
                    EmitTrade(symbol, Clock.Now, t.Price, t.Size);
                }
                else
                {
                    return(null);
                }

                Trade t1, t2;

                if (_trades.TryGetValue("IF1306", out t1) &&
                    _trades.TryGetValue("IF1307", out t2))
                {
                    EmitTrade("IF1306-IF1307", Clock.Now, t1.Price - t2.Price, 0);
                    EmitTrade("IF1306-IF1307*2", Clock.Now, t1.Price - t2.Price * 2.0, 0);
                }

                // 注意,这个地方一定要返回null
                // 这实际上是让插件内部的Emit不调用
                return(null);
            }
Esempio n. 3
0
 public override void OnTrade(Trade trade)
 {
     // 插件3.8.2.0 中开始可用,是将Trade数据中的深度数据取出
     if (DataConvert.TryConvert(trade, ref DepthMarketData))
     {
         Console.WriteLine("OnTrade " + DepthMarketData.LastPrice);
         Console.WriteLine("OnTrade " + DepthMarketData.UpperLimitPrice);
     }
 }
Esempio n. 4
0
        public override void OnTrade(Trade trade)
        {
            //每次在行情到来时更新最高、最低和成交量
            dbHigh = Math.Max(trade.Price, dbHigh);
            dbLow = Math.Min(trade.Price, dbLow);
            dbClose = trade.Price;
            dbVolume += trade.Size;

            //其他代码
        }
Esempio n. 5
0
        public override void OnTrade(Trade trade)
        {
            server.SetData(TOPIC_TRADE_PRICE,
                Instrument.ToString(),
                1,
                trade.Price
                );

            server.SetData(TOPIC_TRADE_SIZE,
                Instrument.ToString(),
                1,
                trade.Size
                );
        }
Esempio n. 6
0
        public static bool TryConvert(Trade trade, ref DFITCDepthMarketDataField DepthMarketData)
        {
            if (tradeField == null)
            {
                tradeField = typeof(Trade).GetField("trade", BindingFlags.NonPublic | BindingFlags.Instance);
            }

            XSpeedTrade t = tradeField.GetValue(trade) as XSpeedTrade;
            if (null != t)
            {
                DepthMarketData = t.DepthMarketData;
                return true;
            }
            return false;
        }
            public override Bar FilterBarOpen(Bar bar, string symbol)
            {
                _bar_trade[symbol] = new Trade(Clock.Now, bar.Close, (int)bar.Volume);

                Trade t1, t2;

                if (_bar_trade.TryGetValue("AAPL", out t1)
                    && _bar_trade.TryGetValue("MSFT", out t2))
                {
                    EmitTrade("AAPL-MSFT", Clock.Now, t1.Price - t2.Price, 0);
                }

                // 注意,这个地方要返回
                // 不修改默认行情
                return bar;
            }
Esempio n. 8
0
 public override void OnTrade(Trade trade)
 {
     // 只用第二个合约的生成,数量约为第二个合约的Trade数
     // 假如第一个是IF1309,第二个是399300.SZ,这下生成的就6秒一次了
     // 按自己需求调
     if (Instrument == Instrument2)
     {
         if (Instrument1.Trade != null
                 && Instrument2.Trade != null)
         {
             double Price = Instrument1.Trade.Price - Instrument2.Trade.Price;
             int Size = Math.Min(Instrument1.Trade.Size, Instrument2.Trade.Size);
             Trade t = new Trade(Clock.Now, Price, Size);
             DataManager.Add(Instrument3, t);
         }
     }
 }
Esempio n. 9
0
        public override void OnBarSlice(long size)
        {
            // 为了保证采样间隔一样,用户按自己的需求改
            if (size != barSize)
            {
                return;
            }

            // 如果添加了两个合约就会触发两次,只选后面一次保存
            if (Instrument == Instrument2)
            {
                // 本想保存成Bar,细想没必要,保存了Trade,用户自己手工压缩成Bar就成
                double Price = Instrument1.Bar.Close - Instrument2.Bar.Close;
                Trade t = new Trade(Clock.Now, Price, 0);
                // 注释了。在前面的OnTrade可以生成更细致的Trade
                //DataManager.Add(Instrument3,t);
            }
        }
Esempio n. 10
0
        public static bool TryConvert(Trade trade, ref CThostFtdcDepthMarketDataField DepthMarketData)
        {
#if OQ
            if (tradeField == null)
            {
                tradeField = typeof(Trade).GetField("trade", BindingFlags.NonPublic | BindingFlags.Instance);
            }

            CTPTrade t = tradeField.GetValue(trade) as CTPTrade;
#elif QD
            CTPTrade t = trade as CTPTrade;
#endif           
            if (null != t)
            {
                DepthMarketData = t.DepthMarketData;
                return true;
            }

            return false;
        }
Esempio n. 11
0
 public override void OnTrade(Trade trade)
 {
     Process();
 }
        public override void OnTrade(Trade trade)
        {
            do
            {
                // 尾盘平仓
                if (0 != ExitOnClose(300,""))
                    break;

                // 跟踪止损
                TrailingStop(trade.Price, 5, StopMode.Absolute, "");

            } while (false);
            

            base.OnTrade(trade);
        }
Esempio n. 13
0
		public void Add(Trade trade)
		{
			this.series.Add(trade.trade);
		}
Esempio n. 14
0
 public override void OnTrade(Trade trade)
 {
     // 模拟行情时,不保存
     if (StrategyMode.Simulation != Mode)
         DataManager.Add(Instrument, trade);
 }
Esempio n. 15
0
		public static void Add(Instrument instrument, Trade trade)
		{
			SmartQuant.Instruments.Instrument instrument2 = Map.OQ_SQ_Instrument[instrument] as SmartQuant.Instruments.Instrument;
			SmartQuant.Instruments.DataManager.Add(instrument2, trade.trade);
		}
Esempio n. 16
0
 public void EmitTrade(Instrument instrument, Trade trade)
 {
   if (!(this.MarketDataProvider.provider is ISimulationMarketDataProvider))
     return;
   (this.MarketDataProvider.provider as ISimulationMarketDataProvider).EmitTrade((IFIXInstrument) instrument.instrument, trade.trade);
 }
Esempio n. 17
0
 public override void OnTrade(Trade trade)
 {
     //lock(this)
     {
         Process();
     }
     HiLoAfterEntry(trade.Price);
 }
Esempio n. 18
0
 public override void OnTrade(Trade trade)
 {
     Process();
     HiLoAfterEntry(trade.Price);
 }
Esempio n. 19
0
 public void EmitTrade(Trade trade)
 {
   this.EmitTrade(this.Instrument, trade);
 }
Esempio n. 20
0
		public virtual Trade FilterTrade(Trade trade, string symbol)
		{
			return trade;
		}
Esempio n. 21
0
 public virtual void OnTrade(Trade trade)
 {
 }