问答卡 · 策略假设与策略家族

自己思考的盈利模式怎样变成代码?MA、MACD等底层工具直接调用还是自己写?

不要在“全部自己写”和“全部直接调用开源框架”之间二选一。更稳妥的方法是:自己定义语义,成熟库负责计算,独立测试负责证明两者一致。

问答卡草稿公开内容
关键结论:不要在“全部自己写”和“全部直接调用开源框架”之间二选一。更稳妥的方法是:自己定义语义,成熟库负责计算,独立测试负责证明两者一致。

核心结论: 不要在“全部自己写”和“全部直接调用开源框架”之间二选一。更稳妥的方法是:自己定义语义,成熟库负责计算,独立测试负责证明两者一致。

盈利模式怎样变成代码

假设你有一个想法:

上升趋势中,价格首次回踩20日均线后做多。

计算机仍然不知道:

  • 上升趋势怎样定义?
  • 20日均线是SMA还是EMA?
  • “回踩”是最低价触碰,还是收盘价跌破?
  • 当前K线未收盘时是否触发?
  • 下一根开盘成交,还是当前收盘成交?
  • 什么条件失效?买多少?怎样止损?

因此需要逐层翻译:

交易想法

可验证的盈利假设

客观计算工具

状态与事件识别

完整策略规则

目标仓位

风控与执行

代码结构可以类似:

ma20 = tools.calculate("EMA-CLOSE-20-v1", bars)
atr14 = tools.calculate("ATR-14-v1", bars)

mode_state = trend_pullback_mode.evaluate(
    bars=bars,
    ma=ma20,
    atr=atr14,
)

trade_intent = strategy.decide(
    mode_state=mode_state,
    account_state=account_state,
)

底层工具的选择原则

情况 建议
SMA、EMA、MACD、RSI等标准指标 优先使用成熟库,但放在自己的统一封装后面。
策略明确来自某个平台 先复现该平台公式,证明一致后才能替换成开源库。
SMA、收益率、最高最低值等简单计算 可以自己实现,但仍要测试和交叉核验。
平台特有KC、特殊MACD、钝化、背离 通常需要自己定义和实现。
回测框架内置指标 原型可直接调用;正式系统通过自己的接口调用。
网上随手找到的代码片段 不建议直接复制进正式系统。

为什么同名指标可能不同

TA-Lib定义的MACD是:

公式: MACD = EMA_{fast} − EMA_{slow} Signal = EMA(MACD, signalPeriod) Histogram = MACD − Signal

但有些中文行情平台的柱子使用:

公式: Histogram = 2 × (DIF − DEA)

两者柱值相差一倍。EMA也可能因为初始化方法、递归方式、预热期和缺失值处理不同而产生不同结果。

底层工具从哪里获取

  • **TA-Lib:**适合SMA、EMA、MACD、RSI、ATR、布林带等传统技术指标。
  • **pandas和NumPy:**适合滚动均值、收益率、最高最低、标准差、分位数和自定义条件。
  • **交易框架内置指标:**适合快速原型,但必须核对公式、预热和实时更新语义。

推荐结构

你的策略

你自己的基础工具统一接口

TA-Lib / pandas / 自有实现

交易框架适配器

正式策略尽量统一写成:

tools.ma(spec="EMA-CLOSE-20-v1")
tools.macd(spec="MACD-12-26-9-HIST1-v1")

真正属于你的竞争优势,一般不是重新写一个EMA,而是怎样把客观工具组合成可验证的盈利模式,并管理风险、成本和执行。

参考与来源状态:

KNOWLEDGE RELATIONS

研究关系