Strategi perdagangan kuantitatif trailing stop loss terobosan sesi ganda London dan New York

ORB EMA SL TP RRR 交易会话 追踪止损 价格突破 风险管理
Tanggal Pembuatan: 2025-04-27 11:32:24 Akhirnya memodifikasi: 2025-04-27 11:32:24
menyalin: 2 Jumlah klik: 334
2
fokus pada
319
Pengikut

Strategi perdagangan kuantitatif trailing stop loss terobosan sesi ganda London dan New York Strategi perdagangan kuantitatif trailing stop loss terobosan sesi ganda London dan New York

Ringkasan

Strategi perdagangan kuantitatif penembusan yang dilacak untuk menghentikan kerugian adalah sistem perdagangan yang didasarkan pada kisaran harga 15 menit sebelum pembukaan London dan New York. Strategi ini menangkap pergerakan harga di awal pembukaan kedua pusat keuangan utama ini, dan memasuki perdagangan yang sesuai dengan arah saat harga menerobos titik tinggi atau rendah yang terbentuk dalam 15 menit pertama.

Prinsip Strategi

Mekanisme operasi strategi ini berkisar pada dua periode waktu utama: London Market Opening (waktu 3:00-3:15 WIB) dan New York Market Opening (waktu 9:30-9:45 WIB). Proses kerja strategi adalah sebagai berikut:

  1. Harga di London dan New York mencatat harga tertinggi dan terendah selama 15 menit pertama perdagangan, membentuk “bandar harga”
  2. Setelah harga terbentuk, strategi memeriksa apakah ukuran kisaran memenuhi persyaratan minimum (default 2 poin)
  3. Jika harga dari arah bawah menembus batas tertinggi dan memenuhi kondisi penyaringan EMA (jika diaktifkan), maka Anda akan mengambil posisi lebih
  4. Jika harga menembus batas bawah dari atas dan memenuhi kondisi penyaringan EMA (jika diaktifkan), maka buka posisi kosong
  5. Stop loss set di luar batas batas harga yang berlawanan dengan arah terobosan
  6. Stop loss target adalah RRR (default 2.0) kali tinggi interval
  7. Pada saat yang sama, set tracking stop loss dengan default 8 unit perubahan minimum, disesuaikan dengan pergerakan harga ke arah yang menguntungkan

Logika kunci dari strategi ini adalah menangkap terobosan dalam arah harga pada awal periode perdagangan, yang biasanya mengisyaratkan kemungkinan munculnya tren berikutnya. Dengan menggunakan mekanisme tracking stop loss, strategi ini dapat memungkinkan perdagangan yang menguntungkan untuk terus berjalan sambil melindungi yang telah menguntungkan.

Keunggulan Strategis

Setelah analisis mendalam, strategi ini memiliki keuntungan sebagai berikut:

  1. Peluang perdagangan dua jamDengan memperhatikan pembukaan London dan New York pada saat yang bersamaan, strategi ini dapat menangkap fluktuasi pada dua periode perdagangan utama, meningkatkan peluang perdagangan.
  2. Pelacakan mekanisme stop lossPerbedaan antara Stop Loss dan Fixed Stop Loss adalah bahwa Tracking Stop Loss dapat melindungi keuntungan dan memungkinkan perdagangan yang menguntungkan untuk terus berlanjut, sehingga meningkatkan tingkat keuntungan rata-rata.
  3. Pengendalian risiko yang sempurnaStrategi menggunakan pengaturan stop loss dinamis berdasarkan volatilitas (ukuran interval) untuk membuat manajemen risiko lebih sesuai dengan kondisi pasar.
  4. KustomisasiPengguna dapat menyesuaikan RR, ukuran interval minimum, tracking stop loss, dan penggunaan filter EMA untuk berbagai jenis perdagangan dan preferensi risiko pribadi.
  5. Filter indikator teknisOpsi 5 menit EMA Filter Condition membantu menghindari perdagangan berlawanan dan meningkatkan kualitas perdagangan.
  6. Batas satu transaksi per periodeStrategi yang dibangun dalam trading signals memastikan bahwa trading hanya dilakukan sekali dalam satu periode dan menghindari biaya dan risiko yang ditimbulkan oleh trading yang sering terjadi.

Risiko Strategis

Meskipun strategi ini dirancang dengan baik, ada risiko potensial berikut:

  1. Risiko Penembusan Palsu: Harga mungkin akan segera kembali ke bawah setelah pecah seketika di batas zona, menyebabkan stop loss. Untuk menghadapi risiko ini, Anda dapat mempertimbangkan untuk menambahkan mekanisme konfirmasi, seperti meminta harga untuk bertahan untuk waktu tertentu atau mencapai tingkat tertentu sebelum membuka posisi.
  2. Masalah pengelolaan danaStrategi: Default menggunakan jumlah kontrak tetap untuk perdagangan, mungkin tidak cocok untuk semua ukuran dana. Disarankan untuk menyesuaikan ukuran posisi sesuai dengan ukuran akun dan toleransi risiko.
  3. Risiko Optimasi ParameterParameter yang dioptimalkan secara berlebihan dapat menyebabkan adaptasi kurva yang tidak baik dalam lingkungan pasar di masa depan. Perhatian harus diberikan pada pengujian stabilitas parameter.
  4. Ketergantungan lingkungan pasarStrategi ini dapat sering memicu stop loss di pasar yang bergejolak dan tanpa tren yang jelas.
  5. Masalah pengaturan zona waktuKode menggunakan zona waktu New York, pastikan untuk menggunakan pengaturan zona waktu yang sama dengan platform perdagangan, jika tidak, mungkin menyebabkan sinyal perdagangan yang salah.
  6. Dampak Hari Raya: Hari perdagangan khusus dan hari libur dapat mempengaruhi kinerja strategi, strategi tidak menyertakan logika penyaringan hari libur.

Arah optimasi strategi

Berdasarkan analisis strategi, berikut ini adalah beberapa arah optimasi yang mungkin:

  1. Menambahkan mekanisme verifikasiHal ini dapat dipertimbangkan untuk menambahkan kondisi konfirmasi tambahan setelah harga terobosan, seperti volume transaksi terobosan, harga terus-menerus beberapa garis K tetap di arah terobosan, dan lain-lain, untuk mengurangi kerugian yang disebabkan oleh terobosan palsu.
  2. Manajemen Dana Dinamis: Mengatur ukuran posisi berdasarkan volatilitas pasar dan dinamika skala akun untuk mengoptimalkan rasio risiko-pengembalian.
  3. Filter lingkungan pasarIntroduksi indikator volatilitas atau indikator kekuatan tren untuk menghentikan perdagangan dalam situasi pasar yang tidak sesuai dengan strategi penembusan.
  4. Konfirmasi multi-periode: Menggabungkan arah tren dengan siklus waktu yang lebih lama, hanya berdagang di arah yang sesuai dengan tren besar.
  5. Optimalkan waktu masukPertimbangkan untuk menggunakan harga kembali ke titik support / resistance yang penting, bukan langsung masuk ke titik terobosan, untuk mendapatkan harga yang lebih baik.
  6. Tambahkan waktu penyaringanAnalisis kinerja historis dari berbagai hari dan periode perdagangan, menghindari periode yang tidak berkinerja baik
  7. Analisis korelasi multi-varietasPertimbangkan hubungan antara varietas perdagangan yang berbeda, dan hindari memegang beberapa posisi yang sangat relevan pada saat yang sama.

Meringkaskan

Strategi perdagangan kuantitatif penembusan yang dilacak untuk menghentikan kerugian adalah sistem perdagangan terobosan yang dirancang untuk jam buka di dua pusat keuangan London dan New York. Dengan menangkap pergerakan harga dan arah pada awal pembukaan, digabungkan dengan mekanisme penembusan yang dilacak, strategi ini dapat memaksimalkan potensi keuntungan sambil mengendalikan risiko. Meskipun ada risiko seperti terobosan palsu dan ketergantungan pada lingkungan pasar, tetapi dengan pengaturan parameter yang masuk akal dan kondisi penyaringan tambahan, stabilitas dan kemampuan keuntungan dari strategi dapat ditingkatkan lebih lanjut.

Kode Sumber Strategi
/*backtest
start: 2024-04-27 00:00:00
end: 2025-04-25 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/

//@version=6
strategy("ORB-LD-NY-Trail Strategy", overlay=true,
     default_qty_type=strategy.fixed, default_qty_value=1,
     calc_on_order_fills=true, calc_on_every_tick=true)

// =========================
// USER INPUTS
// =========================
riskReward      = input.float(2.0, "Risk-Reward Ratio", minval=1.0)
minBoxSize      = input.float(2.0, "Minimum Box Size (points)")
trailStopTicks  = input.int(8, "Trailing Stop (ticks)", minval=1)
useEmaFilter    = input.bool(false, "Use 5-min EMA Filter?")

tickSize        = syminfo.mintick         // auto-detect min tick for symbol
trailStopOffset = trailStopTicks * tickSize
emaSource       = request.security(syminfo.tickerid, "5", ta.ema(close, 200))  // 5-min chart EMA

// =========================
// SESSION TIMES
// =========================
londonStart = timestamp("America/New_York", year, month, dayofmonth, 3, 0)
londonEnd   = timestamp("America/New_York", year, month, dayofmonth, 3, 15)
nyStart     = timestamp("America/New_York", year, month, dayofmonth, 9, 30)
nyEnd       = timestamp("America/New_York", year, month, dayofmonth, 9, 45)

inLondon = time >= londonStart and time <= londonEnd
inNY     = time >= nyStart and time <= nyEnd

// =========================
// ONE TRADE PER SESSION FLAGS
// =========================
var bool londonTraded = false
var bool nyTraded     = false

// =========================
// LONDON BOX
// =========================
var float londonHigh    = na
var float londonLow     = na
var float londonBoxHigh = na
var float londonBoxLow  = na

if inLondon
    if na(londonHigh)
        londonBoxHigh := na
        londonBoxLow  := na
        londonTraded  := false
    londonHigh := na(londonHigh) ? high : math.max(londonHigh, high)
    londonLow  := na(londonLow)  ? low  : math.min(londonLow,  low)

if not inLondon and na(londonBoxHigh) and not na(londonHigh) and not na(londonLow)
    londonBoxHigh := londonHigh
    londonBoxLow  := londonLow
    londonHigh    := na
    londonLow     := na

if time > londonEnd and not na(londonBoxHigh) and not londonTraded
    boxRange = londonBoxHigh - londonBoxLow
    if boxRange >= minBoxSize
        // Standard SL/TP logic
        longSL  = londonBoxHigh - boxRange
        longTP  = londonBoxHigh + boxRange * riskReward
        shortSL = londonBoxLow  + boxRange
        shortTP = londonBoxLow  - boxRange * riskReward

        // === LONDON LONG ===
        condLong1 = close[1] <= londonBoxHigh
        condLong2 = close > londonBoxHigh
        condLong3 = (not useEmaFilter) or (close > emaSource)

        if condLong1 and condLong2 and condLong3
            strategy.entry("London Long", strategy.long)
            strategy.exit("Exit London Long", from_entry="London Long",
                          stop=longSL, limit=longTP,
                          trail_points=trailStopOffset)
            londonTraded := true

        // === LONDON SHORT ===
        condShort1 = close[1] >= londonBoxLow
        condShort2 = close < londonBoxLow
        condShort3 = (not useEmaFilter) or (close < emaSource)

        if not londonTraded and condShort1 and condShort2 and condShort3
            strategy.entry("London Short", strategy.short)
            strategy.exit("Exit London Short", from_entry="London Short",
                          stop=shortSL, limit=shortTP,
                          trail_points=trailStopOffset)
            londonTraded := true

// =========================
// NY BOX
// =========================
var float nyHigh    = na
var float nyLow     = na
var float nyBoxHigh = na
var float nyBoxLow  = na

if inNY
    if na(nyHigh)
        nyBoxHigh := na
        nyBoxLow  := na
        nyTraded  := false
    nyHigh := na(nyHigh) ? high : math.max(nyHigh, high)
    nyLow  := na(nyLow)  ? low  : math.min(nyLow,  low)

if not inNY and na(nyBoxHigh) and not na(nyHigh) and not na(nyLow)
    nyBoxHigh := nyHigh
    nyBoxLow  := nyLow
    nyHigh    := na
    nyLow     := na

if time > nyEnd and not na(nyBoxHigh) and not nyTraded
    boxRange = nyBoxHigh - nyBoxLow
    if boxRange >= minBoxSize
        longSL  = nyBoxHigh - boxRange
        longTP  = nyBoxHigh + boxRange * riskReward
        shortSL = nyBoxLow  + boxRange
        shortTP = nyBoxLow  - boxRange * riskReward

        // === NY LONG ===
        condNYLong1 = close[1] <= nyBoxHigh
        condNYLong2 = close > nyBoxHigh
        condNYLong3 = (not useEmaFilter) or (close > emaSource)

        if condNYLong1 and condNYLong2 and condNYLong3
            strategy.entry("NY Long", strategy.long)
            strategy.exit("Exit NY Long", from_entry="NY Long",
                          stop=longSL, limit=longTP,
                          trail_points=trailStopOffset)
            nyTraded := true

        // === NY SHORT ===
        condNYShort1 = close[1] >= nyBoxLow
        condNYShort2 = close < nyBoxLow
        condNYShort3 = (not useEmaFilter) or (close < emaSource)

        if not nyTraded and condNYShort1 and condNYShort2 and condNYShort3
            strategy.entry("NY Short", strategy.short)
            strategy.exit("Exit NY Short", from_entry="NY Short",
                          stop=shortSL, limit=shortTP,
                          trail_points=trailStopOffset)
            nyTraded := true

// Visual session background
bgcolor(inLondon ? color.new(color.fuchsia, 85) : na)
bgcolor(inNY     ? color.new(color.green,   85) : na)