使用颤动创建股票的蜡烛图

时间:2020-09-11 15:49:36

标签: python pandas flutter dart finance

鉴于从Yahoo-finance软件包收到的熊猫数据框中的数据,我正在尝试使用flutter创建一个Web应用程序以显示股票的蜡烛图。

是否存在一种简便的方法来呈现这种图表,而无需从头开始创建图表小部件?

1 个答案:

答案 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)