Cerebro
是backtrader
中的關鍵控制系統, Strategy
(子類)是最終用戶的關鍵控制點。後者需要一種鏈接到系統其他部分的方法,而這正是訂單發揮關鍵作用的地方。
訂單將Strategy
中的邏輯做出的決策轉換為適合Broker
執行操作的消息。這是通過以下方式完成的:
創建
通過 Strategy 的方法:
buy\``,
selland
close(Strategy) which return an
order` 實例作為參考消除
通過Strategy的方法:
cancel
(Strategy),它接受一個訂單實例來操作
訂單還可以作為返回給用戶的一種通信方式,以通知代理中的事情是如何運行的。
通知
To Strategy 方法:
notify_order
(Strategy) 報告一個order
實例
訂單創建
調用buy
、 sell
和close
時,以下參數適用於創建:
data
(默認值:None
)必須為哪些數據創建訂單。如果
None
則係統中的第一個數據self.datas[0] or self.data0
(又名self.data
)將被使用size
(默認值:None
)用於訂單的數據單位的大小(正)。
如果為
None
,則通過getsizer
檢索的sizer
實例將用於確定大小。price
(默認:None
)使用價格(如果實際格式不符合最小報價大小要求,實時經紀人可能會對實際格式施加限制)
None
對Market
單和Close
單有效(市場決定價格)對於
Limit
、Stop
和StopLimit
訂單,此值確定觸發點(在Limit
的情況下,觸發顯然是訂單應匹配的價格)plimit
(默認值:None
)僅適用於
StopLimit
單。這是設置隱含限價單的價格,一旦觸發止損(已使用該price
)exectype
(默認值:None
)可能的值:
Order.Market
或None
。市價單將以下一個可用價格執行。在回測中,它將是下一個柱的開盤價Order.Limit
。只能以給定price
或更高價格執行的訂單Order.Stop
。停止。以price
觸發並像Order.Market
訂單一樣執行的訂單Order.StopLimit
。以price
觸發並作為隱式限價訂單執行的訂單,價格由pricelimit
給出
valid
(默認值:None
)可能的值:
None
:這會生成一個不會過期的訂單(也就是取消前有效)並保留在市場中直到匹配或取消。實際上,經紀人傾向於施加時間限制,但這通常在時間上很遙遠,以至於認為它不會過期datetime.datetime
或datetime.date
實例:日期將用於生成在給定日期時間之前有效的訂單(也就是截止日期)Order.DAY
或0
或timedelta()
:將生成在會話結束前有效的一天(又名日訂單)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
方法將檢查當前倉位並相應地使用buy
或sell
有效平倉。 size
也將自動計算,除非參數是用戶輸入的,在這種情況下可以實現部分平倉或反轉
訂單通知
要接收通知,必須在用戶子類化Strategy
中重寫notify_order
方法(默認行為是什麼都不做)。以下適用於這些通知:
在調用策略的
next
方法之前發出在同一下一個週期中,可能(並且將會)發生多次相同或不同狀態的相同訂單。
訂單可以提交給經紀人並被接受,並且
next
之前完成的訂單將被再次調用。在這種情況下,至少會發生 3 個通知,並具有以下
status
值:Order.Submitted
因為訂單已發送給經紀人Order.Accepted
因為訂單已被經紀人接受並等待潛在的執行Order.Completed
因為在示例中它被快速匹配並完全填充(通常可能是Market
訂單的情況)
在Order.Partial
的情況下,相同狀態的通知甚至可能發生多次。此狀態不會在回測代理中看到(匹配時不考慮交易量),但肯定會由真實代理設置。
真實經紀人可能會在更新頭寸之前發出一次或多次執行,這組執行將彌補Order.Partial
通知。
實際執行數據在屬性中: order.executed
,它是OrderData
類型的對象(參見下面的參考),通常的字段是size
和price
創建時的值存儲在order.created
中,在order
的整個生命週期中保持不變
訂單狀態值
定義如下:
Order.Created
:在創建Order
實例時設置。除非order
實例是手動創建的,而不是通過buy
、sell
和close
,否則最終用戶永遠不會看到Order.Submitted
:當order
實例被傳送到broker
時設置。這僅僅意味著它已被發送。在回測模式下,這將是一個立即行動,但它可能需要真正的經紀人實際時間,該經紀人可能會收到訂單,並且只有在它被轉發到交易所時才首先通知Order.Accepted
:broker
已接受訂單,並且它在系統中(或已經在交易所中)等待根據設置的參數(如執行類型、大小、價格和有效性)執行Order.Partial
:order
已部分執行。order.executed
包含當前填充size
和平均價格。order.executed.exbits
包含ExecutionBits
的完整列表,詳細說明了部分填充Order.Complete
:order
已完全成交的平均價格。Order.Rejected
:broker
拒絕了訂單。broker
可能不接受參數(例如,確定其生命週期的valid
參數)並且order
不能被接受。原因將通過
strategy
的notify_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:當前未平倉價格