均线策略python代码_「Python笔记」利用Python以及Tushare实现简单的均线策略
提供一个刚入门的量化策略,5日均线突破10日买入,5日均线突破10日卖出。最后采用盈利20%。
import pandas as pd
import matplotlib.pyplot as plt
import tushare as ts
pro = ts.pro_api()
df = pro.daily(ts_code='000333.SZ', start_date='20150101', end_date='20181216')
介绍一下Tushare,这是一个很方便调取数据的地方,大家注册后就可以导出股票的任何数据
网站地址:https://tushare.pro/
ts_code是输入股票代码,后面是两个日期,这样就能得出美的DataFrame形式的数据。
df.index=df.iloc[:,1]
df=df.sort_values(by=["trade_date"],ascending=True)
df.index=pd.to_datetime(df.index,format='%Y-%m-%d')
这里是由于Tushare导出来的数据是现在的排在前面,所以要重新排序一下
data=pd.DataFrame(index=df.index,columns=['close','mean5','mean10','signal'])
data['close']=df.close
data['mean5']=data.close.rolling(5).mean()
data['mean10']=data.close.rolling(10).mean()
data.mean5.iloc[0:9]=data.close.iloc[0:9]
data.mean10.iloc[0:9]=data.close.iloc[0:9]
plt.figure(figsize=(13,6), dpi=80)
plt.plot(data.close)
plt.plot(data.mean5)#5日20日均线图
plt.plot(data.mean10)
生成移动均线
for i in range(1,len(data)):#上穿为1,开仓,下穿为-1,空仓
if data.mean5.iloc[i]>data.mean10.iloc[i] and data.mean5.iloc[i-1]
data.signal.iloc[i]=1
elif data.mean5.iloc[i]data.mean10.iloc[i-1]:
data.signal.iloc[i]=-1
else:
data.signal.iloc[i]=0
data.signal.iloc[0:2]=0
生成信号
#定义策略
def strategy(data,fee):
c=pd.DataFrame(index=data.index,columns=['close','signal','amount','a1','a2','cash','asset'])
c.open=wanke.open
c.close=data.close
c.signal=data.signal
c.amount.iloc[0]=0
c.cash.iloc[0]=1000000
c.asset.iloc[0]=1000000
for i in range(1,len(data)):
if c.signal.iloc[i]==0:#信号为0,持仓不变
c.amount.iloc[i]=c.amount.iloc[i-1]#持仓量
c.a1.iloc[i]=0#开仓量
c.a2.iloc[i]=0#出仓量
c.cash.iloc[i]=c.cash.iloc[i-1]
c.asset.iloc[i]=c.cash.iloc[i]+c.amount.iloc[i]*c.close.iloc[i]*100
elif c.signal.iloc[i]==1:#5日均线大于10日均线,预计未来上升,开仓
c.a1.iloc[i]=int(1/2*c.cash.iloc[i-1]/c.open.iloc[i]/100)
c.a2.iloc[i]=0
c.amount.iloc[i]=c.amount.iloc[i-1]+c.a1.iloc[i]
c.cash.iloc[i]=c.cash.iloc[i-1]-c.a1.iloc[i]*c.open.iloc[i]*100*(1+fee)
c.asset.iloc[i]=c.cash.iloc[i]+c.amount.iloc[i]*c.close.iloc[i]*100
elif c.signal.iloc[i]==-1:
c.a1.iloc[i]=0
c.a2.iloc[i]=int(1/3*c.amount.iloc[i-1])
c.amount.iloc[i]=c.amount.iloc[i-1]-c.a2.iloc[i]
c.cash.iloc[i]=c.cash.iloc[i-1]+c.a2.iloc[i]*c.open.iloc[i]*100*(1-fee)
c.asset.iloc[i]=c.cash.iloc[i]+c.amount.iloc[i]*c.close.iloc[i]*100
return c
fee=0.0002
final=strategy(data,fee)
交易策略
#计算夏普比
d=pd.DataFrame(index=final.index,columns=['asset','dailyreturn','exturn','cumret'])
d['asset']=final['asset']
for i in range(1,len(d)):
d.dailyreturn.ix[i]=(d.asset.ix[i]-d.asset.ix[i-1])/d.asset.ix[i-1]
d['exturn']=d['dailyreturn']-0.04/250
stdexturn=d['exturn'].std()
meanexturn=d['exturn'].mean()
import numpy as np
ASR=np.sqrt(250)*meanexturn/stdexturn
print(ASR)
计算夏普比
plt.plot(d.asset)#资产变动图
均线策略python代码_「Python笔记」利用Python以及Tushare实现简单的均线策略相关推荐
- 浪漫的python代码_七夕,最浪漫的Python代码送给陷入爱河的Python男同胞
七夕,最浪漫的Python代码送给陷入爱河的Python男同胞 image.gif 三句话情书,我们听过.如何用python写一段浪漫的代码?可以是简短有韵味的情书式, 也欢迎冗长而效果拔群的万行 ...
- linux加权_「学员笔记」LINUX随堂笔记(十一):LVS负载均衡群集
第12章 LVS负载均衡群集 一.群集概述 1.1 群集的类型 无论是哪种群集,都至少包括两台节点服务器,而对外表现为一个整体,只提供一个访问入口(域名或IP地址),相当于一台大型计算机,根据群集所提 ...
- pycharm怎么编写python代码_如何设置PyCharm中的Python代码模版(推荐)
在MacOs运行的PyCharm中,执行python文件,如果不指定python文件字符编码会报错: SyntaxError: Non-ASCII character '\xe6' in file / ...
- 随机森林分类算法python代码_随机森林的原理及Python代码实现
原标题:随机森林的原理及Python代码实现 最近在做kaggle的时候,发现随机森林这个算法在分类问题上效果十分的好,大多数情况下效果远要比svm,log回归,knn等算法效果好.因此想琢磨琢磨这个 ...
- 牛逼的python代码_几段牛逼的 Python 代码理解面向对象
Python技术相关的干货加群: 227435450 Python 有什么好处?功能强大,使用简单,语言唯一性的特征明显(唯一性的意思就是你不能用十八种写法实现一个功能),而且具备海量的第三方库--P ...
- python3.7卸载不了_「访问升级」No Python 3.7 installation was detected,Python 3.7卸载失败 - seo实验室...
访问升级 No Python 3.7 installation was detected,解决Python 3.7卸载失败问题问题 解决办法 问题 卸载Python 3.7 时,提示No Python ...
- 汉字转拼音python代码_汉字转拼音小程序——Python版
首先说明,我不是计算机专业的!我是学油藏工程的(石油工程专业方向之一),大学毕业后一直从事石油开发地质专业的工作.石油领域内前期的地震资料处理,中期的开发地质研究,以及后期的油藏数值模拟和动态分析都需 ...
- python气象数据可视化学习笔记6——利用python地图库cnmaps绘制地图填色图并白化
文章目录 1. 效果图 2. cnmaps简介及安装 2.1 写在前面 2.2 cnmaps简介和安装 3. 导入库 4. 定义绘图函数 4.1 使用get_adm_maps返回地图边界 4.2 ax ...
- 字符串输出为什么第一个没了_「课堂笔记」Python基础语法:变量和输入输出
学习了视频课程<财务Python基础--财务人的第一个Python程序|输入输出>,小编特为大家整理了本节内容的文字版笔记,一起来温故知新吧~~ 变 量 一.为什么要引入变量? 在信息计算 ...
- 水仙花python代码_「每日一练」巧用python打印出所有的水仙花数
"水仙花数"估计很多小伙伴看到都会懵吧,这个概念比较小众,但其实本文主要讲述的是python如何从众多数里边筛选出符合条件的数! 下边我们就一起来看看python是怎么输出的? 题 ...
最新文章
- 图片基础与tf.keras介绍
- flex 客户端缓存SharedObject
- java序列化和反序列化工具_Java 序列化和反序列化工具类并解决StreamCorruptedException问题 | 学步园...
- SpringBoot+SweeAlert实现alert提示与前后端数据交互
- 在哪开启oracle服务器,开启企业殿堂的钥匙 Oracle服务器的安装
- python-实现动态web服务器
- 234C. Weather
- 《小学生C++趣味编程》 第23课 打车费用
- [流体输配管网]古罗马渡槽从水源到城市的落差估计
- shift-and(HDU 5972 2016ICPC大连 B: Regular Number)
- yue-library是一个基于SpringBoot封装的基础库
- 美图秀秀计算机教程,如何用美图秀秀换背景?美图秀秀换背景图文教程-电脑教程...
- 【PyTorch修炼】一、安装GPU的pytorch详细教程(避坑)
- 阿里cdn请求原理以及缓存机制
- 清华大学张亚勤对话朱民:颠覆认知的AI时代及产业机遇
- 分享高压超低噪声LDO测试结果(High Voltage Ultra-low Noise LDO)
- 计算机毕业设计 SSM车辆挂牌管理系统 电动车实名挂牌管理系统 车辆挂牌办理系统Java Vue MySQL数据库 远程调试 代码讲解
- 一个asp.net OOM问题
- 3014C语言_运算符
- Taro:微信小程序通过获取手机号实现一键登录