pyalgotrade的学习之Position模块

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类是订单类的更加高级的封装,在整个回测系统中占用显著地位。

``` {—————————————— 系统参数模块 ——————————————} {——估值体系优化——} DYNPETTM:=IF(FINANCE(33)>0, CLOSE/(FINANCE(33)/FINANCE(1)+0.0001), 1000); PB_RATE:=IF(FINANCE(5)>0, CLOSE/FINANCE(5), 1000); PEG_VAL:=DYNPETTM/MAX(FINANCE(54)/FINANCE(34)*100,0.0001); {——波动率自适应——} VOLATILITY:=STD(CLOSE,20)/MA(CLOSE,20); VAR_PERIOD:=IF(VOLATILITY<0.08,55,IF(VOLATILITY<0.15,34,21)); FAST_LEN:=MAX(CEILING(VAR_PERIOD*0.382),5); SLOW_LEN:=MIN(FLOOR(VAR_PERIOD*1.618),60); SGNL_LEN:=IF(VAR_PERIOD<=21,7,9); {——多周期参数——} KDJ_N:=IF(VOLATILITY<0.1,14,9); RSI_N:=IF(VOLATILITY<0.15,14,7); MOM_N:=IF(VOLATILITY<0.1,12,5); {新增动量周期参数} {—————————————— 核心指标模块 ——————————————} {——MACD增强——} DIF:=EMA(CLOSE,FAST_LEN) - EMA(CLOSE,SLOW_LEN); DEA:=EMA(DIF,SGNL_LEN); MACD:=2*(DIF-DEA); MACD_ANGLE:=ATAN((DIF-REF(DIF,1))/0.1)*180/3.1416; {——均线系统——} MA5:=MA(CLOSE,5); MA10:=MA(CLOSE,10); MA20:=EMA(CLOSE,20); MA60:=EMA(CLOSE,60); TREND_ARR:=MA5>MA10 AND MA10>MA20 AND MA20>MA60; {——量能优化——} VOL_MA5:=MA(VOL,5); VOL_MA20:=EMA(VOL,20); VOL_SIG:=VOL>VOL_MA20*1.5 AND VOL>REF(HHV(VOL,5),1)*1.2; {——动量确认——} MOMENTUM:=EMA(C,5)/REF(EMA(C,MOM_N),5)-1; WEEK_CHG:=(C-REF(C,5))/REF(C,5)*100; MOM_CONF:=EMA(C,5)>EMA(C,13) AND C>HHV(C*0.75,34); {——KDJ优化——} RSV:=(C-LLV(L,KDJ_N))/(HHV(H,KDJ_N)-LLV(L,KDJ_N)+0.0001)*100; K:=SMA(RSV,3,1); D:=SMA(K,3,1); J:=3*K-2*D; {—————————————— 信号合成模块 ——————————————} VALUATION:=DYNPETTM<35 AND PB_RATE<4.5 AND PEG_VAL<1.2; TREND_SIG:=TREND_ARR AND C>MA60*1.05 AND C<MA60*1.25; MOM_SIG:=CROSS(DIF,DEA) AND MACD>REF(MACD,1); PRICE_VOL:=VOL_SIG AND ABS((C-O)/(H-L+0.0001))>0.6; {——风险过滤——} BETA_COEF:=SLOPE(C/INDEXC,60)*STD(C,60)/STD(INDEXC,60); RISK_FLT:=BETA_COEF>=0.8 AND BETA_COEF<=1.2 AND FINANCE(42)/FINANCE(1)<0.6 AND FINANCE(10)/FINANCE(1)>0.3; {——周期协同——} CY_MON:=MA(C,10)>REF(MA(C,10),3) AND MA(C,20)>REF(MA(C,20),5); CY_WK_DIFF:=EMA(C,12)-EMA(C,26); CY_WK_DEA:=EMA(CY_WK_DIFF,9); CY_WK:=CY_WK_DIFF>REF(CY_WK_DEA,1); {——最终信号——} SCAN_SIG:=VALUATION AND CY_MON AND CY_WK AND COUNT(TREND_SIG AND MOM_SIG,5)>=2 AND WEEK_CHG>HHV(WEEK_CHG,20)*0.7; FINAL_SIGNAL:FILTER(SCAN_SIG,5),COLORGREEN;```你的身份是高级编程技术专家,精通各类编程语言,能对编程过程中的各类问题进行分析和解答。我的问题是【我正在编辑【通达信量化择时周线选股】代码,我的选股逻辑是什么?用2015-2024年全A股验证选股逻辑的准确性,并提出优化建议和方案,是否具有可操作性?
最新发布
03-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值