Sumber daya yang dimuat... Pemuatan...

Multi-EMA Crossover dengan Camarilla Support/Resistance Trend Trading System

Penulis:ChaoZhang, Tanggal: 2025-01-06 11:13:31
Tag:EMACPRSR

img

Gambaran umum

Strategi ini adalah sistem perdagangan trend following yang menggabungkan beberapa Exponential Moving Averages (EMA), Camarilla Support/Resistance level, dan Central Pivot Range (CPR). Sistem ini mengidentifikasi tren pasar dan peluang perdagangan potensial dengan menganalisis hubungan harga dengan beberapa moving average dan zona harga utama.

Prinsip Strategi

Strategi ini didasarkan pada beberapa komponen inti:

  1. Sistem Multiple EMA (20/50/100/200) untuk konfirmasi arah tren dan kekuatan
  2. Tingkat Dukungan/Resistensi Camarilla (R3/S3) untuk mengidentifikasi tingkat harga utama
  3. Rentang Pivot Pusat (CPR) untuk menentukan rentang perdagangan intraday
  4. Sinyal masuk berdasarkan penyeberangan harga dengan konfirmasi EMA200 dan EMA20
  5. Strategi keluar termasuk titik tetap dan mode pergerakan persentase
  6. Sistem manajemen uang yang secara dinamis menyesuaikan ukuran posisi berdasarkan ukuran rekening

Keuntungan Strategi

  1. Integrasi indikator teknis multi-dimensi memberikan sinyal perdagangan yang lebih dapat diandalkan
  2. Mekanisme keluar yang fleksibel beradaptasi dengan kondisi pasar yang berbeda
  3. Sistem manajemen uang yang komprehensif secara efektif mengendalikan risiko
  4. Tren berikut karakteristik membantu menangkap pergerakan pasar utama
  5. Komponen visualisasi membantu pedagang memahami struktur pasar

Risiko Strategi

  1. Dapat menghasilkan sinyal palsu di pasar yang berbeda
  2. Beberapa indikator dapat menyebabkan sinyal perdagangan yang tertinggal
  3. Titik keluar tetap mungkin berkinerja buruk di pasar volatilitas tinggi
  4. Membutuhkan modal yang cukup besar untuk menahan penarikan
  5. Biaya perdagangan dapat mempengaruhi hasil strategi secara keseluruhan

Arah Optimasi Strategi

  1. Memperkenalkan indikator volatilitas untuk menyesuaikan parameter masuk/keluar secara dinamis
  2. Tambahkan modul identifikasi keadaan pasar untuk beradaptasi dengan kondisi pasar yang berbeda
  3. Mengoptimalkan sistem manajemen uang dengan manajemen posisi dinamis
  4. Tambahkan filter waktu perdagangan untuk meningkatkan kualitas sinyal
  5. Pertimbangkan untuk menambahkan analisis volume untuk meningkatkan keandalan sinyal

Ringkasan

Strategi ini mengintegrasikan beberapa alat analisis teknis klasik untuk membangun sistem perdagangan yang lengkap. Kekuatannya terletak pada analisis pasar multi-dimensi dan manajemen risiko yang ketat, sementara perhatian perlu diberikan pada kemampuan beradaptasi dalam lingkungan pasar yang berbeda. Melalui optimalisasi dan perbaikan terus-menerus, strategi ini memiliki potensi untuk meningkatkan profitabilitas sambil menjaga stabilitas.


/*backtest
start: 2020-01-06 00:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Pradeep Crude oil Entry and Exit", overlay=true)

// Input settings for EMAs
ema20_period = input.int(20, title="EMA 20 Period")
ema50_period = input.int(50, title="EMA 50 Period")
ema100_period = input.int(100, title="EMA 100 Period")
ema200_period = input.int(200, title="EMA 200 Period")

// Fixed line width settings for EMAs
ema20_width = 2  // EMA 20 Line Width
ema50_width = 2  // EMA 50 Line Width
ema100_width = 3 // EMA 100 Line Width
ema200_width = 4 // EMA 200 Line Width

// Backtesting inputs
initial_capital = input.float(50000, title="Initial Capital", minval=100)
position_size_percent = input.float(100, title="Position Size (% of Capital)", minval=0.1, maxval=100)
exit_mode = input.string("Price Movement", title="Exit Mode", options=["Price Movement", "Percentage Movement"])
exit_points = input.int(20, title="Exit After X Points", minval=1)
exit_percentage = input.float(1.0, title="Exit After X% Movement", minval=0.1, step=0.1)

// Calculate EMAs
ema20 = ta.ema(close, ema20_period)
ema50 = ta.ema(close, ema50_period)
ema100 = ta.ema(close, ema100_period)
ema200 = ta.ema(close, ema200_period)

// Signal conditions
long_entry_condition = close > ema200 and close > ema20 and close[1] <= ema200
long_exit_condition = (exit_mode == "Price Movement" and close - strategy.position_avg_price >= exit_points * syminfo.mintick) or 
                      (exit_mode == "Percentage Movement" and (close - strategy.position_avg_price) / strategy.position_avg_price * 100 >= exit_percentage)
short_entry_condition = close < ema200 and close < ema20 and close[1] >= ema200
short_exit_condition = (exit_mode == "Price Movement" and strategy.position_avg_price - close >= exit_points * syminfo.mintick) or 
                       (exit_mode == "Percentage Movement" and (strategy.position_avg_price - close) / strategy.position_avg_price * 100 >= exit_percentage)

// Plot EMAs with specified line widths
plot(ema20, color=color.green, title="EMA 20", linewidth=ema20_width)
plot(ema50, color=color.aqua, title="EMA 50", linewidth=ema50_width)
plot(ema100, color=color.blue, title="EMA 100", linewidth=ema100_width)
plot(ema200, color=color.red, title="EMA 200", linewidth=ema200_width)

// Camarilla Pivot Calculation
prev_high = request.security(syminfo.tickerid, "D", high[1])
prev_low = request.security(syminfo.tickerid, "D", low[1])
prev_close = request.security(syminfo.tickerid, "D", close[1])

R3 = prev_close + (prev_high - prev_low) * 1.1 / 2
S3 = prev_close - (prev_high - prev_low) * 1.1 / 2

// Central Pivot Range (CPR) Calculation
pivot = (prev_high + prev_low + prev_close) / 3
upper_cpr = pivot + (prev_high - prev_low)
lower_cpr = pivot - (prev_high - prev_low)

// Plot Camarilla R3, S3 and CPR levels
plot(R3, color=color.purple, title="Camarilla R3", linewidth=2)
plot(S3, color=color.purple, title="Camarilla S3", linewidth=2)
plot(pivot, color=color.yellow, title="CPR Pivot", linewidth=2)
plot(upper_cpr, color=color.green, title="CPR Upper", linewidth=1)
plot(lower_cpr, color=color.red, title="CPR Lower", linewidth=1)

// Backtesting: Capital and position size
capital = initial_capital
risk_per_trade = (position_size_percent / 100) * capital

// Long positions
if long_entry_condition
    strategy.entry("Long", strategy.long, qty=risk_per_trade / close)
    // Display entry price label
    label.new(bar_index, close, text="Entry: " + str.tostring(close), color=color.green, style=label.style_label_up, yloc=yloc.belowbar)

if long_exit_condition
    strategy.close("Long")
    // Display exit price label
    label.new(bar_index, close, text="Exit: " + str.tostring(close), color=color.red, style=label.style_label_down, yloc=yloc.abovebar)

// Short positions
if short_entry_condition
    strategy.entry("Short", strategy.short, qty=risk_per_trade / close)
    // Display entry price label
    label.new(bar_index, close, text="Entry: " + str.tostring(close), color=color.red, style=label.style_label_down, yloc=yloc.abovebar)

if short_exit_condition
    strategy.close("Short")
    // Display exit price label
    label.new(bar_index, close, text="Exit: " + str.tostring(close), color=color.green, style=label.style_label_up, yloc=yloc.belowbar)

// Plot signals
plotshape(long_entry_condition, style=shape.triangleup, location=location.belowbar, color=color.new(color.green, 0), size=size.small, title="Long Entry")
plotshape(long_exit_condition, style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), size=size.small, title="Long Exit")
plotshape(short_entry_condition, style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), size=size.small, title="Short Entry")
plotshape(short_exit_condition, style=shape.triangleup, location=location.belowbar, color=color.new(color.green, 0), size=size.small, title="Short Exit")




Berkaitan

Lebih banyak