Backtrader 教程:實時交易 - Oanda v1.0

  |  

與 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數據提要很常見,例如datanamefromdatetodatesessionstartsessionendtimeframecompression

    數據可以提供其他參數。檢查下面的參考。

強制參數

為了成功連接到 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', ...)
    

時間管理

除非將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

  • 通過使用takeprofitstoploss訂單成員並創建內部模擬訂單來支持括號訂單。

訂單有效期

在回測期間可用的相同有效性概念(具有validbuysell )是可用的並且具有相同的含義。因此,對於以下值,Oanda Orders 的valid參數轉換如下:

  • None轉化為良好直到取消

    由於未指定有效性,因此訂單必須在取消之前有效

  • datetime/date轉換為 Good Til Date

  • timedelta(x)轉換為 Good Til Date(此處timedelta(x) != timedelta()

    這被解釋為使訂單從now開始有效的信號 + timedelta(x)

  • timedelta() or 0轉換為 Session

    已傳遞一個值(而不是None )但為 Null 並被解釋為對當天(會話)有效的訂單

通知

標準Order狀態將通過notify_order方法通知給策略(如果被覆蓋)

  • Submitted - 訂單已發送至 TWS

  • Accepted - 訂單已下達

  • Rejected - 用於真正的拒絕以及在創建訂單期間不知道其他狀態時

  • Partial - 部分執行已發生

  • Completed - 訂單已完全執行

  • Canceled (或Cancelled

  • Expired - 當訂單因過期而取消時

參考

萬達店

backtrader .stores.OandaStore()

單例類包裝以控制與 Oanda 的連接。

參數:

  • token (默認值: None ):API 訪問令牌

  • account (默認值: None ):帳戶 ID

  • practice (默認: 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 ,則數據饋送將在第一次下載數據後停止。

    標準數據饋送參數fromdatetodate將用作參考。

    如果為數據選擇的時間範圍/壓縮所請求的持續時間大於 IB 允許的持續時間,則數據饋送將發出多個請求。

  • backfill_start (默認值: True

    在開始時執行回填。將在單個請求中獲取最大可能的歷史數據。

  • backfill (默認值: True

    在斷開/重新連接循環後執行回填。間隙持續時間將用於下載盡可能少的數據量

  • backfill_from (默認值: None

    可以傳遞一個額外的數據源來做一個初始的回填層。一旦數據源耗盡並且如果有請求,將從 IB 回填。理想情況下,這意味著從已存儲的源(如磁盤上的文件)回填,但不限於。

  • bidask (默認值: True

    如果為True ,則歷史/回填請求將從服務器請求出價/要價

    如果False ,則將請求中點

  • useask (默認值: False

    如果True將使用 bidask 價格的要價部分,而不是默認使用 bid

  • includeFirst (默認值: True

    通過將參數直接設置為 Oanda API 調用來影響歷史/回填請求的一個柱的傳遞

  • reconnect (默認值: True

    網絡連接斷開時重新連接

  • reconnections (默認值: -1

    嘗試重新連接的次數: -1表示永遠

  • reconntimeout (默認值: 5.0

    重新連接嘗試之間的等待時間(以秒為單位)

數據饋送僅支持timeframecompression的這種映射,它符合 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',

任何其他組合將被拒絕

推薦閱讀

相關文章

Backtrader教程:經紀人 - 開倉作弊

“發佈”1.9.44.116 添加了對 Cheat-On-Open的支援。這似乎是那些全力以赴的人的需求功能,他們在酒吧 close 后進行了計算,但希望與 open 價格相匹配。 當開盤價跳空(上漲或下跌,取決於是否buysell有效)並且現金不足以進行全面運營時,這樣的用例就會失敗。這將強制代理拒絕該操作。

Backtrader 教程:佣金計劃

不可知論在繼續之前,讓我們記住, backtrader者試圖對數據代表什麼保持不可知論。不同的佣金方案可以應用於相同的數據集。讓我們看看它是如何做到的。使用代理快捷方式這使最終用戶遠離CommissionInfo對象,因為可以通過單個函數調用創建/設置佣金方案。

Backtrader體積填充

到目前為止, backtrader中的默認交易量填充策略相當簡單明了:忽略音量筆記2016 年 7 月 15 日更正了實現中的錯誤並更新了示例以close頭寸並在休息後重複。

Backtrader策略選擇

最初的策略選擇方法使用兩個策略,手動註冊和一個簡單的[0, 1]列表來決定哪個是策略的目標。因為 Python 為元類提供了許多自省的可能性,所以實際上可以自動化該方法。

Backtraderta-lib 集成

即使 backtrader 提供了已經 high 數量的內置指標,並且開發指標主要是定義輸入,輸出和以自然的方式編寫公式的問題,有些人也希望使用TA-LIB。

Backtrader教程:經紀商

經紀商模擬器該類比支援不同的訂單類型,根據當前現金檢查提交的訂單現金需求,跟蹤每次反覆運算的cerebro 現金和價值,並在不同數據上保持當前位置。

Backtrader多核優化

利用所有可用的核心是我為反向交易者考慮的事情,但從未完成。支持自然運算,刪除數組符號,包含新指標和 bla, bla, bla。實際上,我不是優化的忠實擁護者,因此也不是為優化使用所有內核的忠實擁護者。恕我直言,一個好主意值得一百萬次優化。筆記最初的多核支持已經存在,並且適用於眾所周知的測試用例集。

Backtrader筆記本內聯繪圖

在 Jupyter Notebook 中運行時,1.9.1.99 版添加了自動內聯繪圖。一些關於backtrader的問題表明人們在筆記本中使用該平台並支持這一點並將其設為默認行為應該使事情保持一致。

Backtrader信號策略

操作 backtrader 也是可能的,而無需編寫策略。雖然這是首選方式,但由於構成機器的對象層次結構,使用信號也是可能的。

Backtrader教程:數據饋送 - 多個時間幀

有時投資決策是使用不同的時間框架做出的: 每周評估趨勢 每天執行條目 或者5分鐘對60分鐘。 這意味著需要組合多個時間幀的數據backtrader 來支援這種組合。 對它的本機支持已經內置。