本策略是一个基于MACD指标的自动化交易系统,结合了动态止盈止损机制。策略核心是通过MACD线与信号线的交叉来确定交易信号,同时集成了百分比止损、目标获利以及追踪止损等风险管理功能,实现了全自动化交易。该策略采用快速和慢速移动平均线的差值来计算MACD指标,通过信号线的交叉来识别市场趋势转换点,从而做出相应的交易决策。
策略的核心逻辑包含以下几个关键部分: 1. MACD指标计算:使用12日和26日作为默认的快速和慢速移动平均线周期,9日作为信号线平滑周期。 2. 入场信号:当MACD线从下方突破信号线时,系统产生做多信号;当MACD线从上方跌破信号线时,系统产生做空信号。 3. 风险管理:集成了三重保护机制: - 固定止损位:入场价格下方1% - 获利目标:入场价格上方2% - 追踪止损:1.5%的动态跟踪止损距离
该策略通过MACD指标的交叉信号和完善的风险管理体系,构建了一个稳健的自动化交易系统。虽然存在一定的优化空间,但基础框架已经较为完善。通过持续优化和改进,该策略有望在不同市场环境下都能保持稳定的表现。在实盘应用时,建议先进行充分的回测验证,并根据具体市场特征调整参数设置。
/*backtest
start: 2024-01-01 00:00:00
end: 2024-11-01 00:00:00
period: 12h
basePeriod: 12h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © traderhub
//@version=5
strategy("MACD Strategy with Settings", overlay=true)
// Параметры MACD в контрольной панели
fastLength = input.int(12, title="Fast Length", minval=1, maxval=50)
slowLength = input.int(26, title="Slow Length", minval=1, maxval=50)
signalSmoothing = input.int(9, title="Signal Smoothing", minval=1, maxval=50)
// Параметры риска
stopLossPerc = input.float(1, title="Stop Loss (%)", step=0.1) // Стоп-лосс в процентах
takeProfitPerc = input.float(2, title="Take Profit (%)", step=0.1) // Тейк-профит в процентах
trailStopPerc = input.float(1.5, title="Trailing Stop (%)", step=0.1) // Трейлинг-стоп в процентах
// Вычисляем MACD
[macdLine, signalLine, _] = ta.macd(close, fastLength, slowLength, signalSmoothing)
// Показываем MACD и сигнальную линию на графике
plot(macdLine, color=color.blue, title="MACD Line")
plot(signalLine, color=color.red, title="Signal Line")
hline(0, "Zero Line", color=color.gray)
// Условия для покупки и продажи
longCondition = ta.crossover(macdLine, signalLine) // Покупка при пересечении MACD вверх сигнальной линии
shortCondition = ta.crossunder(macdLine, signalLine) // Продажа при пересечении MACD вниз сигнальной линии
// Расчет стоп-лосса и тейк-профита
var float longStopLevel = na
var float longTakeProfitLevel = na
if (longCondition)
longStopLevel := strategy.position_avg_price * (1 - stopLossPerc / 100)
longTakeProfitLevel := strategy.position_avg_price * (1 + takeProfitPerc / 100)
strategy.entry("Long", strategy.long)
if (strategy.position_size > 0)
// Установка стоп-лосса и тейк-профита
strategy.exit("Take Profit/Stop Loss", "Long", stop=longStopLevel, limit=longTakeProfitLevel, trail_offset=trailStopPerc)
// Закрытие позиции при медвежьем сигнале
if (shortCondition)
strategy.close("Long")
strategy.entry("Short", strategy.short)