使用破折号更新实时烛台图时遇到问题

时间:2018-12-30 01:20:59

标签: javascript python flask plotly plotly-dash

我点击了一个用于实时更新加密金融数据的api,并且我希望我的图表在每次从api中传入新请求时都进行更新(30秒)。

此函数嵌入在“ tick”函数中,该函数在点击api时会打勾。解决这个问题时,我遇到了一系列问题,但目前它会设置图表,在数据框中绘制1个烛台图,然后将不运行其余的python代码,并允许另一个“勾号”。我相信这是因为它是一个无限循环的bot,所以我无法设置破折号服务器。

def main(argv):

app = dash.Dash(__name__)

app.layout = html.Div(
    html.Div(className='container-fluid', children=
    [
        html.Div(className='row',
                 children=html.Div(dcc.Graph(id='live-graph', animate=True), className='col s12 m12 l12')),
        dcc.Interval(
            id='graph-update',
            interval=30000
        )
    ]),
)
app.run_server(debug=True)

chart = BotChart("poloniex", "USDT_BTC", 10, False)

strategy = BotStrategy()

candlesticks = []
developingCandlestick = BotCandlestick()


while True:
    try:
        developingCandlestick.tick(chart.getCurrentPrice())
    except urllib.error.URLError:
        time.sleep(int(30))
        developingCandlestick.tick(chart.getCurrentPrice())

    if (developingCandlestick.isClosed()):
        candlesticks.append(developingCandlestick)
        strategy.tick(developingCandlestick)
        developingCandlestick = BotCandlestick()

        Lclose, Lhigh, Llow, LOpen, Ldates = developingCandlestick.returnLists()
        print(Lclose)

        stock_df = pd.DataFrame({'Date': Ldates,
                                 'Open': LOpen,
                                 'High': Lhigh,
                                 'Low': Llow,
                                 'Close': Lclose,
                                 })




        @app.callback(
            Output('live-graph', 'figure'),
            events=[Event('graph-update', 'interval')]
        )
        def graph_update():

            data = {
                'data': [{'close': stock_df.Close,
                          'decreasing': {'line': {'color': '#808080'}},
                          'high': stock_df.High,
                          'increasing': {'line': {'color': '#17BECF'}},
                          'low': stock_df.Low,
                          'name': 'Trace 1',
                          'open': stock_df.Open,
                          'showlegend': True,
                          'type': 'candlestick',
                          'uid': '59f45c30-fa3a-459e-bc6d-f4643f4ed55e',
                          'x': stock_df.Date,
                          'yaxis': 'y2'}],
                'layout': {'legend': {'bgcolor': '#F5F6F9', 'font': {'color': '#4D5663'}},
                           'margin': {'b': 30, 'l': 30, 'r': 30, 't': 30},
                           'paper_bgcolor': '#F5F6F9',
                           'plot_bgcolor': '#F5F6F9',
                           'showlegend': True,
                           'titlefont': {'color': '#4D5663'},
                           'xaxis': {'anchor': 'y2',
                                     'gridcolor': '#E1E5ED',
                                     'rangeselector': {'bgcolor': 'rgba(150, 200, 250, 1)',
                                                       'buttons': [{'count': 1,
                                                                    'label': '1m',
                                                                    'step': 'month',
                                                                    'stepmode': 'backward'},
                                                                   {'count': 1,
                                                                    'label': '1y',
                                                                    'step': 'year',
                                                                    'stepmode': 'backward'}],
                                                       'font': {'size': 13},
                                                       'visible': False,
                                                       'x': 0,
                                                       'y': 0.9},
                                     'rangeslider': {'visible': False},
                                     'showgrid': True,
                                     'tickfont': {'color': '#4D5663'},
                                     'title': '',
                                     'titlefont': {'color': '#4D5663'},
                                     'zerolinecolor': '#E1E5ED'},
                           'yaxis': {'gridcolor': '#E1E5ED',
                                     'showgrid': True,
                                     'showticklabels': False,
                                     'tickfont': {'color': '#4D5663'},
                                     'title': '',
                                     'titlefont': {'color': '#4D5663'},
                                     'zerolinecolor': '#E1E5ED'}}
            }

            return data


    app.run_server(Debug=True)
    time.sleep(int(30))

if __name__ == "__main__":
    main(sys.argv[1:])

我想设置服务器并每30秒更新一次,这是预期的结果。当前它将安装服务器,并且由于api和其余数据在服务器安装后发生,因此它将不会运行其余代码。感谢您的帮助,如果您认为有一种更好的方法可以绘制实时财务数据,我将不胜枚举。预先谢谢你!

0 个答案:

没有答案