You are here:  Home » 量化交易与机器学习 » backtrader » Improving Random Python Internet Study Notes- backtrader 中文教程

提高随机Python的互联网研究Notes

Every现在,然后,用backtrader代码样本中的弹出互联网。有几个在什么在我看来是中国人。最新的一个是在这里:

  • 的https://blog.csdn.net/qq_26948675/article/details/80016633

The标题是:backtrader-学习笔记2,这显然(感谢谷歌)转换为backtrader- study notes 2。如果这些是学习笔记,让我们尝试提高代码那里有真的可以改善,我个人认为那里有backtrader洒在most.

In的__init__学习笔记内部战略的方法,我们发现following

def __init__(self):
    ...
    self.ma1 = bt.indicators.SMA(self.datas[0],
                                   period=self.p.period
                                  )
    self.ma2 = bt.indicators.SMA(self.datas[1],
                                   period=self.p.period
                                  )

Nothing在这里争论(风格是非常有个性,我不会碰那个)

next战略的方法,以下是逻辑购买和selling.

...
# Not yet ... we MIGHT BUY if ...
if (self.ma1[0]-self.ma1[-1])/self.ma1[-1]>(self.ma2[0]-self.ma2[-1])/self.ma2[-1]:
...

and

...
# Already in the market ... we might sell
if (self.ma1[0]-self.ma1[-1])/self.ma1[-1]<=(self.ma2[0]-self.ma2[-1])/self.ma2[-1]:
...

These两个逻辑块的决定是什么人其实可以有更多更好的,这也将增加可读性,可维护性和调整(如果需要的话)

代替具有移动平均的那些的比较(当前点的0和前一点`其次是一些部门-1),让我们来看看如何把它预先计算的us.

Let的好办法__init__

def __init__(self):
    ...

    # Let"s create the moving averages as before
    ma1 = bt.ind.SMA(self.data0, period=self.p.period)
    ma2 = bt.ind.SMA(self.data1, period=self.p.period)

    # Use line delay notation (-x) to get a ref to the -1 point
    ma1_pct = ma1 / ma1(-1) - 1.0  # The ma1 percentage part
    ma2_pct = ma2 / ma2(-1) - 1.0  # The ma2 percentage part

    self.buy_sig = ma1_pct > ma2_pct  # buy signal
    self.sell_sig = ma1_pct <= ma2_pct  # sell signal

我们现在可以采取的next方法并执行以下操作:

def next(self):
    ...
    # Not yet ... we MIGHT BUY if ...
    if self.buy_sig:
    ...

    ...
    # Already in the market ... we might sell
    if self.sell_sig:
    ...

注意,我们甚至没有使用self.buy_sig[0],因为布尔试验时用if self.buy_sig已经被翻译backtrader机械到一检查[0]

IMHO,更清洁的方法,其中限定所述逻辑在__init__与标准算术和逻辑操作(以及使用所述行延迟符号(-x)),使代码更better.

In任何情况下和闭注,一个本来还试图用内置PercentChange指示器(又名PctChange

请参阅:backtrader文件 – 指示器Reference

正如其名称所暗示它已经计算过的百分比变化给定的酒吧时期。在__init__现在看起来像this

def __init__(self):
    ...

    # Let"s create the moving averages as before
    ma1 = bt.ind.SMA(self.data0, period=self.p.period)
    ma2 = bt.ind.SMA(self.data1, period=self.p.period)

    ma1_pct = bt.ind.PctChange(ma1, period=1)  # The ma1 percentage part
    ma2_pct = bt.ind.PctChange(ma2, period=1)  # The ma2 percentage part

    self.buy_sig = ma1_pct > ma2_pct  # buy signal
    self.sell_sig = ma1_pct <= ma2_pct  # sell signal

它并没有多大在这种情况下的差异,但它可能是肯定救你从很多的麻烦,如果计算是更大,更complex.

Happybacktrading

评论被关闭。