Sumber daya yang dimuat... Pemuatan...

Algoritma Perdagangan Tren Dinamis Supertrend Multi-Timeframe

Penulis:ChaoZhang, Tanggal: 2025-01-06 16:38:12
Tag:ATRMTFEMARSI

img

Gambaran umum

Strategi ini adalah sistem mengikuti tren adaptif berdasarkan indikator Multi-Timeframe Supertrend. Ini mengintegrasikan sinyal Supertrend dari kerangka waktu 15 menit, 5 menit, dan 2 menit untuk membangun kerangka pengidentifikasi tren yang komprehensif. Strategi ini menggunakan filter waktu untuk memastikan operasi hanya selama sesi perdagangan yang paling aktif dan secara otomatis menutup posisi di akhir hari untuk menghindari risiko semalam.

Prinsip Strategi

Mekanisme inti bergantung pada konsistensi tren di beberapa kerangka waktu untuk mengkonfirmasi sinyal perdagangan.

  1. Menghitung garis Supertrend menggunakan periode ATR dan faktor multiplier untuk setiap kerangka waktu.
  2. Pemicu membeli sinyal ketika kondisi bullish sejajar di ketiga kerangka waktu (harga di atas garis Supertrend).
  3. Initiates menjual sinyal ketika harga pecah di bawah garis Supertrend 5 menit atau mencapai akhir hari perdagangan.
  4. Mengontrol jam perdagangan melalui pengaturan zona waktu dan filter sesi (default 09:30-15:30).

Keuntungan Strategi

  1. Konfirmasi tren multi-dimensi meningkatkan keandalan sinyal dan mengurangi risiko pecah palsu.
  2. Parameter Supertrend adaptif memungkinkan penyesuaian strategi untuk lingkungan volatilitas pasar yang berbeda.
  3. Mekanisme manajemen waktu yang ketat menghilangkan gangguan dari periode perdagangan yang tidak efisien.
  4. Antarmuka visualisasi yang jelas menampilkan status tren di semua kerangka waktu.
  5. Sistem manajemen posisi yang fleksibel mendukung konfigurasi berbasis persentase.

Risiko Strategi

  1. Dapat menghasilkan sinyal perdagangan yang berlebihan di berbagai pasar, meningkatkan biaya transaksi.
  2. Beberapa kondisi penyaringan dapat menyebabkan kesempatan menguntungkan yang hilang.
  3. Ketergantungan optimasi parameter membutuhkan penyesuaian untuk lingkungan pasar yang berbeda.
  4. Kompleksitas komputasi yang tinggi dapat menyebabkan masalah efisiensi eksekusi.

Arahan Optimasi

  1. Memperkenalkan mekanisme adaptasi volatilitas untuk menyesuaikan parameter Supertrend secara dinamis.
  2. Tambahkan indikator konfirmasi volume untuk meningkatkan akurasi penilaian tren.
  3. Mengembangkan algoritma penyaringan waktu cerdas untuk secara otomatis mengidentifikasi sesi perdagangan optimal.
  4. Mengoptimalkan algoritma manajemen posisi untuk kontrol risiko yang lebih tepat.
  5. Tambahkan modul klasifikasi lingkungan pasar untuk menerapkan strategi yang berbeda untuk berbagai karakteristik pasar.

Ringkasan

Strategi ini membangun sistem perdagangan yang kuat melalui analisis tren multi-frame dan mekanisme pengendalian risiko yang ketat. Meskipun ada ruang untuk optimasi, logika intinya kuat dan cocok untuk pengembangan lebih lanjut dan aplikasi perdagangan langsung.


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

//@version=5
strategy("Multi-Timeframe Supertrend Strategy", 
         overlay=true, 
         shorttitle="MTF Supertrend TF", 
         default_qty_type=strategy.percent_of_equity, 
         default_qty_value=100, 
         initial_capital=50000, 
         currency=currency.USD)

// === Input Parameters === //
atrPeriod = input.int(title="ATR Period", defval=10, minval=1)
factor = input.float(title="Factor", defval=3.0, step=0.1)

// === Time Filter Parameters === //
// Define the trading session using input.session
// Format: "HHMM-HHMM", e.g., "0930-1530"
sessionInput = input("0930-1530", title="Trading Session")

// Specify the timezone (e.g., "Europe/Istanbul")
// Refer to the list of supported timezones: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
timezoneInput = input.string("Europe/Istanbul", title="Timezone", tooltip="Specify a valid IANA timezone (e.g., 'Europe/Istanbul', 'America/New_York').")

// === Calculate Supertrend for Different Timeframes === //
symbol = syminfo.tickerid

// 15-Minute Supertrend
[st_15m, dir_15m] = request.security(symbol, "15", ta.supertrend(factor, atrPeriod), lookahead=barmerge.lookahead_off)

// 5-Minute Supertrend
[st_5m, dir_5m] = request.security(symbol, "5", ta.supertrend(factor, atrPeriod), lookahead=barmerge.lookahead_off)

// 2-Minute Supertrend
[st_2m, dir_2m] = request.security(symbol, "2", ta.supertrend(factor, atrPeriod), lookahead=barmerge.lookahead_off)

// === Current Timeframe Supertrend === //
[st_current, dir_current] = ta.supertrend(factor, atrPeriod)

// === Time Filter: Check if Current Bar is Within the Trading Session === //
in_session = true

// === Define Trend Directions Based on Supertrend === //
is_up_15m = close > st_15m
is_up_5m  = close > st_5m
is_up_2m  = close > st_2m
is_up_current = close > st_current

// === Buy Condition === //
buyCondition = is_up_15m and is_up_5m and is_up_2m and is_up_current and in_session and strategy.position_size == 0

// === Sell Conditions === //
// 1. Price falls below the 5-minute Supertrend during trading session
sellCondition1 = close < st_5m

// 2. End of Trading Day: Sell at the close of the trading session
is_new_day = ta.change(time("D"))
sellCondition2 = not in_session and is_new_day

// Combined Sell Condition: Only if in Position
sellSignal = (sellCondition1 and in_session) or sellCondition2
sellCondition = sellSignal and strategy.position_size > 0

// === Execute Trades === //
if (buyCondition)
    strategy.entry("Buy", strategy.long)

if (sellCondition)
    strategy.close("Buy")

// === Plot Supertrend Lines === //
// Plotting current timeframe Supertrend
plot(st_current, title="Current TF Supertrend", color=is_up_current ? color.green : color.red, linewidth=2, style=plot.style_line)

// Plotting higher timeframe Supertrend lines
plot(st_15m, title="15m Supertrend", color=is_up_15m ? color.green : color.red, linewidth=1, style=plot.style_line)
plot(st_5m, title="5m Supertrend", color=is_up_5m ? color.green : color.red, linewidth=1, style=plot.style_line)
plot(st_2m, title="2m Supertrend", color=is_up_2m ? color.green : color.red, linewidth=1, style=plot.style_line)

// === Plot Buy and Sell Signals === //
plotshape(series=buyCondition, title="Buy Signal", location=location.belowbar, 
          color=color.green, style=shape.labelup, text="BUY", size=size.small)

plotshape(series=sellCondition, title="Sell Signal", location=location.abovebar, 
          color=color.red, style=shape.labeldown, text="SELL", size=size.small)

// === Optional: Background Color to Indicate Position === //
bgcolor(strategy.position_size > 0 ? color.new(color.green, 90) : na, title="In Position Background")

// === Alerts === //
// Create alerts for Buy and Sell signals
alertcondition(buyCondition, title="Buy Alert", message="Buy signal generated by MTF Supertrend Strategy with Time Filter.")
alertcondition(sellCondition, title="Sell Alert", message="Sell signal generated by MTF Supertrend Strategy with Time Filter.")


Berkaitan

Lebih banyak