You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于FineScript中ATR Bands策略入场点位设置的可行性问询

在FineScript中利用ATR Bands上下轨设置止盈止损的实现方法

完全可以实现这个需求,核心思路是在入场触发时记录当时ATR Bands的上轨和下轨数值,再将这些固定值用于后续的止盈(TP)和止损(SL)设置。以下是具体的实现步骤和代码示例:

  • 第一步:计算ATR Bands指标
    调用FineScript内置的ATRBands()函数生成上轨、中轨、下轨数据,可根据策略需求调整周期(length)和乘数(multiplier)参数。

  • 第二步:入场时锁定上下轨数值
    使用var声明变量存储入场瞬间的上下轨值,var关键字会确保变量只在首次赋值(即入场时)更新,后续K线不会覆盖这个值,保证用的是入场时的固定点位。

  • 第三步:基于锁定的数值设置止盈止损
    通过strategy.exit()函数,将记录的上轨/下轨值分别指定为止盈或止损的触发价位。

完整代码示例(做多场景)

// 计算ATR Bands,参数可自定义
[atrUpper, atrMiddle, atrLower] = ATRBands(length=14, multiplier=2.0)

// 定义入场条件(示例:收盘价上穿ATR中轨)
longEntryCondition = crossover(close, atrMiddle)

// 声明变量存储入场时的上下轨值,初始为na
var float entryUpperBand = na
var float entryLowerBand = na

// 触发入场时,记录当前的ATR上下轨
if (longEntryCondition)
    entryUpperBand := atrUpper[0]
    entryLowerBand := atrLower[0]
    strategy.entry("Long Position", strategy.long)

// 基于入场时的上下轨设置止盈止损
strategy.exit("Exit Long", "Long Position", stop=entryLowerBand, limit=entryUpperBand)

做空场景的适配调整

如果是做空策略,逻辑类似,只需调整入场条件和止盈止损的对应关系:

// 做空入场条件:收盘价下穿ATR中轨
shortEntryCondition = crossunder(close, atrMiddle)

if (shortEntryCondition)
    entryUpperBand := atrUpper[0]
    entryLowerBand := atrLower[0]
    strategy.entry("Short Position", strategy.short)

// 做空时,止损设为上轨,止盈设为下轨
strategy.exit("Exit Short", "Short Position", stop=entryUpperBand, limit=entryLowerBand)

注意事项

  1. 必须使用var声明存储上下轨的变量,避免后续K线的指标变动覆盖入场时的数值;
  2. ATR Bands的参数(length、multiplier)需根据策略周期和品种特性调整,默认14周期、2倍乘数是常用配置;
  3. 如果需要更灵活的止盈止损逻辑(比如在上下轨基础上加偏移),直接对entryUpperBand或entryLowerBand进行算术运算即可。

内容的提问来源于stack exchange,提问作者STH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 08:55:12