Sumber dimuat naik... memuat...

Indeks Kuasa Elder Strategi Dagangan Kuantitatif Berdasarkan Penyimpangan Standar dan Purata Bergerak

Penulis:ChaoZhang, Tarikh: 2024-11-28 17:08:24
Tag:EFIATREMASMASD

img

Ringkasan

Strategi ini adalah sistem perdagangan kuantitatif berdasarkan Indeks Kuasa Elder (EFI), menggabungkan penyimpangan piawai dan purata bergerak untuk penjanaan isyarat, sambil menggunakan ATR untuk kedudukan stop-loss dan mengambil keuntungan dinamik. Strategi ini mengira penunjuk EFI yang cepat dan perlahan, menormalkannya menggunakan penyimpangan piawai, dan menghasilkan isyarat perdagangan melalui analisis silang, mewujudkan sistem perdagangan yang lengkap. Ia menggunakan mekanisme stop-loss dan trailing take-profit yang dinamik untuk mengawal risiko dengan berkesan sambil mengejar pulangan yang lebih tinggi.

Prinsip Strategi

Strategi ini dibina di atas beberapa elemen teras:

  1. Menggunakan dua tempoh yang berbeza (13 dan 50) untuk mengira indeks kekuatan cepat dan perlahan
  2. Menormalkan kedua-dua tempoh EFI menggunakan penyimpangan piawai untuk membuat isyarat lebih signifikan secara statistik
  3. Menghasilkan isyarat panjang apabila kedua-dua EFI pantas dan perlahan secara serentak melanggar ambang penyimpangan standard
  4. Menghasilkan isyarat pendek apabila kedua-dua EFI pantas dan perlahan secara serentak memecahkan di bawah ambang penyimpangan standard
  5. Menggunakan ATR untuk kedudukan stop-loss dinamik yang menyesuaikan dengan pergerakan harga
  6. Melaksanakan mekanisme mengambil keuntungan yang berasaskan ATR untuk melindungi dan meningkatkan keuntungan

Kelebihan Strategi

  1. Sistem isyarat menggabungkan ciri momentum dan turun naik, meningkatkan kebolehpercayaan perdagangan
  2. Normal deviasi standard menjadikan isyarat secara statistik signifikan, mengurangkan isyarat palsu
  3. Mekanisme stop-loss dinamik mengawal risiko dengan berkesan dan menghalang pengeluaran besar
  4. Mekanisme mengambil keuntungan kedua-dua melindungi dan membolehkan keuntungan untuk berkembang
  5. Logik strategi yang jelas dengan parameter yang boleh disesuaikan, sesuai untuk pengoptimuman di pasaran yang berbeza

Risiko Strategi

  1. Boleh menghasilkan isyarat palsu di pasaran yang sangat tidak menentu, yang memerlukan mekanisme penapisan tambahan
  2. Pilihan parameter sensitif boleh membawa kepada overtrading, meningkatkan kos transaksi
  3. Potensi kelewatan pada titik pembalikan trend, mempengaruhi prestasi strategi
  4. Penempatan stop-loss yang tidak betul boleh menyebabkan keluar awal atau kerugian yang berlebihan
  5. Perlu mempertimbangkan kesan kos urus niaga pada pulangan strategi

Arahan pengoptimuman

  1. Tambah mekanisme penilaian keadaan pasaran untuk menggunakan parameter yang berbeza dalam keadaan pasaran yang berbeza
  2. Memperkenalkan penapis jumlah untuk meningkatkan kebolehpercayaan isyarat
  3. Mengoptimumkan parameter stop-loss dan mengambil keuntungan untuk menyesuaikan diri dengan lebih baik dengan turun naik pasaran
  4. Tambah penapis trend untuk mengelakkan perdagangan yang kerap di pasaran pelbagai
  5. Pertimbangkan untuk menambah penapis masa untuk mengelakkan perdagangan semasa tempoh yang tidak baik

Ringkasan

Strategi ini membina sistem perdagangan yang lengkap dengan menggabungkan penunjuk EFI, penyimpangan piawai, dan ATR. Kekuatannya terletak pada kebolehpercayaan isyarat yang tinggi dan kawalan risiko yang munasabah, walaupun pengoptimuman untuk persekitaran pasaran yang berbeza masih diperlukan. Kestabilan dan keuntungan strategi ini dapat ditingkatkan dengan menambah penilaian keadaan pasaran, penapisan jumlah, dan mekanisme lain. Secara keseluruhan, ia menyediakan kerangka perdagangan kuantitatif yang kukuh dengan nilai praktikal.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Elder's Force Index Strategy with ATR-Based SL and TP", overlay=true)

// Input parameters for fast and long EFI
efi_fast_length = input.int(13, "Fast EFI Length", minval=1)
efi_long_length = input.int(50, "Long EFI Length", minval=1)
stdev_length = input.int(50, "Standard Deviation Length", minval=2, maxval=300)
numdev = input.float(2, "Number of Deviations", minval=1, maxval=20, step=0.1)
atr_length = input.int(14, "ATR Length", minval=1)
atr_multiplier_sl = input.float(1.5, "ATR Multiplier for Stop Loss", step=0.1)
trailing_tp_multiplier = input.float(0.5, "Multiplier for Trailing Take Profit", step=0.1)

// Elder's Force Index Calculation for Fast and Long EFI
efi_fast = ta.ema((close - close[1]) * volume, efi_fast_length)
efi_long = ta.ema((close - close[1]) * volume, efi_long_length)

// Calculate Standard Deviation for Fast EFI
efi_fast_average = ta.sma(efi_fast, stdev_length)
efi_fast_stdev = ta.stdev(efi_fast, stdev_length)
efi_fast_diff = efi_fast - efi_fast_average
efi_fast_result = efi_fast_diff / efi_fast_stdev

// Calculate Standard Deviation for Long EFI
efi_long_average = ta.sma(efi_long, stdev_length)
efi_long_stdev = ta.stdev(efi_long, stdev_length)
efi_long_diff = efi_long - efi_long_average
efi_long_result = efi_long_diff / efi_long_stdev

// Define upper and lower standard deviation levels
upper_sd = numdev
lower_sd = -numdev

// Define entry conditions based on crossing upper and lower standard deviations
long_condition = efi_fast_result > upper_sd and efi_long_result > upper_sd
short_condition = efi_fast_result < lower_sd and efi_long_result < lower_sd

// Check if a position is already open
is_position_open = strategy.position_size != 0

// Calculate ATR for stop loss and take profit
atr = ta.atr(atr_length)

// Initialize stop loss and take profit variables
var float stop_loss = na
var float take_profit = na

// Execute trades based on conditions, ensuring only one trade at a time
if (long_condition and not is_position_open)
    strategy.entry("Long", strategy.long)
    stop_loss := close - atr * atr_multiplier_sl  // Set initial stop loss based on ATR
    take_profit := close + atr * trailing_tp_multiplier  // Set initial take profit based on ATR

if (short_condition and not is_position_open)
    strategy.entry("Short", strategy.short)
    stop_loss := close + atr * atr_multiplier_sl  // Set initial stop loss based on ATR
    take_profit := close - atr * trailing_tp_multiplier  // Set initial take profit based on ATR

// Update exit conditions
if (is_position_open)
    // Update stop loss for trailing
    if (strategy.position_size > 0)  // For long positions
        stop_loss := math.max(stop_loss, close - atr * atr_multiplier_sl)
        
        // Adjust take profit based on price movement
        take_profit := math.max(take_profit, close + atr * trailing_tp_multiplier)

    else if (strategy.position_size < 0)  // For short positions
        stop_loss := math.min(stop_loss, close + atr * atr_multiplier_sl)
        
        // Adjust take profit based on price movement
        take_profit := math.min(take_profit, close - atr * trailing_tp_multiplier)

    // Set exit conditions
    strategy.exit("Long Exit", from_entry="Long", stop=stop_loss, limit=take_profit)
    strategy.exit("Short Exit", from_entry="Short", stop=stop_loss, limit=take_profit)


Berkaitan

Lebih lanjut