复盘增加左侧条件单与上一个入场周期,K线生成默认勾选。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-10-07 13:34:15 +08:00
parent 03dde1853d
commit 3328b7fcc1
4 changed files with 28 additions and 5 deletions
+7 -2
View File
@@ -14,7 +14,7 @@
option_spot: {
strategy: ["顺势", "反转"],
direction: ["多", "空"],
entry: ["假突破", "结构突破"],
entry: ["假突破", "结构突破", "左侧条件单"],
},
hedge: {
strategy: ["横盘", "趋势"],
@@ -713,7 +713,8 @@
function resetChartOptions() {
var cb = $("or-exchange-chart");
if (cb) cb.checked = false;
// 期权复盘:默认勾选后台生成 K 线
if (cb) cb.checked = true;
}
function renderDetailImages(images, opts) {
@@ -826,6 +827,7 @@
["离场", e.exit_reason || "—"],
["按计划", e.followed_plan || "—"],
["入场逻辑", e.entry_logic || "—"],
["上一个入场周期", e.prev_entry_tf || "—"],
];
if (t.is_hedge) {
cells.push(["永续盈亏", fmtPnl(t.realized_pnl_perp)]);
@@ -1094,6 +1096,7 @@
($("or-f-followed") || {}).value = "";
($("or-f-result") || {}).value = "";
($("or-f-entry") || {}).value = "";
($("or-f-prev-tf") || {}).value = "";
($("or-f-note") || {}).value = "";
setMoodTags("");
resetUploadSlots();
@@ -1158,6 +1161,7 @@
($("or-f-followed") || {}).value = e.followed_plan || "";
setSelectValue($("or-f-result"), e.result_tag || autoResultTag(t.realized_pnl_total));
setSelectValue($("or-f-entry"), e.entry_logic || "");
setSelectValue($("or-f-prev-tf"), e.prev_entry_tf || "");
($("or-f-note") || {}).value = e.note || "";
setMoodTags(e.mistake_tags);
resetChartOptions();
@@ -1275,6 +1279,7 @@
result_tag: ($("or-f-result") || {}).value || "",
mistake_tags: collectMoodTags(),
entry_logic: ($("or-f-entry") || {}).value || "",
prev_entry_tf: ($("or-f-prev-tf") || {}).value || "",
note: ($("or-f-note") || {}).value || "",
images: collectImages(),
};
+1
View File
@@ -130,6 +130,7 @@ def init_options_review_tables(conn: sqlite3.Connection) -> None:
_ensure_column(conn, "options_review_trades", "target_price_up", "REAL")
_ensure_column(conn, "options_review_trades", "target_price_down", "REAL")
_ensure_column(conn, "options_review_trades", "profit_rr", "REAL")
_ensure_column(conn, "options_review_entries", "prev_entry_tf", "TEXT")
def _ensure_column(conn: sqlite3.Connection, table: str, col: str, typedef: str) -> None:
+9 -1
View File
@@ -669,6 +669,7 @@ def enrich_trade_row(row: dict[str, Any], entry: dict[str, Any] | None = None) -
out["strategy_tag"] = entry.get("strategy_tag")
out["direction_view"] = entry.get("direction_view")
out["entry_logic"] = entry.get("entry_logic")
out["prev_entry_tf"] = entry.get("prev_entry_tf")
out["result_tag"] = entry.get("result_tag")
out["reviewed_at"] = entry.get("reviewed_at") or entry.get("updated_at")
else:
@@ -676,6 +677,7 @@ def enrich_trade_row(row: dict[str, Any], entry: dict[str, Any] | None = None) -
out["strategy_tag"] = None
out["direction_view"] = None
out["entry_logic"] = None
out["prev_entry_tf"] = None
out["result_tag"] = None
out["reviewed_at"] = None
return out
@@ -837,7 +839,7 @@ def list_review_trades(
rows = conn.execute(
f"""
SELECT t.*, e.id AS entry_id, e.strategy_tag AS e_strategy_tag,
e.direction_view, e.entry_logic, e.exit_reason, e.followed_plan,
e.direction_view, e.entry_logic, e.prev_entry_tf, e.exit_reason, e.followed_plan,
e.mistake_tags, e.result_tag, e.note, e.images_json, e.image,
e.reviewed_at, e.updated_at
FROM options_review_trades t
@@ -858,6 +860,7 @@ def list_review_trades(
"strategy_tag": d.pop("e_strategy_tag", None),
"direction_view": d.pop("direction_view", None),
"entry_logic": d.pop("entry_logic", None),
"prev_entry_tf": d.pop("prev_entry_tf", None),
"exit_reason": d.pop("exit_reason", None),
"followed_plan": d.pop("followed_plan", None),
"mistake_tags": d.pop("mistake_tags", None),
@@ -874,6 +877,7 @@ def list_review_trades(
"e_strategy_tag",
"direction_view",
"entry_logic",
"prev_entry_tf",
"exit_reason",
"followed_plan",
"mistake_tags",
@@ -924,10 +928,14 @@ def save_review_entry(
primary = None
if images:
primary = str(images[0].get("file") or "").strip() or None
prev_tf = str(payload.get("prev_entry_tf") or "").strip().lower()
if prev_tf and prev_tf not in ("15m", "1h", "2h", "4h", "8h", "12h"):
prev_tf = ""
fields = {
"strategy_tag": str(payload.get("strategy_tag") or "").strip() or None,
"direction_view": str(payload.get("direction_view") or "").strip() or None,
"entry_logic": str(payload.get("entry_logic") or "").strip() or None,
"prev_entry_tf": prev_tf or None,
"exit_reason": str(payload.get("exit_reason") or "").strip() or None,
"followed_plan": str(payload.get("followed_plan") or "").strip() or None,
"mistake_tags": str(payload.get("mistake_tags") or "").strip() or None,
@@ -314,6 +314,15 @@
<select id="or-f-entry" title="入场逻辑" style="width:100%;margin-bottom:6px;box-sizing:border-box">
<option value="">入场逻辑</option>
</select>
<select id="or-f-prev-tf" title="上一个入场周期" style="width:100%;margin-bottom:6px;box-sizing:border-box">
<option value="">上一个入场周期</option>
<option value="15m">15m</option>
<option value="1h">1h</option>
<option value="2h">2h</option>
<option value="4h">4h</option>
<option value="8h">8h</option>
<option value="12h">12h</option>
</select>
<div class="journal-upload-slots" id="or-upload-slots">
{% for tf in ['5m', '15m', '1h', '4h'] %}
@@ -329,7 +338,7 @@
<div class="form-row or-chart-options journal-chart-options hidden" id="or-chart-options" style="flex-wrap:wrap;align-items:center">
<label style="display:flex;align-items:center;gap:6px;font-size:.82rem">
<input type="checkbox" id="or-exchange-chart" value="true">
<input type="checkbox" id="or-exchange-chart" value="true" checked>
保存后后台生成 K 线图并作为截图(不阻塞保存)
</label>
<label style="font-size:.82rem;color:#9aa">周期1</label>
@@ -447,4 +456,4 @@
</section>
</div>
<script src="/static/options_review.js?v=23"></script>
<script src="/static/options_review.js?v=24"></script>