다기간 중심축 추세 돌파 전략

RSI PP R1 S1 EMA TF
생성 날짜: 2025-03-31 17:27:39 마지막으로 수정됨: 2025-03-31 17:27:39
복사: 4 클릭수: 332
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

다기간 중심축 추세 돌파 전략 다기간 중심축 추세 돌파 전략

개요

이 전략은 다주기 중축과 상대적으로 약한 지수 ((RSI)) 에 기반한 동적 추세 돌파 거래 전략이다. 주경계 레벨의 가격 지지점과 압박점을 RSI 지표와 결합하여, 이 전략은 금융 시장의 추세적 기회를 포착하는 동시에 정교한 포지션 관리 및 위험 제어 장치를 제공하는 것을 목표로 한다.

전략 원칙

전략의 핵심은 다음과 같은 핵심 단계입니다.

  1. 다주기 가격의 중앙 계산:
  • 전 K 선의 종전 가격, 최고 가격 및 최저 가격을 기준으로 결정적인 지지부진의 압력을 계산한다.
  • 전형적인 지지점 (S1, S2, S3) 과 압력점 (R1, R2, R3) 을 계산한다.
  • 동적 인 요소를 통해 지원 압력 지점의 감수성을 조정
  1. RSI 동적 최적화:
  • 21주기 RSI를 이용한 계산
  • 지수 이동 평균 (EMA) 을 도입하여 RSI를 평형화합니다.
  • RSI 원시값과 EMA 평형값을 결합한 복합 지표를 구성
  1. 거래 신호 생성:
  • 복수 입학: 복합 지표에 0을 입는
  • R3 압력위치를 넘어선 최고 가격
  • 공허 입점: 최저가격이 S3 지지를 넘어갔다
  • 공허 출장: 복합 지표 아래 0을 입었다

전략적 이점

  1. 다주기적 시각: 순환선 수준의 데이터를 도입하여 단기 시장 소음을 효과적으로 필터링합니다.
  2. 유연한 포지션 관리: 단계적 차단 메커니즘, 단일 거래 위험을 낮추기
  3. 동적 지표 구성: RSI와 EMA를 결합하여 신호의 정확성을 향상시킵니다.
  4. 대칭적인 다중 공간 거래 논리: 다양한 시장 환경에 대한 유연한 전략을 제공합니다.
  5. 위험 제어: 내장된 중지 및 단계적 차단 메커니즘

전략적 위험

  1. 지표 지각: RSI와 가격 중심에 지각 문제가 있을 수 있다.
  2. 매개 변수 민감성: 정책 성능은 매개 변수 선택에 크게 의존한다
  3. 거래 비용의 영향: 자주 거래하면 높은 수수료가 발생할 수 있습니다.
  4. 극한 시장 상황: 역전과 급격한 변동으로 인해 전략이 실패할 수 있습니다.

전략 최적화 방향

  1. 매개변수 선택을 최적화하기 위한 머신 러닝 알고리즘 소개
  2. 거래량과 변동율 필터링을 증가시키는 장치
  3. 더 많은 기술 지표와 함께 신호 검증을 수행합니다.
  4. 역동적 정지 및 정지 알고리즘 개발
  5. 더 복잡한 포지션 규모 관리 모델을 도입

요약하다

이 전략은 여러 주기, 여러 지표의 종합적인 분석을 통해 비교적 안정적인 트렌드 브레이크 트레이딩 방법을 구축한다. 그것의 핵심 장점은 시장의 트렌드를 동적으로 포착하고 정교한 위험 관리를 하는 것이다. 미래의 최적화 공간은 알고리즘 지능화와 위험 제어 모델의 융합을 포함한다.

전략 소스 코드
/*backtest
start: 2024-03-31 00:00:00
end: 2025-03-29 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © yuxishejiang

//@version=6
//@version=5
strategy(title="BTC中轴策略优化-V2", overlay=true, pyramiding=1, initial_capital=5000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, calc_on_order_fills=false, slippage=0, commission_type=strategy.commission.percent, commission_value=0.075)

// 核心参数
strat_dir_input = input.string(title="Strategy Direction", defval="long", options=["long", "short"])
strat_dir_value = strat_dir_input == "long" ? strategy.direction.long : strat_dir_input == "short" ? strategy.direction.short : strategy.direction.all
strategy.risk.allow_entry_in(strat_dir_value)

// 指标计算
higherTF = input.timeframe("W", "Higher Timeframe")
pc = request.security(syminfo.tickerid, higherTF, close[1], barmerge.gaps_off, barmerge.lookahead_on)
ph = request.security(syminfo.tickerid, higherTF, high[1], barmerge.gaps_off, barmerge.lookahead_on)
pl = request.security(syminfo.tickerid, higherTF, low[1], barmerge.gaps_off, barmerge.lookahead_on)

PP = (ph + pl + pc) / 3
R1 = PP + (PP - pl)
S1 = PP - (ph - PP)
R2 = PP + (ph - pl)
S2 = PP - (ph - pl)
factor = input.int(2, "Factor")
R3 = ph + factor * (PP - pl)
S3 = pl - 2 * (ph - PP)

length = input.int(21, "RSI Length")
p = close
vrsi = ta.rsi(p, length)
pp_ema = ta.ema(vrsi, length)
d = (vrsi - pp_ema) * 5
cc = (vrsi + d + pp_ema) / 2

// 仓位管理变量
var float entry_qty = na

// 交易执行逻辑
longEntry = ta.crossover(cc, 0)
longExit = ta.crossover(high, R3)  // 使用实时最高价判断

shortEntry = ta.crossunder(low, S3)  // 改为使用S3支撑位
shortExit = ta.crossunder(cc, 0)     // 同步修改为下穿

if (longEntry)
    strategy.entry("Long", strategy.long)
    entry_qty := strategy.position_size

if (strategy.position_size > 0 and longExit)
    strategy.close("Long", comment="5M背离离场")

if (shortEntry)
    strategy.entry("Short", strategy.short)
    entry_qty := strategy.position_size

if (strategy.position_size < 0 and shortExit)
    strategy.close("Short", comment="空头离场")

// 止盈止损模块
per(pcnt) =>
    strategy.position_size != 0 ? math.round(math.abs(pcnt/100 * strategy.position_avg_price / syminfo.mintick)) : na

stoploss = input.float(15, "Stop Loss (%)", minval=0.01)
tp1 = input.float(3, "Take Profit 1 (%)", minval=0.01)
tp2 = input.float(5, "Take Profit 2 (%)", minval=0.01)
tp3 = input.float(7, "Take Profit 3 (%)", minval=0.01)
tp4 = input.float(10, "Take Profit 4 (%)", minval=0.01)

// 分阶段平仓逻辑
if strategy.position_size != 0
    qty_total = math.abs(entry_qty)
    qty1 = math.floor(qty_total * 0.25)
    qty2 = math.floor(qty_total * 0.25)
    qty3 = math.floor(qty_total * 0.25)
    qty4 = qty_total - (qty1 + qty2 + qty3)
    
    if strategy.position_size > 0
        strategy.exit("x1", qty=qty1, profit=per(tp1), loss=per(stoploss))
        strategy.exit("x2", qty=qty2, profit=per(tp2), loss=per(stoploss))
        strategy.exit("x3", qty=qty3, profit=per(tp3), loss=per(stoploss))
        strategy.exit("x4", qty=qty4, profit=per(tp4), loss=per(stoploss))
    else
        strategy.exit("x1", qty=qty1, profit=per(tp1), loss=per(stoploss))
        strategy.exit("x2", qty=qty2, profit=per(tp2), loss=per(stoploss))
        strategy.exit("x3", qty=qty3, profit=per(tp3), loss=per(stoploss))
        strategy.exit("x4", qty=qty4, profit=per(tp4), loss=per(stoploss))

// 可视化部分保持不变
// 多头入场可视化
if (longEntry)
    label.new(bar_index, low, "多头入场", color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small)

// 多头离场可视化
if (strategy.position_size > 0 and longExit)
    label.new(bar_index, high, "多头离场", color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small)

// 空头入场可视化
if (shortEntry)
    label.new(bar_index, high, "空头入场", color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small)

// 空头离场可视化
if (strategy.position_size < 0 and shortExit)
    label.new(bar_index, low, "空头离场", color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small)