鉴于从Yahoo-finance软件包收到的熊猫数据框中的数据,我正在尝试使用flutter创建一个Web应用程序以显示股票的蜡烛图。
是否存在一种简便的方法来呈现这种图表,而无需从头开始创建图表小部件?
答案 0 :(得分:1)
您可以结合使用this软件包和Flask作为后端Web框架。
child: KChartWidget(
datas,
isLine: isLine,
mainState: MainState.NONE,
secondaryState: SecondaryState.NONE,
fixedLength: 2,
timeFormat: TimeFormat.YEAR_MONTH_DAY,
isChinese: false,
bgColor: [
Color(0xFF121128),
Color(0xFF121128),
Color(0xFF121128)
],
),
datas
的类型应为List<KLineEntity>
。
void getData(String period) async {
String result = await getIPAddress('$period');
try {
List parseJson = convert.json.decode(result);
datas = parseJson
.map((item) => KLineEntity.fromJson(item))
.toList()
.cast<KLineEntity>();
DataUtil.calculate(datas);
showLoading = false;
setState(() {});
} on Exception catch (_) {
setState(() {});
print('Error');
}
}
Future<String> getIPAddress(String period) async {
String url = "http://127.0.0.1:5000/?stock_symbol=$stockSymbol";
String result;
var response = await http.get(url);
if (response.statusCode == 200) {
result = response.body;
} else {
print('Failed getting IP address');
}
return result;
}
from flask import Flask, request, jsonify
from flask_cors import CORS, cross_origin
import requests
import yfinance as yf
app = Flask(__name__)
cors = CORS(app)
app.config['CORS_HEADERS'] = 'Content-Type'
@app.route('/', methods=['GET'])
@cross_origin()
def get_data_as_json():
if request.method == 'GET':
stock_symbol = str(request.args['stock_symbol'])
stock_data = yf.Ticker(stock_symbol)
data = stock_data.history(period="max", interval='1d')
data = data[['Open', 'High', 'Low', 'Close', 'Volume']]
r = requests.get('https://api.huobi.br.com/market/history/kline?period=1day&size=1&symbol=btcusdt')
latest_ts = r.json()['data'][0]['id']
temp = [ts for ts in range(latest_ts, latest_ts - 86400 * len(data), -86400)]
temp.reverse()
data['id'] = temp
data['amount'] = 0.0
data['count'] = 0.0
data_renamed = data.rename(columns={'Open': 'open', 'High': 'high',
'Low': 'low', 'Close': 'close',
'Volume': 'vol'})
data_renamed_as_json = data_renamed.to_json(orient="records")
return data_renamed_as_json
if __name__ == '__main__':
app.run(port=5000)