OrderBook更新的处理

Discussion in 'QuantDeveloper' started by morosetrue, Apr 13, 2009.

  1. 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个线程。希望大家提供更好的方法。
     
  2. 如果要研究这类数据的话,美国股票市场大概1天1张DVD。如果充分压缩的话。不含期权等衍生物。
     
  3. 数据多少不是问题。因为算法设计的原理不依靠数据挖掘,或者历史数据backtesting. 打个比方,我们主要是设计蚂蚁碰到石头后,根据石头的形状进行反应。难点或者数据测试是看,能不能把碰到的石头归类成形状,看可能的模糊描述的准确度,看可能的出现错误描述的情形。这样让最近一周的数据走一趟,心理就有把握,描述的成功率是多少,失败情形是什么,就可以上线实盘,配合严格止损,风险可控。 所以不需要跑大量的历史数据,或者说跑历史的数据的方法不一样。不是调参数,看成功率,收益,资金回撤等指标,而是,用人眼跟随历史数据只走一遍,看人(想表达的买)和机器(实际算法执行的买) 之间的区别。

     
  4. 楼上高见。
    如果是太空蚂蚁(spaceant),情况可能复杂一些。
     
  5. hylt老大,没有搜到space ant 与trading 联系的文章。
     
  6. ”人肉数据挖掘“ :D
     


  7. 兄台可是指这类的问题?
    http://armorgames.com/play/522/antbuster

    其实玩儿几次,就可以看出这个方法的问题了。
    请问兄台想如何解决这些问题呢?:)
    ---------------------------------

    另外:用人眼跟随历史数据只走一遍,看人(想表达的买)和机器(实际算法执行的买) 之间的区别

    找出区别,那这个区别怎么用呢?直接应用买卖的话,会造成规则混乱,交易效果打折扣。
     
  8. 就是不断改进算法,减少区别到人能够容忍的程度