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函数创建图表,将收盘价数据、均线数据和收益数据分别绘制在不同的坐标轴上,并显示图表。
相关推荐
Highcharts.js1 小时前
缺失数据可视化图表开发实战|Highcharts创建人员出生统计面积图表示例
开发语言·前端·javascript·信息可视化·highcharts·图表开发
测试员周周5 小时前
【Appium 系列】第16节-WebView-H5上下文切换 — 混合应用的自动化难点
运维·开发语言·人工智能·功能测试·appium·自动化·测试用例
测试19985 小时前
软件测试 - 单元测试总结
自动化测试·软件测试·python·测试工具·职场和发展·单元测试·测试用例
曲幽8 小时前
我用了FastApiAdmin后,连夜把踩过的坑都整理出来了
redis·python·postgresql·vue3·fastapi·web·sqlalchemy·admin·fastapiadmin
杜子不疼.8 小时前
【C++ AI 大模型接入 SDK】 - DeepSeek 模型接入(上)
开发语言·c++·chatgpt
加号38 小时前
【C#】 串口通信技术深度解析及实现
开发语言·c#
sycmancia9 小时前
Qt——编辑交互功能的实现
开发语言·qt
石山代码9 小时前
C++ 内存分区 堆区
java·开发语言·c++
前端若水9 小时前
会话管理:创建、切换、删除对话历史
前端·人工智能·python·react.js
无风听海9 小时前
C# 隐式转换深度解析
java·开发语言·c#