Backtrader 맞춤형 지시기 제작 방법

어떻게 해야만 스스로 지시기를 만들 수 있습니까?
표시기 생성
· bt.indicator 클래스를 계승한 클래스 만들기
· 그릴 라인 객체 설정
· 이동평균선 설정 기간 등 매개 변수
• 필요한 경우 드로잉 디스플레이 설정 추가
기술 공식
이런 절차에 따라 제작하다.
예를 들어 캐릭터를 만들어서 그 내용을 살펴보자.
sto1.py

import backtrader as bt


class MyStochastic1(bt.Indicator):  #bt.Indicatorを継承

    lines = ('k', 'd', )  # プロットに表示するlinesオブジェクト
    params = (
        ('k_period', 14), # パラメーターをタプルのタプルで指定する
        ('d_period', 3),  # タプルの最後にもコンマ(、)をいれる
    )
    plotinfo = dict(plot   =True,
                    subplot=True,
                    plotname='',
               )   

    def __init__(self):

        highest = bt.indicators.Highest(self.datas[0], period=self.params.k_period)
        lowest = bt.indicators.Lowest(self.datas[0], period=self.params.k_period)        
        self.lines.k = k = (self.datas[0] - lowest) / (highest - lowest)    
        self.lines.d = bt.ind.SimpleMovingAverage(k, period=self.params.d_period)

    def next(self):
        pass
이것은 지시기 종류의 전체 그림입니다.
파업 캐릭터를 계산하려면 14일의 고가와 저가가 필요하다.이 값과 최종 값을 조합하여 변화량을 계산한 후 3일 동안 간단하게 이동해서 평균치를 평평하게 한다.

클래스 선언

class MyStochastic1(bt.Indicator):먼저 백트레이더의 인디케이터 클래스를 계승하는 My Stochastic 1 클래스를 선언합니다.

Linkes 객체 설정

lines=('k','d')배역에는 K와 D의 두 줄이 있다.따라서 드로잉에 표시할 두 개의 라인 개체가 설정됩니다.
이 리너스 대상은 MQL4가 말한'인덱스 버퍼'같은 것으로 수치와 시간축이 결합된 매우 좋은 배열이다.Cerebro는 이 Linkes 객체를 차트에 그립니다.

Lines 객체의 색인 및 슬라이스


MQL4에서 [0]로 최신 bar를 표시합니다.최신 Bar부터 세면 1, 2, 3... 옛 Bar가 되면서 숫자도 커진다.
백trader도 최신 Bar Linus 객체를 [0]로 표시합니다.이것은 MQL4와 같다.그러나 0 기준으로 낡아진 바에 따라 -1, -2, -3... 등의 마이너스 부호가 붙는다.
이와 관련된 Lines 객체는 Python 원래 슬라이싱 작업을 수행할 수 없습니다.
슬라이드를 사용하려면 get () 방법을 사용하십시오.myslice = self.lines.my_sma.get(ago=0, size=1) [0] 이외에 [-1]개만 정렬myslice = self.lines.my_sma.get(ago=0, size=10)[0]를 제외하고 [1]부터 [1]까지 총 10개의 배열myslice = self.lines.my_sma.get(ago=-1, size=5)[1]을 제외하고 [-2]에서 [-6]까지의 배열
※ 넥스트 방법에서만 리너스 대상에게 [] 운영자를 사용할 수 있습니다.넥스트 방법에 관해서 나는 훗날 다시 총결하고 싶다.

매개변수 설정(params)

params = ( ('k_period', 14), ('d_period', 3),#마지막에 쉼표도)파업자는 14일 이내에 산정하고, 결과는 3일 이내에 단순 이동 평균치로 매끄러워진다.(k period, d period) 이 인자는 설정하는 데 사용됩니다.모듈의 모듈이나 dict () 를 통해 지정합니다.(참조1)
self.params.k_period처럼'self.params.이름'의 문법으로 표시한다.원조라면 마지막 쉼표를 놓는 것을 잊지 마세요.

드로잉 설정(plotinfo)

plotinfo =
dict(plot =True,
subplot=True,
plotname='',
)
그리는 동안 설정을 수정할 수 있습니다.
plot: 디스플레이 On Off 그리기
subplot: 하위 창 보이기 토글
plotname: 바닥글 표시 이름(빈 칸에 클래스 이름 표시)
다른 설정 항목도 있습니다.

Init 메서드에 방정식 기술하기


공식 생성 1 계산에 사용되는 삽입식 표시기 호출

highest = bt.indicators.Highest(self.datas[0],period=self.params.k_period) lowest = bt.indicators.Lowest(self.datas[0],period=self.params.k_period)init 방법에서 파업 행위의 계산을 기술하다.
우선 14일간의 고가와 저가를 계산한다.다행히도 백트랙터는 특정 기간의 고가와 저가를 계산할 수 있는 지표가 있다.
삽입식 표시기는 bt. indicators입니다.○○○()로 불러낼 수 있다.(마지막으로 s 주의!)여기서 Highst와 Lowest k를 호출합니다.period 중 가장 높은 값과 가장 낮은 값을 검색하고 있습니다.결과를 Linus 객체 high est 및 lowest에 넣습니다.

방정식이 작성된 두 라인 객체에 값을 입력합니다.

self.lines.k = k = (self.datas[0] - lowest) / (highest - lowest) self.lines.d = bt.ind.SimpleMovingAverage(k,period=self.params.d_period)그리는 Lines 객체는 "self.lines. 이름"으로 표시됩니다.k는self.lines.kd는self.lines.d이다.결과 Lines 객체를 계산에 사용할 수도 있습니다.여기에 다음 줄의 계산 표시를 간소화하기 위해 간단한 이동 평균 표시기 대신'k'를 사용한다.

데이터 시드

self.datas[0]식 중의self.데이터 s[0]는 "첫 번째 CSV 데이터"를 나타냅니다.특별히 지정하지 않으면 종가를 사용한다.여러 개의 데이터를 전달할 수 있기 때문에 예를 들어 두 개의 CSV 데이터(예를 들어 매일과 주)에 전달할 때 작은 시간대는 반드시 큰 시간대를 지정해야 한다.즉 데이터s[0]는 반드시 일일 데이터, 데이터[1]를 매주 데이터로 해야 한다.이번에는 일족 데이터만 제공한다.
같은 시장의 다양한 시간대 데이터로 분석할 수 있을 뿐만 아니라 금(Gold)과 환율의 연동성 등 다양한 시장도 분석할 수 있다.3개 이상의 시장 데이터와 서로 다른 시간대 데이터로 분석할 수 있다.참조 2

생략 표시


---
본격
생략하다
lines
self.lines.aaa
self.l.aaa
params
self.params.aaa
self.p.aaa
datas
self.datas[0].close
self.data.close 또는self.data
indicators
bt.indicators.aaa
bt.ind.aaa
Alias
SimpleMovingAverage
SMA
backtrader는 표현을 생략할 수 있습니다.편리하지만 습관이 되기 전에는 혼란스러울 수 있다.
그리고 실제로 이번 plot info는 모두 생략할 수 있습니다.plot,subplot,plotname을 생략할 때 기본 설정을 사용합니다.

next 방법


이번에는 사용하지 않았지만 각 Bar에 대해 조건 판단이나 처리를 하고 싶을 때 넥스트 방법에 내용을 기술한다.
※ init와 넥스트의 차이 등도 추후 취합된다.

완료 정책 클래스에서 호출


표시기는 어떻게 표시합니까?
모든 설정이 끝났습니다.
정책 클래스의 init 방법에서 이 표시기 클래스를 실례화하면, Cerebro는 그래프에 그려집니다.실례 명칭은 스스로 사용할 수 있다.self.myind1 = MyStochastic1(self.data)(주석을 곳곳에 추가하고 표시를 최대한 생략한다.)
sto12.py
%matplotlib notebook
from __future__ import (absolute_import, division, print_function,
                        unicode_literals)

import datetime  
import os.path  
import sys  


import backtrader as bt


class MyStochastic1(bt.Indicator):

    lines = ('k', 'd', )  # プロットに表示するlinesオブジェクト
    params = (
        ('k_period', 14), # パラメーターをタプルのタプルで指定する
        ('d_period', 3),  # タプルの最後にもコンマ(、)をいれる
    )

    #省略
    #plotinfo = dict()

    def __init__(self):
        # 正確にはself.datas[0]と書くが省略可能 
        # self.params.k_periodを省略してself.p.k_period 
        highest = bt.ind.Highest(self.data, period=self.p.k_period)
        lowest = bt.ind.Lowest(self.data, period=self.p.k_period)        

        self.lines.k = k = (self.data - lowest) / (highest - lowest)    
        self.lines.d = bt.ind.SMA(k, period=self.p.d_period)



class TestStrategy(bt.Strategy):
    def __init__(self):
        #インスタンス名myind1の部分は任意の名前でいい
        self.myind1 = MyStochastic1(self.data)    


if __name__ == '__main__':
    cerebro = bt.Cerebro()
    cerebro.addstrategy(TestStrategy)

    datapath = 'C:\\Users\\aaaa\\orcl-1995-2014.txt'

    # Create a Data Feed
    data = bt.feeds.YahooFinanceCSVData(
        dataname=datapath,        
        fromdate=datetime.datetime(2000, 1, 1),
        todate=datetime.datetime(2000, 12, 31),
        reverse=False)

    cerebro.adddata(data)
    cerebro.run(stdstats=False)
    cerebro.plot(style='candle')

역할 분배를 순조롭게 보여 주었다.
* ※ CSV 데이터의 입수와 준비에 관해서는 이 기사에 썼습니다.*https://qiita.com/xxssxxx/items/e915b8afe51facc47a55

Cerebro가 시작될 때까지 대략적인 절차


Cerebro란 무엇입니까?
백트레이더의 중심 기능입니다.여러 가지 설정을 한 후에 이 Cerebro를 시작하면 자동 매매, 분석, 최적화, 결과의 줄거리가 자동으로 진행된다.방금 스크립트의 Cerebro 시작 전 절차를 복습합니다.
  • 정책 클래스(Test Strategy)에서 자동 매매의 내용과 이를 호출하는 지시자
  • 를 설명합니다
  • Cerebrocerebro = bt.Cerebro() 인스턴스화
  • cerebro에 CSV 데이터 전송cerebro.adddata(data)
  • cerebro로 읽기 정책 cerebro.addstrategy(TestStrategy)
  • cerebrocerebro.run() 시작
  • 차트 표시 cerebro.plot()
  • 자신이 생각하는 정책 클래스'Test Strategy '를 만들고 CSV 데이터를 지정한 후 Cerebro를 실행하면 이'Test Strategy' 클래스의 내용을 자동으로 실행합니다.
    이번에는 자동매매는 없었지만'Test Strategy'에서 파업자를 사용했기 때문에 Cerebro가 도안을 그려준다.

    총결산


    어때요?
    Backtrader에서 사용자 정의 표시기를 사용하려면 사용자 정의 표시기 클래스를 만들고 정책 클래스에서 이를 실례화할 수 있습니다.

    문헌 목록


    참조 1
    애초에 매개 변수의 순서를 지키려고 할 때는 원조를 사용하고, 그렇지 않을 때는 사전을 사용하는데 이런 차이가 있는 것 같다.하지만 파이썬 3.7일부터는 괜찮다고 합니다.굳이 두 가지를 다르게 들자면 타자의 양이 줄어들고, 비교적 가벼운 것은 dict()이다. 그리고 개인의 취향에 따라 정한다.
    1.MomentumStrategy (Dict vs Tuple of tuple)
    https://www.backtrader.com/blog/2019-05-20-momentum-strategy/momentum-strategy/
    참조 2
    2.Gold vs SP500
    https://www.backtrader.com/blog/posts/2016-12-13-gold-vs-sp500/gold-vs-sp500/

    좋은 웹페이지 즐겨찾기