확률적 지표 거래 전략과 결합된 다중 레벨 지그재그 백분율 수정

ZZ ATR RSI STOCH SMA
생성 날짜: 2025-02-21 11:18:39 마지막으로 수정됨: 2025-02-21 11:18:39
복사: 0 클릭수: 477
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

확률적 지표 거래 전략과 결합된 다중 레벨 지그재그 백분율 수정 확률적 지표 거래 전략과 결합된 다중 레벨 지그재그 백분율 수정

개요

이 전략은 ZigZag 퍼센트 회수와 무작위 지표 (Stochastic) 를 결합한 거래 시스템이다. 전략은 동적으로 조정되는 ZigZag 지표를 통해 시장 추세의 중요한 전환점을 식별하고, 무작위 지표의 오버 바이 오버 셀 신호와 결합하여 현장 진입 시기를 최적화한다. 시스템은 또한 위험을 관리하기 위해 중지 및 중지 메커니즘을 통합한다.

전략 원칙

전략의 핵심 논리는 다음과 같은 핵심 구성 요소를 기반으로 합니다.

  1. 동적 ZigZag 지표 - 수동 설정 또는 다른 주기 ((5-250) 에 기반한 ATR 동적 조정 철회 비율을 지원
  2. 무작위 지표 필터링 - 9주기 K값과 3주기 매끄러운 무작위 지표
  3. 거래 신호 생성:
    • 구매 조건: 가격이 역전선을 뚫고 무작위 지표 K 값이 20 이하
    • 판매 조건: 가격이 역전선 아래로 떨어지고 무작위 지표 K 값이 80 이상
  4. 리스크 관리 - 고정 점수의 스톱로스 (100점) 와 스톱 (300점)

전략적 이점

  1. 적응성 - ATR을 통해 전략이 다양한 시장 환경에 더 잘 적응하도록 동적으로 조정
  2. 다중 확인 - 트렌드 및 동력 지표와 결합하여 잘못된 신호를 줄입니다.
  3. 위험은 통제할 수 있습니다.
  4. 신호 명확함 - 거래 신호가 명확하고 실행하기 쉽다
  5. 매개 변수 유연성 - 여러 매개 변수 사용자 정의를 지원하여 최적화

전략적 위험

  1. 주파수 시장 위험 - 주파수 시장의 주파수 상황에서는 자주 스톱 손실을 유발할 수 있습니다.
  2. 미끄러지 위험 - 빠른 시점에 큰 미끄러짐이 발생할 수 있습니다.
  3. 고정 스톱 리스크 - 고정 점 스톱은 모든 시장 환경에 적합하지 않을 수 있습니다.
  4. 가짜 침입 위험 - 회수 영역에서 가짜 침입 신호를 생성할 수 있습니다.
  5. 매개 변수 민감성 - 매개 변수 선택이 전략 성능에 큰 영향을 미칩니다.

전략 최적화 방향

  1. 다이내믹 스톱로스 최적화 - ATR 또는 변동률을 사용하여 스톱로스를 다이내믹하게 조정하는 것을 고려하십시오.
  2. 시장 환경 필터링 - 트렌드 강도 지표를 추가하여 강한 트렌드에서만 포지션을 열 수 있습니다.
  3. 신호 확인 강화 - 추가 수량 확인을 고려할 수 있다
  4. 진입 시점 최적화 - 가격 모형 식별을 도입하여 진입 정확도를 향상시킵니다.
  5. 포지션 관리 - 변동률에 따라 포지션 규모를 동적으로 조정

요약하다

이 전략은 ZigZag와 무작위 지표를 결합하여 비교적 완전한 거래 시스템을 구축한다. 전략의 주요 특징은 신호 명확성, 위험 제어 가능하지만 실제 시장 상황에 따라 변수를 최적화해야 한다. 실물 거래 전에 충분한 피드백을 수행하고 시장 경험과 함께 전략에 대한 지속적인 개선을 권장한다.

전략 소스 코드
/*backtest
start: 2025-02-18 14:00:00
end: 2025-02-20 00:00:00
period: 5m
basePeriod: 5m
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/

//@version=5
strategy("[RS]ZigZag Percent Reversal with Stochastic Strategy", overlay=true)

//  ||---}---------------------------------------------------------------------||

//  |--------------------------------------------------------------------------||
//  |   ZigZag:                                                                ||
//  |--------------------------------------------------------------------------||
//  |{
string percent_method = input.string(
         defval="MANUAL", 
         title="Method to use for the zigzag reversal range:", 
         options=[
             "MANUAL", 
             "ATR005 * X", "ATR010 * X", "ATR020 * X", "ATR050 * X", "ATR100 * X", "ATR250 * X"
             ]
         )

var float percent = input.float(
         defval=0.25, 
         title="Percent of last pivot price for zigzag reversal:", 
         minval=0.0, maxval=99.0
         ) / 100

float percent_multiplier = input.float(
         defval=1.0, 
         title="Multiplier to apply to ATR if applicable:"
         )
if percent_method == "ATR005 * X"
    percent := ta.atr(5) / open * percent_multiplier
if percent_method == "ATR010 * X"
    percent := ta.atr(10) / open * percent_multiplier
if percent_method == "ATR020 * X"
    percent := ta.atr(20) / open * percent_multiplier
if percent_method == "ATR050 * X"
    percent := ta.atr(50) / open * percent_multiplier
if percent_method == "ATR100 * X"
    percent := ta.atr(100) / open * percent_multiplier
if percent_method == "ATR250 * X"
    percent := ta.atr(250) / open * percent_multiplier

//  ||-------------------------------------------------------------------------||
//  ||  zigzag function:
//  ||-------------------------------------------------------------------------||
//  |{
f_zz(_percent)=>


    //  direction after last pivot
    var bool _is_direction_up = na
    //  track highest price since last lower pivot
    var float _htrack = na
    //  track lowest price since last higher pivot
    var float _ltrack = na
    //  zigzag variable for plotting
    var float _pivot = na
    //  range needed for reaching reversal threshold
    float _reverse_range = 0.0
    //  real pivot time
    var int _real_pivot_time = na
    var int _htime = na
    var int _ltime = na
    //  reverse line
    var float _reverse_line = na
    
    if bar_index >= 1
        
        if na(_is_direction_up)
            _is_direction_up := true
        
        _reverse_range := nz(_pivot[1]) * _percent
        
        if _is_direction_up
            _ltrack := na
            _ltime := time
            
            if na(_htrack)
                if high > high[1]
                    _htrack := high
                    _htime := time
                else
                    _htrack := high[1]
                    _htime := time[1]
            else
                if high > _htrack
                    _htrack := high
                    _htime := time

            // Reversal line calculation based on the current candle's closing price
            _reverse_line := _htrack - _reverse_range
            
            // If close <= reversal line, mark pivot and reverse direction
            if close <= _reverse_line
                _pivot := _htrack
                _real_pivot_time := _htime
                _is_direction_up := false

        if not _is_direction_up
            _htrack := na
            _htime := na
            
            if na(_ltrack)
                if low < low[1]
                    _ltrack := low
                    _ltime := time
                else
                    _ltrack := low[1]
                    _ltime := time[1]
            else
                if low < _ltrack
                    _ltrack := low
                    _ltime := time
                
            // Reversal line calculation based on the current candle's closing price
            _reverse_line := _ltrack + _reverse_range
            
            // If close >= reversal line, mark pivot and reverse direction
            if close >= _reverse_line
                _pivot := _ltrack
                _real_pivot_time := _ltime
                _is_direction_up := true

    [_pivot, _is_direction_up, _reverse_line, _real_pivot_time]

[pivot, direction_up, reverse_line, pivot_time] = f_zz(percent)

// Çizim
// Sabit Reversal Line (fiyat seviyesinde sabit)
var float static_reverse_line = na
if (not na(reverse_line))
    static_reverse_line := reverse_line

plot(series=static_reverse_line, color=color.gray, style=plot.style_line, title="Reversal Line", trackprice=false)

//  ||-------------------------------------------------------------------------||
//  ||  Stochastic:                                                            ||
//  ||-------------------------------------------------------------------------||
//  |{
K_length = 9
K_smoothing = 3

// Stochastic %K hesaplama
stochK = ta.sma(ta.stoch(close, high, low, K_length), K_smoothing)

//  ||-------------------------------------------------------------------------||
//  ||  Custom Buy/Sell Signals:
//  ||-------------------------------------------------------------------------||
//  |{
// Buy sinyali: Fiyat reversal line'ının üstünde ve stochastic K değeri 20'nin altında ise
buy_signal = close > static_reverse_line and stochK < 20

// Sell sinyali: Fiyat reversal line'ının altındaysa ve stochastic K değeri 80'in üstünde ise
sell_signal = close < static_reverse_line and stochK > 80

// Alım ve satım sinyali için strateji girişlerini ekle
long_condition = buy_signal
short_condition = sell_signal

// **Burada Stop Loss ve Take Profit değerleri ayarlandı**
stop_loss_pips = 100  // Stop Loss 10 pip
take_profit_pips = 300  // Take Profit 30 pip

// Stop Loss ve Take Profit seviyeleri hesaplanıyor
long_stop_loss = close - stop_loss_pips * syminfo.mintick
long_take_profit = close + take_profit_pips * syminfo.mintick
short_stop_loss = close + stop_loss_pips * syminfo.mintick
short_take_profit = close - take_profit_pips * syminfo.mintick

// Long stratejisi: Alım sinyali ve stop loss/take profit seviyeleri ile
if long_condition
    strategy.entry("Buy", strategy.long, stop=long_stop_loss, limit=long_take_profit)
    strategy.exit("Take Profit / Stop Loss", from_entry="Buy", stop=long_stop_loss, limit=long_take_profit)
    // Webhook ile alım bildirimi gönder
    alert("Buy Signal Triggered!", alert.freq_once_per_bar)

// Short stratejisi: Satım sinyali ve stop loss/take profit seviyeleri ile
if short_condition
    strategy.entry("Sell", strategy.short, stop=short_stop_loss, limit=short_take_profit)
    strategy.exit("Take Profit / Stop Loss", from_entry="Sell", stop=short_stop_loss, limit=short_take_profit)
    // Webhook ile satım bildirimi gönder
    alert("Sell Signal Triggered!", alert.freq_once_per_bar)

// Alım sinyali gösterimi
plotshape(series=buy_signal, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal", text="BUY", textcolor=color.white)
// Satım sinyali gösterimi
plotshape(series=sell_signal, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal", text="SELL", textcolor=color.white)