Skip to content

05. K 线窗口与上下文工具:只看交易表,看不懂入场上下文

上一章练习参考答案

第一题,risk = 0 时不能继续除法。应该把这笔交易标记为风险计划异常,返回追问或数据错误,让用户补充有效止损。

第二题,空头交易方向相反。空头盈利来自价格下跌,所以实际收益应按 entryPrice - exitPrice 计算。

第三题,如果要做审计和历史对账,可以把当时的计算结果存库;如果交易字段可能被纠正,实时计算更灵活。训练产品早期可以实时计算,正式上线后建议保留快照。

新问题:数字对了,为什么还是看不懂

上一章我们能算风险了。但用户继续问:

“我知道这笔是 -0.8R,可到底是我乱追,还是市场本来就假突破?”

只看交易表回答不了。你必须看入场前后几根 K 线。

PA 复盘不是只看价格数字,它看的是行为和结构:突破前有没有压缩,突破后有没有回踩,入场时是不是追在情绪最高点,止损是不是放在结构外。

所以第五章引入 K 线窗口工具。

KlineBar 和 KlineWindowRepository

伴生工程里用一个简单模型表示 K 线:

java
public record KlineBar(
        String time,
        double open,
        double high,
        double low,
        double close,
        String note
) {
}

仓库接口:

java
public interface KlineWindowRepository {
    List<KlineBar> windowFor(String tradeId);
}

现在先用内存数据模拟真实行情窗口。等你接真实系统时,可以换成行情库、ClickHouse、时序数据库或者第三方行情 API。

为什么要叫窗口

不要把整段行情都丢给复盘教练。

一是成本高。二是噪声大。三是模型容易被很远的走势带偏。

复盘一笔入场,通常先拿“入场前 N 根 + 入场后 M 根”的窗口就够了。窗口里每根 K 线可以带一个轻量备注,比如“突破”“回落”“测试前低”。

伴生工程里,includeKline=true 时会读取窗口:

java
List<KlineBar> klineWindow = request.includeKline()
        ? klineWindowRepository.windowFor(trade.tradeId())
        : List.of();

然后报告里会出现:

json
{
  "sections": {
    "klineContext": "突破后下一根 K 线快速回落,和截图备注互相印证。"
  }
}

本章怎么跑

带 K 线:

json
{
  "tradeId": "T-1001",
  "includeKline": true,
  "question": "复盘这笔训练交易"
}

不带 K 线:

json
{
  "tradeId": "T-1001",
  "includeKline": false,
  "question": "先只复盘交易计划"
}

这两个请求都能返回 REVIEWED,但报告上下文不同。带 K 线时,系统能解释入场附近结构;不带 K 线时,只能评价交易计划和执行字段。

这一章真正解决了什么

K 线窗口解决的是“交易上下文”。

没有 K 线,复盘容易变成数字点评。有了窗口,教练才知道用户是在突破前进、突破后追、回踩确认进,还是追在假突破末端。

练习题

  1. K 线窗口应该按交易发生时间实时读取,还是使用交易当时保存的快照?
  2. 如果用户只上传截图,没有结构化 K 线,你会怎么降级?
  3. includeKline=false 时,报告里应该隐瞒没读 K 线,还是明确说明上下文有限?

Built with VitePress. Deployed on Cloudflare Pages.