Oanda#

与Oanda的集成支持以下两个功能:

  • 实时数据 提供

  • 实时交易

要求#

  • oandapy

    使用以下命令进行安装:pip install git+https://github.com/oanda/oandapy.git

  • ``pytz``(可选,但不是推荐)

    鉴于外汇的全球性质和24小时运营,选择使用``UTC``时间是最合适的。如果需要的话,您仍然可以使用所需的输出时区进行操作。

示例代码#

源代码中包含一个完整的示例: - samples/oandatest/oandatest.py

Oanda - 商店#

商店是实时数据源/交易支持的关键,它在 Oanda API 和数据源和代理经纪人的需要之间提供了一个适应层。

  • 通过以下方法,提供获取 经纪人 实例的访问权限:

    • OandaStore.getbroker(*args, **kwargs)

  • 提供获取 数据 源实例的访问权限:

    • OandaStore.getedata(*args, **kwargs)

    在这种情况下,许多 **kwargs 对于数据源(比如 datanamefromdatetodatesessionstartsessionendtimeframecompression)是常见的。

    数据源可能提供其他参数。请查看下面的参考文档。

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

  • token``(默认值:``None):API访问令牌

  • account``(默认值:``None):账户ID

这些由 Oanda 提供

要连接到 practice 服务器还是真实服务器,请使用:

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

需要定期检查账户以获取 现金 和 * 价值*。可以使用以下参数控制频率:

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

Oanda数据源#

实例化数据: - 根据Oanda的指南传递符号

  • EUR/USDD 需要按照Oanda的指南指定为``EUR_USD``。可以实例化如下:

    ` data = oandastore.getdata(dataname='EUR_USD', ...) `

时间管理#

除非将``tz``参数(一个 pytz兼容 对象)传递给数据源,所有时间输出都是按照上述``UTC``格式的。

补充数据#

backtrader 对*Oanda 没有特殊请求。对于较小的时间框架, 练习*服务器上的补充数据长度为``500``个数据条。

Oanda经纪人–实际交易#

使用经纪人#

要使用 OandaBroker ,必须替换由 cerebro 创建的标准经纪人模拟实例。使用 Store 模型(首选):

```python import backtrader as bt

cerebro = bt.Cerebro() oandastore = bt.stores.OandaStore() cerebro.broker = oandastore.getbroker() # or cerebro.setbroker(…) ```

经纪人 - 初始头寸#

经纪人支持一个参数:

  • use_positions``(默认:``True):连接到经纪人提供商时,使用现有头寸来启动经纪人。

    在实例化过程中设置为``False``,以忽略任何现有头寸。

操作#

在使用上没有任何更改。只需使用策略中可用的方法(参见“策略”参考文档以获取完整说明):

  • buy

  • sell

  • close

  • ``cancel``订单执行类型


Oanda 支持几乎所有由 backtrader 需要的订单执行类型,只有 Close 这个例外。

因此,订单执行类型限制为:

  • Order.Market

  • Order.Limit

  • Order.Stop

  • ``Order.StopLimit``(使用 StopupperBound / lowerBound 价格)

  • Order.StopTrail

  • 使用 takeprofitstoploss 订单成员,并创建内部模拟订单,支持 Bracket 订单。

订单有效性#

在回测期间可用的相同有效性概念(使用 valid 进行买入和卖出)同样适用,并具有相同的含义。因此,对于 Oanda 订单valid 参数的翻译如下:

  • None 翻译为 Good Til Cancelled (直到取消为止)

    因为未指定有效期,这意味着订单必须有效直到被取消。

  • datetime/date 翻译为 Good Til Date (直到指定日期)- timedelta(x) 被翻译为 Good Til Date (这里 ``timedelta(x) !=

timedelta()``)

这被解释为要使一个订单在 现在 + timedelta(x) 之后仍然有效

  • timedelta() or 0 被翻译为 Session

    一个值已经传递(而不是 None),但是它是 Null ,表示订单在当前 day (session)仍然有效

通知#

标准的 Order 状态将通过覆盖方法 notify_order 来通知给一个 策略

  • Submitted - 订单已发送到 TWS

  • Accepted - 订单已下达

  • Rejected - 用于真正的拒绝以及在创建订单时不知道其他状态的情况

  • Partial - 发生了部分执行

  • Completed - 订单已完全执行

  • Canceled``(或 ``Cancelled

  • Expired - 当订单因过期而被取消时

参考#

OandaStore#


OandaData#