【backtrader保姆教学】高低轨突破策略


```python
# 前三日高低价轨道
import backtrader as bt
from com.insight import common
from com.insight.query import *
from com.insight.market_service import market_service
from datetime import datetime

def login():
    # 登陆前 初始化
    user = ""
    password = ""
    common.login(market_service, user, password)


class three_bars(bt.Indicator):
    # 继承indicator基类
    # 明确指标有哪些line
    # 明确有哪些参数
    lines = ('up', 'down')

    def __init__(self):
        self.addminperiod(4)
        self.plotinfo.plotmaster = self.data

    def next(self):
        self.up[0] = max(max(self.data.close.get(ago=-1, size=3)), max(self.data.open.get(ago=-1, size=3)))
        self.down[0] = min(min(self.data.close.get(ago=-1, size=3)), min(self.data.open.get(ago=-1, size=3)))

class myStrategy(bt.Strategy):
    def __init__(self):
        self.up_down = three_bars(self.data)
        self.buy_signal = bt.indicators.CrossOver(self.data.close, self.up_down.up)
        self.sell_signal = bt.indicators.CrossOver(self.data.close, self.up_down.down)

    def next(self):
        if self.getposition().size >= 0 and self.buy_signal[0] == 1:
            self.order = self.buy()
        if self.getposition().size < 0 and self.buy_signal[0] == 1:
            self.order = self.close()
            self.order = self.buy()
        if self.getposition().size <= 0 and self.sell_signal[0] == -1:
            self.order = self.sell()
        if self.getposition().size > 0 and self.sell_signal[0] == -1:
            self.order = self.close()
            self.order = self.sell()


if __name__ == '__main__':
    login()
    cerebro = bt.Cerebro()
    df = get_kline(htsc_code=["000001.SZ"], time=[datetime(2021, 5, 10), datetime(2022, 5, 10)],
                   frequency="daily", fq="none")
    data = bt.feeds.PandasData(
        dataname=df,
        fromdate=datetime(2021, 5, 10),
        todate=datetime(2022, 5, 10),
        datetime='time',
        open='open',
        high='high',
        low='low',
        close='close',
        volume='volume',
        openinterest=-1
    )
    cerebro.adddata(data, name="daily_kline")
    cerebro.addstrategy(myStrategy)
    result = cerebro.run()

    cerebro.plot()

猜你喜欢

转载自blog.csdn.net/weixin_38132951/article/details/129472199