86a6081090
Co-authored-by: Cursor <cursoragent@cursor.com>
64 lines
2.2 KiB
Python
64 lines
2.2 KiB
Python
"""AI 复盘 journal 文本格式化(四所共用)。"""
|
|
from __future__ import annotations
|
|
|
|
import sqlite3
|
|
import sys
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
sys.path.insert(0, str(ROOT))
|
|
|
|
from ai_review_lib import journal_row_lines_for_ai # noqa: E402
|
|
|
|
|
|
class TestAiReviewLib(unittest.TestCase):
|
|
def test_journal_row_includes_expect_and_actual_rr(self):
|
|
text = journal_row_lines_for_ai(
|
|
1,
|
|
{
|
|
"coin": "HYPE",
|
|
"tf": "5m",
|
|
"pnl": "10.73",
|
|
"real_rr": "2.1354",
|
|
"expect_rr": "-",
|
|
"entry_reason": "趋势回调",
|
|
"exit_reason": "移动止盈",
|
|
"hold_duration": "1天 3小时",
|
|
"mood_issues": "",
|
|
"post_breakeven_stare": "否",
|
|
"new_trade_while_occupied": "否",
|
|
"note": "测试备注",
|
|
},
|
|
)
|
|
self.assertIn("实际RR:2.1354", text)
|
|
self.assertIn("预期RR:-", text)
|
|
self.assertIn("开仓逻辑:趋势回调", text)
|
|
self.assertIn("备注:测试备注", text)
|
|
self.assertNotIn("开仓类型", text)
|
|
|
|
def test_journal_row_accepts_sqlite_row(self):
|
|
conn = sqlite3.connect(":memory:")
|
|
conn.row_factory = sqlite3.Row
|
|
conn.execute(
|
|
"""CREATE TABLE journal_entries (
|
|
coin TEXT, tf TEXT, pnl TEXT, real_rr TEXT, expect_rr TEXT,
|
|
entry_reason TEXT, exit_reason TEXT, hold_duration TEXT,
|
|
mood_issues TEXT, mood_score INTEGER, note TEXT
|
|
)"""
|
|
)
|
|
conn.execute(
|
|
"""INSERT INTO journal_entries VALUES (?,?,?,?,?,?,?,?,?,?,?)""",
|
|
("BTC", "15m", "5", "1.2", "2.0", "突破", "止盈", "2小时", "", None, ""),
|
|
)
|
|
row = conn.execute("SELECT * FROM journal_entries").fetchone()
|
|
conn.close()
|
|
text = journal_row_lines_for_ai(1, row)
|
|
self.assertIn("BTC 15m", text)
|
|
self.assertIn("实际RR:1.2", text)
|
|
self.assertIn("开仓逻辑:突破", text)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|