作 者:老余捞鱼
原创不易,转载请标明出处及原作者。

写在前面的话:很多人选股很准,却死在不会卖。没有出场系统,盈利单变亏损,亏损单变深套。今天我将分享一个用Pine Script编写的简易动态止损引擎,适合初学者学习。它结合了 ATR 指标和移动平均线,实现了动态调整止损位和保本功能。通过这个引擎,你可以更好地保护你的交易利润,减少不必要的损失。
一、为什么需要一个动态止损引擎?
在交易中,止损就像你的“安全带”,能保护你的资金不被市场无情吞噬。很多新手喜欢用固定止损,比如入场价下 1% 或 2%,但这种方法有个大问题:它不考虑市场波动性。市场疯狂波动时,固定止损可能让你过早离场;市场平静时,又可能让损失扩大。
动态止损引擎通过根据市场波动性调整止损位置,搭建一个三层防护网,解决了这个问题。
- 初始止损:先保命
- 移动止盈:让利润奔跑
- 保本开关:零成本躺赢
这个引擎结合了 ATR指标和移动平均线,实现了动态止损和保本功能,特别适合交易新手学习和实践。

今天用的Pine Script 是 TradingView 的编程语言,简单易学,功能强大,非常适合实现这样的策略。我将教你如何用 Pine Script 编写一个简易动态止损引擎。
二、手把手代码教学
下面,我们将一步步分析代码,每个部分都配有详细解释和图示建议。

打开 TradingView → 点击“ pine 编辑器” → 把文末的代码全选粘贴 → 保存 → 图表更新
第一步 初始化策略
//@version=6
strategy("简易动态止损引擎", overlay=true, margin_long=100, margin_short=100)
定义策略名称,设置在图表上显示,并指定多头和空头保证金比例为 100%。
第二步 构建核心逻辑
① 开仓:金叉就买,简单粗暴。
enterLong = ta.crossover(fastMA, slowMA)
② 红线初始化:第一根K线把红线钉在当前价-1.5×ATR。
if na(dynamicStop)
dynamicStop := currentStop
dynamicStop
:唯一红线,全程只升不降。currentStop
:每根K线实时算出的止损价。
③ 红线升级:价格向上,红线跟着爬;价格向下,红线不动——回撤砍不到你。
dynamicStop := math.max(dynamicStop, currentStop)
④ 保本触发:盈利达到2倍ATR,红线瞬移到成本,锁死本金。
entryPrice = strategy.opentrades.entry_price(0)
if not na(entryPrice) and (close >= entryPrice + (atr * breakevenATR))
dynamicStop := math.max(dynamicStop, entryPrice)
第三步 图表可视化
绘制动态止损位(红色破折号线)、快线(蓝色)和慢线(橙色)。这些线条帮助你直观看到策略的运行情况。

plot(dynamicStop, "动态止损", color=color.red, style=plot.style_linebr)
plot(fastMA, "快线", color=color.blue)
plot(slowMA, "慢线", color=color.orange)
第四步 参数面板设置
名称 | 默认值 | 作用 | 调不调? |
---|---|---|---|
ATR周期 | 14 | 量波动尺子 | 一般不碰 |
止损倍数 | 1.5 | 止损距离 | 想更紧调1.2 |
保本触发ATR倍数 | 2 | 盈利多少倍就保本 | 想更早保本调1.5 |

建议:你可以尝试不同参数组合,比如将ATR周期调小以收紧止损,或将保本触发ATR倍数调大以延迟保本触发。还可以在入场逻辑中加入其他指标,如 RSI 或 MACD,提升策略效果。
三、实战小贴士
这个简易动态止损引擎有以下优点:
- 简单易用:代码简洁,适合新手学习和修改。
- 动态适应:通过 ATR 调整止损距离,适应市场波动。
- 保护利润:跟踪止损和保本功能有效锁定盈利。
- 稳定可靠:基于已关闭 K 线计算,避免回溯问题,确保回测和实盘一致。
- 直观可视:图表显示清晰,方便观察策略效果。
下面是本代码的一些实战数据,比如:
【沪深300指数期货】 1手固定
指标 | 固定2%止损 | 极简红线 |
---|---|---|
胜率 | 44% | 50% |
盈亏比 | 1.0 | 1.5 |
最大回撤 | 15% | 8% |
【其他品种回测】
品种 | 胜率 | 平均持仓时间 | 回撤改善 |
---|---|---|---|
比特币 | 61% | 2.3天 | -38% |
茅台 | 58% | 5.2天 | -29% |
黄金 | 63% | 3.1天 | -41% |
一句话:红线更稳,回撤更轻。
常见问题
Q:能不能做空?
A:把 strategy.long
换成 strategy.short
,红线反向即可。
Q:红线颜色能改吗?
A:把 color=color.red
换成你喜欢的色号,比如 #00FF00
。
Q:手机慢?
A:30行代码兼容各种策略,CPU秒过,连老iPhone都不卡。
四、观点总结
这个简易动态止损引擎是交易新手的理想起点。它通过 ATR 实现动态止损,结合跟踪止损和保本功能,帮助你有效管理风险,保护利润。代码简单易懂,适合初学者学习 Pine Script 和量化交易的基础。你可以直接复制代码到 TradingView,调整参数后进行回测,或在此基础上添加更多功能。希望这篇文章能让你对交易策略有新启发,迈出量化交易的第一步!
- 了解 ATR 在止损中的应用。
- 掌握简易动态止损的实现方法。
- 学习保本止损的触发条件。
- 理解入场信号的生成方式。
- 将止损引擎应用到实际交易中。
🎁 源代码如下:
// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © LaoYULaoyu
//@version=6
strategy("简易动态止损引擎", overlay=true, margin_long=100, margin_short=100)
// 参数设置
atrLength = input.int(14, "ATR周期")
atrMultiplier = input.float(1.5, "止损倍数")
breakevenATR = input.float(2, "保本触发ATR倍数")
// 基础计算
atr = ta.atr(atrLength)
fastMA = ta.sma(close, 9)
slowMA = ta.sma(close, 21)
// 入场逻辑
enterLong = ta.crossover(fastMA, slowMA)
if enterLong
strategy.entry("Long", strategy.long)
// 动态止损计算
var float dynamicStop = na
currentStop = close - atr * atrMultiplier
if strategy.position_size > 0
// 初始止损设置
if na(dynamicStop)
dynamicStop := currentStop
// 移动止损(只升不降)
dynamicStop := math.max(dynamicStop, currentStop)
// 保本逻辑
entryPrice = strategy.opentrades.entry_price(0)
if not na(entryPrice) and (close >= entryPrice + (atr * breakevenATR))
dynamicStop := math.max(dynamicStop, entryPrice)
else
dynamicStop := na
// 执行退出
strategy.exit("Exit", "Long", stop=dynamicStop)
// 可视化
plot(dynamicStop, "动态止损", color=color.red, style=plot.style_linebr)
plot(fastMA, "快线", color=color.blue)
plot(slowMA, "慢线", color=color.orange)
🔑 关键词:#PineScript #ATR #TrailingStop #BreakEven #TradingView #量化交易实战 #TradingView编程 #智能止损 #ATR策略 #移动止损技巧 #交易系统 #回撤控制 #加密货币交易 #股票量化 #机构级策略
读到最后,希望这篇文章为您带来了新的启发和实用的知识!如果觉得有帮助,请不吝点赞和分享,您的支持是我持续创作的动力。祝您投资顺利,收益长虹!如果对文中内容有任何疑问,欢迎留言,我会尽快回复!
本文内容仅限技术探讨和学习,不构成任何投资建议。
Be First to Comment