master
SeanChenTaipei 2 years ago
parent 41cac38fcd
commit be64649cad
  1. 8
      main.py
  2. 24
      templates/base.html
  3. 17
      templates/result_view.html

@ -33,7 +33,13 @@ SQL_CONFIG = dict(
port=os.getenv("PGPORT"),
password=os.getenv("PGPASSWORD")
)
# SQL_CONFIG = dict(
# database="railway",
# user="postgres",
# host="containers-us-west-103.railway.app",
# port="5913",
# password="gv5Mh7cPjCm9YTjAmsYD"
# )
# SQL_CONFIG = {@
# 'database': "tpm",
# 'user': "hsienchen",

@ -197,14 +197,14 @@
假設有n個資產,它們的收益率分別為 $R_1, R_2, ..., R_n$,協方差矩陣為 $\Sigma$。假設現有一個投資組合,其中各資產的權重分別為 $w_1, w_2, ..., w_n$,則該投資組合的收益率為:
</p>
<span style="font-size: 2.5vmin;">
<span style="font-size: min(2.5vmin, 20px);">
$$R_p = w_1 R_1 + w_2 R_2 + ... + w_n R_n = w^T R$$
</span>
<p>
該投資組合的方差為:
</p>
<span style="font-size: 2.5vmin;">
<span style="font-size: min(2.5vmin, 20px);">
$$\begin{align}\sigma^2_p
&= w_1^2 \sigma_1^2 + w_2^2 \sigma_2^2 + ...
\\&+ w_n^2 \sigma_n^2 + 2w_1w_2\sigma_{1,2} +
@ -215,7 +215,7 @@
為了尋找最優投資組合,我們可以使用均值-方差優化方法。該方法的核心思想是通過最小化投資組合的方差,來最大化其收益率。假設有一個投資者的風險偏好係數為 $\gamma$,則該投資者所選擇的最優投資組合為:
</p>
<span style="font-size: 2.5vmin;">
<span style="font-size: min(2.5vmin, 20px);">
$$\text{min}\ \frac{1}{2}w^T \Sigma w - \gamma w^T R$$
$$\text{s.t.}\ \sum_{i=1}^n w_i = 1, w_i \geq 0$$
@ -235,7 +235,7 @@
<p>
在實際應用中,通常使用投資組合的夏普比率(Sharpe Ratio)作為評估指標。夏普比率可以看作是投資組合每單位風險所帶來的超額收益,其計算公式為:
</p>
<span style="font-size: 2.5vmin;">
<span style="font-size: min(2.5vmin, 20px);">
$$\text{Sharpe Ratio} = \frac{R_p - R_f}{\sigma_p}$$
</span>
<p>
@ -258,7 +258,7 @@
固定預期報酬 $p$,令投資組合權重為 $w$, 則將波動率最小化的數學問題為:
</div>
<div class="card-body">
<p class="card-text" style="font-size: 2.5vmin;">
<p class="card-text" style="font-size: min(2.5vmin, 20px);">
$$\begin{equation}
\begin{aligned}
\min_{w} \quad &\frac{1}{2}w^{T}\Sigma w\quad\\
@ -277,7 +277,7 @@
令投資組合權重為 $w$, 則將夏普率最大化的數學問題為:
</div>
<div class="card-body">
<p class="card-text" style="font-size: 2.5vmin;">
<p class="card-text" style="font-size: min(2.5vmin, 20px);">
$$\begin{equation}
\begin{aligned}
\min_{w} \quad &\frac{w^T R}{\sqrt{w^{T}\Sigma w}}\quad\\
@ -298,7 +298,7 @@
Alpha代表投資組合的超額收益,Beta則代表投資組合與市場的相關性。
Beta值是衡量資產相對於整個市場的波動性的指標。Beta值的公式如下:
</p>
<span style="font-size: 2.5vmin;">
<span style="font-size: min(2.5vmin, 20px);">
$$\beta_i = \frac{\text{Cov}(r_i,r_m)}{\text{Var}(r_m)}$$
</span>
<p>
@ -309,7 +309,7 @@
Beta值可以用來評估投資組合的風險程度,投資者可以通過控制投資組合中資產的Beta值來實現風險管理。
Beta值可以與CAPM(Capital Asset Pricing Model)和線性回歸相關聯。在CAPM中,假設資產的預期收益率可以通過以下公式計算:
</p>
<span style="font-size: 2.5vmin;">
<span style="font-size: min(2.5vmin, 20px);">
$$E(r_i) = r_f + \beta_i(E(r_m) - r_f)$$
</span>
<p>
@ -323,13 +323,13 @@
Alpha 值可以通過線性回歸分析來計算。假設投資組合的收益率可以表示為以下公式:
</p>
<span style="font-size: 2.5vmin;">
<span style="font-size: min(2.5vmin, 20px);">
$$r_p = \alpha + \beta_p (r_m-f_f) + \epsilon$$
</span>
<p>
其中,$r_p$ 表示投資組合的收益率,$\alpha$ 表示 Alpha 值,$\beta_p$ 表示投資組合的 Beta 值,$r_m$ 表示市場收益率,$\epsilon$ 表示誤差項。如果我們將上述公式進行線性回歸,可以得到:
</p>
<span style="font-size: 2.5vmin;">
<span style="font-size: min(2.5vmin, 20px);">
$$\hat{r_p} = \hat{\alpha} + \hat{\beta_p} (r_m-r_f)$$
</span>
<p>
@ -344,7 +344,7 @@
假設 $X$ 是一個隨機變量,表示資產或投資組合在未來一定時間內的損失額,$p$ 表示所選取的信心水平,VaR 可以表示為:
</p>
<span style="font-size: 2.5vmin;">
<span style="font-size: min(2.5vmin, 20px);">
$$\text{VaR}_p(X) = - \inf \{ x \in \mathbb{R} : F_X(x) \geq p \}$$
</span>
<p>
@ -352,7 +352,7 @@
例如,假設我們選取信心水平 $p=0.95$,並且假設資產或投資組合在未來一周內的報酬率的分布是正態分布 $N(\mu,\sigma^2)$,那麼根據上述公式,VaR 的值為:
</p>
<span style="font-size: 2.5vmin;">
<span style="font-size: min(2.5vmin, 20px);">
$$\begin{align}\text{VaR}_{0.95}(X) &= -\inf\{ x \in \mathbb{R} : F_X(x) \leq 0.05 \} \\
&= -\inf \{x \in \mathbb{R} : \mathbb{P}(z\leq\frac{x-\mu}{\sigma}) \leq 0.05) \} \\
&= -\inf \{x \in \mathbb{R} : \Phi (\frac{x-\mu}{\sigma}) \leq 0.05 \} \\

@ -64,6 +64,17 @@
{{ data.role|safe }}
</div>
</div>
<hr>
<div class="row">
<div class="col-4">
<strong>資產</strong>
</div>
<div class="col-6">
{% for a in data.assets %}
<span class="badge text-bg-secondary">{{ a|safe }}</span>
{% endfor %}
</div>
</div>
<div class="row">
<button class="btn btn-info mt-3" type="button" data-bs-toggle="collapse" data-bs-target="#collapse1" aria-expanded="false" aria-controls="collapseExample">
詳細資訊
@ -81,7 +92,7 @@
<th scope="col">Alpha</th>
<th scope="col">Beta</th>
<th scope="col">VaR10</th>
<th scope="col">R^2</th>
<th scope="col">R2</th>
</tr>
</thead>
<thead style="font-size: 1vmin'">
@ -149,7 +160,7 @@
'title': {'text': ''},
'xaxis': {'anchor': 'y', 'domain': [0.0, 1.0], 'title':''},
'yaxis': {'anchor': 'x', 'domain': [0.0, 1.0], 'title':''},
'margin': {'l': 50, 'r': 50, 't': 50, 'b': 50},
'margin': {'l': 20, 'r': 10, 't': 50, 'b': 50},
'legend': {'yanchor': 'top', 'y': 1.2, 'xanchor': 'left', 'x': 0.01, 'orientation':'h'}
};
const blayout = {
@ -157,7 +168,7 @@
'title': {'text': ''},
'xaxis': {'anchor': 'y', 'domain': [0.0, 1.0], 'title':''},
'yaxis': {'anchor': 'x', 'domain': [0.0, 1.0], 'title':''},
'margin': {'l': 50, 'r': 50, 't': 50, 'b': 50},
'margin': {'l': 40, 'r': 10, 't': 50, 'b': 70},
'legend': {'yanchor': 'top', 'y': 1.2, 'xanchor': 'left', 'x': 0.01, 'orientation':'h'}
};
var w = {{ data.weight|safe }};

Loading…
Cancel
Save