backtrader中何为一个交易trade?你可能并没理解它
1 概述
在backtrader回测程序中,当交易trade状态发生改变时,会触发策略的notify_trade方法,这里头可以输出交易trade信息,例子如下:
记录交易收益情况(可省略,默认不输出结果)
def notify_trade(self, trade): if trade.isclosed:print('毛收益 %0.2f, 扣佣后收益 % 0.2f, 佣金 %.2f' %(trade.pnl, trade.pnlcomm, trade.commission))
不仔细的话,你可能想当然以为你已经理解了trade的概念,但仔细想想,你真的理解了吗?trade状态核实发生改变?他有几个状态?它到底是什么意思?很快你就会模糊了!
在我们一般买卖股票时,只涉及向券商发订单,并无交易(trade)的概念。并不是下一个买单,就是一个交易,下一个卖单,又代表另一个交易。交易的概念实际是用户方的概念。
2 那么backtrader中是如何定义交易的呢?
对正常采用自有资金购买股票,不能做空的情况下,当一个订单使得仓位从0变为正值,则打开了一个交易,此后,当某订单使得仓位从正值变为0,则该交易关闭,这两种情况都会触发notify_trade方法。
一个交易可能由多个订单组成。不能做空的情况下,举个例子观察交易状态的变化,在next方法中:
第一次下买单买100股,此订单执行时,仓位从0变为正值(100),系统打开一个交易,会触发notify_trade方法,在notify_trade中检查交易状态status,为1 open。
然后下第二张买单100股,订单执行时不会触发notify_trade,仓位变为200。
然后下卖单卖100股,仍然不会触发notify_trade,仓位变为100。
再下一个卖单卖100股,执行时,仓位从100变为0,关闭交易,触发notify_trade,交易状态为2 close。
不能做空的情况下,self.close()命令会一次性市价卖出全部仓位,关闭交易。
在可以做空的情况下,当仓位从0变为非0(长仓为正值,短仓为负值),则打开了一个交易,此后仓位从非0值变为0值,则交易关闭。在卖空操作中,self.close()默认会市价买回所有卖空仓位,关闭交易。
如果某个订单使得仓位从正值变到负值,或负值变到正值,则意味着两个动作:一个交易被关闭了(仓位从非0值变为0),一个新交易被打开了(仓位从0变为非0)。
trade对象具有如下属性:
附书源码tradestatus.py展示了交易状态的变化,读者可自行运行该源码,观察交易状态的变化。
3 更加高级的用法
我们可以在notify_trade方法中,利用变量self.trade记录交易对象,然后在其他地方使用它。
def __init__(self):self.trade = None # 定义跟踪交易的变量# 记录交易收益情况(可省略,默认不输出结果)
def notify_trade(self, trade):self.trade = trade # 记录交易if trade.isclosed:print('毛收益 %0.2f, 扣佣后收益 % 0.2f, 佣金 %.2f' %(trade.pnl, trade.pnlcomm, trade.commission))
有时候,我们希望对交易加以分类,比如,0表示趋势交易, 1表示均值回归交易。这样在回测结束时,可以分析不同交易的绩效。怎样做到这一点呢?
你在创建订单时,可以指定该订单所属交易类型,比如self.buy(tradeid=1),这样打开了一个交易,并设置tradeid为1表示均值回归交易,以后就可以对此进行分析。
更多内容请参考我们编写的深入浅出的backtrader技术教程
backtrader中何为一个交易trade?你可能并没理解它相关推荐
- 用python从0开始创建一个区块链,从代码深入理解区块链
作者认为最快的学习区块链的方式是自己创建一个,本文就跟随作者用Python来创建一个区块链. 对数字货币的崛起感到新奇的我们,并且想知道其背后的技术--区块链是怎样实现的. 但是完全搞懂区块链并非易事 ...
- Backtrader:实现一个简单的通达信的交易策略
大体了解了Backtrader的运行原理后,尝试把一个通达信的交易策略改编为backtrader策略,并测试一下交易时间是否与通达信中出现的交易时间一致.如果一致,说明改写的策略有效. 通达信中有这样 ...
- Backtrader系列教程④:交易篇(上)
预定系列 Backtrader 来了 Backtrader 数据篇 Backtrader 指标篇 Backtrader 交易篇(上) Backtrader 交易篇(下) Backtrader 策略篇 ...
- 锁是网络数据库中的一个非常重要的概念
锁是网络数据库中的一个非常重要的概念,它主要用于多用户环境下保证数据库完整性和一致性.各种大型数据库所采用的锁的基本理论是一致的,但在具体 实现上各有差别.目前,大多数数据库管理系统都或多或少具有自我 ...
- 一个交易号的生成和还原过程
需求是一个同学给的,我帮他做完,记录下. 需求如下: 业务变更内容及需求确认: 1. 原交易序号-->算法-->打乱交易序号 2. 打乱 ...
- 在git 2.13之前,只保存多个已更改的文件中的一个文件
如何在我的分支上只隐藏多个已更改文件中的一个? #1楼 类似的情况. 提交并意识到它不行. git commit -a -m "message" git log -p 根据答案,这 ...
- Mina中的支付交易snark
1. 引言 前序博客有: Mina的支付流程 Mina中目前的交易类型主要有: Coinbase交易:给产块者激励和手续费的交易,为内部交易. Fee_transfer交易:给snark worker ...
- 树莓派配置https://www.raspberrypi.org/documentation/configuration/中的一个单词翻译:
树莓派配置https://www.raspberrypi.org/documentation/configuration/中的一个单词翻译: LED warning flash codes Descr ...
- 国际战略中aaa模式_AAA游戏中的微交易将继续存在(但仍然很糟糕)
国际战略中aaa模式 This weekend, while most of the technology and gaming press wasn't working on anything pa ...
最新文章
- [转](不理想)Ubuntu下更改主显示器
- 使用vue2.0 vue-router vuex 模拟ios7操作
- shell常用的基础命令
- linux 内核驱动编程 简单例子 与_IO, _IOR, _IOW, _IOWR 宏解析
- 支付宝不止怀有“社交梦”,社区金融才是它的野心所在
- python分类预测降低准确率_python实现吴恩达机器学习练习3(多元分类器和神经网络)...
- React不提交表单并且获取表单中的数据
- IDEA Unable to import maven project: See logs for details
- 从设计的角度,浅谈艾尔登法环给我带来的游玩感受
- 5G/NR SSB学习总结
- “段子手”黄允松的严肃一面:数字化转型是颠覆式创新
- 图解《狂飙》人物关系
- 优雅!用了这两款插件,我成了整个公司代码写得最规范的码农
- vivado 2019.2下载地址分享,网盘分享
- 网 络 世 界 的 黑 暗 面
- 非线性方程线性化求参数的简单例子
- 基于微信小程序视频点播系统 视频点播小程序毕业设计 毕业论文 开题报告和效果图参考
- 学生端android版二1班,一起作业学生端安卓版
- 计算机网络连接设备不见了,计算机本地连接找不到了(不见了)如何修复
- python设计程序求10个数去掉最高分和最低分后的平均值_7-6、以下伪代码是体育评分,10个评委进行评分,去掉一个最高分,去掉一个最低分,再求平均值。...