当前位置:   article > 正文

量化交易之双均线策略分析(Python)_双均线交易策略python代码

双均线交易策略python代码

了解一些概念:

 

本期要完成的一些策略目标:

 Python实例分析:

1:获取数据,并计算5日均线和60日均线

  1. import pandas as pd
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. import tushare as ts
  5. df = pd.read_csv("C:\\Users\\Administrator\\Desktop\\数据挖掘项目\\金融数据量化交易\\601318.csv",
  6. index_col="date", parse_dates=["date"])[['open', 'close', 'high', 'low']]
  7. df['ma5'] = np.nan
  8. df['ma30'] = np.nan
  9. #for i in range(4, len(df)):
  10. # df.loc[df.index[i], 'ma5'] = df['close'][i-4:i+1].mean() # 求5日均线
  11. #for i in range(29, len(df)):
  12. # df.loc[df.index[i], 'ma30'] = df['close'][i-29:i+1].mean() # 求30日均线
  13. df['ma5'] = df['open'].rolling(5).mean() # 求5日均线
  14. df['ma30'] = df['open'].rolling(30).mean() # 求30日均线
  15. print(df)

 2:绘制历史数据的收盘价和两条均线

  1. #df = df[:2000]
  2. df[['close', 'ma5', 'ma30']].plot() # 绘图
  3. plt.show()

 

 3:计算所有的金叉和死叉日期

  1. # 计算所有金叉日期和死叉日期
  2. # df = df.dropna()
  3. # golden_cross = []
  4. # death_cross = []
  5. # for i in range(1, len(df)):
  6. # if df['ma5'][i] > df['ma30'][i] and df['ma5'][i-1] < df['ma30'][i-1]:
  7. # golden_cross.append(df.index[i])
  8. #
  9. # if df['ma5'][i] < df['ma30'][i] and df['ma5'][i-1] > df['ma30'][i-1]:
  10. # death_cross.append(df.index[i])
  11. #
  12. # print(golden_cross)
  13. # print(death_cross)
  14. sr1 = df['ma5'] < df['ma30'] # # 比较的结果是返回的是布尔值 sr1来接受
  15. sr2 = df['ma5'] > df['ma30']
  16. death_cross = df[sr1 & sr2.shift(1)].index # 死叉日 &:两个为真才为真
  17. print(death_cross)
  18. golden_cross = df[~(sr1 | sr2.shift(1))].index # 金叉日 &:两个为假才为假 比较运算符
  19. print(golden_cross)

 4:完成以下策略:

 

 

  1. first_money = 100000
  2. money = first_money # 本金
  3. hold = 0 # 持有多少股
  4. sr1 = pd.Series(1, index=golden_cross)
  5. print(sr1)
  6. sr2 = pd.Series(0, index=death_cross)
  7. sr = sr1.append(sr2).sort_index() # 合并且索引重新排序
  8. for i in range(0, len(sr)):
  9. p = df['open'][sr.index[i]] # p为金叉日或死叉日的开盘价格
  10. if sr.iloc[i] == 1:
  11. # 金叉
  12. buy = (money // (100*p)) # 买多少手,一手一百股
  13. hold += buy*100
  14. money -= buy*100*p
  15. else: # 死叉
  16. money += hold*p
  17. hold = 0
  18. p = df['open'][-1] # 最后一天的开盘价
  19. now_money = hold*p + money
  20. print(now_money-first_money) # 599997.9

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/831771
推荐阅读
相关标签
  

闽ICP备14008679号