最小量化交易系统笔记


这是第八次课老师给的代码,这里笔者对系统写点中文注释。
先用visio 画画图。
lianghu.PNG


接下来写写注释,以下类的init函数忽略。
event.py
class Event(object):事件基类,提供子类的一个接口
class MarketEvent(Event):处理市场数据更新,触发Strategy生成交易信号。
class SignalEvent(Event):处理Strategy发来的信号,信号会被Portfolilo 接收和执行
class OrderEvent(Event):处理向执行系统提交的订单信息
class FillEvent(Event):封装订单执行。存储交易数量、价格、佣金和手续费。
|-calculate_ib_commission(self):计算Interactive Brokers 交易费用

data.py
class DataHandler(object):数据处理基类包括历史和实际数据处理,对每个请求代码输出数据条
|-get_latest_bar(self,symbol):返回最近的数据条目
|-get_latest_bars(self,symbol,N=1):返回最近N条数据条目
|-get_latest_bar_datetime(self,symbol):返回数据条目的Python datetime object
|-get_latest_bar_value(self,symbol,val_type):返回数据条目的Open,High,Low,Close,Volume,OI数据
|-get_latest_bars_values(self,symbol,val_type,N=1):返回N条数据,没有则返回N-k条数据
|-update_bars(self):数据条目放到序列中
class HistoricCSVDataHandler(DataHandler):具体的子类实现,实现读取历史CSV文件,提供类似交易场景的“最近”数据的概念。

strategy.py:封装对数据的计算,并且生成相应的信号
class Strategy(object):策略处理基类,可用于处理历史和实际交易数据,只需把数据存到队列中。
|-calculate_signals(self):计算信号

performance.py:评估策略效果
|-create_sharpe_ratio(returns,periods=252):创建基于策略的Sharpe比率,基准为0
|-create_drawdowns(pnl):计算PNL的最大回撤和回撤时间

portfolio.py:
class Portfolio(object):资产组合类,处理持仓和市场价值。postion DataFrame存储用时间做索引的持仓数量;holdings DataFrame存储特定时间索引对应代码的现金和总市场持仓价值,以及资产组合总量的百分比变化
|-construct_all_positions(self):使用开始时间字段确定时间索引开始时间,构建持仓列表
|-construct_all_holdings(self):使用开始时间字段确定时间索引开始时间,构建持仓列表。保存所有资产组合的开始时间的价值。
|-construct_current_holdings(self):保存所有资产组合的当前价值
|-update_timeindex(self,event):在持仓矩阵中添加一条新的记录,反映了当前持仓的价值
|-update_positions_from_fill(self,fill):获取Fill object 更新持仓矩阵
|-update_holdings_from_fill(self,fill):获取Fill object 更新持仓矩阵并反映持仓市值
|-update_fill(self,event):收到FillEvent,更新投资组合当前持仓和市值
|-generate_naive_order(self,signal):生成一个订单对象,没有风险管理和头寸考虑
|-update_signal(self,event):根据SignalEvent生成新的订单,
|-create_equity_curve_dateframe(self):从all_holdings创建一个pandas DataFrame
|-output_summary_stats(self):创建资产组合总结统计列表

execution.py
class ExecutionHandler(object):order与fill之间的交互基类,可用于实际或模拟成交。
|-execute_order(self,event):获取Order event并执行,产生Fill Event并放到队列
SimulatedExecutionHandler(ExecutionHandler):模拟执行所有order object转为成交对象,不考虑延时,滑价和成交比率影响
|-execute_order(self,event):和该类描述一致

backtest.py
class Backtest(object):这个类进行驱动回测设置与组成
|-_generate_trading_instances(self):从不同类型产生交易实例
|-_run_backtest(self):回测,根据不同事件执行不同的方法
|-_output_performance(self):从回测中得到策略的表现
|-simulate_trading(self):模拟回测并输出投资组合表现

mac.py
class MovingAverageCrossStrategy(Strategy):移动平均跨越策略。用短期/长期移动平均值进行基本的移动平均跨越的实现。
|-_calculate_initial_bought(self):bought dict 添加key,并对所有代码设置为out
|-calculate_signals(self, event):基于MAC,SMA生成一组新的信号,进入market就是短期移动平均超过长期移动平均
|-main:执行回测,这里代码默认使用苹果股票,读者可到雅虎财经下载。得到总收益,Sharpe比率,最大回测,回撤时间等。
已邀请:

liuting

赞同来自:


你好能不能给我分代码,邮件 727998074@qq.com 谢谢楼主

要回复问题请先登录注册

返回顶部