與 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',
任何其他組合將被拒絕