提供一个刚入门的量化策略,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实现简单的均线策略相关推荐

  1. 浪漫的python代码_七夕,最浪漫的Python代码送给陷入爱河的Python男同胞

    七夕,最浪漫的Python代码送给陷入爱河的Python男同胞 image.gif ​ 三句话情书,我们听过.如何用python写一段浪漫的代码?可以是简短有韵味的情书式, 也欢迎冗长而效果拔群的万行 ...

  2. linux加权_「学员笔记」LINUX随堂笔记(十一):LVS负载均衡群集

    第12章 LVS负载均衡群集 一.群集概述 1.1 群集的类型 无论是哪种群集,都至少包括两台节点服务器,而对外表现为一个整体,只提供一个访问入口(域名或IP地址),相当于一台大型计算机,根据群集所提 ...

  3. pycharm怎么编写python代码_如何设置PyCharm中的Python代码模版(推荐)

    在MacOs运行的PyCharm中,执行python文件,如果不指定python文件字符编码会报错: SyntaxError: Non-ASCII character '\xe6' in file / ...

  4. 随机森林分类算法python代码_随机森林的原理及Python代码实现

    原标题:随机森林的原理及Python代码实现 最近在做kaggle的时候,发现随机森林这个算法在分类问题上效果十分的好,大多数情况下效果远要比svm,log回归,knn等算法效果好.因此想琢磨琢磨这个 ...

  5. 牛逼的python代码_几段牛逼的 Python 代码理解面向对象

    Python技术相关的干货加群: 227435450 Python 有什么好处?功能强大,使用简单,语言唯一性的特征明显(唯一性的意思就是你不能用十八种写法实现一个功能),而且具备海量的第三方库--P ...

  6. 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 ...

  7. 汉字转拼音python代码_汉字转拼音小程序——Python版

    首先说明,我不是计算机专业的!我是学油藏工程的(石油工程专业方向之一),大学毕业后一直从事石油开发地质专业的工作.石油领域内前期的地震资料处理,中期的开发地质研究,以及后期的油藏数值模拟和动态分析都需 ...

  8. python气象数据可视化学习笔记6——利用python地图库cnmaps绘制地图填色图并白化

    文章目录 1. 效果图 2. cnmaps简介及安装 2.1 写在前面 2.2 cnmaps简介和安装 3. 导入库 4. 定义绘图函数 4.1 使用get_adm_maps返回地图边界 4.2 ax ...

  9. 字符串输出为什么第一个没了_「课堂笔记」Python基础语法:变量和输入输出

    学习了视频课程<财务Python基础--财务人的第一个Python程序|输入输出>,小编特为大家整理了本节内容的文字版笔记,一起来温故知新吧~~ 变 量 一.为什么要引入变量? 在信息计算 ...

  10. 水仙花python代码_「每日一练」巧用python打印出所有的水仙花数

    "水仙花数"估计很多小伙伴看到都会懵吧,这个概念比较小众,但其实本文主要讲述的是python如何从众多数里边筛选出符合条件的数! 下边我们就一起来看看python是怎么输出的? 题 ...

最新文章

  1. 图片基础与tf.keras介绍
  2. flex 客户端缓存SharedObject
  3. java序列化和反序列化工具_Java 序列化和反序列化工具类并解决StreamCorruptedException问题 | 学步园...
  4. SpringBoot+SweeAlert实现alert提示与前后端数据交互
  5. 在哪开启oracle服务器,开启企业殿堂的钥匙 Oracle服务器的安装
  6. python-实现动态web服务器
  7. 234C. Weather
  8. 《小学生C++趣味编程》 第23课 打车费用
  9. [流体输配管网]古罗马渡槽从水源到城市的落差估计
  10. shift-and(HDU 5972 2016ICPC大连 B: Regular Number)
  11. yue-library是一个基于SpringBoot封装的基础库
  12. 美图秀秀计算机教程,如何用美图秀秀换背景?美图秀秀换背景图文教程-电脑教程...
  13. 【PyTorch修炼】一、安装GPU的pytorch详细教程(避坑)
  14. 阿里cdn请求原理以及缓存机制
  15. 清华大学张亚勤对话朱民:颠覆认知的AI时代及产业机遇
  16. 分享高压超低噪声LDO测试结果(High Voltage Ultra-low Noise LDO)
  17. 计算机毕业设计 SSM车辆挂牌管理系统 电动车实名挂牌管理系统 车辆挂牌办理系统Java Vue MySQL数据库 远程调试 代码讲解
  18. 一个asp.net OOM问题
  19. 3014C语言_运算符
  20. Taro:微信小程序通过获取手机号实现一键登录

热门文章

  1. perl和bugzilla
  2. U-Mail邮件网关智能DNS技术,解决海外邮件接收问题
  3. BZOJ 3717: [PA2014]Pakowanie 状压dp
  4. 万恶之源-python加深
  5. excel区别奇偶行(删除、过滤)
  6. 中文翻译英文-免费批量中文英文翻译互转软件
  7. 在多树联动和动态生树的情况下给树上添加新节点
  8. excel取消隐藏_这个毁人无数的Excel黑洞,却成就一批最牛X的高手
  9. Anaconda / Miniconda 镜像 - 清华大学开源软件镜像站
  10. 原来最强赘婿在二次元长这样,秒穿次元壁的AI特效又双叒火了