当前位置:网站首页>量化初级 -- akshare获得股票代码,最简策略
量化初级 -- akshare获得股票代码,最简策略
2022-07-29 15:58:00 【人工智能曾小健】
import akshare as ak
import pandas as pdstock_code =ak.stock_zh_a_spot_em() #获得股票所有代码的函数
stock_code
fuxing_code = stock_code[stock_code['名称'] == '复星医药']
fuxing_codefrom datetime import datetime
import backtrader as bt # 升级到最新版
import matplotlib.pyplot as plt # 由于 Backtrader 的问题,此处要求 pip install matplotlib==3.2.2
import akshare as ak # 升级到最新版
import pandas as pd
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
#plt.figure().set_size_inches(6,8)#6,8分别对应宽和高
plt.rcParams['figure.figsize'] = (13,13/(16/9)) #6,8分别对应宽和高
# 利用 AKShare 获取股票的后复权数据,这里只获取前 6 列
stock_hfq_df = ak.stock_zh_a_hist(symbol="600196", adjust="hfq").iloc[:, :6]
# 处理字段命名,以符合 Backtrader 的要求
stock_hfq_df.columns = [
'date',
'open',
'close',
'high',
'low',
'volume',
]
# 把 date 作为日期索引,以符合 Backtrader 的要求
stock_hfq_df.index = pd.to_datetime(stock_hfq_df['date'])
class MyStrategy(bt.Strategy):
"""
主策略程序
"""
params = (("maperiod", 20),) # 全局设定交易策略的参数
def __init__(self):
"""
初始化函数
"""
self.data_close = self.datas[0].close # 指定价格序列
# 初始化交易指令、买卖价格和手续费
self.order = None
self.buy_price = None
self.buy_comm = None
# 添加移动均线指标
self.sma = bt.indicators.SimpleMovingAverage(
self.datas[0], period=self.params.maperiod
)
def next(self):
"""
执行逻辑
"""
if self.order: # 检查是否有指令等待执行,
return
# 检查是否持仓
if not self.position: # 没有持仓
if self.data_close[0] > self.sma[0]: # 执行买入条件判断:收盘价格上涨突破20日均线
self.order = self.buy(size=100) # 执行买入
else:
if self.data_close[0] < self.sma[0]: # 执行卖出条件判断:收盘价格跌破20日均线
self.order = self.sell(size=100) # 执行卖出
cerebro = bt.Cerebro() # 初始化回测系统
start_date = datetime(1991, 4, 3) # 回测开始时间
end_date = datetime(2020, 6, 16) # 回测结束时间
data = bt.feeds.PandasData(dataname=stock_hfq_df, fromdate=start_date, todate=end_date) # 加载数据
cerebro.adddata(data) # 将数据传入回测系统
cerebro.addstrategy(MyStrategy) # 将交易策略加载到回测系统中
start_cash = 1000000
cerebro.broker.setcash(start_cash) # 设置初始资本为 100000
cerebro.broker.setcommission(commission=0.002) # 设置交易手续费为 0.2%
cerebro.run() # 运行回测系统
port_value = cerebro.broker.getvalue() # 获取回测结束后的总资金
pnl = port_value - start_cash # 盈亏统计
print(f"初始资金: {start_cash}\n回测期间:{start_date.strftime('%Y%m%d')}:{end_date.strftime('%Y%m%d')}")
print(f"总资金: {round(port_value, 2)}")
print(f"净收益: {round(pnl, 2)}")
#
cerebro.plot(style='candlestick') # 画图初始资金: 1000000 回测期间:19910403:20200616 总资金: 1038230.14 净收益: 38230.14

边栏推荐
猜你喜欢

Google Play 政策更新 | 2022 年 7 月

AI全流程开发难题破解之钥

HMS Core音频编辑服务音源分离与空间音频渲染,助力快速进入3D音频的世界

数字孪生万物可视 | 联接现实世界与数字空间

面试突击69:TCP 可靠吗?为什么?

CAS原理以及ABA问题解决Demo-代码

中小型金融企业该如何进行灾备建设?

节省70%的显存,训练速度提高2倍!浙大&阿里提出在线卷积重新参数化OREPA,代码已开源!(CVPR 2022 )...

Practice of Weibo Advertising Operation and Maintenance Technology Supporting Ten Billions of Requests

公司官网建站笔记(六):域名进行公安备案并将备案号显示在网页底部
随机推荐
6月阿里遭拒,90天深造357页微服务手册,获京东offer
CRM如何帮助企业营销获客
【小程序项目开发--京东商城】uni-app之自定义搜索组件(上)-- 组件UI
揭秘 | 2019 To B 年度盛宴那些人和那些事
长江存储计划今年产能提高一倍,并试产192层3D NAND
数字孪生万物可视 | 联接现实世界与数字空间
【微信小程序】组件使用及属性参考
我的 2019 年终总结
Kubernetes 的 5 个误区
string 保留小数点后两位(js中保留小数点后两位)
MySql数据库命令大全:数据库操作命令,表操作命令,修改表结构命令,数据操作命令,数据查询操作命令
QT连接Mysql数据库(详细成功版)
【Swoole系列3.2】Swoole 异步进程服务系统
参与造谣传谣,华为宣布开除五名员工
mysql的sql分页查询语句怎么写_sql 分页查询语句(mysql分页语句)「建议收藏」
【小程序项目开发-- 京东商城】uni-app之商品列表页面 (上)
地平线获得舜宇集团战略投资并与舜宇智领签署战略合作协议
Property (Property Animation Animation), the basic use of Butterknife butter knife
uni-app判断平台开发环境和生产环境
基于全志D1-H和XR806的名贵植物监控装置