master
SeanChenTaipei 2 years ago
parent e0f64919e4
commit e87b7bafb2
  1. 1
      cool.json
  2. 35
      main.py
  3. 19
      static/js/addStock.js
  4. 34
      templates/strategy_tw.html

File diff suppressed because one or more lines are too long

@ -20,26 +20,26 @@ 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)
} }
SQL_CONFIG = dict(
database= os.getenv("PGDATABASE"),
user=os.getenv("PGUSER"),
host=os.getenv("PGHOST"),
port=os.getenv("PGPORT"),
password=os.getenv("PGPASSWORD")
)
# SQL_CONFIG = dict( # SQL_CONFIG = dict(
# database="railway", # database= os.getenv("PGDATABASE"),
# user="postgres", # user=os.getenv("PGUSER"),
# host="containers-us-west-103.railway.app", # host=os.getenv("PGHOST"),
# port="5913", # port=os.getenv("PGPORT"),
# password="gv5Mh7cPjCm9YTjAmsYD" # password=os.getenv("PGPASSWORD")
# ) # )
# SQL_CONFIG = { SQL_CONFIG = dict(
database="railway",
user="postgres",
host="containers-us-west-103.railway.app",
port="5913",
password="gv5Mh7cPjCm9YTjAmsYD"
)
# SQL_CONFIG = {@
# 'database': "tpm", # 'database': "tpm",
# 'user': "hsienchen", # 'user': "hsienchen",
# 'host': "127.0.0.1", # 'host': "127.0.0.1",
@ -280,9 +280,12 @@ def buildPort():
ts = int(request.form.get('ts')) ts = int(request.form.get('ts'))
ts = datetime.fromtimestamp(ts/1000) ts = datetime.fromtimestamp(ts/1000)
role = request.form.get('role') role = request.form.get('role')
ratio = float(request.form.get('ratio')) lookback = int(request.form.get('lookback'))
backtest = int(request.form.get('frequency'))
gamma = float(request.form.get('gamma'))/100
comment = request.form.get('comment') comment = request.form.get('comment')
stock_list = json.loads(request.form.get('stockList')) stock_list = json.loads(request.form.get('stockList'))
ratio=0.7
# Algorithm MVO # Algorithm MVO
print("-"*10) print("-"*10)

@ -54,14 +54,15 @@ $stockList.on('click', '.delete-btn', function(){
deleteStockItem(itemIndex); deleteStockItem(itemIndex);
// console.log(stockList); // console.log(stockList);
}); });
// $stockList.on('click', '.delete-btn', function(event) {
// // Get index of item to delete
// const $deleteBtn = $(event.target);
// const itemIndex = $deleteBtn.parent().index();
// // Delete item from list function changeFunc(value) {
// deleteStockItem(itemIndex); console.log(value);
// }); if (value === 'quadratic_utility') {
$('#gamma').css("display", "flex");
} else {
$('#gamma').css("display", "none");
}
}
// Event listener for submit button click // Event listener for submit button click
@ -107,8 +108,10 @@ $sendPort.click(function(event) {
name: $('input[name=portName]').val(), name: $('input[name=portName]').val(),
ts: Date.now(), ts: Date.now(),
comp: $('#competition').val(), comp: $('#competition').val(),
ratio: $('#ratio-select').val(), lookback: $('#lookback').val(),
frequency: $('#opt-frequency').val(),
role: $('#role-select').val(), role: $('#role-select').val(),
gamma: $('#util-gamma').val(),
comment: $commentPort.val(), comment: $commentPort.val(),
stockList: JSON.stringify(stockList) stockList: JSON.stringify(stockList)
}, },

@ -136,7 +136,7 @@ div.card{
<div class="card mt-3"> <div class="card mt-3">
<div class="d-flex p-2"> <div class="d-flex p-2">
<div class="p-2 font-bold text-lg"> <div class="p-2 font-bold text-lg">
策略參數選擇 投組最佳化配置
</div> </div>
<div class="btn-group ms-auto"> <div class="btn-group ms-auto">
<button type="button" class="btn btn-outline-danger btn-sm" id="submit-port"> <button type="button" class="btn btn-outline-danger btn-sm" id="submit-port">
@ -146,23 +146,39 @@ div.card{
</div> </div>
<div class="input-group"> <div class="input-group">
<span class="input-group-text bg-info">訓練 / 回測數據比</span> <span class="input-group-text bg-info">輸入數據時長</span>
<select id="ratio-select" class="form-select"> <select id="lookback" class="form-select">
<option value="0.5">5:5</option> <option value="21">每月</option>
<option value="0.6">6:4</option> <option value="63">每季</option>
<option selected value="0.7">7:3</option> <option selected value="126">每半年</option>
<option value="0.8">8:2</option> <option value="252">每年</option>
<option value="0.9">9:1</option> </select>
</div>
<div class="input-group">
<span class="input-group-text bg-info">再平衡頻率</span>
<select id="opt-frequency" class="form-select">
<option value="21">每月</option>
<option value="63">每季</option>
<option selected value="126">每半年</option>
<option value="252">每年</option>
</select> </select>
</div> </div>
<div class="input-group"> <div class="input-group">
<span class="input-group-text bg-info">最佳化目標函數</span> <span class="input-group-text bg-info">最佳化目標函數</span>
<select id="role-select" class="form-select"> <select id="role-select" class="form-select" onchange="changeFunc(value);">
<option selected value="max_sharpe">最大化夏普比率</option> <option selected value="max_sharpe">最大化夏普比率</option>
<option value="max_sortino">最大化索提諾比率</option> <option value="max_sortino">最大化索提諾比率</option>
<option value="min_volatility">最小化波動率</option> <option value="min_volatility">最小化波動率</option>
<option value="quadratic_utility">
最大化效用函數
</option>
</select> </select>
</div> </div>
<div class="input-group" style="display: none;" id="gamma">
<span class="input-group-text bg-info">風險厭惡係數</span>
<input type="number" id="util-gamma" name="targetAnnualVolatility" class="form-control fmt-pct" value="30" autocomplete="off">
<span class="input-group-text">%</span>
</div>
</div> </div>

Loading…
Cancel
Save