除了Strategy之外,Backtrader还提供了Siganls这种方式用于策略回测。用户通过add Siganls之后,其他的完全交给后台执行。
Example:
class MySignal(bt.Indicator):
lines = ('signal',)
params = (('period', 30),)
def __init__(self):
self.lines.signal = self.data - bt.indicators.SMA(period=self.p.period)
import backtrader as bt
data = bt.feeds.OneOfTheFeeds(dataname='mydataname')
cerebro.adddata(data)
cerebro.add_signal(bt.SIGNAL_LONGSHORT, MySignal)
cerebro.run()
Initial FAQ
-
How is the volume of buy/sell operations determined?
A cerebro instance adds automatically a FixedSize sizer to strategies. The end user can change the sizer to alter the policy with cerebro.addsizer -
How are orders executed?
The execution type is Market and the validity is Good Until Canceled.
Signals indications
The signals delivers indications when queried with signal[0] and the meaning is:
-
0 -> long indication
-
< 0 -> short indication
-
== 0 -> No indication
The example does simple arithmetic with self.data - SMA and:
-
Issues a long indication when the data is above the SMA
-
Issues a short indication when the data is below the SMA
Signals Types
** Main Grpup **:
-
LONGSHORT: 同时包含long和short方向的信号,long多头直接转向short空头,资金一直在市场中
-
LONG:
- long indications are taken to go long
- short indications are taken to close the long position(当signal值大于0时,进入多头,小于0时推出多头). But :
- if a LONGEXIT signal is in the system it will be used to exit the long.(LONGEXIT也会让策略退出多头)
- if a SHORT signal is available and no LONGEXIT is available, it will be used to close a long before a short.(SHORT可以使策略退出多头并创建空头)
-
SHORT:
- short indications are taken to go short
-
long indications are taken to close the short position. But:
-
If a SHORTEXIT (see below) signal is in the system it will be used to exit the short(SHORTEXIT 可以使策略退出空头,类似于 long indications)
-
If a LONG signal is available and no SHORTEXIT is available , it will be used to close a short before opening a long(LONG 可以使策略退出空头并创建多头)
-
Exit Group
This 2 signals are meant to override others and provide criteria for exitins a long / short position
-
LONGEXIT: short indications are taken to exit long positions
-
SHORTEXIT: long indications are taken to exit short positions
Accumulation and Order Concurrency
-
Accumulation: even if already in the market, the signals would produce new orders which would increase the possition in the market 可以在持有多头的同时继续增加多头仓位
-
Concurrency: new orders would be generated without waiting for the execution of other orders 订单可以被加入订单队列,即使存在未执行的订单
To avoid this the default behavior is:
-
To Not Accumulate
-
To Not allow Concurrency
Should any of these two behaviors be wished, this can be controlled via cerebro with:
-
cerebro.signal_accumulate(True) (or False to re-disable it)
-
cerebro.signal_concurrency(True) (or False to re-disable it)
网友评论