Python做双均线策略

pandas.DataFrame获取多列构成一个新的pandas.DataFrame

data=df[[‘trade_date’,‘close’]]#获取交易日期与收盘价数据

使用DataFrame.plot绘图

data[‘close’].plot(grid=True,figsize=(12,10))#figsize设置窗口的大小

pandas.Series.rolling功能生成均线,window设置均线周期,.mean功能计算window的均值

data[‘5d’]=pd.Series.rolling(data[‘close’],window=5).mean()#使用pd的Series功能生成5均线,window=5就是5次一滚动

pandas.DataFrame的pct_change计算变化百分比

data[‘market’]=data[‘close’].pct_change(1)#下面的-上面的)/上面的

pandas.DataFrame.shift(1)就是往下一个数据的意思

data[‘stategy’]=data[‘signal’].shift(1)*data[‘market’]#‘.shift(1)就是往下移动一个数据的意思’

pandas.DataFrame.iloc函数切片函数就是获取某一行的某一列

rtn.append(data.iloc[i,6])

np.cumsum计算列表的累加值

result=np.cumsum(rtn)#计算累积收益:上一个加上下一个,返回一个列表

# -*- coding: utf-8 -*-
"""
Spyder Editor

This is a temporary script file.
"""

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt

df=pd.DataFrame(pd.read_csv("601698.SH.csv"))
data=df[['trade_date','close']]#获取交易日期与收盘价数据
#data['close'].plot(grid=True,figsize=(12,10))#figsize设置窗口的大小
data['5d']=pd.Series.rolling(data['close'],window=5).mean()#使用pd的Series功能生成5均线,window=5就是5次一滚动
data['25d']=pd.Series.rolling(data['close'],window=25).mean()
data[['close','5d','25d']].plot(grid=True)
data['s-l']=data['5d']-data['25d']
data['signal']=np.where(data['s-l']>0,1,0)
data['signal']=np.where(data['s-l']<0,-1,data['signal'])
#data['signal'].plot(lw=1.5)#lw设置绘图曲线的长度
print(data['signal'].value_counts())
#创建市场收益率
data['market']=data['close'].pct_change(1)#下面的-上面的)/上面的
data['stategy']=data['signal'].shift(1)*data['market']#'.shift(1)就是往下移动一个数据的意思'
#寻找多头收益
rtn=[];
for i in range(0,data.shape[0]):
    if data.iloc[i,5]==1:
        rtn.append(data.iloc[i,6])
result=np.cumsum(rtn)#计算累积收益:上一个加上下一个,返回一个列表
plt.plot(result)
print("hello!")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值