3

量化投研 | 从策略想法到代码,策略如何被高效验证

 3 years ago
source link: https://zhuanlan.zhihu.com/p/364855273
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

量化投研 | 从策略想法到代码,策略如何被高效验证

私信咨询请说明需要了解的 Ricequant 米筐产品名称~


v2-40067f9b7ca111e32a54f68250f5885a_720w.jpg

研究员阿Q用API调取数据之后每天花在数据上的时间变少了,能够更专注于策略本身。

v2-41703d2bd486235a350d3c90a48042fb_720w.jpg

这几天他的脑海中已经有一个新的策略思路了,想确认该模型的有效性

阿Q以往验证策略的时候,都是手动管理:

  • 拉取大量股票信息进行数据整理
  • 根据策略要求进行手动调仓
  • 判断策略结果,手动调整策略

验证策略的整个过程都需要十分专注,一旦看错数据或调错了仓,将会导致策略输出一个错误结果,直接影响到后续投研分析。操作起来也相对繁琐,都是手动完成。

阿Q想,目前自己有一个清晰的策略思路,如果把自己的这种主观交易规则进行数量化会怎么样呢?感受到用 API 调取数据的便利之后, 他开始主动深入了解量化投研。

v2-874800581c1d2b31304e8b584a356a1d_720w.jpg

阿Q不确定,略懂Python的话能否成功把自己的策略想法变成代码进行验证。之前使用的RQSDK套件提供现成的回测框架。万事开头难,先拿常见的MACD策略试试。

MACD策略是这样的:

  • 当DIFF线突破SIGNAL线时开仓,满仓买入指定股票;
  • 当DIFF线突破SIGNAL线时平仓,卖出指定股票。

阿Q查阅API文档,将策略逻辑拆分成以下步骤。

1.分析策略需要用到什么数据。

从策略来看,只需要获取指定股票的每日收盘价格序列,所有的历史市场交易数据都可以从 history_bars 拿到。

2.确定策略的调仓条件。

从策略来看,希望在 DIFF 线突破 SIGNAL 线时全仓买入,在 DIFF 线跌穿 SIGNAL 线时平仓,那首先需要得到 DIFF 线和 SIGNAL 线,可以使用 talib 这个常用的计算股票量价指标的库来进行,把收盘价序列传进库中的 MACD 函数,这个函数会返回 DIFF 线、SIGNAL 线。有了两根线后再判断它们的交叉情况——突破或者跌穿,接着进行调仓。

3.下单交易。

首先需要确定做什么样的组合落单,Ricequant 提供了较为丰富的下单 API,因为是简单的尝试,所以就单独操作一个股票满仓买入或平仓,因此使用 order_target_percent 是最方便的。

确认了以上实现步骤后,接着就是查阅说明文档将想法转换为代码了。

# 利用已有的股票量价指标库,待后续传入收盘价
import talib
# 所选择的证券的数据更新将会触发此段逻辑,这里选择的证券是平安银行000001.XSHE
def handle_bar(context, bar_dict):
    stock = "000001.XSHE"
    # 获取平安银行100根日级别k线的收盘价序列。
    closes = history_bars(stock, 100, "1d", "close")
    # 将收盘价数据传入talib的MACD函数中
    diff, signal, _ = talib.MACD(closes)
    # 判断两根线的交叉情况
    # DIFF线突破SIGNAL线时,DIFF线的最后一个点比SIGNAL线的最后一个点高,且DIFF线的倒数第二个点比SIGNAL线的倒数第二个点低
    if diff[-1] > signal[-1] and diff[-2] < signal[-2]:
        # 全仓买入,将仓位调整100%
        order_target_percent(stock, 1)
    # DIFF线跌穿SIGNAL线时,DIFF线的最后一个点比SIGNAL线的最后一个点低,且DIFF线的倒数第二个点比SIGNAL线的倒数第二个点高
    elif diff[-1] < signal[-1] and diff[-2] > signal[-2]:
        # 清仓,将仓位调整0%
        order_target_percent(stock, 0)
# 制定策略运行的时间和策略账户初始资金100000,-p代表plot,结束后画出收益图
rqalpha-plus run -f strategy.py -s 20190101 -e 20191231 -a STOCK 100000 -

接下来就交给计算机去跑了,很快就出现了策略收益图

至此,这个策略就从阿Q脑海中的想法转换成代码逻辑并得到检验了。

阿Q在本地安装好 RQSDK 量化套件后开箱即用,在已有的回测框架上填充自己的策略想法,转换为代码后高速调取相关数据进行策略验证,把省下的时间用来调整策略,有效提升了投研策略回测的运行效率和自己的投资决策效率。


让计算机自动验证思路,加快策略研发。

投资行为的盈亏依赖于您的独立思考和决策,本文所述观点并不构成投资或任何其他建议,Ricequant 不提供或推荐任何投资品种。股市有风险,投资需谨慎。

图片源自网络。原创文章除特别声明外,欢迎非商业转载,敬请注明出处。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK