
의도 반전 거래망 평균 전략은 이동 평균선을 기반으로 하는 의도 반전 거래 전략이다. 이 전략은 쌍 지수 이동 평균선을 기본으로 계산하고, 그 위에 아래 각각 여러 개의 거래망 대역을 추가한다. 가격이 거래망 대역을 접촉할 때, 방향에 따라 상장을 하거나 공백을 한다. 가격이 평균선으로 돌아왔을 때, 평점으로 빠져 나간다.
이 전략은 이진 지수 이동 평균 (DEMA) 을 기본 지표로 사용한다. 이진 지수 이동 평균은 가격 변화에 민감한 이동 평균이다. 그 기초에 따라, 전략은 각각 상단과 하단 양쪽에 여러 가격대를 추가하여 일률적인 포괄적 인 영역을 구성한다. 포괄적 인 영역의 범위는 사용자에 의해 설정되며, 각 가격대 사이의 특정 비율 간격에 따라한다.
가격 상승이 상단 포괄 띠에 접근할 때, 이 전략은 포지션을 상쇄합니다. 가격이 하락하면 상단 포괄 띠를 접촉할 때, 이 전략은 포지션을 더합니다. 새로운 가격 띠를 접촉할 때마다 포지션을 한 번 올립니다. 가격이 이동 평균선 근처로 돌아 왔을 때, 이 전략은 모든 포지션을 청산합니다.
이 전략은 포괄적 인 영역을 통해 가격의 과도한 변동성을 포착하고 반전이 오면 수익으로 탈퇴하여 낮은 가격의 거래 목표를 달성합니다. 이는 비트코인과 같은 디지털 화폐와 같은 명백한 평균 회귀 특성을 가진 시장 주기에는 적용됩니다.
포괄망 영역을 적절히 넓히고 가격 변화를 유발하는 감수성을 높임으로써 위험을 줄일 수 있다. 이동 평균선 길이 변수를 다른 주기적 상황에 맞게 조정할 수 있다.
이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.
이동평균선 알고리즘을 최적화한다. 다양한 유형의 이동평균선 지표의 효과를 테스트할 수 있다.
평균선 길이 변수를 조정한다. 주기를 줄이는 것은 단기 가격 변화에 대한 포착을 향상시킬 수 있지만, 노이즈 트레이딩을 증가시킬 수도 있다.
패키지 네트워크 영역 파라미터를 최적화한다. 다양한 퍼센티지 설정을 테스트하여 최적의 파라미터 조합을 찾을 수 있다.
손해를 줄이는 전략을 추가한다. 이동 손해를 줄이거나 손해를 되돌리는 전략을 설정하여 단독 손실을 효과적으로 제어한다.
필터링 조건을 추가한다. 다른 지표 신호와 결합하여 비합리적인 상황에서 무효화되는 입장을 피한다.
의도 반전 거래망 평균 가치 전략은 평평선 가격 통로를 구축하여 가격 반전 기회를 효과적으로 포착한다. 그것은 다양한 시장 환경에 적용하여 파라미터를 유연하게 조정할 수 있다. 이 전략은 거래 비용이 낮고 수익률이 높으며 권장되는 양적 거래 전략이다.
/*backtest
start: 2022-11-27 00:00:00
end: 2023-12-03 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Mean Reversion - Envelope Strategy", overlay=true )
// ----------------------- DESCRIPTION -----------------------
// THIS SCRIPT IS A MEAN REVERSION SYSTEM THAT USES A MOVING AVERAGE AS BASE CALCULATION AND A % OF THIS MOVING AVERAGE TO CALCULATE THE ENVELOPE
// BY DEFAULT, THE SYSTEM WILL PLACE LONG ORDERS ON THE MOVING AVERAGE -5% PER ENVELOPE COUNT (5%, 10% AND SO ON...)
// YOU CAN ENABLE THE SHORT ORDERS THAT WILL FOLLOW THE SAME LOGIC ON THE OPPOSITE SIDE
// THE SYSTEM WILL CLOSE EVERY ONGOING TRADE WHEN THE PRICE RETURNS TO THE MEAN
// ---------------------------------------------
// ---------------- SETTINGS -------------------
src = input(close, "Moving Average Source", group = "Moving Average")
ma_window = input.int(5, "Moving Average Window", step = 1, group = "Moving Average")
ma_type = input.string('4. DEMA', "Moving Average Type", options=['1. SMA', '2. EMA', '3. RMA', '4. DEMA'], group = "Moving Average")
enveloppe_step = input.float(0.05, "Delta Per Enveloppe", step = 0.01, group = "Envelope")
envelope_count = input.int(5, "Envelope count", options = [1, 2, 3, 4, 5], group = "Envelope")
use_longs = input.bool(true, 'Use Long Orders ?', group = "Orders")
use_short = input.bool(false, 'Use Short Orders ?', group = "Orders")
// ---------------------------------------------
// -------------- INDICATORS -------------------
ma_funct() =>
if(ma_type == '1. SMA')
ta.sma(src, ma_window)
if(ma_type == '2. EMA')
ta.ema(src, ma_window)
if(ma_type == '3. RMA')
ta.rma(src, ma_window)
if(ma_type == '4. DEMA')
2 * ta.ema(src, ma_window) - ta.ema(ta.ema(src, ma_window), ma_window)
ma_base = ma_funct()
ma_high_1 = envelope_count > 0 ? ma_base * (1 + enveloppe_step) : na
ma_high_2 = envelope_count > 1 ? ma_base * (1 + enveloppe_step * 2) : na
ma_high_3 = envelope_count > 2 ? ma_base * (1 + enveloppe_step * 3) : na
ma_high_4 = envelope_count > 3 ? ma_base * (1 + enveloppe_step * 4) : na
ma_high_5 = envelope_count > 4 ? ma_base * (1 + enveloppe_step * 5) : na
ma_low_1 = envelope_count > 0 ? ma_base * (1 - enveloppe_step) : na
ma_low_2 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 2) : na
ma_low_3 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 3) : na
ma_low_4 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 4) : na
ma_low_5 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 5) : na
// ---------------------------------------------
// --------------- STRATEGY --------------------
if use_longs
if envelope_count > 0 and strategy.opentrades < 1
strategy.entry('long 1', strategy.long, limit=ma_low_1, qty=(strategy.equity / ma_low_1) * (1 / envelope_count))
if envelope_count > 1 and strategy.opentrades < 2
strategy.entry('long 2', strategy.long, limit=ma_low_2, qty=(strategy.equity / ma_low_2) * (1 / envelope_count))
if envelope_count > 2 and strategy.opentrades < 3
strategy.entry('long 3', strategy.long, limit=ma_low_3, qty=(strategy.equity / ma_low_3) * (1 / envelope_count))
if envelope_count > 3 and strategy.opentrades < 4
strategy.entry('long 4', strategy.long, limit=ma_low_4, qty=(strategy.equity / ma_low_4) * (1 / envelope_count))
if envelope_count > 4 and strategy.opentrades < 5
strategy.entry('long 5', strategy.long, limit=ma_low_5, qty=(strategy.equity / ma_low_5) * (1 / envelope_count))
if use_short
if envelope_count > 0 and strategy.opentrades < 1
strategy.entry('short 1', strategy.short, limit=ma_high_1, qty=(strategy.equity / ma_high_1) * (1 / envelope_count))
if envelope_count > 1 and strategy.opentrades < 2
strategy.entry('short 2', strategy.short, limit=ma_high_2, qty=(strategy.equity / ma_high_2) * (1 / envelope_count))
if envelope_count > 2 and strategy.opentrades < 3
strategy.entry('short 3', strategy.short, limit=ma_high_3, qty=(strategy.equity / ma_high_3) * (1 / envelope_count))
if envelope_count > 3 and strategy.opentrades < 4
strategy.entry('short 4', strategy.short, limit=ma_high_4, qty=(strategy.equity / ma_high_4) * (1 / envelope_count))
if envelope_count > 4 and strategy.opentrades < 5
strategy.entry('short 5', strategy.short, limit=ma_high_5, qty=(strategy.equity / ma_high_5) * (1 / envelope_count))
strategy.exit('close', limit=ma_base)
// ---------------------------------------------
// ------------------ PLOT ---------------------
ma_base_plot = plot(ma_base, title = "Base MA", color = color.orange, linewidth = 3, offset = 1)
ma_high_1_plot = plot(ma_high_1, title = "MA high 1", color = color.red, offset = 1)
ma_high_2_plot = plot(ma_high_2, title = "MA high 2", color = color.red, offset = 1)
ma_high_3_plot = plot(ma_high_3, title = "MA high 3", color = color.red, offset = 1)
ma_high_4_plot = plot(ma_high_4, title = "MA high 4", color = color.red, offset = 1)
ma_high_5_plot = plot(ma_high_5, title = "MA high 5", color = color.red, offset = 1)
ma_low_1_plot = plot(ma_low_1, title = "MA low 1", color = color.green, offset = 1)
ma_low_2_plot = plot(ma_low_2, title = "MA low 2", color = color.green, offset = 1)
ma_low_3_plot = plot(ma_low_3, title = "MA low 3", color = color.green, offset = 1)
ma_low_4_plot = plot(ma_low_4, title = "MA low 4", color = color.green, offset = 1)
ma_low_5_plot = plot(ma_low_5, title = "MA low 5", color = color.green, offset = 1)