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); }
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); } }
public override void OnTrade(Trade trade) { //每次在行情到来时更新最高、最低和成交量 dbHigh = Math.Max(trade.Price, dbHigh); dbLow = Math.Min(trade.Price, dbLow); dbClose = trade.Price; dbVolume += trade.Size; //其他代码 }
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 ); }
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; }
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); } } }
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); } }
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; }
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); }
public void Add(Trade trade) { this.series.Add(trade.trade); }
public override void OnTrade(Trade trade) { // 模拟行情时,不保存 if (StrategyMode.Simulation != Mode) DataManager.Add(Instrument, trade); }
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); }
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); }
public override void OnTrade(Trade trade) { //lock(this) { Process(); } HiLoAfterEntry(trade.Price); }
public override void OnTrade(Trade trade) { Process(); HiLoAfterEntry(trade.Price); }
public void EmitTrade(Trade trade) { this.EmitTrade(this.Instrument, trade); }
public virtual Trade FilterTrade(Trade trade, string symbol) { return trade; }
public virtual void OnTrade(Trade trade) { }