Strategi ini terutama mendeteksi terobosan kotak yang terbentuk oleh titik tinggi dan rendah dari garis K untuk menilai arah dan kekuatan pasar. Ketika ada terobosan kotak ke atas, strategi akan menetapkan posisi panjang di sekitar titik terobosan. Ketika ada terobosan kotak ke bawah, strategi akan menetapkan posisi pendek di sekitar titik terobosan. Setelah sinyal perdagangan dihasilkan, strategi akan menempatkan pesanan untuk membuka posisi dan mengatur stop loss dan mengambil keuntungan untuk mengendalikan risiko.
Strategi mendefinisikan periode waktu perdagangan dan hanya mencari peluang perdagangan selama periode tersebut.
Setelah setiap K-line terbentuk, strategi menilai apakah ada terobosan yang signifikan antara harga tertinggi dan terendah dari dua K-line sebelumnya.
2.1 Jika harga terendah dari K-line ke-2 lebih tinggi dari harga tertinggi dari K-line ke-1, ada pembobolan kotak ke atas.
2.2 Jika harga tertinggi dari K-line ke-2 lebih rendah dari harga terendah dari K-line ke-1, terjadi penembusan kotak ke bawah.
Setelah mengkonfirmasi sinyal box breakout, strategi menetapkan titik masuk panjang atau pendek di sekitar harga tertinggi atau terendah dari garis K saat ini.
Setelah posisi dibuka, strategi menetapkan mengambil keuntungan berdasarkan dua kali rentang breakout untuk menangkap percepatan tren.
Strategi ini juga menetapkan stop loss pada harga terendah atau tertinggi dari garis K ke-2 untuk mengurangi risiko kerugian.
Strategi ini memiliki keuntungan berikut:
Logikanya sederhana dan mudah diterapkan.
Menggunakan K-line box breakout untuk menilai arah dan kekuatan pasar memiliki akurasi tinggi.
Pengaturan take profit menangkap peluang dari akselerasi tren.
Ada logika stop loss yang jelas untuk mengendalikan kerugian tunggal.
Ide strategi ini fleksibel dan dapat disesuaikan sesuai dengan gaya pribadi.
Namun, ada beberapa risiko dalam strategi:
Sinyal breakout bisa jadi breakout palsu, kerugian tidak bisa dihindari sepenuhnya.
Stop loss di dekat titik masuk dapat dengan mudah dipicu oleh pasar yang agresif.
Ini tidak dapat menilai struktur tren dan berhenti dapat sering dipicu di pasar yang terikat rentang.
Ini tidak mempertimbangkan dampak dari produk dan periode waktu yang berbeda.
Untuk lebih mengoptimalkan strategi, kita dapat meningkatkan dari aspek berikut:
Atur parameter stop loss dan take profit adaptif untuk produk dan periode waktu yang berbeda.
Tambahkan indikator teknis untuk penilaian tren untuk menghindari terjebak di pasar yang terikat rentang.
Atur kesempatan tambahan berikutnya untuk melacak trend run.
Gabungkan indikator volume untuk menilai keaslian sinyal breakout dan filter.
Tambahkan algoritma pembelajaran mesin untuk membantu menentukan arah tren.
Strategi ini dirancang berdasarkan prinsip breakout sederhana untuk menangkap berjalan dipercepat setelah breakout untuk keuntungan berlebih. Ini menggunakan berhenti dan keuntungan untuk mengendalikan 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")