如何在列表上附加数据并使用python plotly进行绘制

问题描述 投票:0回答:1

嗨,我仍在尝试获取交易机器人,并尝试用其时间和低价数据对其进行绘图。我想获得在if条件下指定的买入信号(当macdh从负变为正时)。那么我想将它们绘制在数据上。但不能在buy_signal = []位置添加它们。我的错误是self.plotData(buy_signals = buy_signals)IndexError:列表索引超出范围

import requests
import json
from stockstats import StockDataFrame as Sdf
import plotly.graph_objects as go
from plotly.offline import plot


class TradingModel:
    def __init__(self, symbol):
        self.symbol = symbol
        self.df = self.getData


    def getData(self):

        # define URL
        base = 'https://api.binance.com'
        endpoint = '/api/v3/klines'
        params = '?&symbol='+self.symbol+'&interval=4h'

        url = base + endpoint + params

        # download data
        data = requests.get(url)
        dictionary = data.json()

        # put in dataframe and clean-up
        df = pd.DataFrame.from_dict(dictionary)
        df = df.drop(range(6, 12), axis=1)


        # rename columns and stockstasts
        col_names = ['time', 'open', 'high', 'low', 'close', 'volume']
        df.columns = col_names
        stock = Sdf.retype(df)


        for col in col_names:
            df[col]=df[col].astype(float)
        #defined macdh
        df['macdh']=stock['macdh']


        return  (df)

    def strategy(self):
        df = self.df
        buy_signals=[]
        for i in range(1, len(df['close'])):
                if df['macdh'].iloc[-1]>0 and df['macdh'].iloc[-2]<0:
                    buy_signals.append([df['time'][i], df['low'][i]])

        self.plotData(buy_signals = buy_signals)





    def plotData(self,buy_signal=False):
        df=self.df
        candle=go.Candlestick(
            x=df['time'],
            open=df['open'],
            close=df['close'],
            high=df['high'],
            low=df['low'],
            name="Candlesticks"
        )
        macdh=go.Scatter(
            x=df['time'],
            y=df['macdh'],
            name="Macdh",
            line = dict(color=('rgba(102, 207, 255, 50)')))

        Data=[candle,macdh]

        if buy_signals:
            buys = go.Scatter(
                    x = [item[0] for item in buy_signals],
                    y = [item[1] for item in buy_signals],
                    name = "Buy Signals",
                    mode = "markers",
                )

            sells = go.Scatter(
                    x = [item[0] for item in buy_signals],
                    y = [item[1]*1.04 for item in buy_signals],
                    name = "Sell Signals",
                    mode = "markers",
                )

            data = [candle, macdh, buys, sells]


        # style and display
        layout = go.Layout(title = self.symbol)
        fig = go.Figure(data = data, layout = layout)

        plot(fig, filename=self.symbol)

def Main():
    symbol = "BTCUSDT"
    model = TradingModel(symbol)
    model.strategy()

if __name__ == '__main__':
    Main() ```
python append plotly
1个回答
0
投票

您需要替换:

[self.plotData(buy_signals[i]) by self.plotData(buy_signals)] >>

[def plotData(self,buy_signal=False): by def plotData(self,buy_signals=None):] >>

而且应该很好!

© www.soinside.com 2019 - 2024. All rights reserved.