赞
踩
了解一些概念:
本期要完成的一些策略目标:
Python实例分析:
1:获取数据,并计算5日均线和60日均线
- import pandas as pd
- import numpy as np
- import matplotlib.pyplot as plt
- import tushare as ts
-
- df = pd.read_csv("C:\\Users\\Administrator\\Desktop\\数据挖掘项目\\金融数据量化交易\\601318.csv",
- index_col="date", parse_dates=["date"])[['open', 'close', 'high', 'low']]
- df['ma5'] = np.nan
- df['ma30'] = np.nan
- #for i in range(4, len(df)):
- # df.loc[df.index[i], 'ma5'] = df['close'][i-4:i+1].mean() # 求5日均线
-
- #for i in range(29, len(df)):
- # df.loc[df.index[i], 'ma30'] = df['close'][i-29:i+1].mean() # 求30日均线
-
- df['ma5'] = df['open'].rolling(5).mean() # 求5日均线
- df['ma30'] = df['open'].rolling(30).mean() # 求30日均线
-
- print(df)

2:绘制历史数据的收盘价和两条均线
- #df = df[:2000]
- df[['close', 'ma5', 'ma30']].plot() # 绘图
- plt.show()
3:计算所有的金叉和死叉日期
- # 计算所有金叉日期和死叉日期
- # df = df.dropna()
- # golden_cross = []
- # death_cross = []
- # for i in range(1, len(df)):
- # if df['ma5'][i] > df['ma30'][i] and df['ma5'][i-1] < df['ma30'][i-1]:
- # golden_cross.append(df.index[i])
- #
- # if df['ma5'][i] < df['ma30'][i] and df['ma5'][i-1] > df['ma30'][i-1]:
- # death_cross.append(df.index[i])
- #
- # print(golden_cross)
- # print(death_cross)
-
- sr1 = df['ma5'] < df['ma30'] # # 比较的结果是返回的是布尔值 sr1来接受
- sr2 = df['ma5'] > df['ma30']
- death_cross = df[sr1 & sr2.shift(1)].index # 死叉日 &:两个为真才为真
- print(death_cross)
- golden_cross = df[~(sr1 | sr2.shift(1))].index # 金叉日 &:两个为假才为假 比较运算符
- print(golden_cross)

4:完成以下策略:
- first_money = 100000
- money = first_money # 本金
- hold = 0 # 持有多少股
- sr1 = pd.Series(1, index=golden_cross)
- print(sr1)
- sr2 = pd.Series(0, index=death_cross)
- sr = sr1.append(sr2).sort_index() # 合并且索引重新排序
-
- for i in range(0, len(sr)):
- p = df['open'][sr.index[i]] # p为金叉日或死叉日的开盘价格
- if sr.iloc[i] == 1:
- # 金叉
- buy = (money // (100*p)) # 买多少手,一手一百股
- hold += buy*100
- money -= buy*100*p
- else: # 死叉
- money += hold*p
- hold = 0
-
- p = df['open'][-1] # 最后一天的开盘价
- now_money = hold*p + money
-
- print(now_money-first_money) # 599997.9

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。