3.3python实现量化策略双均线模型_python量化实用版教程(初级)

处理数据实现双均线模型

模型使用 10、20 两个周期。

python 复制代码
链接:https://pan.baidu.com/s/16LhFbQ2gPqO9O5hMsuVsKQ?pwd=1111 
提取码:1111

另外,整个教程的完整版视频教程请阅读前言部分内容说明。

下面是详细的代码及针对代码的每一部分详细介绍。

代码部分:

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

file_name='data.xls'
dataframe = pd.read_excel(file_name, header=0)
close_data=dataframe['close']

close_list=list(close_data)

#计算双均线
arg1=10
arg2=20

data_list=[]

ma1_list=[]
ma2_list=[]

open_price=None

profit_list=[0]

#将数据模拟成逐个回放
for close in close_list:
    data_list.append(close)

    if len(data_list)>=arg2:
        #用numpy来计算均值,mean()
        av1=np.mean(data_list[-arg1:])
        av2 = np.mean(data_list[-arg2:])

        ma1_list.append(av1)
        ma2_list.append(av2)

        #计算收益
        if open_price==None:
            profit_list.append(profit_list[-1])
        else:
            profit=profit_list[-1]+close-data_list[-2]
            profit_list.append(profit)

        if len(ma1_list) > 1 and len(ma2_list) > 1:
            #当金叉,开仓
            if ma1_list[-1]>ma2_list[-1] and ma1_list[-2]<ma2_list[-2]:
                open_price=close

            #当死叉,平仓
            if ma1_list[-1] < ma2_list[-1] and ma1_list[-2] > ma2_list[-2]:
                open_price=None

fig, ax1 = plt.subplots()

ax2 = ax1.twinx()
ax1.plot(close_list)
ax1.plot(ma1_list)
ax1.plot(ma2_list)
ax2.plot(profit_list,color='red')

plt.show()

代码解析:

  1. 导入所需的库:pandas用于数据读取和处理,matplotlib用于绘图,numpy用于计算均值。
  2. 定义文件名和读取数据:将数据文件名赋值给变量file_name,使用pandas的read_excel函数读取Excel文件并将数据存储在dataframe中。
  3. 提取收盘价数据:从dataframe中提取'close'列的数据,并将其转换为列表形式存储在close_list中。
  4. 定义双均线参数:将均线的参数arg1和arg2分别设为10和20。
  5. 初始化变量和列表:创建空的data_list列表用于存储模拟回放的数据,创建空的ma1_list和ma2_list列表用于存储均线数据,创建open_price变量用于记录开仓价格,创建profit_list列表用于记录收益。
  6. 模拟回放数据:遍历close_list中的每个收盘价数据,将其添加到data_list中。
  7. 计算均线:当data_list中的数据数量达到arg2时,使用numpy的mean函数计算最近arg1和arg2个数据的均值,分别存储在av1和av2中。
  8. 更新均线列表:将计算得到的均值av1和av2分别添加到ma1_list和ma2_list中。
  9. 计算收益:如果open_price为None,表示当前没有持仓,则将收益列表中的最后一个值添加到profit_list中;否则,计算当前收益并添加到profit_list中。
  10. 判断金叉和死叉:如果ma1_list和ma2_list的长度都大于1,则判断是否出现金叉和死叉。当ma1_list最新的值大于ma2_list最新的值且ma1_list上一个值小于ma2_list上一个值时,表示出现金叉,将当前收盘价作为开仓价格;当ma1_list最新的值小于ma2_list最新的值且ma1_list上一个值大于ma2_list上一个值时,表示出现死叉,将开仓价格设为None表示平仓。
  11. 绘制图表:使用matplotlib的subplots函数创建图表,将收盘价数据、均线数据和收益数据分别绘制在不同的坐标轴上,并显示图表。
相关推荐
Yhame.2 小时前
深入理解 Java 中的 ArrayList 和 List:泛型与动态数组
java·开发语言
Dovir多多2 小时前
Python数据处理——re库与pydantic的使用总结与实战,处理采集到的思科ASA防火墙设备信息
网络·python·计算机网络·安全·网络安全·数据分析
mazo_command4 小时前
【MATLAB课设五子棋教程】(附源码)
开发语言·matlab
IT猿手4 小时前
多目标应用(一):多目标麋鹿优化算法(MOEHO)求解10个工程应用,提供完整MATLAB代码
开发语言·人工智能·算法·机器学习·matlab
青春男大4 小时前
java栈--数据结构
java·开发语言·数据结构·学习·eclipse
88号技师4 小时前
几款性能优秀的差分进化算法DE(SaDE、JADE,SHADE,LSHADE、LSHADE_SPACMA、LSHADE_EpSin)-附Matlab免费代码
开发语言·人工智能·算法·matlab·优化算法
Zer0_on4 小时前
数据结构栈和队列
c语言·开发语言·数据结构
一只小bit4 小时前
数据结构之栈,队列,树
c语言·开发语言·数据结构·c++
沐霜枫叶5 小时前
解决pycharm无法识别miniconda
ide·python·pycharm
一个没有本领的人5 小时前
win11+matlab2021a配置C-COT
c语言·开发语言·matlab·目标跟踪