Backtrader 教程:訂單 - 常規

  |  

Cerebrobacktrader中的關鍵控制系統, Strategy (子類)是最終用戶的關鍵控制點。後者需要一種鏈接到系統其他部分的方法,而這正是訂單發揮關鍵作用的地方。

訂單將Strategy中的邏輯做出的決策轉換為適合Broker執行操作的消息。這是通過以下方式完成的:

  • 創建

    通過 Strategy 的方法: buy\``, sell and close (Strategy) which return an order` 實例作為參考

  • 消除

    通過Strategy的方法: cancel (Strategy),它接受一個訂單實例來操作

訂單還可以作為返回給用戶的一種通信方式,以通知代理中的事情是如何運行的。

  • 通知

    To Strategy 方法: notify_order (Strategy) 報告一個order實例

訂單創建

調用buysellclose時,以下參數適用於創建:

  • data (默認值: None

    必須為哪些數據創建訂單。如果None則係統中的第一個數據self.datas[0] or self.data0 (又名self.data )將被使用

  • size (默認值: None

    用於訂單的數據單位的大小(正)。

    如果為None ,則通過getsizer檢索的sizer實例將用於確定大小。

  • price (默認: None

    使用價格(如果實際格式不符合最小報價大小要求,實時經紀人可能會對實際格式施加限制)

    NoneMarket單和Close單有效(市場決定價格)

    對於LimitStopStopLimit訂單,此值確定觸發點(在Limit的情況下,觸發顯然是訂單應匹配的價格)

  • plimit (默認值: None

    僅適用於StopLimit單。這是設置隱含限價單的價格,一旦觸發止損(已使用該price

  • exectype (默認值: None

    可能的值:

    • Order.MarketNone 。市價單將以下一個可用價格執行。在回測中,它將是下一個柱的開盤價

    • Order.Limit 。只能以給定price或更高價格執行的訂單

    • Order.Stop 。停止。以price觸發並像Order.Market訂單一樣執行的訂單

    • Order.StopLimit 。以price觸發並作為隱式限價訂單執行的訂單,價格由pricelimit給出

  • valid (默認值: None

    可能的值:

    • None :這會生成一個不會過期的訂單(也就是取消前有效)並保留在市場中直到匹配或取消。實際上,經紀人傾向於施加時間限制,但這通常在時間上很遙遠,以至於認為它不會過期

    • datetime.datetimedatetime.date實例:日期將用於生成在給定日期時間之前有效的訂單(也就是截止日期)

    • Order.DAY0timedelta() :將生成在會話結束前有效的一天(又名日訂單)

    • numeric value :假定這是一個與matplotlib編碼中的日期時間相對應的值(由backtrader使用),並將用於生成在該時間之前有效的訂單(截至日期有效)

  • tradeid (默認值: 0

    這是backtrader交易者應用的內部值,用於跟踪同一資產的重疊交易。當通知訂單狀態更改時,此tradeid會發送回策略。

  • **kwargs : 額外的代理實現可能支持額外的參數。 backtrader會將 kwargs 傳遞給創建的訂單對象

    示例:如果backtrader直接支持的 4 種訂單執行類型還不夠,例如在 Interactive Brokers 的情況下,可以將以下內容作為 kwargs 傳遞:

    orderType='LIT', lmtPrice=10.0, auxPrice=9.8
    

    這將覆蓋backtrader創建的設置並生成一個LIMIT IF TOUCHED訂單,其觸及價格為 9.8,限價為 10.0。

筆記

close方法將檢查當前倉位並相應地使用buysell有效平倉size也將自動計算,除非參數是用戶輸入的,在這種情況下可以實現部分平倉或反轉

訂單通知

要接收通知,必須在用戶子類化Strategy中重寫notify_order方法(默認行為是什麼都不做)。以下適用於這些通知:

  • 在調用策略的next方法之前發出

  • 在同一下一個週期中,可能(並且將會)發生多次相同或不同狀態的相同訂單。

    訂單可以提交給經紀人並被接受,並且next之前完成的訂單將被再次調用。

    在這種情況下,至少會發生 3 個通知,並具有以下status值:

    • Order.Submitted因為訂單已發送給經紀人

    • Order.Accepted因為訂單已被經紀人接受並等待潛在的執行

    • Order.Completed因為在示例中它被快速匹配並完全填充(通常可能是Market訂單的情況)

Order.Partial的情況下,相同狀態的通知甚至可能發生多次。此狀態不會在回測代理中看到(匹配時不考慮交易),但肯定會由真實代理設置。

真實經紀人可能會在更新頭寸之前發出一次或多次執行,這組執行將彌補Order.Partial通知。

實際執行數據在屬性中: order.executed ,它是OrderData類型的對象(參見下面的參考),通常的字段是sizeprice

創建時的值存儲在order.created中,在order的整個生命週期中保持不變

訂單狀態值

定義如下:

  • Order.Created :在創建Order實例時設置。除非order實例是手動創建的,而不是通過buysellclose ,否則最終用戶永遠不會看到

  • Order.Submitted :當order實例被傳送到broker時設置。這僅僅意味著它已被發送。在回測模式下,這將是一個立即行動,但它可能需要真正的經紀人實際時間,該經紀人可能會收到訂單,並且只有在它被轉發到交易所時才首先通知

  • Order.Accepted : broker已接受訂單,並且它在系統中(或已經在交易所中)等待根據設置的參數(如執行類型、大小、價格和有效性)執行

  • Order.Partialorder已部分執行。 order.executed包含當前填充size和平均價格。

    order.executed.exbits包含ExecutionBits的完整列表,詳細說明了部分填充

  • Order.Complete : order已完全成交的平均價格。

  • Order.Rejected : broker拒絕了訂單。 broker可能不接受參數(例如,確定其生命週期的valid參數)並且order不能被接受。

    原因將通過strategynotify_store方法通知。雖然這可能看起來很尷尬,但原因是現實生活中的經紀人會通過事件通知這一點,這可能與訂單直接相關,也可能不直接相關。但是仍然可以在notify_store中看到來自代理的通知。

    在回測代理中不會看到此狀態

  • Order.Margin :訂單執行將意味著追加保證金,並且先前接受的訂單已從系統中刪除

  • Order.Cancelled (或Order.Canceled ):確認用戶請求取消

    必須考慮到,通過策略的cancel方法請求取消訂單並不能保證取消。訂單可能已經執行,但經紀商可能尚未通知此類執行和/或通知可能尚未交付給策略

  • Order.Expired : 先前接受的具有時效性的訂單已過期並從系統中刪除

參考:訂單和相關類

這些對backtrader生態系統中的通用類。在與其他經紀人合作時,它們可能會被擴展和/或包含額外的嵌入信息。請參閱相應經紀人的參考資料

類反向交易者 .order.Order ()

保存創建/執行數據和訂單類型的類。

訂單可能有以下狀態:

  • 已提交:發送給經紀人並等待確認

  • 接受:被經紀人接受

  • 部分:部分執行

  • 完成:完全執行

  • Canceled/Cancelled:被用戶取消

  • 過期:過期

  • 保證金:沒有足夠的現金來執行訂單。

  • 拒絕:被經紀人拒絕

    這可能發生在訂單提交期間(因此訂單不會達到已接受狀態)或在每個新柱價格執行之前,因為現金已被其他來源提取(類似未來的工具可能已經減少了現金或訂單訂單可能已經執行)

會員屬性:

  • ref:唯一的訂單標識符

  • created:OrderData 保存創建數據

  • 執行:OrderData 保存執行數據

  • info:通過方法addinfo()傳遞的自定義信息。它以已被子類化的 OrderedDict 的形式保存,因此也可以使用 '.' 指定鍵。符號

用戶方法:

  • isbuy():返回 bool 指示訂單是否購買

  • issell():返回 bool 指示訂單是否賣出

  • alive():如果訂單狀態為 Partial 或 Accepted,則返回 bool

backtrader .order.OrderData(dt=None, size=0, price=0.0, pricelimit=0.0, remsize=0, pclose=0.0, trailamount=0.0, trailpercent=0.0)

保存創建和執行的實際訂單數據。

在創建的情況下提出請求,在執行的情況下實際結果。

會員屬性:

  • exbits : 此 OrderData 的 OrderExecutionBits 的可迭代

  • dt: datetime (float) 創建/執行時間

  • 大小:請求/執行的大小

  • price:執行價格注:如果沒有給出價格,也沒有給出pricelimite,則以當時的收盤價或訂單創建時的收盤價作為參考

  • pricelimit:持有 StopLimit 的 pricelimit(先觸發)

  • trailamount:追踪止損的絕對價格距離

  • trailpercent:追踪止損的百分比價格距離

  • value:整個比特大小的市場價值

  • comm:整個比特執行的佣金

  • pnl:由該位生成的 pnl(如果某些東西已關閉)

  • 保證金:訂單產生的保證金(如有)

  • psize: 當前開倉大小

  • pprice:當前平倉價格

backtrader .order.OrderExecutionBit(dt=None, size=0, price=0.0, closed=0, closedvalue=0.0, closedcomm=0.0, open=0, opensvalue=0.0, openscomm=0.0, pnl=0.0, psize=0 , pprice=0.0)

旨在保存有關訂單執行的信息。 “位”不能確定訂單是否已全部/部分執行,它只是保存信息。

會員屬性:

  • dt: datetime (float) 執行時間

  • 大小:執行了多少

  • 價格:執行價格

  • 已關閉:有多少執行關閉了現有職位

  • 已開倉:多少執行了新倉位

  • opensvalue:“打開”部分的市場價值

  • closedvalue:“封閉”部分的市場價值

  • closedcomm:“封閉”部分的佣金

  • openscomm:“打開”部分的佣金

  • value:整個比特大小的市場價值

  • comm:整個比特執行的佣金

  • pnl:由該位生成的 pnl(如果某些東西已關閉)

  • psize: 當前開倉大小

  • pprice:當前平倉價格

推薦閱讀

相關文章

Backtrader寫下來

隨著 1.1.7.88 版本的發布, backtrader有了一個新的補充:作家這可能早就到期了,應該已經存在了,問題 #14中的討論也應該已經開始了開發。但遲到總比沒有好。

Backtrader 教程:繪圖 - 同一軸

上一篇future-spot 將原始數據和稍微(隨機)修改的數據繪製在同一空間上,但不在同一軸上。從該帖子中恢復第一張圖片。有人能看見:圖表左右兩側有不同的刻度當查看在原始數據周圍振盪+- 50點的擺動紅線(隨機數據)時,這一點最為明顯。在圖表上,視覺印像是這些隨機數據大多總是高於原始數據。

Backtrader教程:數據饋送 - 重新取樣

如果數據僅在單個時間範圍內可用,並且必須在不同的時間範圍內進行分析,則是時候進行一些重新採樣了。 “重採樣”實際上應該稱為“上採樣”,因為一個人從源時間幀到更大的時間幀(例如:幾天到幾周) backtrader 內置支持通過篩選器對象傳遞原始數據,從而進行重採樣。

Backtrader迪克森移動平均線

下面的reddit帖子以自己的作者Nathan Dickson(reddit句柄)命名了這個平均值Dickson移動平均線。 在一次對reddit Algotrading 的定期訪問中,我發現了一篇關於移動平均線的帖子,該移動平均線試圖模仿Jurik移動平均線(又名JMA)。

Backtrader教程:觀察者 - 基準測試

工單 #89 是關於針對資產添加基準測試的。明智的是,人們實際上可能有一個策略,即使積極,也低於簡單地跟蹤資產所能提供的策略。

Backtrader數據多時間幀

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

Backtrader遞歸指標

backtrader的最初目標之一是:能夠快速製作指標原型以測試新想法它不一定是一個完美的指標,但能夠快速輕鬆地開發它們確實會有所幫助。為了確認設計是正確的,反向交易者標準庫中的第一個指標是指數移動平均線(又名 EMA),其定義為:遞歸。

Backtrader 教程:策略 - 參考

內置策略的參考MA_CrossOver別名: * SMA_CrossOver 這是一個多頭策略,

Backtrader多數據策略

因為世界上沒有任何事物是孤立存在的,購買資產的觸發因素很可能實際上是另一種資產。使用不同的分析技術,可能已經在兩個不同的數據之間發現了相關性。 backtrader支持同時使用不同的數據源,因此它可以在大多數情況下用於此目的。

Backtrader動量策略

在另一篇偉大的文章中,泰迪·科克(Teddy Koker)再次展示了演算法交易策略的發展之路: 研究優先應用 pandas 回溯測試,然後使用 backtrader 榮譽!!! 該帖子可以在以下位置找到: 泰迪·科克(Teddy Koker)給我留言,問我是否可以評論 backtrader的用法。