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
对于数据源(比如dataname
、fromdate
、todate
、sessionstart
、sessionend
、timeframe
、compression
)是常见的。数据源可能提供其他参数。请查看下面的参考文档。
必填参数 ========为了成功连接到 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``(使用 Stop 和 upperBound / lowerBound 价格)
Order.StopTrail
使用
takeprofit
和stoploss
订单成员,并创建内部模拟订单,支持 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
- 当订单因过期而被取消时