Strategi perdagangan penyesuaian yang menggabungkan pembalikan arah aliran dinamik dan penunjuk stokastik

ZigZag ATR SMA STOCH TP/SL
Tarikh penciptaan: 2025-02-21 13:37:41 Akhirnya diubah suai: 2025-02-27 17:00:50
Salin: 1 Bilangan klik: 370
2
fokus pada
319
Pengikut

Strategi perdagangan penyesuaian yang menggabungkan pembalikan arah aliran dinamik dan penunjuk stokastik Strategi perdagangan penyesuaian yang menggabungkan pembalikan arah aliran dinamik dan penunjuk stokastik

Gambaran keseluruhan

Strategi ini adalah sistem perdagangan yang menyesuaikan diri yang menggabungkan peratusan ZigZag reversal dan penunjuk rawak. Ia mengenal pasti titik-titik reversal yang penting melalui pergerakan pasaran yang dikira secara dinamik, dan digabungkan dengan isyarat rawak untuk menentukan masa perdagangan. Strategi ini mengintegrasikan mekanisme stop loss automatik yang dapat menguruskan risiko dengan berkesan.

Prinsip Strategi

Inti strategi ini adalah untuk mengesan trend pasaran secara dinamik melalui kaedah reversal peratusan. Ia membolehkan pengguna memilih untuk menetapkan peratusan reversal secara manual atau mengira ATR secara dinamik berdasarkan kitaran yang berbeza ((5-250 hari). Ia menghasilkan banyak isyarat apabila harga menembusi garis reversal dan nilai K penunjuk rawak adalah di bawah 30; ia menghasilkan isyarat kosong apabila harga menembusi garis reversal dan nilai K adalah di atas 70. Sistem secara automatik menetapkan stop loss untuk melindungi keuntungan dan mengawal risiko.

Kelebihan Strategik

  1. Menggunakan kaedah pengiraan balik yang beradaptasi secara dinamik untuk menyesuaikan diri dengan keadaan pasaran yang berbeza
  2. Gabungan pengalihan trend dan penunjuk momentum untuk memberikan isyarat perdagangan yang lebih dipercayai
  3. Sistem Stop Loss terbina dalam untuk membantu peniaga menguruskan risiko secara automatik
  4. Tetapan parameter yang fleksibel membolehkan peniaga untuk mengoptimumkan mengikut gaya perdagangan individu
  5. Tanda-tanda perdagangan visual untuk analisis dan keputusan

Risiko Strategik

  1. Sinyal palsu yang sering berlaku dalam pasaran yang bergolak
  2. Pilihan kitaran ATR mempengaruhi prestasi strategi
  3. Stop loss tetap mungkin tidak sesuai untuk semua keadaan pasaran
  4. Indeks rawak mungkin tertinggal dalam keadaan pasaran tertentu
  5. Perlu menetapkan parameter yang munasabah untuk mengelakkan perdagangan berlebihan

Arah pengoptimuman strategi

  1. Pengenalan analisis pelbagai kerangka masa untuk meningkatkan kebolehpercayaan isyarat
  2. Dinamika penyesuaian tahap stop loss untuk menyesuaikan diri dengan turun naik pasaran
  3. Tambah indikator jumlah transaksi sebagai isyarat pengesahan
  4. Membangunkan parameter penunjuk rawak yang menyesuaikan diri
  5. Meningkatkan intensiti penapis trend mengurangkan isyarat palsu

ringkaskan

Ini adalah strategi perdagangan moden yang menggabungkan alat klasik analisis teknikal. Dengan mengintegrasikan ZigZag reversal, indikator rawak dan pengurusan risiko bersama-sama, ia menyediakan pedagang dengan sistem perdagangan yang komprehensif. Strategi ini sangat disesuaikan untuk digunakan oleh peniaga dengan pilihan risiko yang berbeza.

Kod 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)