首页 > 其他分享 >『玩转Streamlit』--查看K线的小工具

『玩转Streamlit』--查看K线的小工具

时间:2025-01-13 23:10:50浏览次数:1  
标签:-- safe st state session 玩转 date Streamlit data

在金融市场分析中,查看不同交易对的 K 线数据是一项基础且重要的工作。

今天,我们就来学习如何使用 Streamlit 构建一个简单的 K 线查看小工具,让你能够方便地查看不同交易对在不同时间范围内的 K 线数据。

1. 环境准备

首先,确保已经安装了必要的库。

除了 Streamlit 用于构建界面,还需要pandas 用于数据处理,plotly 用于绘制 K 线图。

我们假设已经有Streamlit环境,只要安装:

pip install pandas plotly

2. 数据获取

K线数据我是从币安交易所(binance)获取的,其中的字段如下:

self.safe_integer(ohlcv, 0),  # open time
self.safe_number(ohlcv, 1),  # open
self.safe_number(ohlcv, 2),  # high
self.safe_number(ohlcv, 3),  # low
self.safe_number(ohlcv, 4),  # close
self.safe_number(ohlcv, 5),  # volume
self.safe_integer(ohlcv, 6),  # close time
self.safe_number(ohlcv, 7),  # quote asset volume
self.safe_integer(ohlcv, 8),  # number of trades
self.safe_number(ohlcv, 9),  # taker buy base asset volume
self.safe_number(ohlcv, 10),  # taker buy quote asset volume

其中用于K线展示的主要是:open time(K线开始时间),open(开盘价),high(最高价),low(最低价),close(收盘价),volumn(成交量)几个字段。

采集数据使用币安的公开API即可,本文的重点不在这里,不详细叙述了。

通过API,采集了大约300多个永续合约的K线数据。

3. 构建streamlit界面

接下来,我们开始构建 Streamlit 界面。

界面主要包含两个部分:上半部分可以选择交易对信息和 K 线时间范围;

st.header("查看Current-交易对K线")

st.selectbox("选择交易对:", key="symbol", options=options, on_change=update_symbol)
st.date_input(
    "时间范围:",
    (st.session_state.start_date, st.session_state.end_date),
    format="YYYY/MM/DD",
    key="symbol_date_range",
    on_change=update_date_range,
)

下半部分用tab页分别展示数据和K线图。

def tab_data():
    if st.button("重载数据"):
        read_data(st.session_state.symbol)

    data = st.session_state.data
    if len(data) == 0:
        return

    # 更新开始结束时间
    data_start = datetime.datetime.strptime(start, "%Y-%m-%d %H:%M:%S")
    data_end = datetime.datetime.strptime(end, "%Y-%m-%d %H:%M:%S")
    if st.session_state.start_date > data_end.date():
        st.session_state.start_date = data_start.date()

    if st.session_state.end_date < data_start.date():
        st.session_state.end_date = data_end.date()

    data = filter_data(data)

    st.dataframe(data)


def tab_plotly_graph():
    if st.button("重新绘图"):
        read_data(st.session_state.symbol)

    if len(st.session_state.data) == 0:
        return

    data = filter_data(st.session_state.data)

    # 数据量太大时,使用最新的2000条来绘图
    if len(data) > 2000:
        graph = KlinePlotlyGraph(data=data.iloc[-2000:], idc_data=None)
    else:
        graph = KlinePlotlyGraph(data=data, idc_data=None)

    fig = graph.figure(title=f"{st.session_state.symbol} - K线图")

    st.plotly_chart(fig)

tab1, tab2 = st.tabs(["数据", "图形"])
with tab1:
    tab_data()

with tab2:
    tab_plotly_graph()

代码中封装的一些读取数据,显示图表的函数,比较冗长,这里没有贴出来。

本文的重点其实是通过Streamlit来构造一个简单的K线查看页面,展示Streamlit强大的前端界面功能。

4. 运行应用

最后,运行一下这个简单的应用,看看效果如何。

5. 总结

通过以上步骤,我们成功使用 Streamlit 构建了一个简单的 K 线查看小工具。

这个工具不仅可以帮助我们快速查看不同交易对的 K 线数据,还提供了直观的可视化界面。

当然,在实际应用中,你可以根据需要进一步优化和扩展这个工具,例如从实时数据源获取数据、添加更多的技术指标分析等。

标签:--,safe,st,state,session,玩转,date,Streamlit,data
From: https://www.cnblogs.com/wang_yb/p/18669595

相关文章

  • Java方法
    java只有值传递方法的重载命令行传参有时候希望运行一个程序的时候再传递给他消息,这就要靠传递命令行参数给main()函数实现。publicclassDemo01{publicstaticvoidmain(String[]args){for(inti=0;i<args.length;i++){System.out.......
  • 计算机数据提取与固定
    1.计算机数据的提取与固定1.课程介绍电子数据提取与固定、电子数据恢复、电子数据分析。2.计算机数据提取与固定数字化时代,计算机和电子设备承载海量素具,这些数据在各类案件调查、事故处理以及合规审计场景扮演关键角色。3.操作系统定义操作系统(OS)是管理计算机硬件与软件......
  • Android 10.0 监听某个app启动或者退出功能实现
    1.前言在进行10.0的系统定制开发中,在某些app的定制过程中,需要知道某个app的启动记录和退出记录,所以就需要监听某个app的启动和退出的过程,需要在Activity的生命周期中来实现监听功能2.监听某个app启动或者退出功能实现的核心类frameworks\base\core\java\android\app\Activi......
  • go elastic 商品与内容相似性推荐
    主要是推介代码的规划测试用例func(this*TestGeneralTestRecommendSuite)Test007_twiceRedisQueryRecommend2Es(){//this.inst.Reindex()varq=generaldto.FindBeanObjectQueryRequest()q.ObjectType="brand"q.ObjectId=112233varret=......
  • SAR雷达基本原理
    一、引言        合成孔径雷达(SyntheticApertureRadar,简称SAR)是一种高分辨率成像雷达系统,它通过利用雷达与目标的相对运动,结合数据处理技术,将尺寸较小的真实天线孔径合成为一个较大的等效天线孔径,从而实现对地面或目标的高分辨率成像。SAR作为一种先进的遥感技术,在......
  • 设计模式:策略模式——行为型模式
    目录主要组成优点缺点使用场景:示例代码普通写法:策略模式:策略模式与if-else的关系: 区别总结策略模式(StrategyPattern)是一种行为型设计模式,旨在通过定义一系列的算法(或策略),将每个算法封装起来,使它们可以互换,并使得算法的变化独立于使用算法的客户端。主要组成......
  • H266/VVC 帧内预测中 MIP 技术
    矩阵加权帧内预测MIP将深度学习技术应用到VVC中在在2018年3月份JVET-J0034提案中提出了[AHG9:CNN-baseddrivingofblockpartitioningforintraslicesencoding],即利用CNN驱动帧内编码块进行预测分区。矩阵加权预测MIP(Matrixweightedintrapredic......
  • Java程序基础⑦Java继承和多态
    目录1.继承1.1引入继承1.2继承的概念和语法1.3父类成员访问1.4super关键字1.5 子类构造方法1.6继承时的初始化1.7 继承的方式1.8final关键字2.多态2.1多态的概念2.2多态的实现条件2.3重写2.4向上转型和向下转型2.4.1向上转型2.4.2向下转型2.5......
  • Codeforces Round 996 (Div. 2) (A - C)
    A题链接:https://codeforces.com/contest/2055/problem/a题意:两个人Alice和Bob初始位置分别位a,b,n为长度大小,Alice先手选择一个方向前进,两人位置不重叠且一次走一格,谁不能走谁输解题思路:看他们两个谁先不能朝着对方位置前进,即为输voidsmoking(){  intn,a,b;  ......
  • 关于码风问题
    码风可能对大家来说并不是很重要,原因嘛,可以举一个例子:比如,两行数据,分别是A,B,0<=a,b<=10^300,求A+B的值。这不就是高精度加法嘛!三种马蜂:Num.1#include<bits/stdc++.h>usingnamespacestd;chara[301],b[301];inta1[301],b1[301],c[301],lena,lenb,lenc=......