
Terobosan osilasi (Oscillation Breakthrough - Market Structure Shift Strategy) adalah strategi pelacakan tren yang menggunakan hubungan antara periode waktu yang berbeda untuk mengidentifikasi perubahan struktur pasar. Strategi ini menggunakan hubungan antara periode waktu yang berbeda sebagai sinyal perubahan struktur pasar untuk menangkap arah tren baru.
Logika inti dari strategi ini adalah memanfaatkan bentuk ke bawah dan ke atas yang menelan periode waktu periode pendek sebagai sinyal dari perubahan struktur pasar periode menengah-panjang. Secara khusus, strategi ini akan secara bersamaan memantau K-garis dari periode waktu periode menengah-panjang (seperti garis 60 menit) dan periode waktu periode pendek (seperti garis 15 menit). Ketika periode pendek muncul K-garis merah yang menelan ke bawah, sementara periode menengah-panjang adalah garis K hijau, anggap struktur pasar berubah, lakukan lebih banyak; ketika periode pendek muncul K-garis hijau yang menelan ke atas, sementara periode menengah-panjang adalah garis K merah, anggap struktur pasar berubah, lakukan kosong.
Setelah masuk ke arah, strategi akan menggunakan harga tertinggi atau terendah dalam periode pendek sebagai stop loss untuk mengendalikan risiko. Ketika harga penutupan K-line dalam periode menengah dan panjang memicu stop loss, strategi akan melangsungkan stop loss.
Strategi ini memiliki keuntungan sebagai berikut:
Sinyal perubahan struktur pasar yang dapat diandalkan. Menggunakan hubungan antara berbagai siklus untuk menilai struktur pasar dan menghindari kebisingan dari satu siklus.
Menentukan arah tren baru secara otomatis. Melakukan lebih banyak shorting secara otomatis ketika sinyal perubahan struktur pasar muncul, tanpa penilaian manual.
Pengendalian risiko di tempat. Pengendalian risiko menggunakan harga tertinggi dan terendah dalam periode singkat, yang membantu mengendalikan kerugian tunggal.
Pengendalian penarikan relatif baik. Menggunakan periode singkat untuk membuka posisi dan menghentikan kerugian, Anda dapat mengendalikan penarikan sampai batas tertentu.
Beberapa risiko utama dari strategi ini adalah sebagai berikut:
Risiko penilaian struktur pasar yang salah. Ketika terlalu banyak kebisingan siklus pendek, sinyal perubahan struktur pasar mungkin gagal dan parameter siklus perlu disesuaikan.
Risiko pembalikan tren. Strategi ini sulit dikendalikan untuk mundur ketika pasar mengalami pembalikan tipe V. Stop loss dapat disesuaikan dengan tepat.
Risiko parameter yang tidak cocok. Parameter jangka panjang dan pendek tidak disetel pada waktu yang tepat, efek sinyal mungkin tidak baik, perlu uji optimasi berulang.
Strategi ini juga dapat dioptimalkan lebih lanjut dari beberapa arah:
Menambahkan indikator akumulasi atau penilaian tren, menghindari sinyal salah dalam pembalikan tren.
Optimalkan pencocokan parameter dalam periode panjang dan pendek, meningkatkan kualitas sinyal.
Mengoptimalkan algoritma Stop Loss Stop Loss dengan menggunakan teknologi seperti Machine Learning.
Menambahkan filter kondisional tambahan untuk sinyal yang menyesatkan, seperti penilaian tren skala besar.
Meningkatkan jenis strategi, mengembangkan strategi derivatif, dan membentuk portofolio strategi.
Shock breakout - Strategi perubahan struktur pasar secara keseluruhan adalah strategi pelacakan yang lebih andal. Ini dapat menggunakan perubahan struktur pasar untuk menentukan arah tren baru secara otomatis, dan pengendalian risiko juga dilakukan dengan baik. Selanjutnya, strategi ini dapat dioptimalkan secara mendalam untuk meningkatkan kualitas sinyal, mengoptimalkan stop loss, dan mencegah reversal, sehingga menjadi produk strategi kelas bisnis.
/*backtest
start: 2022-11-28 00:00:00
end: 2023-12-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © jl01794
//@version=5
strategy(title="ICT_MSS[PROTOTYPE]", overlay=true, initial_capital=10000, currency="USD", margin_long=15, margin_short=15, max_lines_count=500)
// INPUTS
Time_Frame = input.timeframe("60", title="Focused Time Frame")
FTF_LTF = input.timeframe("15", title="Focused Time Frame(LTF)")
//
// SECURITY DATA [FOR ONE TIMEFRAME REFERENCE]
FTF_Close = request.security(syminfo.tickerid, Time_Frame, close)
FTF_Open = request.security(syminfo.tickerid, Time_Frame, open)
FTFLTF_High = request.security(syminfo.tickerid, FTF_LTF, ta.highest(2))
FTFLTF_Low = request.security(syminfo.tickerid, FTF_LTF, ta.lowest(2))
FTFLTF_Close = request.security(syminfo.tickerid, FTF_LTF, close)
FTFLTF_Open = request.security(syminfo.tickerid, FTF_LTF, open)
// TIME BASED CLOSE AND OPEN
_close = FTF_Close
_open = FTF_Open
_LTFclose = FTFLTF_Close
_LTFopen = FTFLTF_Open
// CANDLE STATE
greenCandle = close > open
redCandle = close < open
LTFgreenCandle = FTFLTF_Close > FTFLTF_Open
LTFredCandle = FTFLTF_Close < FTFLTF_Open
// ENGULFING TIMEFRAME REFERENCE
FTF_greenCandle = request.security(syminfo.tickerid, Time_Frame, greenCandle)
FTF_redCandle = request.security(syminfo.tickerid, Time_Frame, redCandle)
FTFLTF_greenCandle = request.security(syminfo.tickerid, FTF_LTF, LTFgreenCandle)
FTFLTF_redCandle = request.security(syminfo.tickerid, FTF_LTF, LTFredCandle)
//--------------------------------------------------------------------------------------------------------------
//ENGULFING_FTF_LTF
B_EnP_mss = FTFLTF_redCandle[1] and // 1E PIVOT BUY
FTFLTF_greenCandle
//
B_EnPs_mss = FTFLTF_greenCandle[1] and // 1E PIVOT SELL
FTFLTF_redCandle
//
//--------------------------------------------------------------------------------------------------------------
display_LTF = timeframe.isintraday and timeframe.multiplier <= 15
//--------------------------------------------------------------------------------------------------------------
// STORED DATAS
var float EH_MSS1 = na
var float EL_MSS1 = na
var bool can_draw = false
var line l1_mss = na
var line l1s_mss = na
//--------------------------------------------------------------------------------------------------------------
// MSS BUY
if (B_EnPs_mss) and (display_LTF)
EH_MSS1 := FTFLTF_High
can_draw := true
l1_mss := line.new(bar_index, EH_MSS1, bar_index -3, EH_MSS1, color=color.purple)
else
if (can_draw)
if (FTFLTF_High > EH_MSS1)
can_draw := false
else
line.set_x2(l1_mss, bar_index)
//
// MSS SELL
if (B_EnP_mss) and (display_LTF)
EL_MSS1 := FTFLTF_Low
can_draw := true
l1s_mss := line.new(bar_index, EL_MSS1, bar_index -3, EL_MSS1, color=color.purple)
else
if (can_draw)
if (FTFLTF_Low < EL_MSS1)
can_draw := false
else
line.set_x2(l1s_mss, bar_index)
//--------------------------------------------------------------------------------------------------------------
// ORDER
// BUY
longCondition_mssB = B_EnPs_mss and FTFLTF_High and close and high[1]
openOr = FTFLTF_High
//SELL
shortCondition_mssS = B_EnP_mss and FTFLTF_Low and close and low[1]
openOrs = FTFLTF_Low
if (longCondition_mssB)
strategy.entry("Buy", strategy.long, 1, stop = openOr, when = longCondition_mssB)
//
if (shortCondition_mssS)
strategy.entry("Sell", strategy.short, 1, stop = openOrs, when = shortCondition_mssS)
//
// EXIT
long_tp = open < FTFLTF_Close[1]
short_tp = open > FTFLTF_Close[1]
//if (long_tp)
//strategy.close("Buy", qty_percent = 100, when = long_tp)
//
//if (short_tp)
//strategy.close("Sell", qty_percent = 100, when = short_tp)
//