Oanda 的集成同时支持:

  • 实时数据馈送
  • 实时交易

要求

  • oandapy

    安装它:pip install git+https://github.com/oanda/oandapy.git

  • pytz(可选,不推荐)

    鉴于外汇的全球性和 24×7 的性质,选择是UTC 及时工作。如果愿意,您仍然可以使用所需的输出时区。

示例代码

来源包含以下完整示例:

  • samples/oandatest/oandatest.py

Oanda – 商店

存储是实时数据馈送/交易支持的基石,在Oanda API 与数据馈送和代理代理的需求之间提供了一层适配。

  • 提供使用以下方法获取代理实例的访问权限:
  • 提供对 getter数据馈送实例的访问

    在这种情况下,许多是**kwargs数据馈送所共有的,例如 datanamefromdatetodatesessionstartsessionendtimeframe,compression

    数据可以提供其他参数。检查下面的参考。

强制参数

为了成功连接到Oanda,以下参数是必需的:

  • token(默认: None): API 访问令牌
  • account(默认值:)None:帐户 ID

这是由Oanda提供的

无论是连接练习服务器还是真实服务器,使用:

  • practice(默认: False): 使用测试环境

必须定期检查帐户以获取现金价值。可以通过以下方式控制周期性:

  • account_tmout(默认: 10.0): 账户价值/现金刷新周期

Oanda 饲料

实例化数据:

  • 根据 Oanda 指南传递符号
    • 遵循 Oanda 指南的EUR/USDD必须指定为 EUR_USD。将其实例化为:
data = oandastore.getdata(dataname='EUR_USD', ...)

时间管理

除非将tz参数(与pytz 兼容的对象)传递给数据馈送,否则所有时间输出都采用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(使用止损上限/下限价格)
  • Order.StopTrail
  • 括号定单通过使用takeprofitstoploss 定单成员和创建内部模拟定单来支持。

订单有效期

在回测期间可用的相同有效性概念(使用validto buysell)是可用的并且具有相同的含义。因此, 对于以下值, Oanda Ordersvalid的参数转换如下:

  • None翻译为Good Til Cancelled

    由于未指定有效性,因此订单必须在取消之前有效

  • datetime/date翻译为Good Til Date
  • timedelta(x)翻译为Good Til Date (这里timedelta(x) != timedelta())

    这被解释为使订单从now+ 开始有效的信号timedelta(x)

  • timedelta() or 0转换为会话

    已传递一个值(而不是None),但为Null,并被解释为对当天(会话)有效的订单

通知

标准状态将通过方法 Order通知给策略notify_order(如果被覆盖)

  • Submitted– 订单已发送至 TWS
  • Accepted– 已下订单
  • Rejected– 用于真正的拒绝以及在订单创建过程中不知道其他状态时
  • Partial– 部分执行已发生
  • Completed– 订单已全部执行
  • Canceled(或Cancelled
  • Expired– 订单到期取消时

参考

万达店

类 backtrader.stores.OandaStore()

单例类包装以控制与 Oanda 的连接。

参数:

  • token(默认: None): API 访问令牌
  • account(默认值:None:帐户 ID
  • practice(默认: False): 使用测试环境
  • account_tmout(默认: 10.0): 账户价值/现金刷新周期

万达经纪人

类 backtrader.brokers.OandaBroker(**kwargs)

Oanda 的代理实现。

此类将 Oanda 的订单/仓位映射到backtrader.

参数:

  • use_positions(默认值:True:连接到代理提供商时,使用现有头寸启动代理。

    在实例化期间设置False为忽略任何现有位置

万达数据

类 backtrader.feeds.OandaData(**kwargs)

Oanda 数据馈送。

参数:

  • qcheck(默认0.5

    如果没有接收到数据以有机会正确重新采样/重放数据包并将通知传递到链上,则唤醒时间(以秒为单位)

  • historical(默认False

    如果设置为True数据馈送将在第一次下载数据后停止。

    标准数据馈送参数fromdatetodate将用作参考。

    如果为数据选择的时间范围/压缩所请求的持续时间大于 IB 允许的持续时间,则数据馈送将发出多个请求。

  • backfill_start(默认True

    在开始时执行回填。将在单个请求中获取最大可能的历史数据。

  • backfill(默认True

    在断开/重新连接循环后执行回填。间隙持续时间将用于下载尽可能少的数据量

  • backfill_from(默认None

    可以传递一个额外的数据源来做一个初始的回填层。一旦数据源耗尽并且如果有请求,将从 IB 回填。理想情况下,这意味着从已存储的源(如磁盘上的文件)回填,但不限于。

  • bidask(默认True

    如果True,则历史/回填请求将从服务器请求出价/要价

    如果False, 那么中点将被请求

  • useask(默认False

    如果要价部分将使用bidaskTrue价格,而不是默认使用bid

  • includeFirst(默认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',

任何其他组合将被拒绝

评论被关闭。