Strategi Perdagangan Kuantitatif Indeks Kekuatan Elder Berdasarkan Deviasi Standar dan Rata-rata Pergerakan

EFI ATR EMA SMA SD
Tanggal Pembuatan: 2024-11-28 17:08:24 Akhirnya memodifikasi: 2024-11-28 17:08:24
menyalin: 1 Jumlah klik: 498
1
fokus pada
1617
Pengikut

Strategi Perdagangan Kuantitatif Indeks Kekuatan Elder Berdasarkan Deviasi Standar dan Rata-rata Pergerakan

Ringkasan

Strategi ini adalah sistem perdagangan kuantitatif berdasarkan Elder’s Force Index (EFI) yang menggabungkan kesenjangan standar dan moving average untuk penilaian sinyal, dan menggunakan ATR untuk secara dinamis menyesuaikan posisi stop loss. Strategi ini mencapai sistem perdagangan yang lengkap dengan menghitung indikator EFI cepat dan lambat, dan kemudian menstandarisasikannya untuk penilaian sinyal silang. Strategi ini menggunakan mekanisme stop loss dan tracking stop loss yang dinamis untuk mengendalikan risiko secara efektif sambil mengejar keuntungan yang lebih besar.

Prinsip Strategi

Strategi ini didasarkan pada beberapa elemen utama:

  1. Perhitungan indeks kekuatan cepat dan lambat menggunakan dua siklus EFI yang berbeda (13 dan 50)
  2. Pengolahan diferensial standar untuk EFI dua periode untuk membuat sinyal lebih signifikan secara statistik
  3. Ketika EFI cepat dan lambat secara bersamaan menembus standar deviasi di atas, memicu multisignal
  4. Ketika EFI cepat dan lambat secara bersamaan menembus standar deviasi di bawahnya, memicu sinyal kosong
  5. Menggunakan ATR untuk mengatur posisi stop loss secara dinamis dan menyesuaikan posisi stop loss dengan perubahan harga
  6. Menggunakan mekanisme tracking stop-loss berbasis ATR untuk terus meningkatkan keuntungan sambil melindungi keuntungan

Keunggulan Strategis

  1. Sistem sinyal menggabungkan momentum dan volatilitas untuk meningkatkan keandalan perdagangan
  2. Pengolahan homogenisasi standar deviasi digunakan untuk membuat sinyal memiliki makna statistik dan mengurangi sinyal palsu
  3. Mekanisme Stop Loss Dinamis dapat secara efektif mengendalikan risiko dan menghindari penarikan besar-besaran.
  4. Sistem Tracking Stop-loss melindungi keuntungan yang sudah ada dan memungkinkan keuntungan untuk terus tumbuh.
  5. Logika strategi yang jelas, parameter yang dapat disesuaikan, mudah dioptimalkan untuk pasar yang berbeda

Risiko Strategis

  1. Dalam pasar yang sangat bergejolak, sinyal palsu dapat dihasilkan, yang memerlukan mekanisme penyaringan tambahan.
  2. Pilihan parameter yang terlalu sensitif dapat menyebabkan over-trading dan meningkatkan biaya transaksi
  3. Keterlambatan pada titik balik tren yang mungkin mempengaruhi kinerja strategi
  4. Penetapan posisi stop loss yang tidak tepat dapat menyebabkan pertandingan dimulai lebih awal atau mengalami kerugian yang terlalu besar
  5. Dampak biaya transaksi terhadap pengembalian strategi perlu dipertimbangkan

Arah optimasi strategi

  1. Menambahkan mekanisme penilaian kondisi pasar, menggunakan parameter yang berbeda dalam kondisi pasar yang berbeda
  2. Pengenalan filter lalu lintas untuk meningkatkan keandalan sinyal
  3. Optimalkan parameter stop loss agar lebih sesuai dengan fluktuasi pasar
  4. Menambahkan filter tren untuk menghindari sering berdagang di pasar yang bergejolak
  5. Pertimbangkan untuk menambahkan filter waktu dan hindari perdagangan pada waktu yang tidak menguntungkan

Meringkaskan

Strategi ini menggabungkan indikator EFI, standar deviasi dan ATR untuk membangun sistem perdagangan yang lengkap. Keunggulan strategi ini adalah bahwa sistem sinyal memiliki keandalan yang tinggi dan kontrol risiko yang masuk akal, tetapi masih perlu dioptimalkan untuk berbagai lingkungan pasar. Dengan menambahkan penilaian lingkungan pasar, mekanisme penyaringan volume transaksi, dan sebagainya, stabilitas dan keuntungan strategi dapat ditingkatkan lebih lanjut. Secara keseluruhan, strategi ini memberikan kerangka kerja perdagangan kuantitatif yang baik dengan nilai praktis yang lebih baik.

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