Strategi perdagangan adaptif yang menggabungkan pembalikan tren dinamis dan indikator stokastik

ZigZag ATR SMA STOCH TP/SL
Tanggal Pembuatan: 2025-02-21 13:37:41 Akhirnya memodifikasi: 2025-02-27 17:00:50
menyalin: 1 Jumlah klik: 370
2
fokus pada
319
Pengikut

Strategi perdagangan adaptif yang menggabungkan pembalikan tren dinamis dan indikator stokastik Strategi perdagangan adaptif yang menggabungkan pembalikan tren dinamis dan indikator stokastik

Ringkasan

Strategi ini adalah sistem perdagangan yang beradaptasi sendiri dengan kombinasi reversal persentase ZigZag dan indikator acak. Ini mengidentifikasi titik-titik reversal yang penting dengan menghitung pergerakan pasar secara dinamis, dan menggabungkan sinyal acak dengan sinyal overbought dan oversold untuk menentukan waktu perdagangan. Strategi ini mengintegrasikan mekanisme stop loss otomatis yang dapat mengelola risiko secara efektif.

Prinsip Strategi

Inti dari strategi ini adalah untuk secara dinamis melacak tren pasar melalui metode reversal persentase. Hal ini memungkinkan pengguna untuk memilih untuk secara manual mengatur persentase reversal atau ATR yang didasarkan pada periode yang berbeda (dari 5 hingga 250 hari).

Keunggulan Strategis

  1. Menggunakan metode perhitungan terbalik yang beradaptasi secara dinamis, dapat beradaptasi lebih baik dengan berbagai kondisi pasar
  2. Kombinasi dengan trend reversal dan indikator momentum, memberikan sinyal perdagangan yang lebih andal
  3. Sistem Stop Loss Built-in untuk Membantu Trader Mengelola Risiko Secara Otomatis
  4. Pengaturan parameter yang fleksibel memungkinkan trader untuk mengoptimalkan sesuai dengan gaya perdagangan individu
  5. Pemandangan sinyal perdagangan visual untuk analisis dan pengambilan keputusan

Risiko Strategis

  1. Di pasar yang bergejolak, sinyal-sinyal palsu bisa sering muncul.
  2. Pilihan siklus ATR mempengaruhi kinerja strategi
  3. Stop loss tetap mungkin tidak cocok untuk semua kondisi pasar
  4. Indikator acak mungkin tertinggal di bawah kondisi pasar tertentu
  5. Parameter yang perlu diatur secara masuk akal untuk menghindari overtrading

Arah optimasi strategi

  1. Memperkenalkan analisis multi-frame waktu untuk meningkatkan keandalan sinyal
  2. Dinamika penyesuaian level stop loss untuk lebih beradaptasi dengan pergerakan pasar
  3. Menambahkan indikator volume transaksi sebagai sinyal konfirmasi
  4. Mengembangkan parameter indikator acak yang disesuaikan
  5. Peningkatan intensitas tren Filter mengurangi sinyal palsu

Meringkaskan

Ini adalah strategi perdagangan modern yang menggabungkan alat klasik analisis teknis. Dengan mengintegrasikan ZigZag reversal, indikator acak, dan manajemen risiko bersama-sama, ini memberikan pedagang dengan sistem perdagangan yang komprehensif. Strategi ini sangat dapat disesuaikan untuk digunakan oleh pedagang dengan preferensi risiko yang berbeda.

Kode Sumber Strategi
/*backtest
start: 2024-06-04 00:00:00
end: 2025-02-19 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

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

// ZigZag Settings
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
    var bool _is_direction_up = na
    var float _htrack = na
    var float _ltrack = na
    var float _pivot = na
    float _reverse_range = 0.0
    var int _real_pivot_time = na
    var int _htime = na
    var int _ltime = na
    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

            _reverse_line := _htrack - _reverse_range
            
            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
                
            _reverse_line := _ltrack + _reverse_range
            
            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)

// Reversal line
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 Settings
K_length = input.int(9, title="Stochastic K Length", minval=1)  // User input
K_smoothing = input.int(3, title="Stochastic K Smoothing", minval=1)  // User input
stochK = ta.sma(ta.stoch(close, high, low, K_length), K_smoothing)

// User Input: Take Profit and Stop Loss Levels
stop_loss_pips = input.int(100, title="Stop Loss (pips)", minval=1)  // Stop Loss
take_profit_pips = input.int(300, title="Take Profit (pips)", minval=1)  // Take Profit

// Calculating levels
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

// Buy and Sell Conditions
buy_signal = close > static_reverse_line and stochK < 30  // K < 30 condition
sell_signal = close < static_reverse_line and stochK > 70  // K > 70 condition

if buy_signal
    strategy.entry("Buy", strategy.long)
    strategy.exit("TP/SL", "Buy", stop=long_stop_loss, limit=long_take_profit)

if sell_signal
    strategy.entry("Sell", strategy.short)
    strategy.exit("TP/SL", "Sell", stop=short_stop_loss, limit=short_take_profit)

// Signal Visualization
plotshape(series=buy_signal, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal", text="BUY", textcolor=color.white)
plotshape(series=sell_signal, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal", text="SELL", textcolor=color.white)