与 Oanda 的集成同时支持:
实时数据馈送
实时交易
要求
oandapy
安装它:
pip install git+https://github.com/oanda/oandapy.git
pytz
(可选,不推荐)鉴于外汇的全球性和 24x7 的性质,选择在
UTC
时间工作。如果愿意,您仍然可以使用所需的输出时区。
示例代码
来源包含以下完整示例:
-
samples/oandatest/oandatest.py
Oanda - 商店
存储是实时数据馈送/交易支持的基石,在 Oanda API 与数据馈送和代理代理的需求之间提供了一层适配。
提供使用以下方法获取代理实例的访问权限:
-
OandaStore.getbroker(*args, **kwargs)
-
提供对 getter数据馈送实例的访问
OandaStore.getedata(\*args, **kwargs)
在这种情况下,许多
**kwargs
对数据提要很常见,例如dataname
、fromdate
、todate
、sessionstart
、sessionend
、timeframe
、compression
数据可以提供其他参数。检查下面的参考。
强制参数
为了成功连接到 Oanda,以下参数是必需的:
token
(默认值:None
):API 访问令牌account
(默认值:None
):帐户 ID
这是由 Oanda 提供的
无论是连接练习服务器还是真实服务器,使用:
-
practice
(默认:False
):使用测试环境
必须定期检查帐户以获取现金和价值。可以通过以下方式控制周期性:
-
account_tmout
(default:10.0
): 账户价值/现金刷新周期
Oanda 饲料
实例化数据:
根据 Oanda 指南传递符号
- 遵循 Oanda 指南的 EUR/USDD 必须指定为
EUR_USD
。将其实例化为:
data = oandastore.getdata(dataname='EUR_USD', ...)
- 遵循 Oanda 指南的 EUR/USDD 必须指定为
时间管理
除非将tz
参数(与 pytz 兼容的对象)传递给data feed ,否则所有时间输出都是如上所述的UTC
格式。
回填
backtrader对 Oanda 没有特别要求。对于小时间框架,Oanda 在练习服务器上返回的回填长度为500
柱
OandaBroker - 实时交易
使用代理
要使用 OandaBroker,必须替换由cerebro创建的标准代理仿真实例。
使用 Store 模型(首选):
import backtrader as bt cerebro = bt.Cerebro() oandastore = bt.stores.OandaStore() cerebro.broker = oandastore.getbroker() # or cerebro.setbroker(...)
经纪人 - 初始头寸
代理支持单个参数:
use_positions
(默认值:True
):连接到代理提供商时,使用现有头寸启动代理。在实例化期间设置为
False
以忽略任何现有位置
操作
标准用法没有变化。只需使用策略中可用的方法(有关完整说明,请参阅Strategy
参考)
buy
sell
close
cancel
订单运行类型
Oanda 支持反向交易者所需的几乎所有订单运行类型,但Close除外。
因此,订单运行类型仅限于:
Order.Market
Order.Limit
Order.Stop
Order.StopLimit
(使用 Stop 和 upperBound / lowerBound 价格)Order.StopTrail
通过使用
takeprofit
和stoploss
订单成员并创建内部仿真订单来支持括号订单。
订单有效期
在回测期间可用的相同有效性概念(具有valid
的buy
和sell
)是可用的并且具有相同的含义。因此,对于以下值,Oanda Orders 的valid
参数转换如下:
None
转化为良好直到取消由于未指定有效性,因此订单必须在取消之前有效
datetime/date
转换为 Good Til Datetimedelta(x)
转换为 Good Til Date(此处timedelta(x) != timedelta()
)这被解释为使订单从
now
开始有效的信号 +timedelta(x)
timedelta() or 0
转换为 Session已传递一个值(而不是
None
)但为 Null 并被解释为对当天(会话)有效的订单
通知
标准Order
状态将通过notify_order
方法通知给策略(如果被覆盖)
已
Submitted
- 订单已发送至 TWSAccepted
- 订单已下达已
Rejected
- 用于真正的拒绝以及在创建订单期间不知道其他状态时Partial
- 部分运行已发生Completed
- 订单已完全运行Canceled
(或Cancelled
)已
Expired
- 当订单因过期而取消时
参考
万达店
类backtrader .stores.OandaStore()
单例类包装以控制与 Oanda 的连接。
参数:
token
(默认值:None
):API 访问令牌account
(默认值:None
):帐户 IDpractice
(默认:False
):使用测试环境account_tmout
(default:10.0
): 账户价值/现金刷新周期
万达经纪人
类backtrader .brokers.OandaBroker(**kwargs)
Oanda 的代理实现。
此类将 Oanda 的订单/头寸映射到backtrader
的内部 API。
参数:
use_positions
(默认值:True
):连接到代理提供商时,使用现有头寸启动代理。在实例化期间设置为
False
以忽略任何现有位置
万达数据
类backtrader .feeds.OandaData(**kwargs)
Oanda数据馈送。
参数:
qcheck
(默认值:0.5
)如果没有接收到数据以有机会正确重新采样/重放数据包并将通知传递到链上,则唤醒时间(以秒为单位)
historical
(默认:False
)如果设置为
True
,则数据馈送将在第一次下载数据后停止。标准数据馈送参数
fromdate
和todate
将用作参考。如果为数据选择的时间范围/压缩所请求的持续时间大于 IB 允许的持续时间,则数据馈送将发出多个请求。
backfill_start
(默认值:True
)在开始时运行回填。将在单个请求中获取最大可能的历史数据。
backfill
(默认值:True
)在断开/重新连接循环后运行回填。间隙持续时间将用于下载尽可能少的数据量
backfill_from
(默认值:None
)可以传递一个额外的数据源来做一个初始的回填层。一旦数据源耗尽并且如果有请求,将从 IB 回填。理想情况下,这意味着从已存储的源(如磁盘上的文档)回填,但不限于。
bidask
(默认值:True
)如果为
True
,则历史/回填请求将从服务器请求出价/要价如果
False
,则将请求中点useask
(默认值:False
)如果
True
将使用 bidask 价格的要价部分,而不是默认使用 bidincludeFirst
(默认值:True
)通过将参数直接设置为 Oanda API 调用来影响历史/回填请求的第一个柱的传递
reconnect
(默认值:True
)网络连接断开时重新连接
reconnections
(默认值:-1
)尝试重新连接的次数:
-1
表示永远reconntimeout
(默认值:5.0
)重新连接尝试之间的等待时间(以秒为单位)
此数据馈送仅支持timeframe
和compression
的这种映射,它符合 OANDA API 开发人员指南中的定义:
(TimeFrame.Seconds, 5): 'S5', (TimeFrame.Seconds, 10): 'S10', (TimeFrame.Seconds, 15): 'S15', (TimeFrame.Seconds, 30): 'S30', (TimeFrame.Minutes, 1): 'M1', (TimeFrame.Minutes, 2): 'M3', (TimeFrame.Minutes, 3): 'M3', (TimeFrame.Minutes, 4): 'M4', (TimeFrame.Minutes, 5): 'M5', (TimeFrame.Minutes, 10): 'M10', (TimeFrame.Minutes, 15): 'M15', (TimeFrame.Minutes, 30): 'M30', (TimeFrame.Minutes, 60): 'H1', (TimeFrame.Minutes, 120): 'H2', (TimeFrame.Minutes, 180): 'H3', (TimeFrame.Minutes, 240): 'H4', (TimeFrame.Minutes, 360): 'H6', (TimeFrame.Minutes, 480): 'H8', (TimeFrame.Days, 1): 'D', (TimeFrame.Weeks, 1): 'W', (TimeFrame.Months, 1): 'M',
任何其他组合将被拒绝