<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Indicator on Website of SauceWu</title><link>https://saucewu.github.io/tags/indicator/</link><description>Recent content in Indicator on Website of SauceWu</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Mon, 31 Mar 2025 12:45:00 +0900</lastBuildDate><atom:link href="https://saucewu.github.io/tags/indicator/index.xml" rel="self" type="application/rss+xml"/><item><title>Flutter K线系统拆解（二）：指标引擎与增量计算</title><link>https://saucewu.github.io/posts/flutter-k%E7%BA%BF%E7%B3%BB%E7%BB%9F%E6%8B%86%E8%A7%A3%E4%BA%8C%E6%8C%87%E6%A0%87%E5%BC%95%E6%93%8E%E4%B8%8E%E5%A2%9E%E9%87%8F%E8%AE%A1%E7%AE%97/</link><pubDate>Mon, 31 Mar 2025 12:45:00 +0900</pubDate><guid>https://saucewu.github.io/posts/flutter-k%E7%BA%BF%E7%B3%BB%E7%BB%9F%E6%8B%86%E8%A7%A3%E4%BA%8C%E6%8C%87%E6%A0%87%E5%BC%95%E6%93%8E%E4%B8%8E%E5%A2%9E%E9%87%8F%E8%AE%A1%E7%AE%97/</guid><description>&lt;h1 id="flutter-k线系统拆解二指标引擎与增量计算"&gt;Flutter K线系统拆解（二）：指标引擎与增量计算&lt;/h1&gt;
&lt;h2 id="目标"&gt;目标&lt;/h2&gt;
&lt;p&gt;这篇只讲一件事：&lt;br&gt;
如何把 K 线指标计算做成&lt;strong&gt;高性能、可维护、可测试&lt;/strong&gt;的生产级引擎。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="一最佳实践架构三层拆分"&gt;一、最佳实践架构：三层拆分&lt;/h2&gt;
&lt;p&gt;指标模块建议拆成三层：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;IndicatorConfig&lt;/code&gt;（配置层）：维护 MA/BOLL/MACD 等参数与开关&lt;/li&gt;
&lt;li&gt;&lt;code&gt;IndicatorEngine&lt;/code&gt;（计算层）：只负责输入数据、输出结果，不关心 UI&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ChartAdapter&lt;/code&gt;（消费层）：把结果喂给渲染，不做任何业务计算&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;核心原则：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;渲染层只读结果，不参与计算&lt;/li&gt;
&lt;li&gt;计算层纯函数化，避免隐式全局状态&lt;/li&gt;
&lt;li&gt;配置变更和行情更新走不同刷新路径&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="二指标计算顺序要固定"&gt;二、指标计算顺序要固定&lt;/h2&gt;
&lt;p&gt;生产上要明确“依赖顺序”，不能随意调整。&lt;/p&gt;
&lt;p&gt;推荐顺序：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;输入 &lt;code&gt;List&amp;lt;KLineEntity&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;计算 &lt;code&gt;MA&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;计算 &lt;code&gt;BOLL&lt;/code&gt;（依赖 MA）&lt;/li&gt;
&lt;li&gt;计算 &lt;code&gt;Volume MA&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;计算 &lt;code&gt;KDJ&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;计算 &lt;code&gt;MACD&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;计算 &lt;code&gt;RSI&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;计算 &lt;code&gt;WR&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;计算 &lt;code&gt;SuperTrend&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;结果回填到每个 &lt;code&gt;KLineEntity&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;渲染层直接读取实体字段&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;建议把顺序写进统一入口方法，避免外部随意单独调用。&lt;/p&gt;</description></item></channel></rss>