本站消息

站长简介/公众号


站长简介:逗比程序员,理工宅男,前每日优鲜python全栈开发工程师,利用周末时间开发出本站,欢迎关注我的微信公众号:幽默盒子,一个专注于搞笑,分享快乐的公众号

  价值13000svip视频教程,python大神匠心打造,零基础python开发工程师视频教程全套,基础+进阶+项目实战,包含课件和源码

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2020-07(10)

2020-08(50)

python量化策略——改进的美林时钟轮动策略(二)

发布于2020-08-23 18:23     阅读(1118)     评论(0)     点赞(22)     收藏(3)



这里是在改进美林时钟一的基础上做了一些优化,改进。
只要针对经济变动(差分),通货膨胀变动(差分),(发布数据需要一个月)来判断接下来三个月的大类资产的选择。定期3个月判断一次,既然现在国内是“美林电风扇”一样紊乱,那我们就不管时钟顺序,就看上个季度的宏观经济状态,为接下来的配置做依据。
肯定先要统计历史数据表现情况,然后策略才设置对应的资产配置。

这里先用历史数据找各个情况的大类资产排序。

1.需要用到的库

# coding=utf-8
import math
import tushare as ts
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import talib
import pandas as pd
from datetime import datetime, date
import pymysql
import threading
from queue import Queue
matplotlib.rcParams['axes.unicode_minus']=False
plt.rcParams['font.sans-serif']=['SimHei']
ts.set_token('token码')#需要注册tushare pro   这里 https://tushare.pro/register?reg=385920
pro = ts.pro_api()
#读取数据

2.读取数据


############################读取数据类###################################
class readData:
    def read_index_daily(self,code,star,end):#指数数据
        dsb = pro.index_daily(ts_code=code, start_date=star, end_date=end,fields='ts_code,trade_date,close,change')#默认#读取三个数据
        return dsb
    def read_daily(self,code,star,end):
        dsc1 = pro.daily(ts_code=code, start_date=star, end_date=end,fields='ts_code,trade_date,close,change')
        return dsc1
    def read_CPI(self,star,end):#时间格式start_cpi='201609'
        dc=pro.cn_cpi(start_m=star, end_m=end,fields='month,nt_yoy')
        return dc
    def read_GDP(self,star,end):#时间格式star='2016Q4'
        df1 = pro.cn_gdp(start_q=star, end_q=end,fields='quarter,gdp_yoy')
        return df1
    def read_bond(self,code,star,end):
        df=pro.cb_daily(ts_code=code,start_date=star,end_date=end)
        return df
##################################################################### 

3.设置时间,所需数据的代码。上债 沪深300 等

start_time='20060430'#发布GDP需要时间,我们延迟1个月,即第一季度的GDP4月份才发布。
end_time="20200731"
star_GDP='2006Q1'#延后一年,因为我们找的是差分,实际是从200701开始的 
end_GDP='2020Q1'
star_CPI='200601'#
end_CPI='202003'
df1=readData()#读取
dc=readData()
dsc1=readData()
dsp=readData()
dsb=readData()
df1=df1.read_GDP(star_GDP,end_GDP)
dc=dc.read_CPI(star_CPI,end_CPI)
dsc1=dsc1.read_index_daily('000300.SH',start_time,end_time)  
dsb=dsb.read_index_daily('000012.SH',start_time,end_time)
dsp=dsp.read_index_daily('NHCI.NH',start_time,end_time)  

4.GDP数据的处理

##########################GDP信号处理################################
def GDP_fun(df1):
    df1.set_index('quarter',inplace=True)#设置日期索引
    df2=(df1.shift(4)-df1).shift(-4)
    df2=df2.dropna()
    G=pd.Series(0,index=df2.gdp_yoy.index)
    for i in range(len(df2.gdp_yoy)):
        if df2.gdp_yoy[i]>0:
            G[i]=1
        elif df2.gdp_yoy[i]<0:
            G[i]=0
        else:
            G[i]=G[i-1]
    return G
G=GDP_fun(df1)
####################################################################

6.cpi数据的处理

###########################CPI信号函数##############################
def CPI_fun(dc):
    dc=dc.sort_index()
    dc.set_index('month',inplace=True)
    dc2=(dc.shift(12)-dc.shift()).shift(-12).dropna()
    C=pd.Series(0,index=G.index)
    for j in range(len(dc2.nt_yoy)-3):
        if (3+j)%3==0:
            for i in range(int(j/3),int((3+j)/3)):
                
                if dc2.nt_yoy[j]+dc2.nt_yoy[j+1]+dc2.nt_yoy[j+2]  >0:
                    C[i]=1
                elif dc2.nt_yoy[j]+dc2.nt_yoy[j+1]+dc2.nt_yoy[j+2]<0:
                    C[i]=0
                else:
                    C[i]=C[i-1] 
        else:
            pass 
    return C
C=CPI_fun(dc)
########################################################################


7.计算三个大类资产的月平均收益

def jidu(d):###得到每个月的平均收益
    d.set_index('trade_date',inplace=True)
    d=d.drop(['ts_code'],axis=1)
    d.index = pd.to_datetime(d.index)
    d=(d-d.shift(-12))/d.shift(-12)
    d=d.groupby([d.index.year.rename('year'),d.index.month.rename('month')])['close'].mean()
    return d
dp2=jidu(dsp)
dz2=jidu(dsb)
ds2=jidu(dsc1)

8.获得季度收益


def jidu_(ds,i):#将每三个月的收益转化成一个季度收益
    st=ds[i*3]+ds[i*3+1]+ds[i*3+2]
    return st


9.设置初始值,及判断条件和打印结果。


ST1=0 
SP1=0
SZ1=0
k1=0 
ST2=0 
SP2=0
SZ2=0
k2=0
ST3=0 
SP3=0
SZ3=0
k3=0
ST4=0 
SP4=0
SZ4=0
k4=0
tj_st=0
tj_sp=0
tj_sz=0
for i in range(len(G)):
    if G[i]>0 and C[i]==0:
        ST1=ST1+jidu_(ds2,i)
        SP1=SP1+jidu_(dp2,i)
        SZ1=SZ1+jidu_(dz2,i)
        k1+=1
        print('经济↑+通货↓时,股票:{:.2f}%,商品:{:.2f}%,债券:{:.2f}%'.format(jidu_(ds2,i)*100,jidu_(dp2,i)*100,jidu_(dz2,i) *100   ))
print('经济↑+通货↓时,股票的平均收益:{:.2f}%,v,商品的平均收益:{:.2f}%,债券的平均收益:{:.2f}%'.format(100*ST1/k1,100*SP1/k1,100*SZ1/k1))

for i in range(len(G)):       
    if G[i]>0 and C[i]>0:
        ST2=ST2+jidu_(ds2,i)
        SP2=SP2+jidu_(dp2,i)
        SZ2=SZ2+jidu_(dz2,i)
        k2+=1
        print('经济↑+通货↑时,股票:{:.2f}%,商品:{:.2f}%,债券:{:.2f}%'.format(jidu_(ds2,i)*100,jidu_(dp2,i)*100,jidu_(dz2,i) *100  ))
print('经济↑+通货↑时,股票的平均收益:{:.2f}%,v,商品的平均收益:{:.2f}%,债券的平均收益:{:.2f}%'.format(100*ST2/k2,100*SP2/k2,100*SZ2/k2))

for i in range(len(G)):
    if G[i]==0 and C[i]==0:
        ST3=ST3+jidu_(ds2,i)
        SP3=SP3+jidu_(dp2,i)
        SZ3=SZ3+jidu_(dz2,i)
        k3+=1
        print('经济↓+通货↓时,股票:{:.2f}%,商品:{:.2f}%,债券:{:.2f}%'.format(jidu_(ds2,i)*100,jidu_(dp2,i)*100,jidu_(dz2,i) *100  ))
print('经济↓+通货↓时,股票的平均收益:{:.2f}%,商品的平均收益:{:.2f}%,债券的平均收益:{:.2f}%'.format(100*ST3/k3,100*SP3/k3,100*SZ3/k3))

for i in range(len(G)):
    if G[i]==0 and C[i]>0:
        ST4=ST4+jidu_(ds2,i)
        SP4=SP4+jidu_(dp2,i)
        SZ4=SZ4+jidu_(dz2,i)
        k4+=1
        print('经济↓+通货↑时,股票:{:.2f}%,商品:{:.2f}%,债券:{:.2f}%'.format(jidu_(ds2,i)*100,jidu_(dp2,i)*100,jidu_(dz2,i) *100   ))
print('经济↓+通货↑时,股票的平均收益:{:.2f}%,商品的平均收益:{:.2f}%,债券的平均收益:{:.2f}% '.format(100*ST4/k4,100*SP4/k4,100*SZ4/k4))


运行得到结果:

经济↑+通货↓时,股票:-26.86%,商品:-21.03%,债券:2.68%
经济↑+通货↓时,股票:7.76%,商品:1.38%,债券:1.13%
经济↑+通货↓时,股票:17.91%,商品:9.09%,债券:0.02%
经济↑+通货↓时,股票:18.84%,商品:3.66%,债券:0.03%
经济↑+通货↓时,股票:-2.49%,商品:1.59%,债券:0.63%
经济↑+通货↓时,股票的平均收益:3.03%,v,商品的平均收益:-1.06%,债券的平均收益:0.90%
经济↑+通货↑时,股票:-1.50%,商品:1.10%,债券:0.49%
经济↑+通货↑时,股票:8.45%,商品:2.19%,债券:0.39%
经济↑+通货↑时,股票:-2.79%,商品:-7.08%,债券:0.61%
经济↑+通货↑时,股票:-4.94%,商品:-2.24%,债券:1.04%
经济↑+通货↑时,股票:-7.74%,商品:-1.36%,债券:0.96%
经济↑+通货↑时,股票:1.98%,商品:12.04%,债券:0.58%
经济↑+通货↑时,股票:0.99%,商品:3.26%,债券:0.56%
经济↑+通货↑时,股票:-6.17%,商品:3.25%,债券:0.43%
经济↑+通货↑时,股票:0.31%,商品:-2.35%,债券:1.10%
经济↑+通货↑时,股票:16.61%,商品:3.38%,债券:0.53%
经济↑+通货↑时,股票的平均收益:0.52%,v,商品的平均收益:1.22%,债券的平均收益:0.67%
经济↓+通货↓时,股票:14.00%,商品:-2.43%,债券:-0.76%
经济↓+通货↓时,股票:6.77%,商品:-1.72%,债券:0.64%
经济↓+通货↓时,股票:-3.89%,商品:0.49%,债券:0.45%
经济↓+通货↓时,股票:-8.37%,商品:-9.08%,债券:0.68%
经济↓+通货↓时,股票:-2.61%,商品:2.01%,债券:0.68%
经济↓+通货↓时,股票:4.26%,商品:1.51%,债券:0.48%
经济↓+通货↓时,股票:-4.93%,商品:-3.63%,债券:0.56%
经济↓+通货↓时,股票:-6.87%,商品:-1.93%,债券:0.43%
经济↓+通货↓时,股票:4.61%,商品:1.93%,债券:0.29%
经济↓+通货↓时,股票:-4.53%,商品:-3.43%,债券:0.34%
经济↓+通货↓时,股票:-0.07%,商品:-2.63%,债券:0.41%
经济↓+通货↓时,股票:1.05%,商品:-1.23%,债券:0.61%
经济↓+通货↓时,股票:4.96%,商品:-4.07%,债券:0.86%
经济↓+通货↓时,股票:1.83%,商品:5.38%,债券:0.89%
经济↓+通货↓时,股票:0.41%,商品:10.13%,债券:-0.28%
经济↓+通货↓时,股票:2.27%,商品:-4.16%,债券:0.34%
经济↓+通货↓时,股票:4.00%,商品:3.36%,债券:-0.06%
经济↓+通货↓时,股票:4.09%,商品:-0.19%,债券:0.20%
经济↓+通货↓时,股票:4.74%,商品:2.14%,债券:0.09%
经济↓+通货↓时,股票的平均收益:1.14%,商品的平均收益:-0.40%,债券的平均收益:0.36%
经济↓+通货↑时,股票:6.19%,商品:-4.81%,债券:-0.24%
经济↓+通货↑时,股票:4.59%,商品:-0.20%,债券:1.11%
经济↓+通货↑时,股票:32.74%,商品:-2.50%,债券:0.12%
经济↓+通货↑时,股票:19.53%,商品:5.04%,债券:-0.22%
经济↓+通货↑时,股票:18.28%,商品:5.19%,债券:-0.04%
经济↓+通货↑时,股票:-4.73%,商品:-0.22%,债券:0.85%
经济↓+通货↑时,股票:-19.04%,商品:2.51%,债券:0.98%
经济↓+通货↑时,股票:-10.94%,商品:2.08%,债券:0.17%
经济↓+通货↑时,股票:-2.59%,商品:4.96%,债券:0.68%
经济↓+通货↑时,股票:0.97%,商品:5.47%,债券:0.14%
经济↓+通货↑时,股票:-3.71%,商品:-0.85%,债券:1.10%
经济↓+通货↑时,股票:-7.99%,商品:-4.25%,债券:0.77%
经济↓+通货↑时,股票:14.90%,商品:9.88%,债券:0.14%
经济↓+通货↑时,股票:-6.29%,商品:4.76%,债券:0.00%
经济↓+通货↑时,股票:21.64%,商品:-2.17%,债券:0.98%
经济↓+通货↑时,股票:16.06%,商品:0.90%,债券:0.81%
经济↓+通货↑时,股票:-5.67%,商品:-4.36%,债券:0.63%
经济↓+通货↑时,股票:-8.90%,商品:-2.09%,债券:1.02%
经济↓+通货↑时,股票:-4.50%,商品:1.04%,债券:0.83%
经济↓+通货↑时,股票的平均收益:3.19%,商品的平均收益:1.07%,债券的平均收益:0.52% 

接下来可以自由的选择所想要的策略了。
比如每次季度数据知道以后,我们配置平均收益最高的资产,实列:经济↑,通胀↑,配置:宗商品。

其他策略:

1.python量化——alpha股票-指数期货对冲策略
2.多因子选股策略
3.海龟交易策略
4.移动平均策略——单/双均线策略
5.改进的美林时钟策略(一)
5.改进的美林时钟策略(二)
6.改进的美林时钟策略(三)






所属网站分类: 技术文章 > 博客

作者:丸子

链接:https://www.pythonheidong.com/blog/article/494136/6d296c56a5378f3ccc31/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

22 0
收藏该文
已收藏

评论内容:(最多支持255个字符)