低吸高抛策略:结合波动率ATR,提升交易收益
代码介绍
以下代码由今日美股网(www.TodayUSStock.com)代码学院提供,低吸高抛策略是一个经典的波段交易方法,通过结合平均真实波幅(ATR)来确定买入和卖出点。ATR帮助估算市场的波动性,从而为交易者提供更科学的入场和离场点位,旨在提升交易收益。
代码及加载方法
同花顺
// 计算ATR ATR:=MA(ABS(HIGH-LOW),14); // 14日ATR // 定义买入条件(低吸) BUY:=CLOSEMA(CLOSE,20)+2*ATR; // 收盘价高于20日均线加上2倍ATR // 返回结果 RETURN BUY OR SELL;
加载方法: 将代码复制粘贴到同花顺的"选股公式编辑器"中,命名为"低吸高抛策略",然后保存并运行。
东方财富
// 计算ATR ATR:=MA(ABS(HIGH-LOW),14); // 14日ATR // 定义买入条件(低吸) BUY:=CLOSEMA(CLOSE,20)+2*ATR; // 收盘价高于20日均线加上2倍ATR // 返回结果 RETURN BUY OR SELL;
加载方法: 复制代码到东方财富通"自定义指标"编辑器中,保存并应用到选股条件中。
通达信
// 计算ATR ATR:=MA(ABS(HIGH-LOW),14); // 14日ATR // 定义买入条件(低吸) BUY:=CLOSEMA(CLOSE,20)+2*ATR; // 收盘价高于20日均线加上2倍ATR // 返回结果 RETURN BUY OR SELL;
加载方法: 在通达信软件中,进入"公式管理器",选择"新建公式",粘贴代码后保存并使用。
大智慧
// 计算ATR ATR:=MA(ABS(HIGH-LOW),14); // 14日ATR // 定义买入条件(低吸) BUY:=CLOSEMA(CLOSE,20)+2*ATR; // 收盘价高于20日均线加上2倍ATR // 返回结果 RETURN BUY OR SELL;
加载方法: 进入大智慧的"指标管理",创建新指标,粘贴代码后保存使用。
MetaStock
// 计算ATR ATR:=Mov(Abs(HIGH-LOW),14,S); // 14日ATR // 定义买入条件(低吸) BUY:=CLOSEMov(CLOSE,20,S)+2*ATR; // 收盘价高于20日均线加上2倍ATR // 返回结果 RETURN BUY OR SELL;
加载方法: 在MetaStock中,进入"Indicator Builder",新建指标,输入代码并保存。
NinjaTrader
using System;
using NinjaTrader.NinjaScript;
public class LowBuyHighSellATR : Indicator
{
protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
Description = "Low Buy High Sell with ATR";
Name = "LowBuyHighSellATR";
Calculate = Calculate.OnBarClose;
IsOverlay = false;
IsSuspendedWhileInactive = true;
}
}
protected override void OnBarUpdate()
{
double atr = ATR(14)[0];
double ma20 = SMA(CLOSE, 20)[0];
bool buy = CLOSE[0] < ma20 - 2 * atr; // 低吸条件
bool sell = CLOSE[0] > ma20 + 2 * atr; // 高抛条件
PlotNewValue("BuySellSignal", buy || sell ? 1 : 0);
}
}
加载方法: 打开NinjaTrader,进入"NinjaScript Editor",新建Indicator,粘贴代码并编译。
eSignal
// 计算ATR ATR:=MA(ABS(HIGH-LOW),14); // 14日ATR // 定义买入条件(低吸) BUY:=CLOSEMA(CLOSE,20)+2*ATR; // 收盘价高于20日均线加上2倍ATR // 返回结果 RETURN BUY OR SELL;
加载方法: 在eSignal中,进入"Formula Editor",新建公式,粘贴代码并保存。
TradingView
//@version=4
study("Low Buy High Sell with ATR", shorttitle="LBHS_ATR", overlay=false)
// 计算ATR
atr = atr(14)
// 定义买入条件(低吸)
buy = close < sma(close, 20) - 2 * atr // 收盘价低于20日均线减去2倍ATR
// 定义卖出条件(高抛)
sell = close > sma(close, 20) + 2 * atr // 收盘价高于20日均线加上2倍ATR
// 返回结果
plotshape(buy or sell, title="Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
加载方法: 在TradingView中,点击图表右上角的"Pine Editor",新建脚本,粘贴代码后保存并应用到图表。
MetaTrader 4/5
//+------------------------------------------------------------------+
//| Low Buy High Sell with ATR Indicator |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Lime
double ExtMapBuffer[];
int OnInit()
{
SetIndexStyle(0, DRAW_ARROW, 0, 1);
SetIndexArrow(0, 233);
SetIndexBuffer(0, ExtMapBuffer);
return(INIT_SUCCEEDED);
}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
int i, limit;
if(rates_total ma20 + 2 * atr)
{
ExtMapBuffer[i] = Low[i] - 20 * Point;
}
else
{
ExtMapBuffer[i] = EMPTY_VALUE;
}
}
return(rates_total);
}
加载方法: 在MetaTrader中,进入"MetaEditor",新建Expert Advisor或Indicator,粘贴代码,编译并加载到图表。
参数说明
| 参数 | 意义 |
|---|---|
| ATR | 平均真实波幅,衡量价格的波动性 |
| MA(CLOSE,20) | 20日简单移动平均线,用于价格趋势判断 |
| 2*ATR | ATR的2倍,作为波动范围的边界 |
针对不同产品推荐参数
| 产品类型 | 推荐参数 | 理由 |
|---|---|---|
| 股票 | ATR(14), MA(20) | 股票市场的中期波动适合14日ATR和20日均线 |
| 期货 | ATR(7), MA(10) | 期货市场波动快,需更短周期捕捉波动 |
| 外汇 | ATR(20), MA(50) | 外汇市场波动相对小,需更长周期判断趋势 |
| 加密货币 | ATR(10), MA(30) | 加密货币波动大,需平衡波动性和趋势识别 |
优点和缺点
| 优点 | 缺点 |
|---|---|
| 结合市场波动性进行交易,更加科学 | 在极端市场条件下,ATR可能失效 |
| 适用于多种市场和资产类别 | 需要对市场波动性有深入理解 |
| 提供明确的买卖点位,减少主观判断 | 在趋势市场中,可能频繁交易,增加交易成本 |
使用建议
此策略适合在波动性较大的市场使用。结合其他技术指标或基本面分析可以提高策略的成功率。建议在回测中优化参数,并在实际交易中灵活调整止损和止盈点位以控制风险。同时,注意市场情绪的变化,避免在趋势明显的市场中过度交易。
X用户点评
"这个策略结合ATR,真的让我在波动的市场中找到了不错的入场和出场点。关键是,记住市场环境的变化,调整参数很重要。" - @ATRTrader
来源:今日美股网