Strategi Aliran Ayunan Saluran Bollinger Band Pembalikan


Tarikh penciptaan: 2023-10-31 14:30:45 Akhirnya diubah suai: 2023-10-31 14:30:45
Salin: 0 Bilangan klik: 664
1
fokus pada
1617
Pengikut

Strategi Aliran Ayunan Saluran Bollinger Band Pembalikan

Gambaran keseluruhan

Ini adalah strategi trend reversal oscillation berdasarkan saluran Brin. Ia menggunakan saluran Brin atas dan bawah sebagai penilaian trend dan mencari peluang untuk membalikkan masuk apabila harga mendekati sempadan saluran.

Prinsip Strategi

Strategi ini menggunakan Brin’s Belt sebagai penunjuk teknikal utama. Brin’s Belt terdiri daripada purata bergerak n hari dan jangkauan turun naiknya, Brin’s Belt uptrend = purata bergerak n hari + m × n hari standard deviation, Brin’s Belt downtrend = purata bergerak n hari - m × n hari standard deviation. di mana n dan m adalah parameter.

Apabila harga hampir naik, ia menunjukkan bahawa ia sedang dalam trend menaik, tetapi mungkin akan mencapai puncak pembalikan; apabila harga hampir turun, ia menunjukkan bahawa ia sedang dalam trend menurun, tetapi mungkin akan mencapai bahagian bawah pembalikan. Pada masa ini, jika ia berjaya menembusi jalur Brin, ia mungkin akan mula berbalik.

Peraturan-peraturan perdagangan khusus bagi strategi ini adalah seperti berikut:

  1. Apabila harga penutupan lebih besar daripada Brin naik ke landasan, masuk lebih banyak; apabila harga penutupan lebih kecil daripada Brin turun ke landasan, masuk kosong.

  2. Hentikan stop loss dengan purata bergerak n hari sebagai isyarat. Hentikan stop loss apabila harga penutupan pelbagai senario melanggar garis purata n hari; Hentikan stop loss apabila harga penutupan senario kosong melanggar garis purata n hari.

  3. Menggunakan jumlah transaksi tetap, setiap transaksi bernilai tetap.

  4. Menggunakan kaedah pengurusan dana nisbah tetap, menetapkan nisbah keuntungan dan kerugian tetap dan markah penyesuaian pesanan. Apabila mencapai keuntungan nisbah tetap, tambah kedudukan mengikut markah tetap, dan mengurangkan kedudukan apabila rugi.

Analisis kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Gunakan BRI untuk menentukan arah trend, gunakan strategi dagangan berlawanan arah, masuk pada masa harga mungkin berbalik, mengelakkan kebanyakan kejutan, dan meningkatkan kadar kemenangan.

  2. Rata-rata bergerak lebih dipercayai sebagai isyarat stop loss dan boleh mengunci sebahagian besar keuntungan.

  3. Strategi jumlah dagangan tetap adalah mudah dan tidak memerlukan pengiraan yang rumit.

  4. Strategi pengurusan dana peratusan tetap dapat meningkatkan keuntungan dan mengawal risiko dengan menyesuaikan kedudukan.

Analisis risiko

Strategi ini juga mempunyai risiko:

  1. Terdapat kebarangkalian bahawa keputusan Brin menghasilkan isyarat yang salah, yang mungkin menyebabkan kerugian tunggal dalam trend.

  2. Kelemahan purata bergerak boleh menyebabkan penangguhan tidak mencukupi.

  3. Jumlah dagangan tetap tidak dapat menyesuaikan kedudukan mengikut keadaan pasaran, terdapat masalah kedudukan yang terlalu besar.

  4. Kaedah pengurusan dana peratusan tetap memperluaskan kedudukan yang lebih besar dan boleh menyebabkan kerugian yang lebih besar.

Pengendalian: Optimumkan parameter Brin, meningkatkan ketepatan isyarat; dalam kombinasi dengan indikator lain untuk menilai trend; mengurangkan saiz kedudukan tetap dengan sewajarnya; mengurangkan margin penyesuaian kedudukan untuk pengurusan dana peratusan tetap.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Mengoptimumkan parameter Brin, seperti menyesuaikan nilai n dan m, meningkatkan ketepatan penilaian laluan Brin.

  2. Menambah penilaian indikator lain, seperti MACD, KD dan lain-lain, untuk mengelakkan isyarat yang salah oleh Brin.

  3. Menyesuaikan jumlah dagangan tetap dengan jumlah dagangan dinamik, menyesuaikan kedudukan secara fleksibel mengikut keadaan pasaran.

  4. Mengurangkan margin penyesuaian kedudukan dalam pengurusan dana peratusan tetap dan mengoptimumkan keluk dana.

  5. Tambah strategi hentian kerugian, seperti hentian bergerak, hentian pecah selang, dan lain-lain, untuk mengawal risiko lebih lanjut.

  6. Mengoptimumkan parameter, mengoptimumkan kombinasi parameter secara automatik, mencari parameter terbaik untuk mengoptimumkan strategi.

ringkaskan

Strategi ini secara keseluruhannya adalah strategi pembalikan Brin-Band yang lebih tipikal. Ia menggunakan Brin-Band untuk menentukan titik pembalikan trend, dengan setelan stop loss, jumlah perdagangan tetap, dan risiko kawalan pengurusan dana kadar tetap. Berbanding dengan strategi Brin-Band tradisional, strategi ini sebagai strategi pembalikan, secara teori dapat mengelakkan beberapa guncangan dan meningkatkan kebarangkalian keuntungan.

Kod sumber strategi
/*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))