Strategi Momentum antara Siklus Terbatas

Penulis:ChaoZhang, Tanggal: 2023-09-20 14:59:37
Tag:

Gambaran umum

Ide inti dari strategi ini adalah untuk menentukan arah tren menggunakan pola lilin tercakup antara siklus dan menggunakannya sebagai sinyal masuk. Ketika pola yang terkandung antara siklus muncul yang berisi lilin sebelumnya, kita dapat menyimpulkan bahwa ini adalah titik di mana tren sedang terbalik, pada titik ini kita dapat pergi panjang pada pemecahan di atas tertinggi sebelumnya atau pergi pendek pada pemecahan di bawah rendah sebelumnya, dengan setup stop loss dan take profit yang tepat.

Logika Strategi

  1. Periksa apakah pola yang terkandung di antara siklus terjadi. Logika spesifiknya adalah: lilin saat ini lebih rendah dari lilin sebelumnya, dan lilin saat ini lebih rendah dari lilin sebelumnya.

  2. Tentukan apakah lilin sebelumnya bullish atau bearish. Jika penutupan lebih tinggi dari terbuka, itu bullish. Jika penutupan lebih rendah dari terbuka, itu bearish.

  3. Jika lilin sebelumnya bullish dan pola yang terkandung terjadi, tempatkan buy stop order pada lilin sebelumnya s tinggi ditambah 10% dari kisarannya.

  4. Jika lilin sebelumnya menurun dan pola yang terkandung terjadi, letakkan pesanan stop jual pada low lilin sebelumnya dikurangi 10% dari kisarannya.

  5. Setelah perintah stop dipicu dan posisi dibuka, atur stop loss dan ambil keuntungan.

  6. Jika pola bar dalam lainnya terbentuk, tutup posisi yang ada terlebih dahulu dan kemudian tempatkan pesanan baru yang sedang menunggu.

Analisis Keuntungan

Keuntungan dari strategi ini meliputi:

  1. Ini memanfaatkan logika yang melekat pada candlesticks dan memberikan waktu masuk yang akurat.

  2. Aturan yang sederhana dan mudah diikuti untuk perdagangan yang sebenarnya.

  3. Stop loss dan take profit berdasarkan kisaran candle sebelumnya membantu mengendalikan risiko.

  4. Pesenan baru yang menunggu ditempatkan setiap kali pola yang memenuhi syarat muncul, memungkinkan kita untuk mengikuti tren baru.

Analisis Risiko

Ada juga beberapa risiko:

  1. Pola yang terkandung tidak selalu menghasilkan pembalikan atau percepatan tren.

  2. Jarak stop loss mungkin terlalu kecil untuk menahan fluktuasi besar di pasar.

  3. Target mengambil keuntungan mungkin terlalu luas, mencegah keuntungan tepat waktu.

  4. Strategi ini lebih bergantung pada tren pasar. Potensi keuntungan terbatas selama konsolidasi.

  5. Frekuensi perdagangan yang tinggi menyebabkan biaya transaksi yang tinggi.

Solusi:

  1. Tambahkan indikator lain untuk mengkonfirmasi sinyal dan mengurangi sinyal palsu.

  2. Memperluas stop loss sedikit tetapi tidak lebih dari 50% dari kisaran candle sebelumnya.

  3. Memperpendek target mengambil keuntungan ke sekitar 50% dari kisaran lilin sebelumnya.

  4. Mengoptimalkan manajemen modal, mengurangi ukuran posisi individu untuk berbagai pasar.

  5. Meredakan kriteria masuk untuk mengurangi frekuensi perdagangan.

Arahan Optimasi

Beberapa cara untuk mengoptimalkan strategi:

  1. Tambahkan indikator tren seperti MACD untuk menentukan arah tren, menghindari whipsaws selama konsolidasi.

  2. Gunakan teknik stop loss yang lebih canggih seperti trailing stop atau profit protection stop loss.

  3. Uji stop loss yang berbeda dan ambil rasio keuntungan untuk menemukan parameter yang optimal.

  4. Tambahkan logika masuk kembali untuk menangkap tren lagi setelah stop loss.

  5. Mengoptimalkan ukuran posisi berdasarkan volatilitas pasar.

  6. Mengoptimalkan manajemen modal, seperti ukuran posisi pecahan tetap.

  7. Uji strategi pada produk dan kerangka waktu yang berbeda.

Kesimpulan

Singkatnya, ini adalah strategi yang menggunakan pola yang terkandung di antara siklus untuk menentukan titik balik tren dan menempatkan pesanan tertunda untuk menangkap pembalikan tren. Ini memiliki keuntungan sinyal masuk yang jelas, aturan sederhana, dan risiko yang dapat dikendalikan, tetapi juga memiliki beberapa risiko sinyal palsu dan ruang untuk optimasi. Kita dapat lebih meningkatkan stabilitas dan profitabilitasnya dengan menggabungkan filter tren, mengoptimalkan stop, menyesuaikan ukuran posisi dll. Ini lebih cocok untuk pasar yang sedang tren, dan perlu dioptimalkan dan diuji untuk kondisi pasar yang berbeda sebelum penggunaannya sebenarnya memaksimalkan efektivitasnya.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-03-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3

// Inside Bar Momentum Strategy
// As defined on Babypips.com
// https://www.babypips.com/trading/forex-inside-bar-20170113

// strategy("Babypips: Inside Bar Momentum Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=5)

From_Year  = input(defval = 2018, title = "From Year")
From_Month = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
From_Day   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
To_Year    = input(defval = 9999, title = "To Year")
To_Month   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
To_Day     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
Start  = timestamp(From_Year, From_Month, From_Day, 00, 00)  // backtest start window
Finish = timestamp(To_Year, To_Month, To_Day, 23, 59)        // backtest finish window
Window = true

Stop_Buy_Perc  = input(10, "Stop Buy Order Percentage From Previous Candle's Range")/100
Stop_Loss_Perc = input(20, "Stop Loss Distance from High/Low of Previous Candle")/100
Take_Prof_Perc = input(80, "Take Profit Distance from High/Low of Previous Candle")/100

Risk = input(2, "Percentage Of EQUITY to risk per trade", step=0.1, minval=0, maxval=100)/100

Inside_Bar = high[1] > high[0] and low[1] < low[0]
Prev_Range = high[1] - low[1]
Bullish = open[1] < close[1]
Bearish = open[1] > close[1]

// Get Key Levels 
Long_Stop_Buy_Level   = high[1] + (Prev_Range * Stop_Buy_Perc)
Short_Stop_Buy_Level  = low[1]  - (Prev_Range * Stop_Buy_Perc)
Long_Stop_Loss_Level  = high[1] - (Prev_Range * Stop_Loss_Perc)
Short_Stop_Loss_Level = low[1]  + (Prev_Range * Stop_Loss_Perc)
Long_Take_Prof_Level  = high[1] + (Prev_Range * Take_Prof_Perc)
Short_Take_Prof_Level = low[1]  - (Prev_Range * Take_Prof_Perc)

// Position Sizing
long_qty = floor((strategy.equity * Risk) / (Long_Stop_Buy_Level - Long_Stop_Loss_Level))
short_qty = floor((strategy.equity * Risk) / (Short_Stop_Loss_Level - Short_Stop_Buy_Level))

// -------------------------- LONG CONDITIONS --------------------------------//
// The first candlestick must be bullish (green or white) and if the second 
// candlestick is completely contained by the first, set a buy stop order at 
// the first candle’s high plus 10% of its range (high minus low).

// Place the stop loss at the first candle’s high minus 20% of its range 
// and set the target at the first candle’s high plus 80% of its range

// If another inside bar pattern forms, the current position should be closed 
// or the pending buy/sell order must be canceled and entry orders must be 
// updated to the latest candles.

Long_Condition = Window and Inside_Bar and Bullish
if (Long_Condition)
    // Incase we still have a buy stop order in the market
    strategy.cancel_all()
    // Close any existing positions according to the rules
    strategy.close_all()
    strategy.entry("Bullish IB", strategy.long, stop=Long_Stop_Buy_Level)
    strategy.exit("Bullish Exit","Bullish IB", stop=Long_Stop_Loss_Level, limit=Long_Take_Prof_Level)
    
// -------------------------- SHORT CONDITIONS -------------------------------//
// The first candlestick must be bearish (red or black) and if the second 
// candlestick is completely contained by the first, set a sell stop order at 
// the first candle’s low minus 10% of its range (high minus low).

// Place the stop loss at the first candle’s low plus 20% of its range and 
// set the target at the first candle’s low minus 80% of its range.

// If another inside bar pattern forms, the current position should be closed 
// or the pending buy/sell order must be canceled and entry orders must be 
// updated to the latest candles.

Short_Condition = Window and Inside_Bar and Bearish
if (Short_Condition)
    // Incase we still have a buy stop order in the market
    strategy.cancel_all()
    // Close any existing positions according to the rules
    strategy.close_all()
    strategy.entry("Bearish IB", strategy.short, stop=Short_Stop_Buy_Level)
    strategy.exit("Bearish Exit","Bearish IB", stop=Short_Stop_Loss_Level, limit=Short_Take_Prof_Level)
    
// ----------------------------- PLOTTING ------------------------------------//
plotshape(Inside_Bar, style=shape.arrowdown, location=location.abovebar, color=purple)


Lebih banyak