关键结论:不要在“全部自己写”和“全部直接调用开源框架”之间二选一。更稳妥的方法是:自己定义语义,成熟库负责计算,独立测试负责证明两者一致。
核心结论: 不要在“全部自己写”和“全部直接调用开源框架”之间二选一。更稳妥的方法是:自己定义语义,成熟库负责计算,独立测试负责证明两者一致。
盈利模式怎样变成代码
假设你有一个想法:
上升趋势中,价格首次回踩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
研究关系
前置知识1
相关内容1
此内容取代0
暂无已建立的此内容取代
取代此内容0
暂无已建立的取代此内容
