
이 전략은 변동률과 동력 지표가 결합된 자기 적응 거래 시스템으로, 여러 기술 지표의 협동 조합을 통해 시장 추세를 포착한다. 이 전략은 ATR 지표를 사용하여 시장 변동성을 모니터링하고, MACD는 트렌드 동력을 판단하며, 가격 동력 지표와 결합하여 거래 신호를 확인하고, 유연한 스톱 스톱 손실 메커니즘을 설정한다. 이 시스템은 매우 적응성이 강하여 시장 상황에 따라 거래 주파수와 포지션 통제를 자동으로 조정할 수 있다.
전략은 주로 트리플 지표 체계를 핵심 거래 논리로 의존한다. 첫째, ATR을 사용하여 시장의 변동성을 측정하여 거래 의사 결정에 변동성을 참조한다. 둘째, MACD 지표의 금포크 사십자를 사용하여 트렌드 전환점을 포착한다. MACD 빠른 선과 느린 선의 교차는 주요 거래 촉발 신호로 사용된다.
이 전략은 합리적이고 논리적으로 설계된 정량 거래 시스템으로, 다수의 기술 지표의 조합을 통해 시장 추세를 효과적으로 포착합니다. 시스템은 위험 제어 및 거래 실행 측면에서 세심한 고려를 하고 있으며, 실용성이 좋습니다. 약간의 잠재적인 위험이 있지만, 제안된 최적화 방향에 의해 전략의 안정성과 수익성은 더욱 향상될 것으로 예상됩니다.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("[ETH] Volatility & Momentum Adaptive Strategy", shorttitle="Definitive 1 day Ethereum Signal", overlay=true, initial_capital=10000, currency=currency.USD)
// === Input Parameters === //
trade_size = input.float(5, title="Trade Size (ETH)")
atr_length = input.int(8, minval=1, title="ATR Length")
macd_fast = input.int(8, minval=1, title="MACD Fast Length")
macd_slow = input.int(7, minval=1, title="MACD Slow Length")
macd_signal = input.int(9, minval=1, title="MACD Signal Length")
momentum_length = input.int(37, title="Momentum Length")
stop_loss_percent = input.float(9.9, title="Stop Loss Percentage (%)")
take_profit_percent = input.float(9.0, title="Take Profit Percentage (%)")
alternate_signal = input.bool(true, title="Alternate Buy/Sell Signals")
// === Indicators === //
// ATR to measure volatility
atr = ta.atr(atr_length)
// MACD for trend momentum
[macd_line, signal_line, _] = ta.macd(close, macd_fast, macd_slow, macd_signal)
macd_cross_up = ta.crossover(macd_line, signal_line)
macd_cross_down = ta.crossunder(macd_line, signal_line)
// Momentum
momentum = ta.mom(close, momentum_length)
// === Signal Control Variables === //
var bool last_signal_long = na
var int last_trade_bar = na
min_bars_between_trades = 5 // Adjust for minimal trade frequency control
time_elapsed = na(last_trade_bar) or (bar_index - last_trade_bar) >= min_bars_between_trades
// === Buy and Sell Conditions === //
// Buy when:
buy_signal = (macd_cross_up and momentum > 0 and close > ta.sma(close, 50) and time_elapsed)
// Sell when:
sell_signal = (macd_cross_down and momentum < 0 and close < ta.sma(close, 50) and time_elapsed)
// Enforce alternate signals if selected
if alternate_signal
buy_signal := buy_signal and (na(last_signal_long) or not last_signal_long)
sell_signal := sell_signal and (not na(last_signal_long) and last_signal_long)
// === Trade Execution === //
// Buy Position
if (buy_signal)
if strategy.position_size < 0
strategy.close("Short")
strategy.entry("Long", strategy.long, qty=trade_size)
last_signal_long := true
last_trade_bar := bar_index
// Sell Position
if (sell_signal)
if strategy.position_size > 0
strategy.close("Long")
strategy.entry("Short", strategy.short, qty=trade_size)
last_signal_long := false
last_trade_bar := bar_index
// === Stop Loss and Take Profit === //
if strategy.position_size > 0
long_take_profit = strategy.position_avg_price * (1 + take_profit_percent / 100)
long_stop_loss = strategy.position_avg_price * (1 - stop_loss_percent / 100)
strategy.exit("TP/SL Long", from_entry="Long", limit=long_take_profit, stop=long_stop_loss)
if strategy.position_size < 0
short_take_profit = strategy.position_avg_price * (1 - take_profit_percent / 100)
short_stop_loss = strategy.position_avg_price * (1 + stop_loss_percent / 100)
strategy.exit("TP/SL Short", from_entry="Short", limit=short_take_profit, stop=short_stop_loss)
// === Visual Signals === //
plotshape(series=buy_signal and time_elapsed, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=sell_signal and time_elapsed, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")