SeanChenTaipei 2 years ago
parent 28d4c2726f
commit 4cd1b5a1ab
  1. 4
      main.py
  2. 9
      static/js/addStock.js
  3. 295
      templates/strategy_tw.html

@ -20,8 +20,8 @@ pd.options.plotting.backend = "plotly"
# PARAMETERS # PARAMETERS
CONFIGS = { CONFIGS = {
# "ENV": "development", "ENV": "development",
# "DEBUG": True, "DEBUG": True,
"SECRET_KEY": os.urandom(30), # Set the secret key for session authentication "SECRET_KEY": os.urandom(30), # Set the secret key for session authentication
"PERMANENT_SESSION_LIFETIME": timedelta(minutes=60) "PERMANENT_SESSION_LIFETIME": timedelta(minutes=60)
} }

@ -1,11 +1,10 @@
// Initialize empty stock list // Initialize empty stock list
let stockList = ['2330.TW']; let stockList = ['2330.TW'];
let currentList = []; let currentList = [];
const layout={'autosize': true, 'legend': {'title': {'text': ''}, const layout={'autosize': true, 'title': {'text': 'Assets'},
'tracegroupgap': 0}, 'title': {'text': 'Assets'}, 'xaxis': {'anchor': 'y', 'domain': [0.0, 1.0], 'xaxis': {'anchor': 'y', 'domain': [0.0, 1.0], 'rangeslider': {'visible': true}},
'title': {'text': 'Date'}, 'rangeslider': {'visible': true}}, 'yaxis': {'anchor': 'x', 'domain': [0.0, 1.0]},
'yaxis': {'anchor': 'x', 'domain': [0.0, 1.0], 'title': {'text': 'Price'}}, 'legend': {'yanchor': 'top', 'y': 1.3, 'xanchor': 'left', 'x': 0.01}, 'margin': {'l': 25, 'r': 5, 't': 10, 'b': 5},
'legend': {'yanchor': 'top', 'y': 1.3, 'xanchor': 'left', 'x': 0.01}, 'margin': {'l': 40, 'r': 40, 't': 40, 'b': 40},
} }
// Cache frequently-used DOM elements // Cache frequently-used DOM elements
const $stockForm = $('#stock-form'); const $stockForm = $('#stock-form');

@ -35,180 +35,177 @@ div.card{
{% endblock style %} {% endblock style %}
{% block content %} {% block content %}
<div class="container-lg"> <div class="container-fliud">
<div class="container-lg m-1"> <div class="card p-3">
<div class="card m-4 p-4"> <div class="card mb-3" style="border-radius:10px;border:0.5rem outset #eee;">
<div class="card mb-3" style="border-radius:10px;border:0.5rem outset #eee;"> <!-- <img src="{{ url_for("static", filename="img/stock.jpeg") }}" class="card-img-top" alt="..."> -->
<!-- <img src="{{ url_for("static", filename="img/stock.jpeg") }}" class="card-img-top" alt="..."> --> <div class="card-body">
<div class="card-body">
<h5 class="card-title text-xl font-bold accordion-header">
<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>
{% 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">
<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></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-secondary">加入</span></span></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></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>
</ol>
</div>
</div> </div>
<div class="card"> </div>
<div class="card-header font-bold text-lg"> <div class="card">
投資組合名稱 <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. 問就是歐應" required>
</div>
</div> </div>
<div class="card"> <div class="card-body">
<div class="card-header font-bold text-lg"> <input if="imput1" name="portName" type="text" class="form-control" placeholder="EX. 問就是歐應" required>
請選擇所參加的課程/競賽 </div>
</div> </div>
<div class="card-body"> <div class="card">
<select id="competition" class="form-select" size="1"> <div class="card-header font-bold text-lg">
{% include 'competitions.html' %} 請選擇所參加的課程/競賽
</select> </div>
</div> <div class="card-body">
<select id="competition" class="form-select" size="1">
{% include 'competitions.html' %}
</select>
</div> </div>
<hr class="my-3">
</div>
<hr class="my-3">
<div class="card">
<div class="card-header d-flex">
<div class="py-2 font-bold text-lg-center">
已選擇的資產
</div>
<div class="btn-group ms-auto">
<button type="button" class="btn btn-outline-danger btn-sm" id="submit-port"> <div class="card">
確認建立 <div class="card-header d-flex">
</button> <div class="py-2 font-bold text-lg-center">
</div> 已選擇的資產
</div> </div>
<div class="card-body d-flex mb-0"> <div class="btn-group ms-auto">
<input name="assetSelect" class="form-control" list="datalistOptions" id="stockAll" placeholder="輸入資產名稱...">
<datalist id="datalistOptions"> <button type="button" class="btn btn-outline-danger btn-sm" id="submit-port">
<span>美股</span> 確認建立
{% if session.tw==0 %}
{% for key, data in data_us.items() -%}
<option value="{{ key|e }}">{{ key|e }} | {{ data|e }}</option>
{% endfor %}
{% endif %}
{% for key, data in data_tw.items() -%}
<option value="{{ key|e }}">{{ key|e }} | {{ data|e }} </option>
{% endfor %}
</datalist>
<button class="btn btn-secondary btn-sm"
type="button"
id="addStockBtn">
加入
</button> </button>
</div> </div>
<div>
<ol class="list-group list-group-numbered px-3 pb-3" id="stock-list" type="1">
<li class="list-group-item">
<span class="px-2">2330.TW</span>
<a class="btn btn-sm btn-danger float-right delete-btn">
<i class="fas fa-trash-alt"></i>
</a>
</li>
</ol>
</div>
</div> </div>
<div class="card"> <div class="card-body d-flex mb-0">
<div class="card-header d-flex"> <input name="assetSelect" class="form-control" list="datalistOptions" id="stockAll" placeholder="輸入資產名稱...">
<div class="py-2 font-bold text-lg"> <datalist id="datalistOptions">
價格動態圖表 {% if session.tw==0 %}
</div> {% for key, data in data_us.items() -%}
<div class="btn-group ms-auto"> <option value="{{ key|e }}">{{ key|e }} | {{ data|e }}</option>
<button type="button" class="btn btn-outline-primary btn-sm" id="submit-btn"> {% endfor %}
確認資產 {% endif %}
</button> {% for key, data in data_tw.items() -%}
</div> <option value="{{ key|e }}">{{ key|e }} | {{ data|e }} </option>
</div> {% endfor %}
<div class="card-body"> </datalist>
<div id="graph"> <button class="btn btn-secondary btn-sm"
<span> type="button"
按下 id="addStockBtn">
<button type="button" class="btn btn-outline-primary btn-sm" disabled>確認資產</button> 加入
後,圖表將在此渲染。 </button>
</span>
</div>
</div>
</div> </div>
<hr>
<div> <div>
<div class="d-flex p-2 mt-2 font-bold text-lg">策略參數選擇</div> <ol class="list-group list-group-numbered px-3 pb-3" id="stock-list" type="1">
<div class="input-group"> <li class="list-group-item">
<span class="input-group-text bg-info">訓練 / 回測數據比</span> <span class="px-2">2330.TW</span>
<select id="ratio-select" class="form-select"> <a class="btn btn-sm btn-danger float-right delete-btn">
<option value="0.5">5:5</option> <i class="fas fa-trash-alt"></i>
<option value="0.6">6:4</option> </a>
<option selected value="0.7">7:3</option> </li>
<option value="0.8">8:2</option> </ol>
<option value="0.9">9:1</option> </div>
</select> </div>
<div class="card">
<div class="card-header d-flex">
<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="input-group"> </div>
<span class="input-group-text bg-info">最佳化目標函數</span> <div class="card-body">
<select id="role-select" class="form-select"> <div id="graph" style="max-height:40vh">
<option selected value="max_sharpe">最大化夏普比率</option> <span>
<option value="max_sortino">最大化索提諾比率</option> 按下
<option value="min_volatility">最小化波動率</option> <button type="button" class="btn btn-outline-primary btn-sm" disabled>確認資產</button>
</select> 後,圖表將在此渲染。
</span>
</div> </div>
</div> </div>
</div>
<hr>
<div>
<div class="d-flex p-2 mt-2 font-bold text-lg">策略參數選擇</div>
<div class="input-group">
<span class="input-group-text bg-info">訓練 / 回測數據比</span>
<select id="ratio-select" class="form-select">
<option value="0.5">5:5</option>
<option value="0.6">6:4</option>
<option selected value="0.7">7:3</option>
<option value="0.8">8:2</option>
<option value="0.9">9:1</option>
</select>
</div>
<div class="input-group">
<span class="input-group-text bg-info">最佳化目標函數</span>
<select id="role-select" class="form-select">
<option selected value="max_sharpe">最大化夏普比率</option>
<option value="max_sortino">最大化索提諾比率</option>
<option value="min_volatility">最小化波動率</option>
</select>
</div>
</div>
<div class="modal" id="portModal" tabindex="-1"> <div class="modal" id="portModal" tabindex="-1">
<div class="modal-dialog"> <div class="modal-dialog">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title font-bold text-xl">確認建立投資組合</h5> <h5 class="modal-title font-bold text-xl">確認建立投資組合</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<span> <span>
確認後將會暫時關閉建立按鈕,請等待完成訊息! 確認後將會暫時關閉建立按鈕,請等待完成訊息!
</span> </span>
<div class="input-group mt-3"> <div class="input-group mt-3">
<span class="input-group-text">輸入筆記</span> <span class="input-group-text">輸入筆記</span>
<textarea id="commentPort" class="form-control" aria-label="With textarea"></textarea> <textarea id="commentPort" class="form-control" aria-label="With textarea"></textarea>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">取消</button>
<button id="sendPort" type="button" class="btn btn-primary" data-bs-dismiss="modal">確認</button>
</div> </div>
</div>
</div> </div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">取消</button>
<button id="sendPort" type="button" class="btn btn-primary" data-bs-dismiss="modal">確認</button>
</div>
</div>
</div> </div>
</div>
<div class="modal" id="confirmModal" tabindex="-1"> <div class="modal" id="confirmModal" tabindex="-1">
<div class="modal-dialog"> <div class="modal-dialog">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 id='modalTitle' class="modal-title font-bold text-xl">投資組合建立訊息</h5> <h5 id='modalTitle' class="modal-title font-bold text-xl">投資組合建立訊息</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<span id="confirmMes"> <span id="confirmMes">
<div id="sucMes"> <div id="sucMes">
<span>投資組合已開始建立,請1分鐘後至結果分析查詢。</span> <span>投資組合已開始建立,請1分鐘後至結果分析查詢。</span>
</div> </div>
</span> </span>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">確認</button> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">確認</button>
</div>
</div>
</div> </div>
</div>
</div> </div>
</div> </div>
</div> </div>

Loading…
Cancel
Save