Oanda API- backtrader 中文教程
与OANDA Oanda
The集成支持:
- Live Datafeeding
- Live Trading
Requirements
oandapy
Install:
pip install git+https://github.com/oanda/oandapy.git
pytz
(可选,并不推荐)由于外汇的全球整体和全天候性质,选择工作
UTC
时间。您还可以与所需输出时区工作,如果wished.
Sample Code
The源包含下一个完整的示例:
samples/oandatest/oandatest.py
OANDA – 在store
这家商店是实时数据馈送/贸易支持的基石,提供一个之间适配的层中的OandaAPI和一个数据供给的需求和经纪人proxy.
- Providesaccess得到一个broker实例与方法:
OandaStore.getbroker(*args, **kwargs)
- 提供访问吸气剂data饲料instances
OandaStore.getedata(\*args, **kwargs)
在这种情况下,许多的
**kwargs
是常见的数据输入像dataname
,fromdate
,todate
,sessionstart
,sessionend
,
timeframe
,compression
的数据可以提供其它PARAMS。检查参考below.
Mandatory parameters
In为了成功地连接到Oanda,下面的参数强制性:
token
(默认:None
):API访问tokenaccount
(默认:None
):帐户id
This通过设置Oanda
是否连接到practice服务器或真实服务器,使用:
practice
(默认:False
):使用测试environment
The帐户必须定期检查,以获得cash和value。该周期性可以被控制:
account_tmout
(默认值:10.0
):刷新周期为帐户值/现金refresh
Oanda feeds
Instantiating数据:
- 根据以下从OANDA准则必须是OANDA guidelines
- EUR/USDD传递的符号指定为
EUR_USD
。它实例为:
data = oandastore.getdata(dataname="EUR_USD", ...)
- EUR/USDD传递的符号指定为
时间management
Unless一个tz
参数(pytz-compatible对象)被传递到数据进料,所有时间输出处于UTC
的格式表示above.
Backfilling
backtrader使得没有特别要求Oanda。对于小时限在Oanda服务器已经practice条回填返回由500
long
OandaBroker – 交易Live
Using的broker
To使用OandaBroker,标准的经纪人模拟例如,通过创建cerebro必须被replaced.
Using的Store模型(优选的):
import backtrader as bt cerebro = bt.Cerebro() oandastore = bt.stores.OandaStore() cerebro.broker = oandastore.getbroker() # or cerebro.setbroker(...)
经纪人 – 初始Positions
The代理支持一个单个参数:
use_positions
(默认值:True
):当连接到代理供应商使用现有位置的kickstart的broker.Set来
False
实例化过程中忽略任何现有的position
Opperations
There是关于该STANDAR使用没有变化。只需使用方法在战略上可用的(见全了Strategy
引用解说)
buy
sell
close
cancel
订单执行Types
Oanda支持几乎所有需要的订单执行类型backtrader的除外Close.
这样的顺序执行类型仅限于:
Order.Market
Order.Limit
Order.Stop
Order.StopLimit
(使用Stop和upperBound/lowerBound价格)Order.StopTrail
- Bracket订单是通过使用支持的
takeprofit
和stoploss
为了成员和回测过程中产生的内部模拟orders.
Order Validity
The同等法律效力可用的概念(用valid
至buy
和sell
)是可用且与相同的含义。因此,valid
参数被转换为Oanda Orders为如下以下值:
None
转换为Good Til Cancelled因为没有效力已规定可以理解,顺序必须是有效的,直到cancelled
datetime/date
转化为Good Til Datetimedelta(x)
转换为Good Til Date(这里timedelta(x) !=
)
timedelta()此被解释为一个信号有一个为了从有效
now
+timedelta(x)
timedelta() or 0
转换为Session的值已经过去(而不是
None
),但是Null和是解释为顺序适用于电流day(会话)
Notifications
The标准Order
状态将被通知给strategy在方法notify_order
(如果覆盖)
Submitted
– 订单已发送到TWSAccepted
– 订单已placedRejected
– 当没有使用真正的拒绝和其他状态是已知的为了creationPartial
期间 – 的部分执行已采取placeCompleted
– 订单已经完全executedCanceled
(或Cancelled
)Expired
– 当订单由于expiry
Reference
OandaStore
class backtrader.stores.OandaStore(取消)
Singleton类包装,以控制连接到Oanda.
Params:
token
(默认:None
):API访问tokenaccount
(默认:None
):帐户IDpractice
(默认值:False
):使用测试environmentaccount_tmout
(默认值:10.0
):刷新周期为帐户价值/现金refresh
OandaBroker
class backtrader.brokers.OandaBroker(** kwargs)
经纪人实施Oanda.
This类映射命令/位置从OANDA到的backtrader
.
PARAMS内部API:
use_positions
(默认值:True
):当连接到代理供应商使用现有位置的kickstart的broker.Set来
False
实例化过程中忽略任何现有的position
OandaData
class backtrader.feeds.OandaData(** kwargs)
OANDA数据Feed.
Params:
qcheck
(默认:0.5
)在几秒钟的时间,如果没有接收到的数据提供一个机会来唤醒重采样/重播正常数据包并通过通知了chain
historical
(默认:False
)如果设置为
True
数据馈送将做后停止第一data.The标准数据馈送参数`的下载
fromdate
和todate
将作为reference.The数据料将令多个请求如果请求的持续时间比给定的时限/压缩由IB允许的一个较大选择用于data.
backfill_start
(默认值:True
)在起动时进行回填。最大可能的历史数据将在单一request.
backfill
取出(默认值:True
)执行断开/再连接循环后回填。差距持续时间将被用来下载data
backfill_from
的最小可能量(默认值:None
)附加的数据源可以传递给做的初始层回填。一旦数据源被耗尽,并且如果被请求,从IB回填会发生。这意味着理想的回填从已存储的来源,如磁盘上的文件,但不局限于to.
bidask
(默认:True
)如果
True
,则历史/回填请求将请求出价/从server如果
False
,然后midpoint将requesteduseask
(默认:False
)如果
True
该ask`的bidask将使用价格的一部分,而不是默认使用bidincludeFirst
的(默认值:True
)的影响的1st历史/回填巴通过直接设置参数给OANDA API calls
reconnect
(默认值:True
)请求重新连接时的网络连接是down
reconnections
(默认值:-1
)次数尝试重新连接:
-1
意味着foreverreconntimeout
(默认:5.0
)在几秒钟的时间等待在重联attempts
该数据馈送仅支持的timeframe
这种映射和compression
,这符合OANDA万达API中的定义开发商的GUID:
(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",
任何其它组合将是rejected
评论被关闭。