Strategi Perdagangan Kuantitatif Indeks Kuasa Elder Berdasarkan Sisihan Piawai dan Purata Pergerakan

EFI ATR EMA SMA SD
Tarikh penciptaan: 2024-11-28 17:08:24 Akhirnya diubah suai: 2024-11-28 17:08:24
Salin: 1 Bilangan klik: 498
1
fokus pada
1617
Pengikut

Strategi Perdagangan Kuantitatif Indeks Kuasa Elder Berdasarkan Sisihan Piawai dan Purata Pergerakan

Gambaran keseluruhan

Strategi ini adalah sistem perdagangan kuantitatif berdasarkan Elder’s Force Index (EFI) yang menggabungkan kesenjangan standard dan purata bergerak untuk membuat penilaian isyarat dan menggunakan ATR untuk menyesuaikan kedudukan hentian hentian secara dinamik. Strategi ini mencapai sistem perdagangan yang lengkap dengan mengira indikator EFI cepat dan lambat, dan membuat penilaian isyarat silang selepas standardisasi. Strategi ini menggunakan mekanisme hentian dan penjejakan hentian dinamik, mengawal risiko dengan berkesan sambil mengejar keuntungan yang lebih besar.

Prinsip Strategi

Strategi ini dibina berdasarkan beberapa elemen utama:

  1. Menggunakan dua kitaran yang berbeza ((13 dan 50) untuk mengira indeks kekuatan cepat dan lambat
  2. Proses keseragaman perbezaan piawai untuk EFI dua kitaran untuk menjadikan isyarat lebih bermakna secara statistik
  3. Apabila EFI cepat dan perlahan sama-sama menembusi standard di atas, ia akan mencetuskan isyarat ganda
  4. Apabila EFI cepat dan perlahan sama-sama menembusi perbezaan standard di bawahnya, isyarat kosong dicetuskan
  5. Menggunakan ATR untuk menetapkan kedudukan stop loss secara dinamik dan menyesuaikan kedudukan stop loss mengikut perubahan harga
  6. Menggunakan mekanisme tracking stop yang berasaskan ATR untuk terus meningkatkan keuntungan sambil melindungi keuntungan

Kelebihan Strategik

  1. Sistem isyarat menggabungkan ciri-ciri kuantiti dan kadar turun naik untuk meningkatkan kebolehpercayaan perdagangan
  2. Menggunakan pemprosesan standard deviasi untuk menjadikan isyarat bermakna secara statistik dan mengurangkan isyarat palsu
  3. Mekanisme Hentikan Kerosakan Dinamis Mengendalikan Risiko dan Mengelakkan Penarikan Besar
  4. Mekanisme penghentian pengesanan melindungi keuntungan dan membolehkan keuntungan terus berkembang
  5. Logik strategi yang jelas, parameter yang boleh disesuaikan, mudah dioptimumkan untuk pasaran yang berbeza

Risiko Strategik

  1. Mampu menghasilkan isyarat palsu dalam pasaran yang bergolak dan memerlukan mekanisme penapisan tambahan
  2. Pilihan parameter yang terlalu sensitif boleh menyebabkan perdagangan berlebihan dan meningkatkan kos transaksi
  3. Kemungkinan kelewatan pada titik perubahan trend yang mempengaruhi prestasi strategi
  4. Penetapan yang tidak betul dalam kedudukan henti kerugian boleh menyebabkan permainan terlalu awal atau terlalu banyak kerugian
  5. Kesan kos urus niaga ke atas pulangan strategi perlu dipertimbangkan

Arah pengoptimuman strategi

  1. Menambah mekanisme penilaian keadaan pasaran, menggunakan parameter yang berbeza dalam keadaan pasaran yang berbeza
  2. Pengenalan penapis lalu lintas untuk meningkatkan kebolehpercayaan isyarat
  3. Mengoptimumkan parameter stop loss agar lebih sesuai dengan turun naik pasaran
  4. Menambah penapis trend untuk mengelakkan dagangan yang kerap di pasaran yang bergolak
  5. Pertimbangkan penapis masa untuk mengelakkan dagangan pada masa yang tidak menguntungkan

ringkaskan

Strategi ini membina satu sistem perdagangan yang lengkap dengan menggabungkan petunjuk EFI, standard deviation dan ATR. Keuntungan strategi ini adalah bahawa sistem isyarat sangat dipercayai, kawalan risiko adalah munasabah, tetapi masih perlu dioptimumkan untuk keadaan pasaran yang berbeza.

Kod sumber strategi
/*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)