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函数创建图表,将收盘价数据、均线数据和收益数据分别绘制在不同的坐标轴上,并显示图表。
相关推荐
虾球xz17 分钟前
CppCon 2018 学习:EFFECTIVE REPLACEMENT OF DYNAMIC POLYMORPHISM WITH std::variant
开发语言·c++·学习
Allen_LVyingbo22 分钟前
Python常用医疗AI库以及案例解析(2025年版、上)
开发语言·人工智能·python·学习·健康医疗
小哈龙26 分钟前
裸仓库 + Git Bash 搭建 本地 Git 服务端与客户端
开发语言·git·bash
智能砖头30 分钟前
LangChain 与 LlamaIndex 深度对比与选型指南
人工智能·python
G探险者1 小时前
《如何在 Spring 中实现 MQ 消息的自动重连:监听与发送双通道策略》
java·开发语言·rpc
weixin_437398212 小时前
转Go学习笔记
linux·服务器·开发语言·后端·架构·golang
StrongerIrene2 小时前
rs build 的process.env的值undefined解决方案
开发语言·javascript·ecmascript
风逸hhh2 小时前
python打卡day58@浙大疏锦行
开发语言·python
让我们一起加油好吗2 小时前
【C++】list 简介与模拟实现(详解)
开发语言·c++·visualstudio·stl·list
Q_970956392 小时前
java+vue+SpringBoo足球社区管理系统(程序+数据库+报告+部署教程+答辩指导)
java·开发语言·数据库