refactor: enhance Optuna backtesting framework, optimize orderbook filtering, and update database management utilities.
This commit is contained in:
63
scratch/move_eod.py
Normal file
63
scratch/move_eod.py
Normal file
@@ -0,0 +1,63 @@
|
||||
import re
|
||||
|
||||
path = 'templates/backtest.html'
|
||||
with open(path, 'r', encoding='utf-8') as f:
|
||||
html = f.read()
|
||||
|
||||
prefixes = ['bt', 'tl', 'bo', 'mom', 'usmom']
|
||||
|
||||
for prefix in prefixes:
|
||||
# 1. find the eod_enabled div
|
||||
regex_enabled = re.compile(
|
||||
r'(\s*<div class="col-auto d-flex align-items-end">\s*<div class="form-check mb-2">\s*<input class="form-check-input" type="checkbox" id="' + prefix + r'_eod_enabled"[^>]*>\s*<label[^>]*>EOD청산</label>\s*</div>\s*</div>)',
|
||||
re.DOTALL
|
||||
)
|
||||
# 2. find the eod_hm div
|
||||
regex_hm = re.compile(
|
||||
r'(\s*<div class="col-auto">\s*<label[^>]*>EOD시각.*?</label>\s*<input type="text" class="form-control" id="' + prefix + r'_eod_hm"[^>]*>\s*</div>)',
|
||||
re.DOTALL
|
||||
)
|
||||
# fallback for bt_eod_hm which uses col-4 col-md-1
|
||||
regex_hm2 = re.compile(
|
||||
r'(\s*<div class="col-4 col-md-1">\s*<label[^>]*>EOD시각.*?</label>\s*<input type="text" class="form-control" id="' + prefix + r'_eod_hm"[^>]*>\s*</div>)',
|
||||
re.DOTALL
|
||||
)
|
||||
|
||||
enabled_match = regex_enabled.search(html)
|
||||
hm_match = regex_hm.search(html) or regex_hm2.search(html)
|
||||
|
||||
if not enabled_match or not hm_match:
|
||||
print(f"Failed to match {prefix}")
|
||||
continue
|
||||
|
||||
enabled_str = enabled_match.group(1)
|
||||
hm_str = hm_match.group(1)
|
||||
|
||||
# Remove from html
|
||||
html = html.replace(enabled_str, '')
|
||||
html = html.replace(hm_str, '')
|
||||
|
||||
# We want to insert the new EOD block after the closing </div> of the row.
|
||||
# To do this robustly, we will insert it right before the next "<!-- TRIGGER" or "<div class=\"row"
|
||||
# But wait, it's easier to just find the exact text where we want to insert.
|
||||
# Let's just find the next </div>\s*<!-- TRIGGER for bt, tl, bo.
|
||||
|
||||
new_block = f"""
|
||||
<div class="row g-2 align-items-center mt-2 p-2 rounded" style="background:#161b22;border:1px solid #30363d">
|
||||
<div class="col-12"><span class="text-muted" style="font-size:11px"><b style="color:#79c0ff">EOD 장마감 청산</b></span></div>{enabled_str}{hm_str}
|
||||
</div>"""
|
||||
|
||||
if prefix == 'bt':
|
||||
html = html.replace('<!-- TRIGGER (SCAN vs TRIGGER — tail·모멘텀 탭과 동일 패턴) -->', new_block + '\n <!-- TRIGGER (SCAN vs TRIGGER — tail·모멘텀 탭과 동일 패턴) -->')
|
||||
elif prefix == 'tl':
|
||||
html = html.replace('<!-- TRIGGER 플래그 (SCAN vs TRIGGER — 실매·백테·저장 동일) -->', new_block + '\n <!-- TRIGGER 플래그 (SCAN vs TRIGGER — 실매·백테·저장 동일) -->')
|
||||
elif prefix == 'bo':
|
||||
html = html.replace('<!-- TRIGGER 필터 (모멘텀·스캘핑과 유사) -->', new_block + '\n <!-- TRIGGER 필터 (모멘텀·스캘핑과 유사) -->')
|
||||
elif prefix == 'mom':
|
||||
html = html.replace(' <div class="row g-2 align-items-end mt-1">\n <div class="col-12 col-md-2">\n <label class="form-label param-row" title="OFF면 진입 방어', new_block + '\n <div class="row g-2 align-items-end mt-1">\n <div class="col-12 col-md-2">\n <label class="form-label param-row" title="OFF면 진입 방어')
|
||||
elif prefix == 'usmom':
|
||||
html = html.replace(' <div class="row g-2 align-items-end mt-1">\n <div class="col-12 col-md-2">\n <label class="form-label param-row">방어로직', new_block + '\n <div class="row g-2 align-items-end mt-1">\n <div class="col-12 col-md-2">\n <label class="form-label param-row">방어로직')
|
||||
|
||||
with open(path, 'w', encoding='utf-8') as f:
|
||||
f.write(html)
|
||||
print("refactored")
|
||||
Reference in New Issue
Block a user