返回介绍

第一部分 新手入门

第二部分 股票量化相关

第三部分 基金、利率互换、固定收益类

第四部分 衍生品相关

9.2 GMVP

发布于 2022-02-20 22:26:18 字数 2575 浏览 812 评论 0 收藏 0

import pandas as pd 
import numpy as np


start = '2011-07-01'                       # 回测起始时间
end = '2014-08-01'                         # 回测结束时间
benchmark = 'SH50'                        # 策略参考标准
universe = ['601398.XSHG','600028.XSHG', '601988.XSHG', '600036.XSHG','600030.XSHG','601318.XSHG', '600000.XSHG', '600019.XSHG', '600519.XSHG', '601166.XSHG']
capital_base = 100000                     # 起始资金
longest_history = 40                        # handle_data 函数中可以使用的历史数据最长窗口长度
refresh_rate = 10                           # 调仓频率,即每 refresh_rate 个交易日执行一次 handle_data() 函数


def initialize(account):                   # 初始化虚拟账户状态
    pass

def handle_data(account):                  # 每个交易日的买入卖出指令
    history_data = account.get_attribute_history('closePrice',40)
    retmatrix = []
    for s in account.universe:
        retmatrix.append([history_data[s][i]/ history_data[s][i - 1] for i in range(1,40) ])
    retmatrix = np.array(retmatrix)
    covmatrix =  np.cov(retmatrix, y=None, rowvar=1, bias=0, ddof=None)
    covmatrix = np.matrix(covmatrix)  # 不加这句执行矩阵求逆报错
    covinv = np.linalg.inv(covmatrix)
    one_row = np.matrix(np.ones(len(account.universe)))
    one_vector = np.matrix(np.ones(len(account.universe))).transpose()
    up = np.dot(covinv, one_vector)
    down = np.dot(np.dot(one_row, covinv), one_vector)
    weights = up/down
    weightsum = 0
    for a in weights:
        weightsum += a
    index= 0
    for s in account.universe:
        weigh = weights[index]/weightsum
        index = index + 1
        amount = account.cash * weigh / account.referencePrice[s]
        order_to(s,amount)

just implement the examples in the API doc

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文