SeanChenTaipei 2 years ago
parent d4432baf12
commit 769143c339
  1. 4
      main.py
  2. 3
      portfolio_builder.py
  3. 2
      sql_script/create_strategy.sql
  4. 6
      static/js/addStock.js
  5. 6
      templates/result.html
  6. 4
      templates/result_view.html
  7. 44
      templates/strategy_tw.html

@ -295,8 +295,8 @@ def buildPort():
# Opt Parameters
comp = request.form.get('comp')
# ts = int(request.form.get('ts'))
ts = datetime.now().strftime("%Y-%m-%d, %H:%M:%S")
ts = request.form.get('ts')
# ts = datetime.now().strftime("%Y-%m-%d, %H:%M:%S")
role = request.form.get('role')
lookback = int(request.form.get('lookback'))
backtest = int(request.form.get('frequency'))

@ -49,7 +49,7 @@ class MVO(object):
@staticmethod
def sharpe_ratio(w, ret):
cov = np.cov(ret.T)
print(cov.shape, w.shape)
# print(cov.shape, w.shape)
retPort = ret@w # T-dimensional array
stdPort = np.std(retPort)
return np.mean(retPort)/stdPort
@ -138,7 +138,6 @@ class MVO(object):
result = minimize(loss, init, method="SLSQP",\
options=opts, bounds=bnds, tol = None, jac = grad, constraints=cons)
sol = result['x']
print(sol)
return np.round(sol, 2)

@ -1,7 +1,7 @@
DROP TABLE IF EXISTS strategy;
CREATE TABLE strategy (
id SERIAL PRIMARY KEY,
date VARCHAR(24) NOT NULL,
date VARCHAR(64) NOT NULL,
name VARCHAR(32) NOT NULL,
username VARCHAR(32) NOT NULL,
competition VARCHAR(32) NOT NULL,

@ -100,7 +100,7 @@ $sendPort.click(function(event) {
method: 'POST',
data: {
name: $('input[name=portName]').val(),
ts: Date.now(),
ts: Date(Date.now()),
comp: $('#competition').val(),
lookback: $('#lookback').val(),
frequency: $('#opt-frequency').val(),
@ -110,7 +110,7 @@ $sendPort.click(function(event) {
stockList: JSON.stringify(stockList)
},
success: function(response) {
console.log(response);
// console.log(response);
// var res = JSON.parse(response);
event.preventDefault();
// $('#modalTitle').text('完成建立')
@ -151,7 +151,7 @@ $submitBtn.click(function(event) {
success: function(response) {
$('#graph').html('')
var graphs = JSON.parse(response);
console.log(graphs.data);
// console.log(graphs.data);
Plotly.newPlot("graph",
graphs.data, layout, {responsive: true});
// console.log(response.layout);

@ -36,12 +36,8 @@
<div class="card m-3">
<div card="card p-3 m-3">
<div class="card-header">
<div class="d-flex">
<div class="py-2 font-bold text-xl">
<span class='m-2'>策略顯示</span>
</div>
<div class="dropdown ms-auto py-2">
<div class="dropdown me-auto py-2">
<button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
排行方式
</button>

@ -71,12 +71,12 @@
</div>
<div class="col-6">
{% for a in data.assets %}
<span class="badge text-bg-secondary">{{ a|safe }}</span>
<span class="badge text-bg-warning">{{ 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">
<button class="btn btn-secondary mt-3" type="button" data-bs-toggle="collapse" data-bs-target="#collapse1" aria-expanded="false" aria-controls="collapseExample">
詳細資訊
</button>
<div class="collapse" id="collapse1">

@ -47,33 +47,24 @@ div.card{
<h5 class="card-title text-xl font-bold accordion-header">
{% if session.tw == 1 %}台股{% endif %}投資組合建立指南 <i class="bi bi-caret-left-fill" style="animation: cursor 1s 3;"></i></h5>
<ol class="list-group list-group-flush list-group-numbered" id="collapseExample">
<li class="list-group-item"><span class="ps-2">輸入投資組合名稱</span></li>
<li class="list-group-item"><span class="ps-2">選擇所參加的課程或競賽</span></li>
<li class="list-group-item">
<span class="ps-2">輸入投資組合名稱</span>
<input if="imput1" name="portName" type="text" class="form-control" placeholder="EX. 韓總 No.1" required>
</li>
<li class="list-group-item">
<span class="ps-2">選擇所參加的課程或競賽</span>
<select id="competition" class="form-select" size="1">
{% include 'competitions.html' %}
</select>
</li>
<li class="list-group-item"><span class="ps-2">選擇資產後按下<span class="badge bg-secondary">加入</span></span></li>
<li class="list-group-item"><span class="ps-2">確認資產後按下<span class="badge bg-info">確認資產</span>後, 查看資產價格動態圖表</span></li>
<li class="list-group-item"><span class="ps-2">確認資產後按下<span class="badge bg-info">確認資產</span> 查看資產價格動態圖表</span></li>
<li class="list-group-item"><span class="ps-2">選擇建立策略相關參數</span></li>
<li class="list-group-item"><span class="ps-2">確認後按下<span class="badge bg-danger">確認建立</span>後, 查看回傳訊息</span></li>
<li class="list-group-item"><span class="ps-2">確認後按下<span class="badge bg-danger">確認建立</span> 查看回傳訊息</span></li>
</ol>
</div>
</div>
<div class="card" id="buildName">
<div class="card-header font-bold text-lg">
投資組合名稱
</div>
<div class="card-body">
<input if="imput1" name="portName" type="text" class="form-control" placeholder="EX. 韓總 No.1" required>
</div>
<div class="card-header font-bold text-lg">
請選擇所參加的課程/競賽
</div>
<div class="card-body">
<select id="competition" class="form-select" size="1">
{% include 'competitions.html' %}
</select>
</div>
</div>
<hr class="my-3">
<div class="card">
@ -81,12 +72,6 @@ div.card{
<div class="py-2 font-bold text-lg">
已選擇的資產
</div>
<div class="btn-group ms-auto">
<button type="button" class="btn btn-outline-primary btn-sm" id="submit-btn">
確認資產
</button>
</div>
</div>
<div class="card-body d-flex mb-0">
<input name="assetSelect" class="form-control" list="datalistOptions" id="stockAll" placeholder="輸入資產名稱...">
@ -120,6 +105,11 @@ div.card{
<div class="py-2 font-bold text-lg">
價格動態圖表
</div>
<div class="btn-group ms-auto">
<button type="button" class="btn btn-outline-primary btn-sm" id="submit-btn">
確認資產
</button>
</div>
</div>
<div class="card-body">

Loading…
Cancel
Save