Strategy 是backtrader的核心,是策略逻辑实现部分。
Strategy生命周期由methods构成:
-
Conception: init
Strategy初始化时调用该方法,indicators以及其他一些属性可以在此实现:
Example:def init(self):
self.sma = btind.SimpleMovingAverage(period=15) -
Birth: start
Tells the strategy to start. -
Childhood: prenext
在指标的构造过程中有一些限制(一定数量的数据),通常指标构造过程中存在一个最小期限的概念,如上面init中SimpleMovingAverage中设定的period
当系统中的bars小于15时,会执行prenext方法(默认实现为不做任何操作) -
Adulthood: next
一旦系统达到minum period,系统有足够的的缓存数据开始产生指标数据,strategy足够成熟开始执行。
在从prenext 到next之间会执行nextstart 操作,用于标识切换过程,一般默认prenext就是next方法 -
Reproduction None
Strategies 通常不会真的重复运行,通常是在optimizing操作中设定不同的参数时起作用。 -
Death: stop
系统告诉strategy重置时间到,可以开始整理系统中的相关结果和数据,默认什么都不操作。
一些提醒消息的方法:
- be notified through notify_order(order) of any status change in an order
- be notified through notify_trade(trade) of any opening/updating/closing trade
- be notified through notify_cashvalue(cash, value) of the current cash and portfolio in the broker
- be notified through notify_fund(cash, value, fundvalue, shares) of the current cash and portfolio in the broker and tradking of fundvalue and shares
- Events (implementation specific) via notify_store(msg, *args, **kwargs)
See Cerebro for an explanation on the store notifications. These will delivered to the strategy even if they have also been delivered to a cerebro instance (with an overriden notify_store method or via a callback)
在next中一些下单函数:
-
the buy method to go long or reduce/close a short position
-
the sell method to go short or reduce/close a long position
-
the close method to obviously close an existing position
-
the cancel method to cancel a not yet executed order
How to Buy/Sell/Close
Buy 和 Sell 会产生orders,产生Order(或子类)的实例,该实例可以作为该订单的一个引用,ref是该订单的唯一标识。
Parameters:
-
data(default: None)
订单在那个数据中心被创建,None标识系统中的第一个数据self.datas[0] -
size(default: None)
订单中使用费的数据单位数
None 标识使用sizer实例中的size。 -
price(default:None)
price to use
None : 用在Market
网友评论