Strategi perdagangan pita volatilitas breakout


Tanggal Pembuatan: 2023-10-07 09:59:11 Akhirnya memodifikasi: 2023-10-07 09:59:11
menyalin: 0 Jumlah klik: 658
1
fokus pada
1617
Pengikut

Ringkasan

Strategi ini didasarkan pada prinsip Brin Belt Breakout, yang melakukan operasi reverse ketika harga benar-benar menerobos uptrend atau downtrend. Strategi ini dapat menangkap gerakan equity yang kembali setelah fluktuasi yang tidak biasa, yang berlaku untuk pedagang aktif yang mencari keuntungan yang efisien.

Prinsip

Strategi ini menggunakan Bollinger Bands untuk mendefinisikan kisaran fluktuasi pasar saat ini. Ketika harga membentuk pilar matahari atau pilar matahari yang lengkap dan benar-benar menerobos Bollinger Bands ke atas atau ke bawah, berarti pasar mencapai kondisi fluktuasi tinggi dan harga akan berbalik kembali ke arah kesetaraan.

Secara khusus, strategi ini memperhitungkan rel tengah, rel atas, dan rel bawah pada harga penutupan 20 garis K di Bollinger Bands. Ini menghasilkan sinyal plus ketika harga lebih rendah dari rel bawah dan harga penutupan lebih rendah dari harga bukaan. Ini menghasilkan sinyal shorting ketika harga lebih tinggi dari rel atas dan harga penutupan lebih tinggi dari harga bukaan.

Keunggulan

Keuntungan utama dari strategi ini adalah:

  1. Menggunakan pita Brin untuk menilai tingkat fluktuasi pasar dan mengidentifikasi kondisi yang tidak normal.

  2. Breakout point berfungsi sebagai stop loss yang dapat mengontrol risiko secara efektif.

  3. Kembali ke orbit tengah dengan tujuan yang masuk akal dan menghindari terlalu banyak pengejaran.

  4. Filter kabel K lengkap untuk meningkatkan kualitas sinyal.

  5. Pengaturan parameter sederhana, mudah diterapkan dan dioptimalkan.

  6. Logika yang jelas dan mudah dipahami, kode yang sederhana dan elegan.

Risiko

Strategi ini juga memiliki risiko sebagai berikut:

  1. Parameter Brin yang salah dapat menyebabkan kegagalan.

  2. Sebuah terobosan bisa menjadi awal dari sebuah tren baru, dan ada risiko untuk keluar lebih awal.

  3. Target di orbit tengah mungkin terlalu konservatif untuk menghasilkan keuntungan berkelanjutan.

  4. “Kalau tidak ada penambahan, maka bisa saja terjadi kerosakan”, kata dia.

  5. Di tengah-tengah tren yang bergejolak, mungkin terjadi transaksi yang sering dan tidak perlu.

Arah optimasi

Strategi ini dapat dioptimalkan dengan mempertimbangkan:

  1. Evaluasi kekuatan tren, penyesuaian parameter atau frekuensi perdagangan.

  2. Terkait dengan indikator lain, waktu masuk yang optimal ditentukan.

  3. Stop loss disesuaikan dengan volatilitas.

  4. Mengoptimalkan penentuan target awal untuk mendapatkan keuntungan yang lebih besar.

  5. Bergabunglah dengan mekanisme re-entry untuk mengoptimalkan keuntungan.

  6. Penilaian kredibilitas terobosan untuk menghindari kesalahan transaksi.

Meringkaskan

Strategi ini didasarkan pada prinsip terobosan Brin, cocok untuk pedagang aktif yang mengejar keuntungan jangka pendek. Keuntungan adalah kontrol risiko yang jelas, kelemahan adalah kemungkinan awal keluar dari lapangan dan ruang keuntungan terbatas.

Kode Sumber Strategi
/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 00:00:00
period: 3h
basePeriod: 15m
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/
// © Bishnu103

//@version=4
strategy(title="Full Candle Outside BB [v1.0][Bishnu103]",shorttitle="OUTSIDE BB",overlay=true,calc_on_every_tick=true,backtest_fill_limits_assumption=2)

// ***********************************************************************************************************************
// input variables
buy_session         = input(title="Buy Session", type=input.session, defval="0915-1430")
exit_inraday        = input(title="Exit Intraday?", type=input.bool, defval=true)
entry_distance      = input(title="Entry distance from alert", minval=1, maxval=10, defval=3)
show_bb_switch      = input(title="Show BB", type=input.bool, defval=true)
//
bbLength            = input(title="BB Length", minval=1, defval=20)
bbStdDev            = input(title="BB StdDev", minval=1, defval=2)

// ***********************************************************************************************************************
// global variables
long_entry          = false
short_entry         = false
long_exit           = false
short_exit          = false

// variable values available across candles
var entry_price     = 0.0  
var sl_price        = 0.0
var exit_price      = 0.0
var candle_count    = 0

// ***********************************************************************************************************************
// function to return bollinger band values based on candle poition passed 
getBB(pos) => [mBB, uBB, lBB] = bb(close[pos], bbLength, bbStdDev)

// function returns true if current time is within intraday byuing session set in input
BarInSession(sess) => time(timeframe.period, sess) != 0

// ***********************************************************************************************************************
// strategy
//
// get current bb value
[mBB_0,uBB_0,lBB_0] = getBB(0)

// check if full candle outside upper BB
outside_uBB = low > uBB_0 and close <= open
outside_lBB = high < lBB_0 and close >= open

// ***********************************************************************************************************************
// entry conditions 
long_entry   := outside_lBB
short_entry  := outside_uBB

// keep candle count since the alert generated so that order can be cancelled after N number of candle calling it out as invalid alert
candle_count := candle_count + 1
if long_entry or short_entry
    candle_count    := 0

// ***********************************************************************************************************************
// risk management
//
// decide entry and sl price
if long_entry
    entry_price := high
    
if short_entry
    entry_price := low
    
if long_entry
    sl_price    := low
    
if short_entry
    sl_price    := high

// first exit is when price hits middle BB, gets updated for each candle based on it's middle BB value
exit_price  := mBB_0

// ***********************************************************************************************************************
// position sizing
price = if close[0] > 25000
    25000
else
    price = close[0]

qty = 25000/price

// ***********************************************************************************************************************
// entry
//if long_entry and strategy.position_size == 0
//    strategy.entry("BUY", strategy.long, qty, stop=entry_price, comment="BUY @ "+ tostring(entry_price)) 
if long_entry and strategy.position_size == 0
    strategy.order("BUY", strategy.long, qty, stop=entry_price, comment="BUY @ "+ tostring(entry_price))

//if short_entry and strategy.position_size == 0
//    strategy.entry("SELL", strategy.short, qty, stop=entry_price, comment="SELL @ "+ tostring(entry_price))
if short_entry and strategy.position_size == 0
    strategy.order("SELL", strategy.short, qty, stop=entry_price, comment="SELL @ "+ tostring(entry_price))

// cancel an order if N number of candles are completed after alert candle
strategy.cancel_all(candle_count > entry_distance)

// if current time is outside byuing session then do not enter intraday trade
strategy.cancel_all(timeframe.isintraday and not BarInSession(buy_session))

// ***********************************************************************************************************************
// exit
if strategy.position_size > 0
    strategy.cancel("EXIT at MBB", true)
    strategy.cancel("EXIT at SL", true)
    strategy.order("EXIT at MBB", strategy.short, abs(strategy.position_size), limit=exit_price, comment="EXIT TG @ "+ tostring(exit_price))
    strategy.order("EXIT at SL", strategy.short, abs(strategy.position_size), stop=sl_price, comment="EXIT SL @ "+ tostring(sl_price))

if strategy.position_size < 0
    strategy.cancel("EXIT at MBB", true)
    strategy.cancel("EXIT at SL", true)
    strategy.order("EXIT at MBB", strategy.long, abs(strategy.position_size), limit=exit_price, comment="EXIT TG @ "+ tostring(exit_price))
    strategy.order("EXIT at SL", strategy.long, abs(strategy.position_size), stop=sl_price, comment="EXIT SL @ "+ tostring(sl_price))

// if intraday trade, close the trade at open of 15:15 candle //!!!!!!!!!!!!!!!!!!!!! TO BE CORRECTED !!!!!!!!!!!!!!!!!!!!!!!
if timeframe.isintraday and exit_inraday and hour == 15 and minute == 00
    strategy.close("BUY",  when=strategy.position_size > 0, qty=strategy.position_size, comment="EXIT @ "+ tostring(close))
    strategy.close("SELL", when=strategy.position_size < 0, qty=strategy.position_size, comment="EXIT @ "+ tostring(close))

// ***********************************************************************************************************************
// plots    
//
// plot BB
[mBBp,uBBp,lBBp] = getBB(0)
p_mBB = plot(show_bb_switch ? mBBp : na, color=color.teal)
p_uBB = plot(show_bb_switch ? uBBp : na, color=color.teal)
p_lBB = plot(show_bb_switch ? lBBp : na, color=color.teal)
fill(p_uBB,p_lBB,color=color.teal,transp=95)