다중 시간대 피벗 반전 전략 및 백분율 동적 손절매 및 손절매 시스템

MTF Pivot TP SL
생성 날짜: 2025-02-08 15:04:47 마지막으로 수정됨: 2025-02-08 15:04:47
복사: 1 클릭수: 412
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

다중 시간대 피벗 반전 전략 및 백분율 동적 손절매 및 손절매 시스템

개요

이 전략은 다중 시간 주기의 분석을 기반으로 한 고급 거래 시스템으로, 더 높은 시간 주기의 핵심 축 지점을 식별하여 시장 역전 기회를 포착합니다. 이 전략은 동적 비율의 스톱 스톱 손실 메커니즘을 결합하여 위험을 효과적으로 제어하면서 안정적인 수익을 추구합니다. 이 시스템은 또한 거래 간격 제어 및 시간 범위 테스트 기능을 포함하여 실제 거래 디스크 환경에 적합합니다.

전략 원칙

전략의 핵심 논리는 다음과 같은 핵심 요소에 기초합니다.

  1. 더 높은 시간 주기 (기본 60 분) 에서 축점 분석을 사용하여 leftBars와 rightBars 파라미터로 축 형성 조건을 정의합니다.
  2. 거래의 위험과 수익 목표를 관리하기 위해 동적으로 계산된 Stop Loss 비율을 사용합니다.
  3. 다중 시간 주기의 분석은 시장 구조에 대한 더 신뢰할 수 있는 판단을 제공하며, 잘못된 신호를 감소시킵니다.
  4. 거래 간격 제어 메커니즘 (기본 1440 분) 은 과도한 거래를 방지하고 신호 품질을 향상시킵니다.
  5. 시간 범위 테스트 기능은 특정 역사 영역에서 전략 검증을 허용한다.

전략적 이점

  1. 다중 시간 주기의 분석은 더 포괄적인 시장 관점을 제공하여 가짜 돌파구를 줄여줍니다.
  2. 동적 비율 스톱 스톱 손실은 다양한 시장 환경에 적응하여 전략의 안정성을 향상시킵니다.
  3. 거래 간격 통제는 과도한 거래를 방지하고 거래 비용을 절감하는 데 효과적입니다.
  4. 시간 범위 테스트 기능은 전략 최적화 및 역사 성과 분석을 용이하게 합니다.
  5. 코드 구조가 명확하고, 유지보수 및 수정하기 쉽다.

전략적 위험

  1. 고정된 비율의 정지 손실은 매우 불안정한 시장에서 충분히 유연하지 않을 수 있습니다.
  2. 더 긴 거래 간격은 일부 유효한 신호를 놓칠 수 있다.
  3. 엑소포트 식별의 지연으로 인해 입학 시기가 좋지 않을 수 있습니다.
  4. 위탁 시장에서 너무 많은 가짜 신호가 발생할 수 있습니다.

전략 최적화 방향

  1. 자동 적응 변동률 지표를 도입하여 스톱 손실 비율을 동적으로 조정합니다.
  2. 시장 환경 필터를 추가하여 트렌드 강도에 따라 전략 매개 변수를 조정합니다.
  3. 입구 신호의 신뢰성을 높이기 위해 교통량 분석을 통합합니다.
  4. 시장 변동에 따른 동적 거래 간격 조정.
  5. 이동식 손해배상장치 보호에 가입하는 것은 매우 유익한 일입니다.

요약하다

이 전략은 다중 시간 주기의 분석과 동적 위험 관리를 통해 완전한 거래 시스템 프레임 워크를 제공합니다. 일부 최적화가 필요한 곳이 있지만, 전체적인 설계 아이디어는 합리적이며 좋은 실용성을 가지고 있습니다. 제안된 최적화 방향을 통해 전략은 다양한 시장 환경에서 더 안정적인 성능을 얻을 수 있습니다.

전략 소스 코드
/*backtest
start: 2025-01-01 00:00:00
end: 2025-01-31 23:59:59
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Pivot Reversal Strategy with MTF TP & SL in Percent and Test Range", overlay=true)

// Входные параметры
higher_tf = input.timeframe("60", title="Higher Timeframe for Breakout Check")  // Таймфрейм для анализа пробоя
leftBars = input(4, title="Left Bars")
rightBars = input(2, title="Right Bars")
TP_percent = input.float(1.0, title="Take Profit (%)", minval=0.1, step=0.1)   // Тейк-профит в процентах
SL_percent = input.float(0.5, title="Stop Loss (%)", minval=0.1, step=0.1)    // Стоп-лосс в процентах
trade_interval = input.int(1440, title="Minimum Time Between Trades (Minutes)") // Интервал между сделками

// Диапазон тестирования (используем UNIX timestamps)
start_date = input(timestamp("2023-01-01 00:00 +0000"), title="Start Date")  // Стартовая дата для тестирования
end_date = input(timestamp("2023-12-31 23:59 +0000"), title="End Date")    // Конечная дата для тестирования

// Проверка, попадает ли текущая свеча в указанный диапазон времени
in_test_range = true

// Определение пивотов на более крупном таймфрейме
higher_tf_high = request.security(syminfo.tickerid, higher_tf, ta.pivothigh(leftBars, rightBars))
higher_tf_low = request.security(syminfo.tickerid, higher_tf, ta.pivotlow(leftBars, rightBars))

// Последнее время открытия сделки
var float last_trade_time = na

// Логика для лонга
swh_cond = not na(higher_tf_high)
hprice = 0.0
hprice := swh_cond ? higher_tf_high : hprice[1]
le = false
le := swh_cond ? true : (le[1] and high > hprice ? false : le[1])

if le and in_test_range and (na(last_trade_time) or (time - last_trade_time >= trade_interval * 60 * 1000))
    tp_price_long = hprice * (1 + TP_percent / 100)  // Тейк-профит в процентах
    sl_price_long = hprice * (1 - SL_percent / 100)  // Стоп-лосс в процентах
    strategy.entry("PivRevLE", strategy.long, stop=hprice + syminfo.mintick)
    strategy.exit("TP_SL_Long", from_entry="PivRevLE", 
                  limit=tp_price_long, 
                  stop=sl_price_long)
    last_trade_time := time

// Логика для шорта
swl_cond = not na(higher_tf_low)
lprice = 0.0
lprice := swl_cond ? higher_tf_low : lprice[1]
se = false
se := swl_cond ? true : (se[1] and low < lprice ? false : se[1])

if se and in_test_range and (na(last_trade_time) or (time - last_trade_time >= trade_interval * 60 * 1000))
    tp_price_short = lprice * (1 - TP_percent / 100)  // Тейк-профит в процентах
    sl_price_short = lprice * (1 + SL_percent / 100)  // Стоп-лосс в процентах
    strategy.entry("PivRevSE", strategy.short, stop=lprice - syminfo.mintick)
    strategy.exit("TP_SL_Short", from_entry="PivRevSE", 
                  limit=tp_price_short, 
                  stop=sl_price_short)
    last_trade_time := time

// Для наглядности отображаем уровни на графике
plot(le and in_test_range ? hprice * (1 + TP_percent / 100) : na, color=color.green, title="Long Take Profit")
plot(le and in_test_range ? hprice * (1 - SL_percent / 100) : na, color=color.red, title="Long Stop Loss")
plot(se and in_test_range ? lprice * (1 - TP_percent / 100) : na, color=color.green, title="Short Take Profit")
plot(se and in_test_range ? lprice * (1 + SL_percent / 100) : na, color=color.red, title="Short Stop Loss")