如何在列表中添加数据并使用python plotly进行打印

2024-05-14 17:50:13 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我还在试着得到交易机器人,试着用他们的时间和低价数据来绘制它们。 我想得到我在if条件下指定的购买信号(当macdh从负变为正)。然后我想在数据点绘制它们。但无法在购买信号=[]位置添加它们。
我的错误是 self.plotData(购买信号=购买信号) 索引器:列表索引超出范围

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() ```

Tags: nameinimportselfgodffordata

热门问题