分栏右侧显示卡
下面是分栏右侧的显示卡部分,使用 tabs 来分别展示“绩效分析”及“交易明细”。
绩效分析
1 | def generate_display_tabs(): |
这个代码段定义了一个用于生成金融分析展示界面的模块。它包括两个主要的功能:generate_display_tabs
和 generate_tab_summary_content
,分别用于生成一个包含多个标签页的布局,以及定义这些标签页的具体内容。以下是代码的详细解释:
generate_display_tabs()
函数
这个函数生成包含不同展示内容的标签页组件,并默认显示第一个标签页。
代码解析:
1 | def generate_display_tabs(): |
dbc.Tabs
: 创建一个标签页组件,用于显示不同的内容选项。它包含多个dbc.Tab
,每个标签页都有一个label
和tab_id
。label="绩效分析"
: 标签页的显示名称。tab_id="tab-summary"
: 标签页的唯一标识符。
id="tabs"
:dbc.Tabs
组件的唯一标识符,便于在其他地方引用和操作。active_tab="tab-summary"
: 指定初始显示的标签页为“绩效分析”。html.Div(id="tabs-content", children=generate_tab_summary_content())
:tabs-content
是一个用于容纳标签页内容的Div
容器。初始内容由generate_tab_summary_content()
函数生成。
generate_tab_summary_content()
函数
该函数用于生成“绩效分析”标签页的具体内容。它定义了一些图表和指标表格,用于展示组合表现和风险分析。
代码解析:
1 | def generate_tab_summary_content(): |
df = pd.DataFrame(...)
: 定义一个包含风险指标和相应数值的 DataFrame,用于创建风险分析的表格。后续会从回测分析中计算相应的 DataFrame。这里初始化主要用于展示。指标
: 风险分析指标(如 Alpha、Beta、夏普比率等)。值
: 每个指标对应的值。
子组件解释:
1 | tab_summary_content = html.Div( |
html.Div(id="tab_summary_content", ...)
:容器Div
,包含多个显示子组件。html.Br()
: 插入一个换行元素,为内容提供间隔。
(a) 组合表现(Graph 图表)
1 | html.Div( |
id="performance"
: 定义了显示组合表现的Div
。dbc.Label("组合表现")
: 使用标签显示“组合表现”文本。dcc.Graph
: 这是 Dash 中的图表组件,用于绘制组合表现图表。id="performance-chart"
: 图表的唯一标识符。figure=initialize_performance_chart()
: 使用initialize_performance_chart()
函数生成图表的数据。
(b) 风险分析(Table 表格)
1 | html.Div( |
id="indicator"
: 定义了显示风险分析的Div
。dbc.Label("风险分析")
: 使用标签显示“风险分析”文本。dbc.Table.from_dataframe(df, ...)
: 从 DataFramedf
中生成表格,用于展示风险指标和其对应的值。striped=True
: 使用条纹样式。bordered=True
: 显示表格边框。hover=True
: 表格行在鼠标悬停时突出显示。
函数返回值
generate_display_tabs()
返回包含所有标签页的布局,用于放置在页面的右侧。generate_tab_summary_content()
返回“绩效分析”标签页的内容,用于填充该标签页的展示内容。
1 | def initialize_performance_chart(): |
这个代码段定义了两个函数:initialize_performance_chart
和 generate_performance_chart
。其中,initialize_performance_chart
用于初始化一个空的绩效图表,而 generate_performance_chart
则根据实际的基准和资产数据生成包含各类指标的图表。这两个图表显示了不同的指数(如上证 50、沪深 300 等)的表现,以及账户的整体权益趋势。
initialize_performance_chart()
函数
这个函数创建了一个空的、格式化的绩效图表,并返回 plotly.graph_objects.Figure
对象。
代码解析:
1 | def initialize_performance_chart(): |
- 布局配置 (
layout
):title
: 图表标题为空。hoversubplots="axis"
: 设置悬停时的显示方式。hovermode="closest"
: 设定鼠标悬停显示最接近的点。grid=dict(rows=2, columns=1)
: 图表按 2 行 1 列布局。xaxis
和xaxis2
: 隐藏横坐标的标签。yaxis
和yaxis2
: 隐藏纵坐标轴。
- 图表数据 (
data
):go.Scatter
:用于创建资产与基准对比的折线图,但目前是空数据。go.Bar
:用于显示每月利润的柱状图,当前也为空数据。
- 生成图表:
fig = go.Figure(data=data, layout=layout)
: 使用上述配置生成图表。- 返回这个空图表,以便后续在没有数据时也能显示图表框架。
generate_performance_chart(benchmark_data, asset_data)
函数
这个函数生成包含不同基准指数与账户权益的图表。数据通过基准和账户的数据传入,函数会处理和标准化它们的表现,并将它们绘制在图表上。
代码解析:
1 | def generate_performance_chart(benchmark_data, asset_data): |
- 数据准备:
pd.read_json
:将 JSON 格式的基准数据读取为DataFrame
。pd.date_range
:生成从起始到结束日期的连续日期。dt_breaks
:计算非交易日(即dt_all
与trade_date
的差集),用于图表中日期的断开处理。
1 | #normalized index close price. |
- 基准指数标准化:
- 依次筛选上证 50(000016)、沪深 300(000300)、中证 500(000905)、科创 50(000688)的数据并生成副本。
normalized
:将每个指数的每日收盘价标准化,计算出相对于第一天的百分比变化,用于统一显示不同指数的表现。
1 | dataset_asset = json.loads(asset_data) |
- 账户资产标准化:
- 读取资产数据,获取初始现金。
- 将每日资产权益标准化为百分比变化,以便与基准指数的变化进行比较。
图表布局和数据
1 | layout = dict( |
- 布局定义:
hovermode="x unified"
: 横坐标悬停模式。grid=dict(rows=2, columns=1)
: 图表布局为 2 行 1 列。
- 图表数据:
go.Scatter
: 用于绘制每个基准指数和账户权益的标准化折线图,填充色指定透明度和颜色。go.Bar
: 占位柱状图(目前为空数据),用于日后显示月度利润。
生成并返回图表
1 | fig = go.Figure(data=data, layout=layout) |
fig.update_layout(...)
: 设置图表的整体布局,包括隐藏日期范围滑块、显示图例等。fig.update_xaxes(rangebreaks=[dict(values=dt_breaks)])
: 设置日期轴,跳过非交易日。fig.update_yaxes(...)
: 设置纵轴的格式,以百分比显示数据。
返回的 fig
是一个包含多个指数与账户资产表现的对比图表,用于在图形界面上展示各项数据的走势。
交易明细
1 | def generate_tab_details_content(): |
这个代码片段创建了一个包含股票回测分析界面的 Dash 应用程序。该应用分为多个部分,如股票选择、K 线图、交易记录表等。各部分展示了用户在回测时段中的持仓股票、股价行情、交易记录等信息。
generate_tab_details_content
函数
generate_tab_details_content
函数创建了一个 "交易明细" 标签页的内容,包括股票选择、K 线图和交易记录表。
代码解析:
1 | def generate_tab_details_content(): |
security-select
: 创建股票选择的下拉菜单组件。stock-candle-chart
: 使用initialize_stock_candle_chart
生成一个空的 K 线图,用于展示所选股票的历史行情数据。current-stock-trade-history
: 使用initialize_data_table
设置列信息,用于显示股票的交易记录。
initialize_stock_candle_chart
函数
这个函数生成一个空的 K 线图,为股票交易数据展示提供图表结构。
1 | def initialize_stock_candle_chart(): |
- 布局:布局指定图表显示样式,包括隐藏轴标签,设置多图层布局。
- 数据格式:使用空数据集初始化一个 K 线图和成交量柱状图的结构,使用 Plotly 生成图形对象
fig
。
generate_stock_candle_chart
函数
generate_stock_candle_chart
函数根据数据生成实际的股票 K 线图,显示特定股票的行情数据。
1 | def generate_stock_candle_chart(data, code): |
- 数据准备:读取数据并处理日期,将非交易日移除。
- 布局配置:设置图表标题、图例、标签格式、颜色等,以便图表更具可读性。
- 数据展示:生成 K 线图和成交量柱状图,颜色区分涨跌,
rangebreaks
跳过非交易日。
initialize_data_table
函数
initialize_data_table
函数设置 DataTable 的列信息,用于显示股票交易的明细信息。
1 | def initialize_data_table(): |
- 返回列的字典列表,定义了 DataTable 中每列的标题和数据 ID。
通过这些函数和布局结构,应用提供了股票的回测分析功能,包括 K 线图、成交量柱状图、交易记录等视图。
回调函数
1 | # output tab content based on active tab and data in localstore |
这个代码片段通过 Dash 回调函数实现了一个多标签页的应用,展示了股票的相关数据分析。它包含五个主要回调函数,分别用于显示标签页内容、更新绩效图表、更新股票选择下拉菜单、更新交易记录表格以及更新 K 线图。每个回调函数通过 active_tab
输入来控制在不同标签页下显示不同的内容。
init_tab
回调函数
该函数根据当前激活的标签页决定显示的内容:
1 |
|
- 功能:当用户切换到
tab-details
时显示“交易明细”内容,切换到tab-summary
时显示“绩效分析”内容。 - 参数:
active_tab
:当前选中的标签。prevent_initial_call=True
:回调不会在应用首次加载时触发,仅在用户操作(切换标签)时触发。
update_performance_chart
回调函数
该回调在切换到绩效分析页且存在基准和资产数据时生成绩效图表:
1 |
|
- 功能:在
tab-summary
标签页选中并且benchmark-day
和asset
数据不为空时,调用generate_performance_chart
生成绩效图表。 - 返回值:如果条件不满足,则返回
no_update
,图表保持不变。
output_code_selector
回调函数
此回调为 security-select
下拉菜单提供选项:
1 |
|
- 功能:当用户在
tab-details
页面中时,根据account-trade-history
数据设置security-select
下拉菜单的选项。 - 参数:
account-trade-history
:包含交易记录数据的dcc.Store
数据。- 返回值:股票列表和默认选中的股票代码。若条件不满足则返回
no_update
。
update_current_trade_history_table
回调函数
此回调函数更新 current-stock-trade-history
表格内容:
1 |
|
- 功能:当用户切换到
tab-details
页面时,通过security-select
选中的股票代码过滤交易记录数据,并显示该股票的交易记录。 - 参数:
account-trade-history
:包含全部交易数据。security-select
:当前选中的股票代码。- 返回值:过滤后的交易记录,以字典列表的格式返回给
current-stock-trade-history
表格。
update_candle_stick_chart
回调函数
该函数更新股票的 K 线图,显示选中股票的日 K 线数据:
1 |
|
- 功能:在
tab-details
标签页选中时,读取stock-day
数据生成股票的 K 线图。 - 参数:
stock-day
:包含日 K 线数据的dcc.Store
数据。security-select
:用户选中的股票代码,用于从stock-day
中筛选数据。
- 返回值:返回生成的 K 线图图表对象,若条件不满足则返回
no_update
。
总结
这个代码片段通过多个回调实现了多标签页数据展示功能: - init_tab
控制标签页内容。 - update_performance_chart
和 update_candle_stick_chart
根据选中的标签页动态更新图表。 - output_code_selector
和 update_current_trade_history_table
在“交易明细”页面动态生成股票选择和交易记录表格内容。