我点击了一个用于实时更新加密金融数据的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和其余数据在服务器安装后发生,因此它将不会运行其余代码。感谢您的帮助,如果您认为有一种更好的方法可以绘制实时财务数据,我将不胜枚举。预先谢谢你!