與 Oanda 的集成同時支持:
實時數據饋送
實時交易
要求
oandapy安裝它:
pip install git+https://github.com/oanda/oandapy.gitpytz(可選,不推薦)鑑於外彙的全球性和 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參考)
buysellclosecancel
訂單執行類型
Oanda 支持反向交易者所需的幾乎所有訂單執行類型,但Close除外。
因此,訂單執行類型僅限於:
Order.MarketOrder.LimitOrder.StopOrder.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',
任何其他組合將被拒絕