Strategi Mengikuti Tren Bollinger Bands Rata-rata Bergerak Ganda


Tanggal Pembuatan: 2023-11-01 14:15:11 Akhirnya memodifikasi: 2023-11-01 14:15:11
menyalin: 0 Jumlah klik: 614
1
fokus pada
1617
Pengikut

Strategi Mengikuti Tren Bollinger Bands Rata-rata Bergerak Ganda

Ringkasan

Strategi ini didasarkan pada garis rata-rata ganda Brin untuk membuat keputusan perdagangan yang mengikuti tren. Ini menggunakan konvergensi dan penyebaran Brin untuk menilai perubahan tren, membeli di dekat Brin di bawah rel, menjual di dekat rel atas, mencapai harga rendah dan tinggi, dan keluar dengan keuntungan.

Prinsip Strategi

Strategi ini menggunakan dua versi Brin-Band, Simple Brin-Band dan Enhanced Brin-Band.

Sederhana Brinband menggunakan harga closeout SMA perhitungan rel, meningkatkan Brinband menggunakan harga closeout EMA perhitungan rel.

Kedua orbit di atas dan di bawah dihitung dengan menggunakan perbedaan standar ± N kali dari orbit tengah.

Strategi ini menilai tren berdasarkan jarak antara Brin dan down. Ketika spread lebih kecil dari set threshold, berarti sedang memasuki kisaran tren dan dapat melakukan perdagangan mengikuti tren.

Secara khusus, ketika harga mendekati downtrend, Anda membeli lebih banyak, dan ketika harga mendekati uptrend, Anda menjual posisi kosong. Stop loss adalah persentase stop loss tetap, dan Anda dapat memilih untuk mengaktifkan tracking stop loss.

Profit target tergantung pada pilihan untuk melakukan posisi kosong di dekat rel tengah atau rel atas.

Strategi ini juga dapat memilih untuk menjual hanya jika memastikan keuntungan, untuk mencegah kerugian.

Analisis Keunggulan

Strategi ini memiliki keuntungan sebagai berikut:

  1. Integrasi Garis Garis Ganda untuk Membuat Keputusan Lebih Efisien

Aplikasi Brin-band sederhana dan Brin-band yang diperkuat, dapat membandingkan efek dari dua jenis Brin-band, memilih versi yang lebih baik, meningkatkan efisiensi pengambilan keputusan.

  1. Tingkat kecenderungan berdasarkan lebar jalur Brin

Ketika BRI menyempit, yang berarti masuk ke dalam tren, maka Anda lebih mungkin untuk mengikuti tren.

  1. Fleksibilitas Stop Loss

Stop loss menggunakan persentase tetap untuk mengendalikan kerugian tunggal. Anda juga dapat memilih untuk berhenti di tengah atau di dekat lintasan, dan mengaktifkan tracking stop loss untuk mengunci lebih banyak keuntungan.

  1. Perlindungan terhadap kerugian

Penjualan yang dilakukan hanya dengan memastikan keuntungan, dapat mencegah pertumbuhan kerugian.

Analisis risiko

Strategi ini juga memiliki risiko sebagai berikut:

  1. Risiko penarikan diri

Mengikuti perdagangan tren sendiri memiliki risiko penarikan diri, dan tekanan psikologis yang diperlukan untuk menanggung kerugian berturut-turut.

  1. Risiko Guncangan

Strategi ini tidak bekerja dengan baik dan perlu untuk menghentikan perdagangan untuk menunggu tren kembali terbentuk.

  1. Stop loss yang dipicu risiko

Stop loss persentase tetap mungkin terlalu radikal dan perlu disesuaikan dengan stop loss yang lebih ringan seperti stop loss ATR.

Arah optimasi

Strategi ini dapat dioptimalkan dengan:

  1. Optimalkan parameter Brinet

Anda dapat menguji parameter rata-rata yang berbeda, perkalian standard deviasi, dan menemukan kombinasi parameter Brin yang lebih cocok untuk pasar yang berbeda.

  1. Filter dalam kombinasi dengan indikator lain

Untuk mengurangi perdagangan di pasar yang bergoyang, indikator seperti MACD, KD, dan lain-lain dapat disaring berdasarkan sinyal pita Brin.

  1. Optimalkan strategi Stop Loss

Anda dapat menguji berbagai modus stop loss, atau mengoptimalkan stop loss berdasarkan indikator seperti amplitudo dan ATR.

  1. Pengelolaan dana yang optimal

Mengoptimalkan manajemen posisi untuk setiap transaksi dan menguji strategi pelunasan yang berbeda.

Meringkaskan

Strategi ini mengintegrasikan keuntungan dari indikator ganda Brin Belt, berdasarkan luas Brin Belt channel menilai tingkat tren, untuk melakukan perdagangan low-absorb tinggi-terjun selama tren. Sementara mengatur mekanisme scientific stop loss untuk mengendalikan risiko. Strategi ini dapat meningkatkan stabilitas lebih lanjut melalui optimasi parameter dan kombinasi dengan penyaringan indikator lainnya.

Kode Sumber Strategi
/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 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/
// © JCGMarkets 

//@version=4
strategy("B.Bands | Augmented | Intra-range | Long-Only", shorttitle = "BB|A|IR|L", initial_capital=5000, commission_value=0.075, slippage = 1, overlay = true)

//Technical Indicators Data
show_simp   = input(false, title="Trade on Simple Bollinger Bands ", type= input.bool, group="Select Strategy System")
show_augm   = input(true, title="Trade on Augmented Bollinger Bands", type= input.bool, group="Select Strategy System") 
periods     = input(20, title="Periods for Moving Average", type =input.integer, minval = 2, step = 1, group="Technical Inputs")
std         = input(2, title="Std", type = input.float, minval=0.1 , step = 0.1, group="Technical Inputs")

// Strategy data
max_spread_bb   = input(20000.0, title="Max Spread Tolerance Beetween Bands", type=input.float, step=0.1, group="Strategy Inputs")
entry_source    = input(close, title="Entry data source", type=input.source, group="Strategy Inputs")
exit_source     = input(high, title="Exit data source", type=input.source, group="Strategy Inputs")
take_profit     = input("middle", title = "Profit to band:", options = ["middle", "opposite"], group="Strategy Inputs")
stop_loss       = input(3.00, title="Stop Loss %", type=input.float, step=0.05, group="Strategy Inputs")
trailing        = input(false, title="Activate trailing stop?", type = input.bool, group="Strategy Inputs")
stop_perc       = input(6.00, title="Trailing %", type=input.float, step=0.125, group="Strategy Inputs") * 0.01
sell_profit     = input(false, title="Only sell in profit (Stop Loss still active) ", type= input.bool, group="Strategy Inputs")


var SL = 0.0
var SLT= 0.0


//Simple BB Calculation -> adapt if needed with different std for upper-lower, sma-ema, etc 
middle_sim = sma(close, periods)

//Augmented BB Calculation -> adapt if needed with different std for upper lower, etc
middle_augm  = ema(close, periods)
middle_upp = ema(high, periods)
middle_low = ema(low, periods)

//Multiplier
dev      = stdev(close, periods) * std

//Upper & Lower Bands
upper = (middle_sim + dev)
lower = (middle_sim - dev)

//Augmented Bands
upper_augm = (middle_upp + dev)
lower_augm = (middle_low - dev)

//Bands Spread
spread   = upper - lower
spread_augm   = upper_augm - lower_augm

//From date
filter_from    =   input(  true,    title="===> From", group="Date Control")
from_y         =   input(  2010,    title = "from year", group="Date Control")
from_m         =   input(     1,    title = "from month", minval =1, maxval=12, group="Date Control")
from_d         =   input(     1,    title = "from day",  minval=1, maxval=31, group="Date Control")

//To date
filter_to   =    input( true,   title="===> To", group="Date Control")
to_y        =    input( 2030,   title = "To year", group="Date Control")
to_m        =    input(    1,   title = "To month", minval =1, maxval=12, group="Date Control")
to_d        =    input(    1,  title = "To day",  minval=1, maxval=31, group="Date Control")

// Date Condition
In_date() =>  true

in_position = strategy.position_size > 0 

// Trailing stop 
SLT := if in_position and In_date()
    stop_inicial = entry_source * (1 - stop_perc)
    max(stop_inicial, SLT[1])
else
    0

slts = (low <= SLT) and (trailing == true)


//Essential Trade logics
entry_long = (entry_source <= lower) and (spread < max_spread_bb)
entry_long_augm = (entry_source <= lower_augm) and (spread_augm < max_spread_bb)

// Simple Bollinger Conditions

if (not in_position and show_simp and In_date())
    if entry_long
        // Trigger buy order
        position_size = round( strategy.equity / close ) // All available equity for this strategy example
        strategy.entry("Entry", strategy.long, qty = position_size )
        SL := close * (1 - (stop_loss / 100)) // You could determine wether or not implement stop loss with bool input and if condition here.


if in_position and show_simp and not sell_profit and In_date()
    //Exits if not sell in profit
    if take_profit == "middle" 
        strategy.exit("Target", "Entry", limit = middle_sim, stop = SL, comment="Exit")
    if take_profit == "opposite"
        strategy.exit("Target", "Entry", limit = upper, stop = SL, comment="Exit")    

if in_position and show_simp and sell_profit and In_date()
    //Exits if sell in profit
    if take_profit == "middle" 
        strategy.exit("Target", "Entry", limit = (strategy.openprofit > 0 ? middle_sim: na), stop = SL, comment="Exit")
    if take_profit == "opposite"
        strategy.exit("Target", "Entry", limit = (strategy.openprofit > 0 ? upper: na), stop = SL, comment="Exit")    



if in_position and show_simp and slts and In_date()
    //Trailing activation
    strategy.close("Entry", comment="SLT")

if not In_date()
    //Exit due out of date range
    strategy.close("Entry", comment="Out of date range")



// Augmented Bollinger Conditions

if (not in_position and show_augm and In_date()) 
    if entry_long_augm
        // Trigger buy order
        position_size = round( strategy.equity / close )
        strategy.entry("Entry_A", strategy.long, qty = position_size )
        SL := close * (1 - (stop_loss / 100) )

if in_position and show_augm and not sell_profit and In_date()
    //Exits and not sell in profit
    if take_profit == "middle"
        strategy.exit("Target", "Entry_A", limit = middle_augm, stop = SL, comment="Exit")
    if take_profit == "opposite"
        strategy.exit("Target", "Entry_A", limit = upper_augm, stop = SL, comment="Exit")            
        

if in_position and show_augm and sell_profit and In_date() 
    //Exit only in profit
    if take_profit == "middle"
        strategy.exit("Target", "Entry_A", limit = (strategy.openprofit > 0 ? middle_augm:na), stop = SL, comment="Exit")
    if take_profit == "opposite"
        strategy.exit("Target", "Entry_A", limit = (strategy.openprofit > 0 ? upper_augm: na) , stop = SL, comment="Exit") 


if in_position  and show_augm and slts and In_date()
    //Trigger trailing
    strategy.close("Entry_A", comment="SLT")
    
if not In_date()
    //Out of date trigger
    strategy.close("Entry_A", comment= "Out of date range")




// Plotting

plot(in_position ? SL > 0 ? SL : na : na , style = plot.style_circles, color = color.red, title = "Stop Loss")
plot(in_position ? trailing ? SLT > 0 ? SLT : na : na : na , style = plot.style_circles, color = color.blue, title = "Trailing Stop" )

s = plot(show_simp ? upper : na , color = color.aqua)
plot(show_simp ? middle_sim : na , color=color.red)
i = plot(show_simp ? lower : na , color = color.aqua)
fill(s,i, color=color.new(color.aqua,90))


plot(show_augm ? middle_augm : na , color=color.blue)
s_a = plot( show_augm ? upper_augm : na, color=color.orange)
i_a = plot( show_augm ? lower_augm : na, color= color.orange)
fill(s_a,i_a, color=color.new(color.orange, 90))