Cerebro是backtrader中的關鍵控制系統, Strategy (子類)是最終用戶的關鍵控制點。後者需要一種鏈接到系統其他部分的方法,而這正是訂單發揮關鍵作用的地方。
訂單將Strategy中的邏輯做出的決策轉換為適合Broker執行操作的消息。這是通過以下方式完成的:
創建
通過 Strategy 的方法:
buy\``,sellandclose(Strategy) which return anorder` 實例作為參考消除
通過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:當前未平倉價格