Strategi ini terutamanya mengesan terobosan kotak yang terbentuk oleh titik tinggi dan rendah K-line untuk menilai arah dan kekuatan pasaran. Apabila terdapat terobosan kotak ke atas, strategi akan menetapkan kedudukan panjang di sekitar titik terobosan. Apabila terdapat terobosan kotak ke bawah, strategi akan menetapkan kedudukan pendek di sekitar titik terobosan. Setelah isyarat perdagangan dihasilkan, strategi akan meletakkan pesanan untuk membuka kedudukan dan menetapkan stop loss dan mengambil keuntungan untuk mengawal risiko.
Strategi menentukan tempoh perdagangan dan hanya mencari peluang perdagangan dalam tempoh itu.
Selepas setiap garis K terbentuk, strategi menilai sama ada terdapat kejayaan yang ketara antara harga tertinggi dan terendah dari dua garis K sebelumnya.
2.1 Jika harga terendah pada K-line ke-2 lebih tinggi daripada harga tertinggi pada K-line ke-1, terdapat penembusan kotak menaik.
2.2 Jika harga tertinggi K-line ke-2 adalah lebih rendah daripada harga terendah K-line ke-1, terdapat pecah kotak ke bawah.
Selepas mengesahkan isyarat pecah kotak, strategi menetapkan titik masuk panjang atau pendek di sekitar harga tertinggi atau terendah garis K semasa.
Sebaik sahaja kedudukan dibuka, strategi menetapkan mengambil keuntungan berdasarkan dua kali julat pecah untuk menangkap percepatan trend.
Strategi ini juga menetapkan stop loss pada harga terendah atau tertinggi dari garis K ke-2 untuk mengurangkan risiko kerugian.
Strategi ini mempunyai kelebihan berikut:
Logiknya mudah dan mudah dilaksanakan.
Menggunakan penembusan kotak K-line untuk menilai arah dan kekuatan pasaran mempunyai ketepatan yang tinggi.
Tetapan mengambil keuntungan menangkap peluang daripada percepatan trend.
Terdapat logik stop loss yang jelas untuk mengawal kerugian tunggal.
Idea strategi adalah fleksibel dan boleh disesuaikan mengikut gaya peribadi.
Walau bagaimanapun, terdapat beberapa risiko dalam strategi:
Isyarat pecah mungkin palsu, kerugian tidak dapat dielakkan sepenuhnya.
Stop loss berhampiran titik kemasukan boleh dengan mudah dicetuskan oleh pasaran agresif.
Ia tidak dapat menilai struktur trend dan berhenti sering boleh dicetuskan di pasaran yang terikat julat.
Ia tidak mengambil kira kesan produk dan tempoh masa yang berbeza.
Untuk mengoptimumkan lagi strategi, kita boleh memperbaiki dari aspek berikut:
Tetapkan parameter stop loss adaptif dan ambil keuntungan untuk produk dan tempoh masa yang berbeza.
Tambah penunjuk teknikal untuk penilaian trend untuk mengelakkan terperangkap dalam pasaran yang terikat julat.
Tetapkan peluang tambahan seterusnya untuk mengesan trend berjalan.
Gabungkan penunjuk kelantangan untuk menilai keaslian isyarat pecah dan penapis.
Tambah algoritma pembelajaran mesin untuk membantu menentukan arah trend.
Strategi ini direka berdasarkan prinsip pecah mudah untuk menangkap berjalan dipercepatkan selepas pecah untuk pulangan yang berlebihan. Ia menggunakan berhenti dan keuntungan untuk mengawal risiko.
/*backtest start: 2024-01-07 00:00:00 end: 2024-01-14 00:00:00 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Dvitash //@version=5 strategy("Casper SMC Silver Bullet", shorttitle = "Casper SB", overlay=true, calc_on_order_fills = true) startTime = input(defval = "1000", title = "Start Time") endTime = input(defval = "1600", title = "End Time") contractAmt = input.int(defval = 2, title = "Contract Amount") fvgCol = input.color(defval = color.rgb(63, 61, 179, 41), title = "FVG Color") borderCol = input.color(defval = color.rgb(35, 33, 172, 41), title = "FVG Border Color") fvgExtendLength = input.int(defval = 0, minval = 0, title = "FVG Extend Length") allowedTime = not na(time(timeframe.period, startTime + "-" + endTime +":23456", "America/New_York")) newDay = bool(ta.change(time('D'))) h = hour(time('1'), "America/New_York") var bool fvgDrawn = na var float entryPrice = na var float stopPrice = na var float tpPrice = na if newDay fvgDrawn := false // a_allBoxes = box.all // if array.size(a_allBoxes) > 0 // for i = 0 to array.size(a_allBoxes) - 1 // box.delete(array.get(a_allBoxes, i)) if allowedTime and barstate.isconfirmed and h <= 16 //Long FVG if high[2] < low and not fvgDrawn // box.new(bar_index[2], low, bar_index + fvgExtendLength, high[2], bgcolor = fvgCol, border_color = borderCol) stopPrice := low[2] entryPrice := low tpPrice := entryPrice + (math.abs(low[2] - entryPrice) * 2) // log.info("SL: " + str.tostring(stopPrice) + " Entry: " + str.tostring(entryPrice) + " TP: " + str.tostring(tpPrice)) strategy.entry("long", strategy.long, contractAmt, limit = entryPrice, comment = "Long Entry") fvgDrawn := true if low[2] > high and not fvgDrawn // box.new(bar_index[2], high, bar_index + fvgExtendLength, low[2], bgcolor = fvgCol, border_color = borderCol) stopPrice := high[2] entryPrice := high tpPrice := entryPrice - (math.abs(high[2] - entryPrice) * 2) // log.info("SL: " + str.tostring(stopPrice) + " Entry: " + str.tostring(entryPrice) + " TP: " + str.tostring(tpPrice)) strategy.entry("short", strategy.short, contractAmt, limit = entryPrice, comment = "Short Entry") fvgDrawn := true if h >= 16 strategy.close_all() strategy.cancel_all() strategy.exit("long exit", from_entry = "long", qty = contractAmt, limit = tpPrice, stop = stopPrice, comment = "Long Exit") strategy.exit("short exit", from_entry = "short", qty = contractAmt, limit = tpPrice, stop = stopPrice, comment = "Short Exit")