Python量化交易策略--双均线策略及代码

这篇具有很好参考价值的文章主要介绍了Python量化交易策略--双均线策略及代码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        双均线策略是比较经典的策略,股票的价格均线是投资参考的重要指标。均线有快线和慢线之分,当快线向上穿过慢线则是金叉,一般执行买入操作,当快线向下穿过慢线时则形成死叉,一般执行卖出操作。基于这个基本思路,出于兴趣爱好,便使用python复现了这个量化策略。代码封装如下。

        在运行这个代码块时,请先运行以下代码:

        pip install pandas

        pip install numpy

        pip install matplotlib

        pip install tqdm

        pip install qstock

        在电脑上安装了这些库之后就可以运行下面的封装代码了,具体讲解在代码块下面。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from tqdm import tqdm
import qstock as qs

class Dual_moving_average_stra():
    '''
    code --> '000001'  str
    start_time --> '20220101'  str
    window0 --> 5  int
    window1 --> 10  int
    verbose --> bool  default=True
    plot --> bool default=True
    init_money = 10000 一万块本金 看末期能有多少收益
    '''
    def __init__(self, code, start_time, window0, window1, verbose=True, plot=True):
        self.code = code
        self.start_time = start_time
        self.window0 = window0
        self.window1 = window1
        self.verbose = verbose
        self.plot = plot
        
    def get_data(self):
        #print(self.code, self.start_time)
        df = qs.get_data(self.code, start=self.start_time, end=None, freq=101, fqt=1)
        df['MA_' + str(self.window0)] = df.rolling(self.window0, min_periods=1).mean()['close'] 
        df['MA_' + str(self.window1)] = df.rolling(self.window1, min_periods=1).mean()['close'] 
        df['gold'] = np.nan
        df.gold = df['MA_' + str(self.window0)] > df['MA_' + str(self.window1)]
        signal = pd.DataFrame()
        signal = df.gold.apply(lambda x:1 if x==True else 0)
        df['gold_death_cha'] = signal - signal.shift(1).fillna(0)
        return df
    
    def strategy(self):
        init_money = 10000
        quant = 0
        df = self.get_data()
        signal = df.gold_death_cha
        price_list = df.open
        money_list = []
        
        for i in tqdm(range(df.shape[0])):
            if i+1 == df.shape[0]: # 因为是次日买卖 所以得提前一天结束代码
                break

            price = price_list.iloc[i+1]

            if signal.iloc[i] == 1: 
                # 金叉全仓买入
                quant += int(init_money / (price * 100))
                init_money -= quant * price * 100
                if self.verbose == True:
                    print('此次购买数量:', quant)
                    print('证券价格:', price)
                    print('本金还剩:',init_money)
                    print('金叉买入执行完毕----------------------------------')

            if signal.iloc[i] == -1:
                init_money += quant * price * 100
                quant = 0 # 清仓
                money_list.append(init_money)
                if self.verbose == True:
                    print('清仓:', quant)
                    print('证券价格:', price)
                    print('本金还剩:',init_money)
                    print('死叉卖出执行完毕----------------------------------')
        
        if self.plot == True:
            plt.figure(figsize=(20,20))
            plt.subplot(2,1,1)
            plt.grid()
            plt.plot(df.index, df.close, label='close', linewidth=3)
            plt.plot(df.index, df['MA_' + str(self.window0)], c='red', label=('MA_' + str(self.window0)), linewidth=3)
            plt.plot(df.index, df['MA_' + str(self.window1)], c='grey', label=('MA_' + str(self.window1)), linewidth=3)
            plt.xticks(rotation=45)
            plt.legend(fontsize=20)
            
            plt.subplot(2,1,2)
            plt.grid()
            plt.plot(range(len(money_list)), money_list, linewidth=3, label='money')
            plt.xticks(rotation=45)
            plt.legend(fontsize=20)
            plt.show()

        这是一个金叉死叉的策略,在股价出现死叉时则全仓卖出,在股价出现金叉时则全仓买入,然后给予10000元的本金,查看最后一期能剩余多少本金。

        首先实例化我们的对象:

model = Dual_moving_average_stra('600460', '20200101', 5, 20)

        第一个参数是股票代码,第二个参数是提取数据的开始时间,例子中是从2020年开始的。5表示计算股票的5日均线,20表示计算股票的20日均线。然后就完成了模型的实例化。

model.strategy()

        然后再运行这个代码就可以查看策略的效果了。

此次购买数量: 6
证券价格: 16.52
本金还剩: 88.0
金叉买入执行完毕----------------------------------
清仓: 0
证券价格: 13.63
本金还剩: 8266.0
死叉卖出执行完毕----------------------------------
此次购买数量: 4
证券价格: 18.67
本金还剩: 797.9999999999991
金叉买入执行完毕----------------------------------
清仓: 0
证券价格: 17.74
本金还剩: 7893.999999999998
死叉卖出执行完毕----------------------------------
此次购买数量: 5
证券价格: 14.7
本金还剩: 543.9999999999982
金叉买入执行完毕----------------------------------
清仓: 0
证券价格: 14.26
本金还剩: 7673.999999999998
死叉卖出执行完毕----------------------------------
此次购买数量: 5
证券价格: 14.67
本金还剩: 338.9999999999991
金叉买入执行完毕----------------------------------
清仓: 0
证券价格: 17.23
本金还剩: 8954.0
死叉卖出执行完毕----------------------------------
此次购买数量: 5
证券价格: 16.63
本金还剩: 639.0
金叉买入执行完毕----------------------------------
清仓: 0
证券价格: 16.28
本金还剩: 8779.0
死叉卖出执行完毕----------------------------------
此次购买数量: 5
证券价格: 15.78
本金还剩: 889.0000000000009
金叉买入执行完毕----------------------------------
清仓: 0
证券价格: 25.62
本金还剩: 13699.0
死叉卖出执行完毕----------------------------------
此次购买数量: 5
证券价格: 27.09
本金还剩: 154.00000000000182
金叉买入执行完毕----------------------------------
清仓: 0
证券价格: 25.66
本金还剩: 12984.000000000004
死叉卖出执行完毕----------------------------------
此次购买数量: 4
证券价格: 26.12
本金还剩: 2536.0000000000036
金叉买入执行完毕----------------------------------
清仓: 0
证券价格: 24.28
本金还剩: 12248.000000000004
死叉卖出执行完毕----------------------------------
此次购买数量: 4
证券价格: 30.48
本金还剩: 56.00000000000364
金叉买入执行完毕----------------------------------
清仓: 0
证券价格: 57.4
本金还剩: 23016.000000000004
死叉卖出执行完毕----------------------------------
此次购买数量: 3
证券价格: 63.35
本金还剩: 4011.0000000000036
金叉买入执行完毕----------------------------------
清仓: 0
证券价格: 61.9
本金还剩: 22581.000000000004
死叉卖出执行完毕----------------------------------
此次购买数量: 3
证券价格: 57.57
本金还剩: 5310.000000000004
金叉买入执行完毕----------------------------------
清仓: 0
证券价格: 53.4
本金还剩: 21330.0
死叉卖出执行完毕----------------------------------
此次购买数量: 3
证券价格: 61.11
本金还剩: 2997.0
金叉买入执行完毕----------------------------------
清仓: 0
证券价格: 54.7
本金还剩: 19407.000000000004
死叉卖出执行完毕----------------------------------
此次购买数量: 3
证券价格: 63.39
本金还剩: 390.00000000000364
金叉买入执行完毕----------------------------------
清仓: 0
证券价格: 65.1
本金还剩: 19920.000000000004
死叉卖出执行完毕----------------------------------
此次购买数量: 3
证券价格: 61.64
本金还剩: 1428.0000000000036
金叉买入执行完毕----------------------------------
清仓: 0
证券价格: 59.26
本金还剩: 19206.000000000004
死叉卖出执行完毕----------------------------------
此次购买数量: 3
证券价格: 51.92
本金还剩: 3630.0000000000036
金叉买入执行完毕----------------------------------
清仓: 0
证券价格: 50.55
本金还剩: 18795.0
死叉卖出执行完毕----------------------------------
此次购买数量: 3
证券价格: 55.29
本金还剩: 2208.0
金叉买入执行完毕----------------------------------
清仓: 0
证券价格: 54.35
本金还剩: 18513.0
死叉卖出执行完毕----------------------------------
此次购买数量: 4
证券价格: 42.49
本金还剩: 1517.0
金叉买入执行完毕----------------------------------
清仓: 0
证券价格: 45.58
本金还剩: 19749.0
死叉卖出执行完毕----------------------------------
此次购买数量: 4
证券价格: 46.08
本金还剩: 1317.0
金叉买入执行完毕----------------------------------
清仓: 0
证券价格: 45.45
本金还剩: 19497.0
死叉卖出执行完毕----------------------------------
此次购买数量: 3
证券价格: 50.79
本金还剩: 4260.0
金叉买入执行完毕----------------------------------
清仓: 0
证券价格: 46.77
本金还剩: 18291.0
。。。

Python量化交易策略--双均线策略及代码

        模型可以打印每次买入和卖出的日志,模型中的参数 verbose 和plot是默认打开的,可以看需求关闭。同时Plot参数提供了可视化, 上方的图表示股价图,下方图则是本金变化图形。

        从图形可以看出600460的股价从20年的低点到21年的高年翻了将近6倍,而均线策略最高只取得了两倍的收益。

        我们可以继续换一组参数,用5日线和10日线来操作。

model = Dual_moving_average_stra('600460', '20200101', 5, 10)
model.strategy()

Python量化交易策略--双均线策略及代码

         可以看出来效果会比5日线和20日线的组合好一点。个人感觉这个策略比较依赖标的。文章来源地址https://www.toymoban.com/news/detail-410396.html

到了这里,关于Python量化交易策略--双均线策略及代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 量化交易策略的未来:如何融合人工智能与金融

    量化交易策略的未来:如何融合人工智能与金融 量化交易策略已经成为金融市场中最受关注的话题之一。随着大数据、人工智能和机器学习技术的快速发展,量化交易策略的应用范围和深度得到了显著提高。这篇文章将探讨量化交易策略的未来趋势,以及如何将人工智能与金

    2024年02月20日
    浏览(126)
  • 国金QMT量化交易系统的Bug及应对策略

    国金QMT量化交易系统中的 账号成交状态变化主推 deal_callback() , 当账号成交状态有变化时,这个函数被客户端调用。 我的策略是,在handlebar()里面挂单,等待成交,而判断成交的方式是根据系统主推deal_callback()通知。收到系统通知后,经过一系列的计算再次挂单,把成交反向

    2024年02月11日
    浏览(48)
  • python数据分析及可视化(十六)金融量化(金融工具、金融分析、Tushare安装使用、双均线分析)

    金融就是对现有资源进行重新整合之后,实现价值和利润的等效流通。 比如小明想把手里的资金投资给小李,而小李有好的增值项目但是缺少资金,如果小李的项目创业成功,小明的资金就会增长。 在金融市场中可交易的金融资产,主要分为股票、期货、黄金、外汇、基金

    2024年02月10日
    浏览(72)
  • (9-3)基于深度强化学习的量化交易策略(OpenAI Baselines +FinRL+DRL+PyPortfolioOpt):数据预处理

    1.1.6  数据预处理 数据预处理是训练高质量机器学习模型的关键步骤,在这一步需要检查缺失数据并进行特征工程,以将数据转换为适合模型训练的状态。本项目的数据预处理江湾城以下工作: 添加技术指标:在实际交易中,需要考虑各种信息,例如历史股价、当前持仓股票

    2024年01月25日
    浏览(44)
  • (9-8)基于深度强化学习的量化交易策略(OpenAI Baselines +FinRL+DRL+PyPortfolioOpt):最小方差投资组合分配

    1.1.11  最小方差投资组合分配 最小方差投资组合分配是一种通过优化投资组合权重,以最小化整个投资组合的方差(波动性)的方法。这种方法旨在构建一个投资组合,使其在给定一组资产的情况下,具有最小的风险。通过调整不同资产在投资组合中的权重,以达到整体风险

    2024年02月22日
    浏览(57)
  • (9-5)基于深度强化学习的量化交易策略(OpenAI Baselines +FinRL+DRL+PyPortfolioOpt):深度强化学习算法模型

    本项目的深度强化学习算法的是基于Stable Baselines实现的,Stable Baselines是OpenAI Baselines的一个分支,经过了重大的结构重构和代码清理工作。另外,在库FinRL中包含了经过调优的标准深度强化学习算法,如DQN、DDPG、多智能体DDPG、PPO、SAC、A2C和TD3,并且允许用户通过调整这些深度

    2024年01月25日
    浏览(52)
  • 低代码开发让量化交易插上翅膀

    随着技术的不断发展,低代码开发平台逐渐在各个领域崭露头角。其中,量化交易是一个领域,通过低代码开发平台,使得量化交易策略的开发和实施更加高效、灵活和可持续。 量化交易是基于算法和数学模型的自动化交易策略,近年来在金融市场中越来越受欢迎。传统的量

    2024年01月18日
    浏览(45)
  • AI时代Python量化交易实战:ChatGPT让量化交易插上翅膀

    目录 一、引言 二、ChatGPT与量化交易的融合 三、实践应用:ChatGPT在量化交易中的成功案例 四、挑战与前景 五、结论 《AI时代Python量化交易实战:ChatGPT让量化交易插上翅膀》📚→ 当当 | 京东 亮点 内容简介 获取方式 前些天发现了一个巨牛的人工智能学习网站,通俗易懂

    2024年02月03日
    浏览(54)
  • Python:Python编程:金融量化交易

    在金融量化交易中,下面几个模块是应用的比较广泛的 numpy (Numberic Python) : 提供大量的数值编程工具,可以方便的处理:向量矩阵等运算,相比高昂的 matlab , NumPy的出现使 Python得到了更多人的青睐。 scipy : 更多应用于 统计,优化,差值,数值积分,时频率转换等领域 Pandas

    2024年02月07日
    浏览(38)
  • 【粉丝福利社】AI时代Python量化交易实战:ChatGPT让量化交易插上翅膀(文末送书-完结)

    🏆 作者简介,愚公搬代码 🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,51CTO博客专家等。 🏆《近期荣誉》:

    2024年02月03日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包