의도적 역전 봉투 평균 전략


생성 날짜: 2023-12-04 16:12:39 마지막으로 수정됨: 2023-12-04 16:12:39
복사: 0 클릭수: 759
avatar of ChaoZhang ChaoZhang
1
집중하다
1619
수행원

의도적 역전 봉투 평균 전략

개요

의도 반전 거래망 평균 전략은 이동 평균선을 기반으로 하는 의도 반전 거래 전략이다. 이 전략은 쌍 지수 이동 평균선을 기본으로 계산하고, 그 위에 아래 각각 여러 개의 거래망 대역을 추가한다. 가격이 거래망 대역을 접촉할 때, 방향에 따라 상장을 하거나 공백을 한다. 가격이 평균선으로 돌아왔을 때, 평점으로 빠져 나간다.

전략 원칙

이 전략은 이진 지수 이동 평균 (DEMA) 을 기본 지표로 사용한다. 이진 지수 이동 평균은 가격 변화에 민감한 이동 평균이다. 그 기초에 따라, 전략은 각각 상단과 하단 양쪽에 여러 가격대를 추가하여 일률적인 포괄적 인 영역을 구성한다. 포괄적 인 영역의 범위는 사용자에 의해 설정되며, 각 가격대 사이의 특정 비율 간격에 따라한다.

가격 상승이 상단 포괄 띠에 접근할 때, 이 전략은 포지션을 상쇄합니다. 가격이 하락하면 상단 포괄 띠를 접촉할 때, 이 전략은 포지션을 더합니다. 새로운 가격 띠를 접촉할 때마다 포지션을 한 번 올립니다. 가격이 이동 평균선 근처로 돌아 왔을 때, 이 전략은 모든 포지션을 청산합니다.

이 전략은 포괄적 인 영역을 통해 가격의 과도한 변동성을 포착하고 반전이 오면 수익으로 탈퇴하여 낮은 가격의 거래 목표를 달성합니다. 이는 비트코인과 같은 디지털 화폐와 같은 명백한 평균 회귀 특성을 가진 시장 주기에는 적용됩니다.

전략적 이점

  • 이중 지수 이동 평균을 사용하여, 단기 가격 변화에 민감하고, 트렌드 전환을 빠르게 포착할 수 있다.
  • 평균선 근처에 포괄적 인 영역을 설정하여 가격 반전을 더 정확하게 잡을 수 있습니다.
  • 은 은 은 은 은
  • 수익을 올린 후 빠르게 방향을 바꾸고, 시장의 변화에 유연하게 대응한다.
  • 파라미터를 조정하여 자유롭게 최적화할 수 있다.

전략적 위험

  • 하지만, 이 시장은 수익을 창출할 수 없는 상황이다.
  • 잘못된 매개 변수 설정으로 인해 거래가 너무 빈번하게 이루어질 수 있습니다.
  • 비교적 안정적인 상황이 필요하고, 큰 변동이 있는 시장에는 적합하지 않다.
  • 포괄 영역의 범위가 너무 작아서 포지션을 열 수 없는 상황이 발생할 수 있습니다.

포괄망 영역을 적절히 넓히고 가격 변화를 유발하는 감수성을 높임으로써 위험을 줄일 수 있다. 이동 평균선 길이 변수를 다른 주기적 상황에 맞게 조정할 수 있다.

전략 최적화 방향

이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.

  1. 이동평균선 알고리즘을 최적화한다. 다양한 유형의 이동평균선 지표의 효과를 테스트할 수 있다.

  2. 평균선 길이 변수를 조정한다. 주기를 줄이는 것은 단기 가격 변화에 대한 포착을 향상시킬 수 있지만, 노이즈 트레이딩을 증가시킬 수도 있다.

  3. 패키지 네트워크 영역 파라미터를 최적화한다. 다양한 퍼센티지 설정을 테스트하여 최적의 파라미터 조합을 찾을 수 있다.

  4. 손해를 줄이는 전략을 추가한다. 이동 손해를 줄이거나 손해를 되돌리는 전략을 설정하여 단독 손실을 효과적으로 제어한다.

  5. 필터링 조건을 추가한다. 다른 지표 신호와 결합하여 비합리적인 상황에서 무효화되는 입장을 피한다.

요약하다

의도 반전 거래망 평균 가치 전략은 평평선 가격 통로를 구축하여 가격 반전 기회를 효과적으로 포착한다. 그것은 다양한 시장 환경에 적용하여 파라미터를 유연하게 조정할 수 있다. 이 전략은 거래 비용이 낮고 수익률이 높으며 권장되는 양적 거래 전략이다.

전략 소스 코드
/*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)