700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > python量化策略——海龟交易策略(长期)

python量化策略——海龟交易策略(长期)

时间:2020-12-18 05:14:25

相关推荐

python量化策略——海龟交易策略(长期)

长期海龟策略

下面的数字表示unit(总资产的1%)

调仓信号:

微上穿+1,中上穿+4,高度上穿满仓

微下穿-1,中下穿-4,高度下穿空仓

#如果发现历史大概率均线策略有效,是否可以以此构造随机均线策略???#单只股票以时间段T频率 判断是否调仓 T=49表现最好# coding=utf-8import mathimport tushare as tsimport pandas as pdimport matplotlibimport matplotlib.pyplot as pltimport numpy as npimport talibmatplotlib.rcParams['axes.unicode_minus']=Falsets.set_token('输入token码 需注册tushare pro ')#网址 https://tushare.pro/register?reg=385920pro = ts.pro_api()#读取数据df = pro.query('daily', ts_code='000002.SZ', start_date='0801', end_date='')df=df.sort_index()df.index=pd.to_datetime(df.trade_date,format='%Y-%m-%d')#设置日期索引T=24atr1 = talib.ATR(df['high'].values, df['low'].values, df['close'].values,timeperiod=T)atr = pd.DataFrame(atr1)atr=atr.sort_index()atr.index=pd.to_datetime(df.trade_date,format='%Y-%m-%d')#设置日期索引atr=atr.fillna(0)mv=talib.MA(np.array(df.close), timeperiod=T)close10=mv+0.5*atr1close100=mv+atr1close1000=mv+1.5*atr1unit=10000/(100*atr1[-1])close10_=mv-0.5*atr1close100_=mv-atr1close1000_=mv-1.5*atr1unit=10000/(100*atr1[-1])#收市股价close= df.close#每天的股价变动百分率ret=df.change/df.close# 10日的移动均线为目标#处理信号SmaSignal=pd.Series(0,index=close.index) s=0k=0for i in range(T,len(close)):if all( [ close[i]>close10[i], SmaSignal[i-1]<100, close[i]<close100[i] ] ):SmaSignal[i]=1+SmaSignal[i-1]#print("买一次")elif all ([close[i]>close100[i],SmaSignal[i-1]<=96,close[i]<close1000[i]]):SmaSignal[i]=4+SmaSignal[i-1]elif all ([close[i]>close100[i],SmaSignal[i-1]<=100,close[i]<close1000[i]]):SmaSignal[i]=100 elif all ([ close[i]>close1000[i],SmaSignal[i-1]<=100 ]):SmaSignal[i]=100elif all([close[i]<close10_[i],SmaSignal[i-1]>0,close[i]>close100_[i]]):SmaSignal[i]=SmaSignal[i-1]-1elif all ([close[i]<close100_[i],SmaSignal[i-1]>=4,close[i]<close1000_[i]]):SmaSignal[i]=SmaSignal[i-1]-4 elif all ([close[i]<close100_[i],SmaSignal[i-1]>=0,close[i]<close1000_[i]]):SmaSignal[i]=0elif all ([close[i]<close1000_[i],SmaSignal[i-1]<=100]):SmaSignal[i]=0 else:SmaSignal[i]=SmaSignal[i-1]SmaTrade=SmaSignal.shift(1).dropna()/100#shift(1)整体下移一行#SmaBuy=SmaTrade[SmaTrade==1]#SmaSell=SmaTrade[SmaTrade==-1]SmaRet=ret*SmaTrade.dropna()#累积收益表现#股票累积收益率cumStock=np.cumprod(1+ret[SmaRet.index[0:]])-1#策略累积收益率cumTrade=np.cumprod(1+SmaRet)-1plt.plot(cumTrade,label="海龟策略",color='r',linestyle=':')plt.plot(cumStock,label="直接持有",color='k')plt.title("49日平均线调仓策略收益率")plt.legend()f=cumTrade[-2]*250/len(close)f1=100*fprint("年化收益率:{:.2f}%,总收益{:.2f}%".format(f1,f1*len(close)/250))

结果

年化收益率:22.81%,总收益186.49%

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。