
Ini adalah strategi reversal oscillatory trend yang didasarkan pada Brin Belt Channel. Ini menggunakan Brin Belt Up and Down Channel sebagai penilaian tren dan mencari peluang untuk masuk ke dalam reversal ketika harga mendekati batas channel.
Strategi ini menggunakan indikator Brin Belt sebagai indikator teknis utama. Brin Belt terdiri dari rata-rata bergerak n hari dan rentang turun-turunnya, Brin Belt uptrend = rata-rata bergerak n hari + m × n hari standar deviasi, Brin Belt downtrend = rata-rata bergerak n hari - m × n hari standar deviasi.
Ketika harga mendekati uptrend, berarti saat ini sedang dalam tren naik, tetapi mungkin akan mencapai puncak reversal; ketika harga mendekati downtrend, berarti saat ini sedang dalam tren turun, tetapi mungkin akan mencapai dasar reversal. Pada saat ini jika berhasil menerobos Bollinger Bands ke downtrend, maka mungkin akan mulai reversal.
Aturan transaksi khusus untuk strategi ini adalah sebagai berikut:
Ketika harga close out lebih besar dari Brin naik, masuk lebih banyak; ketika harga close out lebih kecil dari Brin turun, masuk lebih sedikit.
Stop loss dengan n hari moving average sebagai sinyal. Stop loss beraksi ketika harga close out multiples melanggar n hari rata-rata; stop loss beraksi ketika harga close out kosong melanggar n hari rata-rata.
Dengan volume transaksi tetap, jumlah transaksi tetap.
Menggunakan metode pengelolaan dana dengan rasio tetap, menetapkan rasio untung-rugi tetap dan margin penyesuaian pesanan. Untuk mencapai keuntungan dengan rasio tetap, posisi harus ditingkatkan dengan rasio tetap, dan untuk kerugian, posisi harus dikurangi.
Strategi ini memiliki keuntungan sebagai berikut:
Menggunakan BRI untuk menentukan arah tren, mengambil strategi perdagangan berlawanan arah, masuk pada saat harga mungkin berbalik, menghindari sebagian besar guncangan, dan meningkatkan tingkat kemenangan.
Moving Average adalah sinyal stop loss yang lebih dapat diandalkan dan dapat mengunci sebagian besar keuntungan.
Strategi volume transaksi tetap sederhana dan tidak memerlukan perhitungan yang rumit.
Strategi pengelolaan dana dengan rasio tetap dapat memperluas keuntungan dan mengendalikan risiko dengan menyesuaikan posisi.
Strategi ini juga memiliki beberapa risiko:
Ada kemungkinan bahwa penilaian Brin mendatangkan sinyal yang salah, yang dapat membalikkan tren menjadi kerugian tunggal.
Keterlambatan rata-rata bergerak dapat menyebabkan stop loss yang tidak memadai.
Volume perdagangan tetap tidak dapat menyesuaikan posisi sesuai dengan kondisi pasar, ada masalah posisi terlalu besar terlalu kecil.
Metode pengelolaan dana dengan rasio tetap memperluas posisi yang lebih besar dan dapat menyebabkan kerugian yang lebih besar.
Penanggulangan: Optimalkan parameter Brin-band, meningkatkan akurasi sinyal; Kombinasi dengan indikator lain untuk menilai tren; Penurunan ukuran posisi tetap yang sesuai; Penurunan tingkat penyesuaian posisi manajemen dana rasio tetap.
Strategi ini dapat dioptimalkan dalam beberapa hal:
Mengoptimalkan parameter Brin Belt, seperti menyesuaikan nilai n dan m, meningkatkan akurasi penilaian jalur Brin Belt.
Menambahkan penilaian indikator lain, seperti MACD, KD, dan lain-lain, untuk menghindari sinyal yang salah dari Brin.
Mengubah volume transaksi tetap menjadi volume transaksi dinamis, menyesuaikan posisi secara fleksibel sesuai dengan kondisi pasar.
Menurunkan tingkat penyesuaian posisi dalam pengelolaan dana dengan rasio tetap, dan mengoptimalkan kurva dana.
Tambahkan strategi stop loss, seperti stop loss bergerak, stop loss yang terganggu, dan lain-lain, untuk mengendalikan risiko lebih lanjut.
Mengoptimalkan parameter, mengoptimalkan kombinasi parameter secara otomatis, mencari parameter terbaik untuk mengoptimalkan strategi.
Strategi ini secara keseluruhan adalah strategi reversal Bollinger Bands yang lebih khas. Strategi ini menggunakan Bollinger Bands untuk menentukan titik balik tren, dengan setelan stop loss, volume perdagangan tetap, dan pengendalian risiko pengelolaan dana rasio tetap. Dibandingkan dengan strategi Bollinger Bands tradisional, strategi ini sebagai strategi reversal, secara teoritis dapat menghindari sebagian guncangan dan meningkatkan probabilitas keuntungan.
/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-30 00:00:00
period: 1h
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/
// © gsanson66
//This strategy uses the well-known Bollinger Bands Indicator
//@version=5
strategy("BOLLINGER BANDS BACKTESTING", shorttitle="BB BACKTESTING", overlay=true, initial_capital=1000, default_qty_type=strategy.cash, default_qty_value=950, commission_type=strategy.commission.percent, commission_value=0.18)
//----------------------------------------FUNCTIONS---------------------------------------//
//@function Displays text passed to `txt` when called.
debugLabel(txt, color) =>
label.new(bar_index, high, text = txt, color=color, style = label.style_label_lower_right, textcolor = color.black, size = size.small)
//@function which looks if the close date of the current bar falls inside the date range
inBacktestPeriod(start, end) => (time >= start) and (time <= end)
//---------------------------------------USER INPUTS--------------------------------------//
//Technical parameters
bbLength = input.int(defval=20, minval=1, title="BB Length", group="Technical Parameters")
mult = input.float(defval=2, minval=0.1, title="Standard Deviation Multipler", group="Technical Parameters")
smaLength = input.int(defval=20, minval=1, title="SMA Exit Signal Length", group="Technical Parameters")
//Money Management
fixedRatio = input.int(defval=400, minval=1, title="Fixed Ratio Value ($)", group="Money Management")
increasingOrderAmount = input.int(defval=200, minval=1, title="Increasing Order Amount ($)", group="Money Management")
//Backtesting period
startDate = input(title="Start Date", defval=timestamp("1 Jan 2020 00:00:00"), group="Backtesting Period")
endDate = input(title="End Date", defval=timestamp("1 July 2024 00:00:00"), group="Backtesting Period")
//----------------------------------VARIABLES INITIALISATION-----------------------------//
strategy.initial_capital = 50000
//Exit SMA
smaExit = ta.sma(close, smaLength)
//BB Calculation
basis = ta.sma(close, bbLength)
dev = mult * ta.stdev(close, bbLength)
upperBB = basis + dev
lowerBB = basis - dev
//Money management
equity = strategy.equity - strategy.openprofit
var float capital_ref = strategy.initial_capital
var float cashOrder = strategy.initial_capital * 0.95
//Backtesting period
bool inRange = na
//------------------------------CHECKING SOME CONDITIONS ON EACH SCRIPT EXECUTION-------------------------------//
//Checking if the date belong to the range
inRange := true
//Checking performances of the strategy
if equity > capital_ref + fixedRatio
spread = (equity - capital_ref)/fixedRatio
nb_level = int(spread)
increasingOrder = nb_level * increasingOrderAmount
cashOrder := cashOrder + increasingOrder
capital_ref := capital_ref + nb_level*fixedRatio
if equity < capital_ref - fixedRatio
spread = (capital_ref - equity)/fixedRatio
nb_level = int(spread)
decreasingOrder = nb_level * increasingOrderAmount
cashOrder := cashOrder - decreasingOrder
capital_ref := capital_ref - nb_level*fixedRatio
//Checking if we close all trades in case where we exit the backtesting period
if strategy.position_size!=0 and not inRange
strategy.close_all()
debugLabel("END OF BACKTESTING PERIOD : we close the trade", color=color.rgb(116, 116, 116))
//-----------------------------------EXIT SIGNAL------------------------------//
if strategy.position_size > 0 and close < smaExit
strategy.close("Long")
if strategy.position_size < 0 and close > smaExit
strategy.close("Short")
//----------------------------------LONG/SHORT CONDITION---------------------------//
//Long Condition
if close > upperBB and inRange
qty = cashOrder/close
strategy.entry("Long", strategy.long, qty)
//Short Condition
if close < lowerBB and inRange
qty = cashOrder/close
strategy.entry("Short", strategy.short, qty)
//---------------------------------PLOTTING ELEMENT----------------------------------//
plot(smaExit, color=color.orange)
upperBBPlot = plot(upperBB, color=color.blue)
lowerBBPlot = plot(lowerBB, color=color.blue)
fill(upperBBPlot, lowerBBPlot, title = "Background", color=strategy.position_size>0 ? color.rgb(0, 255, 0, 90) : strategy.position_size<0 ? color.rgb(255, 0, 0, 90) : color.rgb(33, 150, 243, 95))