Strategi perdagangan kuantitatif tingkat lanjut: sistem eksekusi otomatis berdasarkan momentum intraday dan manajemen risiko

DOJI SL TP ATR momentum
Tanggal Pembuatan: 2025-02-21 14:25:50 Akhirnya memodifikasi: 2025-02-27 16:57:06
menyalin: 2 Jumlah klik: 446
2
fokus pada
319
Pengikut

Strategi perdagangan kuantitatif tingkat lanjut: sistem eksekusi otomatis berdasarkan momentum intraday dan manajemen risiko Strategi perdagangan kuantitatif tingkat lanjut: sistem eksekusi otomatis berdasarkan momentum intraday dan manajemen risiko

Ringkasan

Ini adalah strategi perdagangan yang sepenuhnya otomatis berdasarkan dinamika harian, yang digabungkan dengan manajemen risiko yang ketat dan sistem manajemen posisi yang tepat. Strategi ini beroperasi terutama pada saat perdagangan di London, mencari peluang perdagangan dengan mengidentifikasi perubahan dinamika pasar dan mengecualikan bentuk Doji, sambil menerapkan aturan penutupan harian untuk mengendalikan risiko.

Prinsip Strategi

Logika inti dari strategi ini dibangun di atas beberapa komponen kunci. Pertama, waktu perdagangan dibatasi pada waktu London (tidak termasuk 0 dan 19), untuk memastikan banyaknya likuiditas pasar. Sinyal masuk didasarkan pada pergerakan harga, yang secara khusus memerlukan titik tinggi dari garis pivot saat ini untuk menembus titik tinggi sebelumnya (tidak termasuk) atau titik rendah untuk menembus titik rendah sebelumnya (tidak termasuk), sambil memenuhi persyaratan konsistensi arah.

Keunggulan Strategis

  1. Manajemen risiko yang komprehensif: termasuk stop loss tetap, aturan stop loss harian, dan manajemen posisi dinamis
  2. Adaptif: Ukuran transaksi secara otomatis disesuaikan dengan kepentingan akun, sesuai dengan ukuran dana yang berbeda
  3. Liquidity Guarantee: Terbatas untuk melakukan transaksi pada jam London trading, menghindari risiko likuiditas rendah
  4. Filter sinyal palsu: Mengurangi kerugian akibat penembusan palsu dengan mengecualikan bentuk Doji dan sinyal kontinu
  5. Logika Eksekusi yang Jelas: Kondisi masuk dan keluar yang jelas, memudahkan pemantauan dan optimalisasi

Risiko Strategis

  1. Risiko volatilitas pasar: Stop loss tetap mungkin tidak cukup fleksibel selama volatilitas tinggi
  2. Risiko tergelincirnya harga: kemungkinan tergelincirnya harga yang lebih besar pada saat pasar bergerak dengan cepat
  3. Tergantung pada tren: Strategi dapat menghasilkan lebih banyak sinyal palsu di pasar yang bergoyang
  4. Sensitivitas parameter: pengaturan Stop Loss Stop memiliki pengaruh besar terhadap kinerja strategi Solusinya meliputi: penggunaan mekanisme stop loss dinamis, penambahan filter volatilitas pasar, pengenalan indikator konfirmasi tren, dan lain-lain.

Arah optimasi strategi

  1. Memperkenalkan mekanisme penutupan adaptif: penutupan yang disesuaikan secara dinamis berdasarkan ATR atau volatilitas
  2. Meningkatkan filter kondisi pasar: Menambahkan indikator kekuatan tren, meningkatkan waktu memegang posisi saat tren jelas
  3. Mekanisme pengesahan sinyal yang dioptimalkan: meningkatkan keandalan sinyal dengan menggabungkan volume lalu lintas dan indikator teknis lainnya
  4. Pengelolaan dana yang lebih baik: Masukkan sistem manajemen risiko yang komprehensif dan pertimbangkan untuk mencabut kontrol
  5. Menambah analisis struktur mikro pasar: Integrasi data aliran pesanan untuk meningkatkan akurasi masuk

Meringkaskan

Strategi ini membangun sebuah kerangka perdagangan yang lengkap dengan menggabungkan terobosan kuantitatif, manajemen risiko yang ketat, dan sistem eksekusi otomatis. Keunggulan utama strategi ini adalah sistem kontrol risiko yang komprehensif dan desain yang adaptif, namun masih perlu dioptimalkan dalam identifikasi lingkungan pasar dan penyaringan sinyal. Dengan perbaikan terus menerus dan pengoptimalan parameter, strategi ini diharapkan dapat mempertahankan kinerja yang stabil di berbagai lingkungan pasar.

Kode Sumber Strategi
/*backtest
start: 2025-01-21 00:00:00
end: 2025-02-08 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Trading Strategy for XAUUSD (Gold) – Automated Execution Plan", overlay=true, initial_capital=10000, currency=currency.USD)

//────────────────────────────
// 1. RISK MANAGEMENT & POSITION SIZING
//────────────────────────────
// Configurable inputs for Stop Loss and Take Profit
sl = input.float(title="Stop Loss ($)", defval=5, step=0.1)
tp = input.float(title="Take Profit ($)", defval=15, step=0.1)

// Volume: 0.01 lots per $100 of equity → lotSize = equity / 10000
lotSize = strategy.equity / strategy.initial_capital

//────────────────────────────
// 2. TRADING HOURS (London Time)
//────────────────────────────
// Get the current bar's timestamp in London time.
londonTime   = time(timeframe.period, "", "Europe/London")
londonHour   = hour(londonTime)
tradingAllowed = (londonHour != 0) and (londonHour < 19)

//────────────────────────────
// 3. DOJI CANDLE DEFINITION
//────────────────────────────
// A candle is considered a doji if the sum of its upper and lower shadows is greater than its body.
upperShadow = high - math.max(open, close)
lowerShadow = math.min(open, close) - low
bodySize    = math.abs(close - open)
isDoji      = (upperShadow + lowerShadow) > bodySize

//────────────────────────────
// 4. ENTRY CONDITIONS
//────────────────────────────
// Buy Signal:
//   • Current candle’s high > previous candle’s high.
//   • Current candle’s low is not below previous candle’s low.
//   • Bullish candle (close > open) and not a doji.
//   • Skip if previous candle already qualified.
buyRaw    = (high > high[1]) and (low >= low[1]) and (close > open) and (not isDoji)
buySignal = buyRaw and not (buyRaw[1] ? true : false)

// Sell Signal:
//   • Current candle’s low < previous candle’s low.
//   • Current candle’s high is not above previous candle’s high.
//   • Bearish candle (close < open) and not a doji.
//   • Skip if previous candle already qualified.
sellRaw    = (low < low[1]) and (high <= high[1]) and (close < open) and (not isDoji)
sellSignal = sellRaw and not (sellRaw[1] ? true : false)

//────────────────────────────
// 5. DAILY TAKE PROFIT (TP) RULE
//────────────────────────────
// Create a day-string (year-month-day) using London time.
// This flag will block new trades for the rest of the day if a TP is hit.
var string lastDay = ""
currentDay = str.tostring(year(londonTime)) + "-" + str.tostring(month(londonTime)) + "-" + str.tostring(dayofmonth(londonTime))
var bool dailyTPHit = false
if lastDay != currentDay
    dailyTPHit := false
    lastDay := currentDay

//────────────────────────────
// 6. TRACK TRADE ENTRY & EXIT FOR TP DETECTION
//────────────────────────────
// We record the TP target when a new trade is entered.
// Then, when a trade closes, if the bar’s high (for long) or low (for short) reached the TP target,
// we assume the TP was hit and block new trades for the day.
var float currentTP = na
var int currentTradeType = 0   // 1 for long, -1 for short

// Detect a new trade entry (transition from no position to a position).
tradeEntered = (strategy.position_size != 0 and strategy.position_size[1] == 0)
if tradeEntered
    if strategy.position_size > 0
        currentTP := strategy.position_avg_price + tp
        currentTradeType := 1
    else if strategy.position_size < 0
        currentTP := strategy.position_avg_price - tp
        currentTradeType := -1

// Detect trade closure (transition from position to flat).
tradeClosed = (strategy.position_size == 0 and strategy.position_size[1] != 0)
if tradeClosed and not na(currentTP)
    // For a long trade, if the bar's high reached the TP target;
    // for a short trade, if the bar's low reached the TP target,
    // mark the daily TP flag.
    if (currentTradeType == 1 and high >= currentTP) or (currentTradeType == -1 and low <= currentTP)
        dailyTPHit := true
    currentTP := na
    currentTradeType := 0

//────────────────────────────
// 7. ORDER EXECUTION
//────────────────────────────
// Only open a new position if no position is open, trading is allowed, and daily TP rule is not active.
if (strategy.position_size == 0) and tradingAllowed and (not dailyTPHit)
    if buySignal
        strategy.entry("Long", strategy.long, qty=lotSize)
    if sellSignal
        strategy.entry("Short", strategy.short, qty=lotSize)

//────────────────────────────
// 8. EXIT ORDERS (Risk Management)
//────────────────────────────
// For long positions: SL = entry price - Stop Loss, TP = entry price + Take Profit.
// For short positions: SL = entry price + Stop Loss, TP = entry price - Take Profit.
if strategy.position_size > 0
    longSL = strategy.position_avg_price - sl
    longTP = strategy.position_avg_price + tp
    strategy.exit("Exit Long", from_entry="Long", stop=longSL, limit=longTP)
if strategy.position_size < 0
    shortSL = strategy.position_avg_price + sl
    shortTP = strategy.position_avg_price - tp
    strategy.exit("Exit Short", from_entry="Short", stop=shortSL, limit=shortTP)

//────────────────────────────
// 9. VISUALIZATION
//────────────────────────────
plotshape(buySignal and tradingAllowed and (not dailyTPHit) and (strategy.position_size == 0), title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(sellSignal and tradingAllowed and (not dailyTPHit) and (strategy.position_size == 0), title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")