量化策略初探——使用tushare进行沪深300ETF双均线策略

使用tushare采集沪深300ETF数据,并对沪深300ETF采用简单移动平均、指数移动平均、进行双均线策略,最后使用backtrader进行回测。

一、基本概念

双均线策略:运用两条不同周期的移动平均线,即短周期移动平均线和长周期移动平均线的相对大小,研判买进与卖出时机的策略。由短周期均线自下向上穿越长周期均线,所形成的交点,称为金叉。当短周期均线自上而下穿越长周期均线,所形成的交点,称为死叉。

简单移动平均法:对指定期间内的数据做算术平均,新旧数据的权重一样。
指数移动平均法:对指定期间的数据赋予不同的权重,每天数据的权重系数以指数等比形式缩小。

从tushare获取沪深300ETF数据

import pandas as pd
import numpy as np
import backtrader as bt
import datetime,time
import tushare as tsdef get_data(ts_code):#获取沪深300ETF数据pro = ts.pro_api('your token')try :df = pro.fund_daily(ts_code=ts_code)except : time.sleep(0.5)print('获取数据失败')else :print('获取数据成功')#对数据进行处理符合backtrader格式columns = ['trade_date','open','high','low','close','vol']df = df[columns]#转换日期格式df['trade_date'] = df['trade_date'].apply(lambda x: pd.to_datetime(str(x)))bt_col_dict = {'vol':'volume','trade_date':'datetime'}df = df.rename(columns = bt_col_dict)df = df.set_index('datetime')#openinterest 默认为0df['openinterest'] = 0#由于获取的数据的第一行是最新数据,需要重新排列,否则最新日期的均线数据为空df=df.sort_index()return dfdf=get_data('510300.SH')  

策略准备

当前策略先计算简单移动平均,后续计算指数移动平均使用bt.indicators.EMA()

class MYstrategy(bt.Strategy):params = dict(pfast = 20,  # 快周期pslow = 50)   # 慢周期def __init__(self):     self.dataclose = self.datas[0].close     # Order变量包含持仓数据与状态self.order = None     # 初始化移动平均数据     self.slow_sma = bt.indicators.SMA(self.datas[0],                                       period = self.params.pslow)     self.fast_sma = bt.indicators.SMA(self.datas[0], period = self.params.pfast)#backtrader内置函数,可以判断两线的交叉点self.crossover = bt.ind.CrossOver(self.fast_sma, self.fast_sma)#订单相关    def notify_order(self, order):if order.status in [order.Submitted, order.Accepted]:#主动买卖的订单提交或接受时  - 不触发return#验证订单是否完成if order.status in [order.Completed]:self.bar_executed = len(self)   #重置订单self.order = None#next包含所有交易逻辑def next(self):# 检测是否有未完成订单if self.order:return#验证是否有持仓if not self.position:#如果没有持仓,寻找开仓信号#SMA快线突破SMA慢线if self.crossover > 0:self.order = self.buy()#SMA快线跌破SMA慢线elif self.crossover < 0:self.order = self.sell()else:# 如果已有持仓,寻找平仓信号,此地方选择10日之后平仓if len(self) >= (self.bar_executed + 10):self.order = self.close()

策略执行——backtrader回测

def execute_strategy(pfast,pslow):#初始化cerebro = bt.Cerebro(optreturn=False)#设置数据的参数data = bt.feeds.PandasDirectData(dataname=df)cerebro.adddata(data)#加载策略cerebro.addstrategy(MYstrategy,pslow=pslow,pfast=pfast)  #设置初始现金cerebro.broker.set_cash(1000000.0)#设置佣金率cerebro.broker.setcommission(commission=0.0001)#设置固定的购买股数#cerebro.addsizer(bt.sizers.FixedSize, stake=100)#分析框架夏普比率和回撤cerebro.addanalyzer(bt.analyzers.SharpeRatio,_name = 'SharpeRatio')cerebro.addanalyzer(bt.analyzers.DrawDown, _name = 'DW')#初始现金start_cash = cerebro.broker.getvalue()#运行result = cerebro.run()#最终现金end_cash=cerebro.broker.getvalue()#利润计算profit = end_cash-start_cashstrategy = result[0]SR=strategy.analyzers.SharpeRatio.get_analysis()DW=strategy.analyzers.DW.get_analysis()return profit,SR['sharperatio'],DW.drawdown,DW.max.drawdown

策略优化

period = [1,5,10,20,30,60,120,250]
final_results_list = []
for i in period:for j in period:if i < j :result=execute_strategy(i,j)final_results_list.append([i,j,result[0],result[1],result[2],result[3]])pd.DataFrame(final_results_list,columns = ['pfast','pslow','profit','SR','DW','max_DW'])

策略结果

SMA运行结果
在这里插入图片描述

EMA运行结果
在这里插入图片描述

部分回测图展示在这里插入图片描述
从结果上可以看到,指数移动平均法相比于移动平均法更能反映出短期的价格波动情况,其利润的波动更大,但同时最大回撤也更大。后续也可以用遍历形势求出收益最优组合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/44619.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【python量化】广发证券研报:Transformer 架构下的量价选股策略

以下内容来自知乎链接&#xff1a; https://zhuanlan.zhihu.com/p/620820228 作者&#xff1a;日暮途远 已获得作者同意转载。 最近看到了一篇广发证券的关于使用Transformer进行量化选股的研报&#xff0c;在此进行一个复现记录&#xff0c;有兴趣的读者可以进行更深入的研究…

MT5 EA交易期货-市价单开仓平仓

该例子演示了EA如何报期货市价单开仓&#xff0c;开仓后10秒钟报市价单平仓。 在外汇交易里没有市价单&#xff0c;而期货交易有市价单&#xff0c; 市价单报单时不指定价格&#xff0c;让交易所自行成交&#xff0c;就是做多无论多贵都买&#xff0c;做空无论多便宜都卖&…

ETF大小盘轮动策略回测分析

从前面的ETF基金定投策略回测和周内效应分析文章中可以看到&#xff0c;代表大盘指数的沪深300ETF基金510300和代表小盘的创业板ETF基金159915的收益在长期来看差别较大。但是单独定投小盘指数收益高&#xff0c;但是回撤比较大&#xff1b;单独定投大盘指数回撤也不小&#xf…

量化基金 获取基金持仓情况;获取优秀基金人气组合持仓基金情况

通过点击显示全部ajax接口加载获取数据 import requests import re from lxml import etree import csvdef get_stock_lists(id):url2 f"https://fundf10.eastmoney.com/FundArchivesDatas.aspx?typejjcc&code{id}&topline10&year2021&month3&rt0…

TensoRT量化第四课:PTQ与QAT

目录 PTQ与QAT注意事项一、2023/5/8更新二、2023/5/12更新前言1. TensorRT量化2. PTQ3. QAT4. QAT实战4.1 环境配置4.2 pytorch_quantization简单示例4.3 自动插入QDQ节点4.4 手动插入QDQ节点4.5 自定义层量化4.6 官方案例 总结 PTQ与QAT 注意事项 一、2023/5/8更新 新增手动…

Vicuna-13B量化模型单GPU可跑

链接在这&#xff08;需要科学上网&#xff09; Vicuna-13B: Best Free ChatGPT Alternative According to GPT-4 &#x1f92f; | Tutorial (GPU) 有人在B站转了人家的视频 ChatGPT&#xff1a;在你的本地电脑上运行Vicuna-13B &#x1f92f;|教程 (GPU) 下面就是部署的步骤…

“Hey Siri” 背后的黑科技大揭秘!

作者 | Vishant Batta 译者 | 苏本如&#xff0c;责编 | 伍杏玲 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 以下是译文&#xff1a; 如今苹果手机可随时检测并回答“Hey Siri”命令&#xff0c;有人可能会想&#xff0c;它是不是在随时记录我们的日常生活对…

ChatGLM-RM(Reward Model)实现代码逐行讲解

这里我们尝试通过RM训练让模型学会从给定上下文中提取信息&#xff0c;来进行RM模型的实践。你可以从下面链接获取代码 GitHub - Pillars-Creation/ChatGLM-RLHF-LoRA-RM: ChatGLM-6B添加了RLHF的实现&#xff0c;以及部分核心代码的逐行讲解 ,实例部分是做了个新闻短标题的生成…

wochao!chatgpt 真的可以提高我的工作效率!

正确使用指南&#xff1a; https://www.explainthis.io/zh-hant/chatgpt/guidehttps://github.com/PlexPt/awesome-chatgpt-prompts-zh/

小马识途谈如何借助chatGPT提升工作效率

ChatGPT这么聪明会不会大家都要失业了&#xff1f;不用担心&#xff01;ChatGPT不是跟人来抢饭碗的&#xff0c;是来帮助人提升工作效率的&#xff0c;当然也可以是一个很好的学习工具&#xff0c;小马识途营销顾问认为网络营销从业者可以利用它快速提升自己的能力。 1. 学习新…

优思学院|质量人如何利用ChatGPT提升工作效率?

在许多人知道怎么用ChatGPT之后&#xff0c;不少人开始思考如何利用这个工具来提升自己的工作效率。 质量人也不例外&#xff0c;在质量管理中&#xff0c;有许多重复的任务需要人手去完成。这些任务可能包括检查文档、审查流程、跟踪错误等。这些任务既耗费时间&#xff0c;又…

比起“一键脱衣”,这种 AI 技术更可怕

随着科技的发展&#xff0c;现在出现了许多高科技产品&#xff0c;比如 AI、ChatGPT 等等。 可以说 AI 颠覆了我们的认知&#xff0c;因为许多事情我们都可以交给人工智能去做&#xff0c;比如写程序、写论文、写PPT、绘图等等&#xff5e; 目前我们打开一些软件后&#xff0c;…

如约而来 | 成功举办T00Ls论坛 “ 群英荟萃论技,共赴振兴网安 ”

沙龙概要 6月10日&#xff0c;在苏州希尔顿酒店T00ls论坛线下技术沙龙苏州站如期举办 。近年来&#xff0c;网络安全问题日益引起人们的关注&#xff0c;全球网络安全形势不断变化。为此&#xff0c;土司论坛联合百达智慧举办了一场以“低调求发展&#xff0c;潜心习安全”为主…

GPT神奇应用:辅助背单词

正文共 993 字&#xff0c;阅读大约需要 3 分钟 外语学习者必备技巧&#xff0c;您将在3分钟后获得以下超能力&#xff1a; 辅助背单词 Beezy评级 &#xff1a;B级 *经过简单的寻找&#xff0c; 大部分人能立刻掌握。主要节省时间。 推荐人 | nanako 编辑者 | Linda ●此图片…

Facebook如何安全度过新账号阶段不被封号

Facebook如何安全度过新账号阶段不被封号 今天来说下Facebook如何安全度过新账号阶段不被封号&#xff0c;这个应该是好多朋友都非常关心的问题&#xff0c;因为只有账号不被封后面才能有更多操作&#xff0c;加小组也好&#xff0c;创建主页管理主页也好&#xff0c;推广也好&…

ChatGTP--事务是否生效?

项目场景&#xff1a; 由于最近在做一个项目的cola代码改造,所以由于cola需要在 service 和 dao层中间加一层>>> gateway,和springcloud中的gateway不一样,这个仅仅是抽象了一层; 思考: 现在我的事务 依然在service中开启,那么我的事务经过了一个gateway后,再次调用d…

注册Tinder账号攻略 -- 解决账号被禁

Tinder是世界上最受欢迎的交友APP。每天&#xff0c;在Tinder上注册的左右滑动次数超过16亿次&#xff0c;匹配次数超过3000万次。Tinder的用户量每天都在不断的扩大&#xff0c;流量也自然更大&#xff0c;所以Tinder也成为了很多跨境电商朋友们推广的方式之一。 不过众所周知…

面向知乎的个性化推荐模型研究论文

面向知乎的个性化推荐模型研究 《面向知乎的个性化推荐模型研究》论文是大二暑假完成的&#xff0c;已投到《计算机应用与软件》中文核心期刊。论文主要对知乎提出一种基于混合算法的个性化推荐模型。论文基于用户模型、问题模型、推荐模型构建推荐系统&#xff0c;提出Person…

推荐只需要精确?顶会论文看多样化推荐研究趋势

©作者 | 林子涵 来源 | RUC AI Box 本文主要基于最近 2 年发表在顶级会议&#xff08;KDD、SIGIR、WWW、CIKM、IJCAI等&#xff09;的多样化推荐相关论文&#xff0c;介绍最新的研究工作&#xff0c;梳理其背后的技术脉络&#xff0c;同时在最后总结多样化推荐中潜在的研究…

【论文阅读】社交网络传播最大化问题-02

Leader-Based Community Detection Algorithmin Attributed Networks 以往leader-aware算法创新点问题定义定义基础概念定义创新概念 模型构造第一步&#xff1a;确定每个节点的leader第二步&#xff1a;合并小分支以得到最终结果 实验数据集人工合成网络现实世界的网络 基线方…