Strategi perdagangan trend pintar kejutan rawak berbilang parameter

STOCH EMA SMA RR SL TP POP
Tarikh penciptaan: 2025-01-06 16:09:58 Akhirnya diubah suai: 2025-01-06 16:09:58
Salin: 1 Bilangan klik: 374
1
fokus pada
1617
Pengikut

Strategi perdagangan trend pintar kejutan rawak berbilang parameter

Gambaran keseluruhan

Strategi ini adalah sistem perdagangan pintar berdasarkan Stochastic Oscillator. Ia menggabungkan pengecaman arah aliran dinamik, pengesahan isyarat berbilang dan fungsi pengurusan risiko pintar, dan secara automatik boleh mengenal pasti keadaan pasaran terlebih beli dan terlebih jual serta membuat transaksi. Strategi ini memaparkan status pasaran secara visual melalui sistem pengekodan warna, menyepadukan purata bergerak berbilang tempoh (EMA) untuk pengesahan arah aliran dan menyediakan tetapan henti rugi dan ambil untung yang fleksibel.

Prinsip Strategi

Teras strategi adalah berdasarkan penyelarasan pengayun stokastik dan sistem purata bergerak berganda. Isyarat dagangan dijana apabila nilai K menembusi tahap terlebih beli atau terlebih jual pratetap (9315) atau tahap pertengahan (40). Sistem secara visual memaparkan status pasaran melalui perubahan warna (merah menunjukkan kemungkinan penurunan, hijau menunjukkan kemungkinan kenaikan, dan biru menunjukkan neutral). Ia juga menggabungkan purata pergerakan eksponen (EMA) 20, 50, 100 dan 200 tempoh untuk pengesahan arah aliran. Strategi ini juga termasuk sistem pengurusan risiko pintar yang menyokong tetapan nisbah pulangan risiko yang berbeza seperti 1:1, 1:4 dan 1:8.

Kelebihan Strategik

  1. Sistem isyarat jelas dan intuitif, dengan pengekodan warna untuk mengenal pasti status pasaran dengan cepat
  2. Mekanisme pengesahan isyarat berbilang untuk mengurangkan risiko isyarat palsu
  3. Sistem pengurusan risiko yang fleksibel, menyokong nisbah pulangan risiko yang disesuaikan
  4. Digabungkan dengan purata bergerak berbilang tempoh untuk memberikan pengesahan arah aliran
  5. Tetapan henti rugi dan ambil untung automatik untuk mengurangkan risiko operasi manual
  6. Struktur kod adalah jelas, mudah diselenggara dan dioptimumkan

Risiko Strategik

  1. Isyarat dagangan yang kerap mungkin dijana dalam pasaran yang tidak menentu
  2. Ambang terlebih beli dan terlebih jual tetap mungkin tidak sesuai dalam semua persekitaran pasaran
  3. Sistem purata bergerak mungkin ketinggalan dalam pasaran yang tidak menentu
  4. Ia adalah perlu untuk menetapkan stop loss yang munasabah untuk mengawal risiko Penyelesaian termasuk: menambah mekanisme penapisan isyarat, melaraskan ambang secara dinamik, mengoptimumkan parameter purata bergerak dan melaksanakan strategi henti rugi dengan tegas.

Arah pengoptimuman strategi

  1. Memperkenalkan sistem ambang penyesuaian untuk melaraskan tahap terlebih beli dan terlebih jual secara dinamik berdasarkan turun naik pasaran
  2. Tambah penunjuk kelantangan untuk mengesahkan isyarat
  3. Membangunkan mekanisme penapisan isyarat pintar untuk mengurangkan isyarat palsu
  4. Optimumkan parameter purata bergerak untuk meningkatkan ketepatan pertimbangan arah aliran
  5. Memperkenalkan algoritma pembelajaran mesin untuk mengoptimumkan pemilihan parameter
  6. Tambah mekanisme kawalan anjakan semula

ringkaskan

Strategi ini membina sistem perdagangan yang komprehensif dengan menggabungkan pengayun stokastik, sistem purata bergerak dan pengurusan risiko pintar. Reka bentuk strategi memfokuskan pada kepraktisan dan kebolehkendalian, dan sesuai untuk pedagang yang mempunyai keutamaan risiko yang berbeza. Melalui pengoptimuman dan penambahbaikan berterusan, strategi ini dijangka dapat mengekalkan prestasi yang stabil dalam persekitaran pasaran yang berbeza.

Kod sumber strategi
/*backtest
start: 2024-12-06 00:00:00
end: 2025-01-04 08:00:00
period: 4h
basePeriod: 4h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

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

//██████╗ ███████╗████████╗██████╗ ██╗   ██╗███████╗                             
//██╔══██╗██╔════╝╚══██╔══╝██╔══██╗██║   ██║██╔════╝                             
//██████╔╝█████╗     ██║   ██████╔╝██║   ██║███████╗                             
//██╔═══╝ ██╔══╝     ██║   ██╔══██╗██║   ██║╚════██║                             
//██║     ███████╗   ██║   ██║  ██║╚██████╔╝███████║                             
//╚═╝     ╚══════╝   ╚═╝   ╚═╝  ╚═╝ ╚═════╝ ╚══════╝                             
                                                                               
//██╗   ██╗ ██████╗ ██████╗ ███████╗███╗   ██╗██╗   ██╗███████╗                  
//██║   ██║██╔═══██╗██╔══██╗██╔════╝████╗  ██║██║   ██║██╔════╝                  
//██║   ██║██║   ██║██████╔╝█████╗  ██╔██╗ ██║██║   ██║███████╗                  
//╚██╗ ██╔╝██║   ██║██╔══██╗██╔══╝  ██║╚██╗██║██║   ██║╚════██║                  
// ╚████╔╝ ╚██████╔╝██║  ██║███████╗██║ ╚████║╚██████╔╝███████║                  
//  ╚═══╝   ╚═════╝ ╚═╝  ╚═╝╚══════╝╚═╝  ╚═══╝ ╚═════╝ ╚══════╝                  
                                                                               
//██████╗ ███████╗██████╗ ███████╗ ██████╗ ██████╗ ██╗███╗   ██╗██╗   ██╗███████╗
//██╔══██╗██╔════╝██╔══██╗██╔════╝██╔════╝ ██╔══██╗██║████╗  ██║██║   ██║██╔════╝
//██████╔╝█████╗  ██████╔╝█████╗  ██║  ███╗██████╔╝██║██╔██╗ ██║██║   ██║███████╗
//██╔═══╝ ██╔══╝  ██╔══██╗██╔══╝  ██║   ██║██╔══██╗██║██║╚██╗██║██║   ██║╚════██║
//██║     ███████╗██║  ██║███████╗╚██████╔╝██║  ██║██║██║ ╚████║╚██████╔╝███████║
//╚═╝     ╚══════╝╚═╝  ╚═╝╚══════╝ ╚═════╝ ╚═╝  ╚═╝╚═╝╚═╝  ╚═══╝ ╚═════╝ ╚══════╝

//@version=6
strategy("CM Stochastic POP Method 3", shorttitle="CM_Stochastic POP_M3", overlay=true)

// Stochastic Settings
length = input.int(14, "Stochastic Length", minval=1)
smoothK = input.int(5, "Smooth K", minval=1)

// Risk:Reward Settings
use_rr = input.bool(true, "Use Risk:Reward Ratio")
use_sl = input.bool(true, "Use Stop Loss")  // New input for Stop Loss toggle
rr_options = input.string("1:1", "Risk:Reward Ratio", options=["1:1", "1:4", "1:8"])
stop_percent = input.float(1.0, "Stop Loss (%)", minval=0.1, step=0.1)

// Convert selected R:R ratio to number
get_rr_multiplier(rr) =>
    switch rr
        "1:1" => 1.0
        "1:4" => 4.0
        "1:8" => 8.0
        => 1.0  // default case
rr_ratio = get_rr_multiplier(rr_options)

// Fixed Level Settings
upperLine = 93.0  // Fixed sell level
midLine = 40.0    // Buy/Sell level
lowerLine = 15.0  // Fixed buy level

// EMA Settings
ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema100 = ta.ema(close, 100)
ema200 = ta.ema(close, 200)

// Calculate Stochastic with smoothing
k = ta.sma(ta.stoch(close, high, low, length), smoothK)

// Dynamic color based on K value
kColor = k >= upperLine ? color.red :    // Above 93 -> Red
         k <= lowerLine ? color.green :   // Below 15 -> Green
         k <= midLine ? color.green :     // Below 40 -> Green
         color.blue                       // Between 40-93 -> Blue

// Buy Signals:
longCondition1 = ta.crossover(k, lowerLine)   // Cross above 15
longCondition2 = ta.crossover(k, midLine)     // Cross above 40

// Sell Signals:
shortCondition1 = ta.crossunder(k, upperLine) // Cross below 93
shortCondition2 = ta.crossunder(k, midLine)   // Cross below 40

calc_tp_sl(entry_price, is_long) =>
    sl_distance = entry_price * (stop_percent / 100)
    sl = is_long ? entry_price - sl_distance : entry_price + sl_distance
    tp_distance = sl_distance * rr_ratio
    tp = is_long ? entry_price + tp_distance : entry_price - tp_distance
    [sl, tp]

// Long entries
if (longCondition1)
    if (use_rr)
        [sl, tp] = calc_tp_sl(close, true)
        strategy.entry("Long_15", strategy.long)
        if (use_sl)
            strategy.exit("Exit_15", "Long_15", stop=sl, limit=tp)
        else
            strategy.exit("Exit_15", "Long_15", limit=tp)
    else
        strategy.entry("Long_15", strategy.long)

if (longCondition2)
    if (use_rr)
        [sl, tp] = calc_tp_sl(close, true)
        strategy.entry("Long_40", strategy.long)
        if (use_sl)
            strategy.exit("Exit_40", "Long_40", stop=sl, limit=tp)
        else
            strategy.exit("Exit_40", "Long_40", limit=tp)
    else
        strategy.entry("Long_40", strategy.long)

// Short entries
if (shortCondition1)
    if (use_rr)
        [sl, tp] = calc_tp_sl(close, false)
        strategy.entry("Short_93", strategy.short)
        if (use_sl)
            strategy.exit("Exit_93", "Short_93", stop=sl, limit=tp)
        else
            strategy.exit("Exit_93", "Short_93", limit=tp)
    else
        strategy.entry("Short_93", strategy.short)

if (shortCondition2)
    if (use_rr)
        [sl, tp] = calc_tp_sl(close, false)
        strategy.entry("Short_40", strategy.short)
        if (use_sl)
            strategy.exit("Exit_40", "Short_40", stop=sl, limit=tp)
        else
            strategy.exit("Exit_40", "Short_40", limit=tp)
    else
        strategy.entry("Short_40", strategy.short)

// Plot EMAs
plot(ema20, title="EMA 20", color=color.blue, linewidth=1, force_overlay = true)
plot(ema50, title="EMA 50", color=color.yellow, linewidth=1, force_overlay = true)
plot(ema100, title="EMA 100", color=color.orange, linewidth=1, force_overlay = true)
plot(ema200, title="EMA 200", color=color.purple, linewidth=1, force_overlay = true)

// Plot Stochastic line 
plot(k, title="Stochastic", color=kColor, linewidth=2)

// Plot reference lines 
hline(100, title="100 Line", color=color.white, linestyle=hline.style_solid)
hline(upperLine, title="93 Line", color=color.red, linestyle=hline.style_solid)
hline(midLine, title="40 Line", color=color.green, linestyle=hline.style_dashed)
hline(lowerLine, title="15 Line", color=color.green, linestyle=hline.style_solid)
hline(0, title="0 Line", color=color.white, linestyle=hline.style_solid)