Code: //MyTimer 可以额外传递品种,用于ATSCross public class MyTimer: System.Timers.Timer { public MyTimer() { } public string Symbol; } myTimer.AutoReset=false; myTimer.Elapsed+=OnTimedEvent; public void OnTimedEvent(object source, ElapsedEventArgs e) { MyTimer timer=source as MyTimer; string Symbol=timer.Symbol; OrderBookList.Add(InstrumentManager.Instruments[Symbol].OrderBook); // do sth; } //订阅MarketDepth事件 InstrumentManager.Instruments[WarrantSymbol].NewMarketDepth+=OnMarketDepth public void OnMarketDepth(object sender, MarketDepthEventArgs arg) { timer.Interval=10;//考虑timer的精度是1毫秒 timer.Enabled=true; } 测试效果是,20个品种,timer.interval 选2毫秒没有问题,每个品种对应10个marketdepth到来的时间不过1毫秒。 目前的问题是,每个品种,都要单独开一个timer在backpool线程。所以2000个品种,就要开2000个线程。希望大家提供更好的方法。
数据多少不是问题。因为算法设计的原理不依靠数据挖掘,或者历史数据backtesting. 打个比方,我们主要是设计蚂蚁碰到石头后,根据石头的形状进行反应。难点或者数据测试是看,能不能把碰到的石头归类成形状,看可能的模糊描述的准确度,看可能的出现错误描述的情形。这样让最近一周的数据走一趟,心理就有把握,描述的成功率是多少,失败情形是什么,就可以上线实盘,配合严格止损,风险可控。 所以不需要跑大量的历史数据,或者说跑历史的数据的方法不一样。不是调参数,看成功率,收益,资金回撤等指标,而是,用人眼跟随历史数据只走一遍,看人(想表达的买)和机器(实际算法执行的买) 之间的区别。
兄台可是指这类的问题? http://armorgames.com/play/522/antbuster 其实玩儿几次,就可以看出这个方法的问题了。 请问兄台想如何解决这些问题呢? --------------------------------- 另外:用人眼跟随历史数据只走一遍,看人(想表达的买)和机器(实际算法执行的买) 之间的区别 找出区别,那这个区别怎么用呢?直接应用买卖的话,会造成规则混乱,交易效果打折扣。