Terobosan osilasi - Strategi Perubahan Struktur Pasar

Penulis:ChaoZhang, Tanggal: 2023-12-05 15:17:01
Tag:

img

Oscillation Breakthrough - Market Structure Shift Strategy (ICT_MSS) adalah strategi mengikuti tren yang mengidentifikasi pergeseran struktur pasar menggunakan hubungan antara kerangka waktu yang berbeda.

Logika Strategi

Logika inti dari strategi ini adalah menggunakan pola engulfing jangka pendek ke bawah dan ke atas sebagai sinyal untuk pergeseran struktur pasar jangka panjang. Secara khusus, strategi secara bersamaan memantau jangka waktu yang lebih lama (misalnya 60m bar) dan jangka waktu yang lebih pendek (misalnya 15m bar). Ketika garis merah engulfing ke bawah muncul pada jangka waktu yang lebih pendek sementara garis jangka waktu yang lebih panjang berwarna hijau, ditentukan bahwa struktur pasar telah terjadi dan posisi pergeseran panjang diambil. Ketika garis hijau engulfing ke atas muncul pada jangka waktu yang lebih pendek sementara garis jangka waktu yang lebih panjang berwarna merah, ditentukan bahwa struktur pasar yang bergeser telah terjadi dan posisi pendek diambil.

Setelah memasuki posisi arah, strategi menggunakan jangka waktu pendek tinggi/rendah untuk mengatur stop loss untuk mengendalikan risiko.

Analisis Keuntungan

Keuntungan dari strategi ini adalah:

  1. Menggunakan hubungan jangka waktu menghindari tertipu oleh kebisingan dari jangka waktu tunggal.

  2. Otomatis menentukan arah tren baru. Perubahan struktur pasar secara otomatis memicu entri panjang / pendek tanpa perlu penilaian manual.

  3. Pengendalian risiko yang efektif. jangka waktu pendek tinggi/rendah yang digunakan untuk pengendalian risiko membantu membatasi kerugian perdagangan tunggal.

  4. Menggunakan jangka waktu pendek ekstrim untuk masuk dan stop loss dapat membantu mengendalikan drawdown sampai batas tertentu.

Analisis Risiko

Risiko utama dari strategi ini adalah:

  1. Risiko penilaian struktur pasar yang tidak benar. Sinyal mungkin gagal ketika kebisingan jangka pendek tinggi. Parameter jangka waktu perlu disesuaikan.

  2. Risiko pembalikan tren. Strategi berjuang untuk mengendalikan penarikan selama pembalikan berbentuk V. Algoritma stop loss perlu disesuaikan.

  3. Risiko ketidakcocokan parameter. Kombinasi jangka waktu panjang / pendek yang salah menyebabkan kualitas sinyal yang buruk dan membutuhkan pengujian optimasi.

Arahan Optimasi

Arah optimalisasi lebih lanjut untuk strategi meliputi:

  1. Tambahkan filter tren untuk menghindari sinyal yang salah selama pembalikan tren.

  2. Optimalkan pencocokan parameter timeframe untuk meningkatkan kualitas sinyal.

  3. Menggunakan pembelajaran mesin untuk optimal mengambil keuntungan / berhenti kerugian.

  4. Tambahkan filter tambahan seperti tren jangka waktu yang lebih besar.

  5. Memperluas varian strategi untuk membentuk ensemble strategi.

Kesimpulan

Strategi ICT_MSS adalah strategi trend berikut yang dapat diandalkan secara keseluruhan. Strategi ini secara otomatis menentukan arah tren baru berdasarkan perubahan struktur pasar dan juga memiliki kontrol risiko yang baik. Langkah selanjutnya adalah peningkatan lebih lanjut untuk meningkatkan kualitas sinyal, mengoptimalkan keluar, dan mencegah pembalikan untuk menjadikannya strategi kelas komersial.


/*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)
//

Lebih banyak