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函数创建图表,将收盘价数据、均线数据和收益数据分别绘制在不同的坐标轴上,并显示图表。
相关推荐
小码农<^_^>7 分钟前
c++继承(下)
开发语言·c++
非著名架构师10 分钟前
js混淆的方式方法
开发语言·javascript·ecmascript
Themberfue11 分钟前
基础算法之双指针--Java实现(下)--LeetCode题解:有效三角形的个数-查找总价格为目标值的两个商品-三数之和-四数之和
java·开发语言·学习·算法·leetcode·双指针
DanCheng-studio18 分钟前
毕设 大数据抖音短视频数据分析与可视化(源码)
python·毕业设计·毕设
深山夕照深秋雨mo20 分钟前
在Java中操作Redis
java·开发语言·redis
barbyQAQ38 分钟前
Qt源码阅读——事件循环
开发语言·数据库·qt
记得开心一点嘛39 分钟前
在Java项目中如何使用Scala实现尾递归优化来解决爆栈问题
开发语言·后端·scala
敏编程1 小时前
网页前端开发之Javascript入门篇(5/9):函数
开发语言·javascript
柏箱1 小时前
PHP基本语法总结
开发语言·前端·html·php
进阶的架构师1 小时前
互联网Java工程师面试题及答案整理(2024年最新版)
java·开发语言