インジケーター指標を理解するためのクオンツフレームワークバックトレーダーに関する記事

導入

これまでの連載ではSMA、EMA、MACD、KDJ、RSI、BOLLといったテクニカル指標の原理や応用シナリオを紹介してきましたが、まだご覧になっていない方は公式アカウントをフォローして確認することをおすすめします外。

Backtrader フレームワークには 100 を超える組み込みテクニカル分析指標があり、これらは backtrader.indicators パッケージにカプセル化されており、開発コストを大幅に削減し、戦略の反復速度を向上させることができます。

説明書

インジケーター インジケーターは 2 つの場所で使用できます: 1 つは戦略で使用され、もう 1 つは他のインジケーターで使用されます。

Backtrader の組み込みインジケーターの使用は非常に簡単で、次のようにするだけです。

  • ストラテジーの __init__ メソッドで対応するインジケーターをインスタンス化します。

  • 次のメソッドで、対応するインジケーター値またはその派生値を使用または確認します。

以下は、SMA 単純移動平均インジケーターの使用例です。

import backtrader as bt

class MyStrategy(bt.Strategy):
    params = (('period', 20),)

    def __init__(self):
        self.sma = bt.indicators.SMA(self.data, period=self.p.period)
        ...

    def next(self):
       if self.sma[0] > self.data.close[0]:
           self.buy()

注意すべき点は次のとおりです。

  • __init__ メソッドで宣言されたメトリクスは、次のメソッドが呼び出される前に計算されます。

  • __init__ メソッドでの line オブジェクトに対する操作は他の line オブジェクト (Python 演算子のオーバーロード) を生成しますが、次のメソッドは float や bool などの通常の Python 型を生成します。

  • __init__ メソッドはより高速に動作し、次のメソッドのロジックがより単純になります。

  • __init__ メソッドは一部の Python 演算子をサポートしていないため、bt.And、bt.Or、bt.All、bt.Any などの bt 組み込み関数を使用して処理する必要があります。これらに加えて、バックトレーダーは bt.Cmp、bt.If、bt.Max、bt.Min、bt.Sum、bt.DivByZero などの関数も提供します

バックトレーダーがサポートするネイティブインジケーターのリストは、公式ウェブサイトでご覧いただけます:インジケーター - リファレンス - バックトレーダー

バックトレーダーはインジケーターのエイリアスもサポートしていることに注意してください。SMA は MovingAverageSimple または SimpleMovingAverage としても記述できます。

MovingAverageSimple
Alias:

SMA, SimpleMovingAverage
Non-weighted average of the last n periods

Formula:

movav = Sum(data, period) / period

TA-Libの使用

Backtrader には多くのインジケーターが付属していますが、新しいインジケーターを追加するのは比較的簡単です。ただし、TA-lib は広く使用されているため、誰もがそれを信頼しており、バックトレーダーも TA-Lib を統合しています。

import backtrader as bt

class MyStrategy(bt.Strategy):
    params = (('period', 20),)

    def __init__(self):
        self.sma = bt.talib.SMA(self.data, timeperiod=self.p.period)
        ...
...

上記はバックトレーダーのtalibでSMAを使用した例ですが、使用方法は大きく変わらないことがわかります。

ヘルプ ドキュメントは、 から print(bt.talib.SMA.__doc__) 参照できます。

>>> print(bt.talib.SMA.__doc__)
SMA([input_arrays], [timeperiod=30])

Simple Moving Average (Overlap Studies)

Inputs:
    price: (any ndarray)
Parameters:
    timeperiod: 30
Outputs:
    real

バックトレーダーがサポートする talib インジケーターのリストは、公式 Web サイトで参照できます:インジケーター - ta-lib - リファレンス - バックトレーダー

カスタムインジケーター

# 继承自bt.Indicator或其他已存在的指标类
class DummyInd(bt.Indicator):
    # 定义持有的lines,至少需要1个line
    lines = ('dummyline',)
    
    # params参数可选
    params = (('value', 5),)

    # plotinfo可选,用来控制绘图行为
    plotinfo = dict(subplot=False)

    # __init__方法或next方法必选
    def __init__(self):
        self.lines.dummyline = bt.Max(0.0, self.params.value)

サンプル コードでは、このインジケーターは self.params.value が 0.0 より大きいかどうかに応じて、0.0 または self.params.value を出力します。

インジケーターの計算は、__init__ メソッドで実装するほかに、以下に示すように次のメソッドでも実装できます。

    def next(self):
        self.lines.dummyline[0] = max(0.0, self.params.value)

効率性と読みやすさに加えて、ピロイドの最小期間に関しては、next メソッドが単独で処理する必要があり、__init__ メソッドは特別な処理を必要としません。したがって、__init__ メソッドで実装するのが最善の方法ですが、実装できない場合は次のメソッドで実装することを検討してください。runonce モードは、once メソッドを通じて計算および最適化することもできます。

メトリクスの視覚化

プログラムが cerebro.plot を呼び出すと、

  • 宣言されたすべてのインジケーターが自動的にプロットされます

  • 操作によって生成された線オブジェクトは描画されません。close_over_sma = self.data.close > self.sma

  • 操作によって生成されたライン オブジェクトを描画したい場合は、LinePlotterIndicator クラスを使用できます。name パラメーターは、インジケーターが保持するラインの名前です。

close_over_sma = self.data.close > self.sma
LinePlotterIndicator(close_over_sma, name='Close_over_SMA')

インジケーターのプロットは、plotinfo 宣言を通じて制御できます。Lotinfo には、タプル、dict、または OrderedDict を指定できます。

class MyIndicator(bt.Indicator):

    ....
    plotinfo = dict(subplot=False)
    ....

# 可以实例化后单独设置
myind = MyIndicator(self.data, someparam=value)
myind.plotinfo.subplot = True

# 也可以实例化时设置
myind = MyIndicator(self.data, someparams=value, subplot=True)

Lotinfo のパラメータ リストは次のとおりです。plot (描画するかどうか、デフォルトは True)、subplot (別のウィンドウに描画するかどうか、デフォルトは True、MA クラス インジケーターの場合、このパラメータは False)、plotname (インジケーター チャート、デフォルトはインジケーター クラス名です)、plotabove (プロット位置はデータの上にあり、デフォルトは False)、plotlinelabels、plotymargin、plotyticks、plotlines、plotyhlines、plotforce。

結論とコミュニケーション

詳細なコンテンツについては、WeChat 公開アカウント「Zhuge Shuo Talk」をフォローしてください。同時に、多くの実務家や技術専門家とコミュニケーションやディスカッションができるクオンツ投資セミナーグループへの招待も受けられます(定員に限りがありますので、お見逃しなく)。

記事を書くのは簡単なことではありませんが、この記事が役に立ったと思われる場合は、高評価を押して転送していただけると、良い記事を書き続けるモチベーションになります。

参考

おすすめ

転載: blog.csdn.net/richardzhutalk/article/details/125946226