pyalgotrade的学习之Position模块
0.前言
pyalgotrade是一款成熟的事件驱动的量化回测系统,特点是灵活且回测速度快,支持tick,秒,分钟,日频及以上的回测,可扩展性较强,本文主要分析postion模块的具体组成和功能作用,作为自我学习和借鉴作用,是一篇学习日志。
postion 是更高级别的下单抽象,该类是主导订单下单-成交的类,并且允许追踪收益和PNL。
1.继承关系
下图是模块之间的继承关系:
1.1 PositionState类:
1.1.1 成员:
无
1.2.1 方法:
1.def onEnter(self, position):抽象类需要填充
2.def canSubmitOrder(self, position, order):抽象类需要填充
3.def onOrderEvent(self, position, orderEvent):抽象类需要填充
4.def isOpen(self, position):抽象类需要填充
5.def exit(self, position, stopPrice=None, limitPrice=None, goodTillCanceled=None):抽象类需要填充
1.2 OpenState类:
1.2.1成员:
无
1.2.2 方法:
1.def onEnter(self, position):
函数说明
从position中获取该提交订单的交易日期时间,并设置position自己的交易日期时间
参数
position:Position类
返回
2.def canSubmitOrder(self, position, order):
函数说明
退出单判断是否是提交单
参数
position:Position类, order:订单类,包括市价,限价,止损单等等。
返回
无
3.def onOrderEvent(self, position, orderEvent):
函数说明
订单事件驱动方法;如果订单是部分成交或者完全成交,则将状态切换为OpenState;否则将状态切换成ClosedState,并调用回调函数。
参数
position:状态类, orderEvent:订单事件类
返回
无
4.def isOpen(self, position):
函数说明
是否是开放的状态
参数
position::Position类
返回
True
5.def exit(self, position, stopPrice=None, limitPrice=None, goodTillCanceled=None):
函数说明
1.首先清空订单事件类,如果position类中有退出单和并且与订单事件中的ID相同
参数
position:Position类, stopPrice:止损价格 ;limitPrice限价价格; goodTillCanceled:是否等待直到取消。
返回
无
1.3 ClosedState类:
1.3.1 成员:
无
1.3.2 方法:
1.def onEnter(self, position):
函数说明
进入的运行状态,状态解注册状态。
参数
position:状态类
返回
无
2.def canSubmitOrder(self, position, order):
函数说明
不存在的类方法,报错
参数
position:状态类, order:订单类
返回
无
3.def onOrderEvent(self, position, orderEvent):
函数说明
不存在的类方法,报错
参数
position:状态类, order:订单类
返回
无
4.def isOpen(self, position):
函数说明
是否是开市状态
参数
position::Position类
返回
False
5.def exit(self, position, stopPrice=None, limitPrice=None, goodTillCanceled=None):
函数说明
退出操作
参数
position状态类, stopPrice:止损价格, limitPrice:限制价格, goodTillCanceled 等待直达成交
返回
无
1.3 WaitingEntryState类:
1.3.1 成员:
无
1.3.2 方法:
1.def canSubmitOrder(self, position, order):
函数说明
测试单子是否可提交订单
参数
position:状态类,order:订单类
返回
2.def onOrderEvent(self, position, orderEvent):
函数说明
订单事件驱动方法;如果订单是部分成交或者完全成交,则将状态切换为OpenState;否则将状态切换成ClosedState,并调用回调函数。
参数
position:状态类,orderEvent:订单事件类
返回
无
3.def isOpen(self, position):
函数说明
是否是开市状态
参数
position::Position类
返回
True
4.def exit(self, position, stopPrice=None, limitPrice=None, goodTillCanceled=None):
函数说明
状态的进入单设置为取消单
参数
position:状态类, stopPrice止损价格, limitPrice:限价价格, goodTillCanceled等待直到取消
返回
无
2.类成员
__state:状态成员
__activeOrders:活跃订单成员
__shares:购买股票数成员
__strategy:所属策略成员
__entryOrder:进入订单类成员
__entryDateTime:进入该状态的时间成员
__exitOrder:退出订单类成员
__exitDateTime:退出该状态的时间成员
__posTracker: 状态追踪器类成员
__allOrNone:全部成交或者全部不成交选项成员
3.类方法
1.def __submitAndRegisterOrder(self, order):
函数说明
提交和注册订单方法;首先在状态成员__state中设置订单order为可提交订单,然后在经纪类中提交订单,最后将单子放入__activeOrders的字典中,并在策略中注册订单状态。
参数
order: 订单类
返回
无
2.def setEntryDateTime(self, dateTime):
函数说明
设置类成员__entryDateTime的数值。
参数
dateTime:时间日期类
返回
无
3.def setExitDateTime(self, dateTime):
函数说明
设置类成员__exitDateTime的数值。
参数
dateTime:时间日期类
返回
无
4.def switchState(self, newState):
函数说明
设置类成员__state的值,并运行相应的onEnter函数。
参数
newState:position类
返回
无
5.def getStrategy(self):
函数说明
返回该状态所属策略__strategy。
参数
无
返回
__strategy:所属策略
6.def getLastPrice(self):
函数说明
获取最后的订单价格。
参数
无
返回
ret:最后的订单价格
7.def getActiveOrders(self):
函数说明
返回类成员__activeOrders的列表表达。
参数
无
返回
__activeOrders的列表表达
8.def getShares(self):
函数说明
返回类成员__shares。
参数
无
返回
__shares:股票数
9.def entryActive(self):
函数说明
判断进入的订单是否活跃
参数
无
返回
ret:判断进入的订单是否活跃
10.def entryFilled(self):
函数说明
判断进入的订单是否成交
参数
无
返回
ret:判断进入的订单是否成交
11.def exitActive(self):
函数说明
判断退出的订单是否活跃
参数
无
返回
ret:判断退出的订单是否成交
12.def exitFilled(self):
函数说明
判断退出的订单是否成交
参数
无
返回
ret:判断退出的订单是否成交
13.def getEntryOrder(self):
函数说明
获取类成员__entryOrder(进入订单)
参数
无
返回
获取类成员__entryOrder(进入订单)
14.def getExitOrder(self):
函数说明
获取类成员__exitOrder(退出订单)
参数
无
返回
获取类成员__exitOrder(退出订单)
15.def getInstrument(self):
函数说明
返回进入订单的机构号
参数
无
返回
ret:返回进入订单的机构号
16.def getReturn(self, includeCommissions=True):
函数说明
获取最后的价格,并放入状态追踪器中计算收益。
参数
includeCommissions:是否使用交易模型
返回
ret:该状态的累计收益
17.def getPnL(self, includeCommissions=True):
函数说明
获取最后的价格,并放入状态追踪器中计算损益。
参数
includeCommissions:是否使用交易模型
返回
ret:该状态的累计损益
18.def cancelEntry(self):
函数说明
取消进入订单
参数
无
返回
无
19.def cancelExit(self):
函数说明
取消退出订单
参数
无
返回
无
20.def exitMarket(self, goodTillCanceled=None):
函数说明
提交市价单并关闭状态。
参数
goodTillCanceled:直达成交或取消标志
返回
无
21.def exitLimit(self, limitPrice, goodTillCanceled=None):
函数说明
提交限价单并关闭状态。
参数
limitPrice:限价价格, goodTillCanceled:直达成交或取消标志
返回
无
22.def exitStop(self, stopPrice, goodTillCanceled=None):
函数说明
提交限价单并关闭状态。
参数
limitPrice:限价价格, goodTillCanceled:直达成交或取消标志
返回
无
23.def exitStopLimit(self, stopPrice, limitPrice, goodTillCanceled=None):
函数说明
提交限价止损单并关闭状态。
参数
stopPrice:止损价格, limitPrice:限价价格, goodTillCanceled:直达成交或取消标志
返回
无
24.def _submitExitOrder(self, stopPrice, limitPrice, goodTillCanceled):
函数说明
提交退出订单;首先创建退出订单;设置goodTillCanceled和__allOrNone的标志位;然后提交和注册订单,并将__exitorder设置为该订单
参数
stopPrice:止损价格, limitPrice:限价价格, goodTillCanceled:直达成交或取消标志
返回
无
25.def onOrderEvent(self, orderEvent):
函数说明
更新订单事件的订单;如果订单事件类是活跃的加入类成员__activeOrders中,同时修改self.__share类股票数;最后调用self.__state的onOrderEvent函数。
参数
orderEvent:订单事件类
返回
26.def __updatePosTracker(self, orderEvent):
函数说明
更新追踪器的状态;首先判断订单是否是成交或者部分成交,接着讲订单的价格,费率和成交量写进追踪器中。
参数
orderEvent:订单事件类
返回
无
27.def buildExitOrder(self, stopPrice, limitPrice):抽象类自定义
28.def isOpen(self):
函数说明
获取类成员__state的状态是否是开盘状态
参数
无
返回
ret:获取类成员__state的状态是否是开盘状态
29.def getAge(self):
函数说明
获取开盘状态的久期
参数
无
返回
ret:开盘时间到现在(或者结束时间(该状态已经关闭))的时间。
4.子类情况
4.1 LongPosition类
4.1.1 成员
除父类继承外无
4.1.2 方法
1.def buildExitOrder(self, stopPrice, limitPrice):
函数说明
创建退出订单
参数
stopPrice:止损价格, limitPrice:限价价格,
返回
ret:order订单类
4.2 ShortPosition类
4.2.1 成员
除父类继承外无
4.2.2 方法
1.def buildExitOrder(self, stopPrice, limitPrice):
函数说明
创建退出订单
参数
stopPrice:止损价格, limitPrice:限价价格,
返回
ret:order订单类
4.结束语
Position类是订单类的更加高级的封装,在整个回测系统中占用显著地位。