0

我正在尝试绘制随着投资组合权重变化而变化的动态投资组合表现

假设一个投资组合有 2 个成分,每个成分的权重为 50%。我想显示一个带有代表组件权重的滑块的投资组合图表。然后,我希望能够滑动权重值并动态更新投资组合图表。

我已经为一个包含一个权重但不知道如何修改超过 1 个权重的投资组合做到了这一点——也许我需要一种不同的方法。

下面的示例将随机 df 替换为 1 列代替我的投资组合 df - 过程应该相同。

就这个例子而言,如果 df 有 2 列 - 我怎样才能让它与控制每个重量的 2 个滑块一起工作?


从 bqplot 导入 DateScale、LinearScale、Axis、Figure、Lines

从 ipywidgets 导入 FloatSlider,VBox

将熊猫导入为 pd

将 numpy 导入为 np

滑块 = FloatSlider(值 = 1,最小值 = 0,最大值 = 1,步长 = .01,描述 = '重量 A')

df = pd.DataFrame(np.random.randint(0,100,size=(100, 1)), columns=list('A'))

x_sc = 线性缩放()

y_sc = 线性缩放()

ax_x = Axis(label='Date', scale=x_sc, grid_lines='solid')

ax_y = Axis(label='Price', scale=y_sc,orientation='vertical', grid_lines='solid')

line = Lines(y=df['A'],x=df.index , scales={'x': x_sc, 'y': y_sc}, colors = ['#FF0000'])

line2 = Lines(y=df['A'],x=df.index , scales={'x': x_sc, 'y': y_sc})

fig = Figure(axes=[ax_x, ax_y], 标记=[line, line2], title='价格图表')

def new_chart(值):

new_y = df[['A']]*slider.value

line.y = new_y

slider.observe(new_chart,'value')

VBox([图,滑块])

4

1 回答 1

1

不确定我是否理解你。你是这个意思吗?

from bqplot import DateScale, LinearScale, Axis, Figure, Lines

from ipywidgets import FloatSlider, VBox

import pandas as pd

import numpy as np

slider = FloatSlider(value=1, min = 0, max = 1, step = .01, description = 'Weight A')
sliderB = FloatSlider(value=1, min = 0, max = 1, step = .01, description = 'Weight B')

df = pd.DataFrame(np.random.randint(0,100,size=(100, 1)), columns=list('A'))
df['B'] = np.random.randint(0,100,size=(100, 1))

x_sc = LinearScale()

y_sc = LinearScale()

ax_x = Axis(label='Date', scale=x_sc, grid_lines='solid')

ax_y = Axis(label='Price', scale=y_sc, orientation='vertical', grid_lines='solid')

line = Lines(y=df['A']+df['B'],x=df.index , scales={'x': x_sc, 'y': y_sc}, colors = ['#FF0000'])

line2 = Lines(y=df['A']+df['B'],x=df.index , scales={'x': x_sc, 'y': y_sc})

fig = Figure(axes=[ax_x, ax_y], marks=[line, line2, ], title='Price Chart')

def new_chart(change):
    line.y = df['A']*slider.value + df['B']*sliderB.value

slider.observe(new_chart,'value')

sliderB.observe(new_chart,'value')

VBox([fig,slider,sliderB])
于 2020-07-30T08:29:47.910 回答