学习python量化用backtrader回测的第二个策略简单买入卖出

学习python量化用backtrader回测的第二个策略简单买入卖出

学习python股票量化编程,从最简单的买入卖出开始,也许是最好的选择,因为无论学什么,我们都应该从易到难。

所谓简单买入卖出,就是选定某一支自己熟悉的股票,当低于某价位时就买入,高于某价位就卖出。不管时间长短,不管资金效率如何,就只看一点,程序是否按此策略执行了,毕竟我的目的只是为了学习编写python量化程序。

因为第一次用backtrader写了双均线策略,已经明白了写策略的四个步骤:1、导入数据。2、构建策略。3、回测。4、输出结果,用图表显示。所以这一次,就先把双均线的代码全复制粘贴过来,然后就修改构建策略里的语句,其他的都没变,省时省力。完整代码如下:

# 本代码仅为学习练习用,不具备任何实战价值
import akshare as ak
import backtrader as bt
import pandas as pd

# 获取股票数据
df = ak.stock_zh_a_hist('600863', start_date='20200101',end_date='20240308')
df['datetime'] = pd.to_datetime(df['日期'])
# 转换为 Backtrader 数据格式
data = bt.feeds.PandasData(dataname=df, datetime='datetime', open='开盘', high='最高', low='最低', close='收盘', volume='成交量')
print(df.head())

# 构建定价买入卖出策略
class MyStrategy(bt.Strategy):
    params = (
        # 滑点比例
        ('slippage', 0.01),
    )

    def next(self):
        # 价格低于2.5元,资金大于97500买入
        if data.close[0] < 2.5:
            # 计算买入股票后的资金余额
            post_buy_cash = self.broker.getvalue() - data.close[0] * self.position.size * (1 + self.params.slippage)
            # 如果资金余额大于 97500,买入股票
            if post_buy_cash > 97500:
                self.buy(size=39000)
                # 打印入价格、数量、时间
                print('买入价格: %.2f, 数量: %.2f, 时间: %s' % (
                    self.data.close[0], self.data.volume[0], self.data.datetime.date()))
        # 价格高于5元,持股数量等于39000卖出
        if data.close[0] > 4.5 and self.position.size == 39000:
            self.sell(size=39000)
            # 打印出价格、数量、时间
            print('卖出价格: %.2f, 数量: %.2f, 时间: %s' % (
                self.data.close[0], self.data.volume[0], self.data.datetime.date()))




# 构建回测引擎
cerebro = bt.Cerebro()

# 加入策略
cerebro.addstrategy(MyStrategy)

# 加载数据
cerebro.adddata(data)

# 设置初始资金
cerebro.broker.setcash(100000.0)

# 设置佣金
cerebro.broker.setcommission(commission=0.001)

# 运行回测
cerebro.run()

# 输出结果
print('最终市值: %.2f' % cerebro.broker.getvalue())

# 绘制图表
cerebro.plot()


刚写本策略时也遇到了问题,原来设定是达到买入价是就全仓买入,但是程序却在低于买入价下不停地买,没钱也买入,这完全不现实,故在买入前加了一个计算资金余额的条件:

post_buy_cash = self.broker.getvalue() – data.close[0] * self.position.size * (1 + self.params.slippage)

if post_buy_cash > 97500:

self.buy(size=39000)

总算禁止了程序傻瓜般的疯狂买入。

学习python量化用backtrader回测的第二个策略简单买入卖出

学习python量化用backtrader回测的第二个策略简单买入卖出

这策略完全没有实用价值,要想等到买入价,那是千年等一回,好在它按策略设定去运行了,学习的目的达到了。

我觉得双均线策略比这个要更复杂一点,多了一步均线的计算,作为第二个学习的策略更合适一些,只是很多教学量化的书本和视频都是以双均线做第一个例子来讲解,我也就用双均线开了个头。

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/73470
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2024 年 7 月 10 日
下一篇 2024 年 7 月 10 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注