Strategi perdagangan kuantitatif persilangan rata-rata pergerakan ganda EMA stop-profit dan stop-loss dinamis

EMA
Tanggal Pembuatan: 2024-11-18 15:53:49 Akhirnya memodifikasi: 2024-11-18 15:53:49
menyalin: 5 Jumlah klik: 611
1
fokus pada
1617
Pengikut

Ringkasan

Strategi ini adalah sistem perdagangan kuantitatif yang didasarkan pada crossover rata-rata, yang menggabungkan mekanisme stop-loss dinamis. Inti dari strategi ini adalah untuk mengidentifikasi tren pasar melalui crossover 10 siklus dan 26 siklus indeks moving average (EMA), dan melakukan perdagangan pada saat penyesuaian. Sistem ini menggunakan pengaturan stop-loss yang tetap, yang melindungi keamanan dana melalui kontrol risiko yang ketat.

Prinsip Strategi

Strategi menggunakan dua EMA rata-rata periode yang berbeda sebagai indikator utama: jangka pendek 10 periode EMA dan jangka panjang 26 periode EMA. Ketika rata-rata jangka pendek melintasi rata-rata jangka panjang ke atas, sistem mengidentifikasi sebagai tren naik, menghasilkan sinyal beli; Ketika rata-rata jangka pendek melintasi rata-rata jangka panjang ke bawah, sistem mengidentifikasi sebagai tren turun, menghasilkan sinyal jual.

Keunggulan Strategis

  1. Kejelasan sinyal: menggunakan garis lurus silang sebagai sinyal perdagangan, aturan sederhana dan jelas, mudah dilakukan dan dipantau
  2. Kontrol resiko: Menggunakan titik stop loss yang tetap untuk mengontrol risiko setiap transaksi secara efektif
  3. Pelacakan tren: menggabungkan persimpangan rata-rata dan penyesuaian harga untuk lebih memahami tren
  4. Tingkat otomatisasi tinggi: logika strategi yang jelas, mudah diprogram untuk melakukan perdagangan otomatis
  5. Adaptif: Cocok untuk berbagai varietas perdagangan, terutama varietas dengan tingkat fluktuasi tinggi

Risiko Strategis

  1. Risiko pasar yang bergoyang: sinyal palsu dapat sering muncul di pasar yang bergoyang
  2. Risiko slippage: kemungkinan slippage yang lebih besar saat pasar bergejolak
  3. Stop loss risk: Stop loss yang tetap mungkin tidak fleksibel dalam kondisi pasar tertentu
  4. Sinyal lag: Sinyal silang rata-rata memiliki keterlambatan dan mungkin melewatkan titik masuk terbaik
  5. Manajemen risiko dana: perlu kontrol yang masuk akal atas proporsi dana dalam setiap transaksi

Arah optimasi strategi

  1. Stop loss dinamis: Anda dapat mempertimbangkan untuk menyesuaikan posisi stop loss secara dinamis sesuai dengan fluktuasi pasar
  2. Menyaring sinyal: Meningkatkan jumlah lalu lintas, fluktuasi, dan lain-lain untuk menyaring sinyal palsu
  3. Filter waktu: tambahkan filter waktu transaksi untuk menghindari periode yang sangat bergejolak
  4. Manajemen Posisi: Menambahkan mekanisme penutupan sebagian, memungkinkan untuk mempertahankan sebagian posisi untuk terus mengikuti tren
  5. Manajemen dana: Menambahkan sistem manajemen dana dinamis yang secara otomatis menyesuaikan volume transaksi berdasarkan nilai bersih akun

Meringkaskan

Strategi ini membangun sistem perdagangan yang lengkap dengan menggabungkan EMA crossover rata-rata dan regresi harga. Strategi ini dirancang sederhana dan intuitif, pengendalian risiko jelas, cocok untuk varietas perdagangan yang lebih berfluktuasi. Dengan optimasi dan penyesuaian parameter yang masuk akal, strategi ini diharapkan untuk mendapatkan keuntungan yang stabil dalam perdagangan di pasar nyata.

Kode Sumber Strategi
/*backtest
start: 2023-11-18 00:00:00
end: 2024-11-17 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("30 Pips Target & 15 Pips Stop-Loss with One Signal at a Time", overlay=true)

// Define settings for target and stop-loss in pips
target_in_pips = 30
stoploss_in_pips = 10

// Convert pips to price value based on market (for forex, 1 pip = 0.0001 for major pairs like GBP/JPY)
pip_value = syminfo.mintick * 10  // For forex, 1 pip = 0.0001 or 0.01 for JPY pairs
target_value = target_in_pips * pip_value
stoploss_value = stoploss_in_pips * pip_value

// Define EMAs (10-EMA and 26-EMA) for the crossover strategy
ema10 = ta.ema(close, 10)
ema26 = ta.ema(close, 26)

// Buy signal: when 10 EMA crosses above 26 EMA
longCondition = ta.crossover(ema10, ema26)
// Sell signal: when 10 EMA crosses below 26 EMA
shortCondition = ta.crossunder(ema10, ema26)

// Define price levels with explicit type float
var float long_entry_price = na
var float long_take_profit = na
var float long_stop_loss = na
var float short_entry_price = na
var float short_take_profit = na
var float short_stop_loss = na

// Variable to track if a trade is active
var bool inTrade = false

// Check if the trade hit stop loss or take profit
if (inTrade)
    if (not na(long_take_profit) and close >= long_take_profit)
        inTrade := false  // Exit the trade after hitting target
        long_entry_price := na
        long_take_profit := na
        long_stop_loss := na
        strategy.close("Long")

    if (not na(long_stop_loss) and close <= long_stop_loss)
        inTrade := false  // Exit the trade after hitting stoploss
        long_entry_price := na
        long_take_profit := na
        long_stop_loss := na
        strategy.close("Long")

    if (not na(short_take_profit) and close <= short_take_profit)
        inTrade := false  // Exit the trade after hitting target
        short_entry_price := na
        short_take_profit := na
        short_stop_loss := na
        strategy.close("Short")

    if (not na(short_stop_loss) and close >= short_stop_loss)
        inTrade := false  // Exit the trade after hitting stoploss
        short_entry_price := na
        short_take_profit := na
        short_stop_loss := na
        strategy.close("Short")

// Only generate new signals if not already in a trade
if (not inTrade)
    if (longCondition)
        long_entry_price := close
        long_take_profit := close + target_value
        long_stop_loss := close - stoploss_value
        strategy.entry("Long", strategy.long)  // Enter a long trade
        strategy.exit("Take Profit/Stop Loss", "Long", limit=long_take_profit, stop=long_stop_loss)
        inTrade := true  // Mark trade as active

    if (shortCondition)
        short_entry_price := close
        short_take_profit := close - target_value
        short_stop_loss := close + stoploss_value
        strategy.entry("Short", strategy.short)  // Enter a short trade
        strategy.exit("Take Profit/Stop Loss", "Short", limit=short_take_profit, stop=short_stop_loss)
        inTrade := true  // Mark trade as active

// Plot the levels on the chart only when in a trade
plot(inTrade and not na(long_take_profit) ? long_take_profit : na, color=color.green, linewidth=2, style=plot.style_linebr, title="Take Profit (Long)")
plot(inTrade and not na(long_stop_loss) ? long_stop_loss : na, color=color.red, linewidth=2, style=plot.style_linebr, title="Stop Loss (Long)")

plot(inTrade and not na(short_take_profit) ? short_take_profit : na, color=color.green, linewidth=2, style=plot.style_linebr, title="Take Profit (Short)")
plot(inTrade and not na(short_stop_loss) ? short_stop_loss : na, color=color.red, linewidth=2, style=plot.style_linebr, title="Stop Loss (Short)")

plotshape(series=longCondition and not inTrade, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(series=shortCondition and not inTrade, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")