Strategi ini adalah berdasarkan prinsip penembusan Brin Belt, yang melakukan operasi terbalik apabila harga benar-benar menembusi ke atas atau ke bawah. Ia dapat menangkap pergerakan garis ekuivalen yang kembali selepas turun naik yang luar biasa, yang sesuai untuk peniaga aktif yang mencari keuntungan yang cekap.
Strategi ini menggunakan Bollinger Bands untuk mentakrifkan jangkauan turun naik pasaran semasa. Apabila harga membentuk tiang matahari atau tiang sinaran yang lengkap dan menembusi Bollinger Bands sepenuhnya ke atas atau ke bawah, ia menunjukkan bahawa pasaran mencapai keadaan turun naik yang tinggi dan harga akan berbalik ke arah garis ekuivalen.
Khususnya, strategi ini menggunakan harga penutupan 20 garis K untuk mengira rantaian tengah, rantaian atas, dan rantaian bawah dalam rantaian Brin. Apabila harga lebih rendah daripada rantaian bawah dan harga penutupan lebih rendah daripada harga pembukaan, ia menghasilkan isyarat lebih banyak. Apabila harga lebih tinggi daripada rantaian atas dan harga penutupan lebih tinggi daripada harga pembukaan, ia menghasilkan isyarat kosong.
Kelebihan utama strategi ini ialah:
Menggunakan tali pinggang Brin untuk menilai kadar turun naik pasaran dan mengenal pasti keadaan yang tidak normal.
Titik penembusan berfungsi sebagai titik berhenti untuk mengawal risiko dengan berkesan.
Kembali ke orbit tengah menetapkan kedudukan sasaran yang munasabah untuk mengelakkan terlalu banyak mengejar dan jatuh.
Filter K lengkap untuk penembusan palsu, meningkatkan kualiti isyarat.
Pengaturan parameter mudah, mudah dilaksanakan dan dioptimumkan.
Logiknya jelas dan mudah difahami, kodnya ringkas dan elegan.
Strategi ini juga mempunyai risiko:
Parameter Brin yang tidak betul boleh menyebabkan kegagalan.
Ia boleh menjadi permulaan kepada trend baru, dan ada risiko untuk berlepas lebih awal.
Target di orbit tengah mungkin terlalu konservatif dan tidak dapat menghasilkan keuntungan yang berterusan.
Ia adalah satu daripada beberapa perkara yang perlu diwaspadai di Malaysia.
Ia boleh menyebabkan perdagangan yang tidak perlu dan kerap berlaku dalam keadaan yang tidak stabil.
Strategi ini boleh dioptimumkan dengan mengambil kira:
Untuk menilai kekuatan trend, menyesuaikan parameter atau kekerapan dagangan.
Menentukan masa kemasukan terbaik, bersama-sama dengan petunjuk lain.
Sesuai dengan tahap turun naik, anda boleh menyesuaikan stop loss anda.
Mengoptimumkan penetapan sasaran pertama untuk menjana keuntungan yang lebih baik.
Bergabung dengan mekanisme kemasukan semula untuk menoptimumkan keuntungan
Penilaian kebolehpercayaan untuk mengelakkan kesalahan transaksi.
Strategi ini berdasarkan prinsip terobosan Brin, sesuai untuk peniaga aktif yang mencari keuntungan jangka pendek. Kelebihan adalah kawalan risiko yang jelas, kelemahan adalah kemungkinan untuk keluar lebih awal dan ruang keuntungan terhad.
/*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)