Strategi Mengikuti Tren Bollinger Band Adaptif Dua Arah


Tanggal Pembuatan: 2024-02-04 15:30:46 Akhirnya memodifikasi: 2024-02-04 15:30:46
menyalin: 4 Jumlah klik: 349
1
fokus pada
1166
Pengikut

Strategi Mengikuti Tren Bollinger Band Adaptif Dua Arah

Ringkasan

Strategi ini menggunakan indikator BRI bidirectional untuk mengidentifikasi arah tren, dan dalam kombinasi dengan harga pasar untuk melakukan stop loss tracking, untuk mencapai efisiensi tinggi dalam perdagangan trend tracking.

Prinsip Strategi

  1. Brin tengah, atas dan bawah rel berdasarkan siklus tertentu
  2. Jika harga naik, Anda akan melakukan pelacakan lebih banyak, dan jika harga turun, Anda akan melakukan pelacakan kosong.
  3. Masuk cepat dengan harga pasar
  4. Setting Stop Loss Posisi, Stop Stop Posisi untuk Manajemen Posisi

Analisis Keunggulan

  1. Adaptasi terhadap indikator BRI, sensitif terhadap fluktuasi pasar, dan dapat dengan cepat menilai perubahan tren
  2. Menggunakan harga pasar untuk cepat masuk ke lapangan, mengurangi risiko slippage
  3. Stop loss otomatis, kontrol risiko ketat, kunci keuntungan

Analisis risiko

  1. Blinking sendiri memiliki keterbelakangan dan tidak dapat sepenuhnya menghindari terobosan palsu.
  2. Harga pasar tidak bisa dikendalikan
  3. Stop loss dan stop loss harus diatur dengan baik

Arah optimasi

  1. Menyesuaikan parameter Brin Belt untuk mengoptimalkan sensitivitas penilaian tren
  2. Menambahkan penyaringan untuk indikator seperti volume transaksi atau MACD
  3. Optimalkan pengaturan stop loss dan stop loss

Meringkaskan

Strategi ini memanfaatkan sepenuhnya keunggulan Bollinger Bands untuk menentukan arah tren dan perubahan, menggabungkan dengan daftar harga pasar yang keluar cepat untuk melakukan pelacakan dua arah, dengan asumsi pengendalian risiko, untuk mendapatkan keuntungan tambahan. Dengan mengoptimalkan parameter Bollinger Bands lebih lanjut, menambahkan indikator penyaringan tambahan, menyesuaikan logika stop loss, dan lain-lain, kinerja strategi yang lebih baik dapat diperoleh.

Kode Sumber Strategi
/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 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/
// © CryptoRox

//@version=4
//Paste the line below in your alerts to run the built-in commands.
//{{strategy.order.alert_message}}
strategy("Automated - Fibs with Market orders", "Strategy", true)

//Settings 
testing = input(false, "Live")
//Use epochconverter or something similar to get the current timestamp.
starttime = input(1600976975, "Start Timestamp") * 1000
//Wait XX seconds from that timestamp before the strategy starts looking for an entry.
seconds = input(60, "Start Delay") * 1000
testPeriod = true


leverage = input(1, "Leverage")
tp = input(1.0, "Take Profit %") / leverage
dca = input(-1.0, "DCA when < %") / leverage *-1
fibEntry = input("1", "Entry Level", options=["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"])

//Strategy Calls
equity = strategy.equity
avg = strategy.position_avg_price
symbol = syminfo.tickerid
openTrades = strategy.opentrades
closedTrades = strategy.closedtrades
size = strategy.position_size

//Fibs
lentt = input(60, "Pivot Length")
h = highest(lentt)
h1 = dev(h, lentt) ? na : h
hpivot = fixnan(h1)
l = lowest(lentt)
l1 = dev(l, lentt) ? na : l
lpivot = fixnan(l1)
z = 400
p_offset= 2
transp = 60
a=(lowest(z)+highest(z))/2
b=lowest(z)
c=highest(z)

fib0 = (((hpivot - lpivot)) + lpivot)
fib1 = (((hpivot - lpivot)*.21) + lpivot)
fib2 = (((hpivot - lpivot)*.3) + lpivot)
fib3 = (((hpivot - lpivot)*.5) + lpivot)
fib4 = (((hpivot - lpivot)*.62) + lpivot)
fib5 = (((hpivot - lpivot)*.7) + lpivot)
fib6 = (((hpivot - lpivot)* 1.00) + lpivot)
fib7 = (((hpivot - lpivot)* 1.27) + lpivot)
fib8 = (((hpivot - lpivot)* 2) + lpivot)
fib9 = (((hpivot - lpivot)* -.27) + lpivot)
fib10 = (((hpivot - lpivot)* -1) + lpivot)

notna = nz(fib10[60])
entry = 0.0
if fibEntry == "1"
    entry := fib10
if fibEntry == "2"
    entry := fib9
if fibEntry == "3"
    entry := fib0
if fibEntry == "4"
    entry := fib1
if fibEntry == "5"
    entry := fib2
if fibEntry == "6"
    entry := fib3
if fibEntry == "7"
    entry := fib4
if fibEntry == "8"
    entry := fib5
if fibEntry == "9"
    entry := fib6
if fibEntry == "10"
    entry := fib7
profit = avg+avg*(tp/100)
pause = 0
pause := nz(pause[1])
paused = time < pause

fill = 0.0
fill := nz(fill[1])
count = 0.0
count := nz(fill[1])

filled = count > 0 ? entry > fill-fill/100*dca : 0
signal = testPeriod and notna and not paused and not filled ? 1 : 0

neworder = crossover(signal, signal[1])
moveorder = entry != entry[1] and signal and not neworder ? true : false
cancelorder = crossunder(signal, signal[1]) and not paused
filledorder = crossunder(low[1], entry[1]) and signal[1]

last_profit = 0.0
last_profit := nz(last_profit[1])

// if neworder and signal
//     strategy.order("New", 1, 0.0001, alert_message='New Order|e=binancefuturestestnet s=btcusdt b=long q=0.0011 fp=' + tostring(entry)) 
// if moveorder
//     strategy.order("Move", 1, 0.0001, alert_message='Move Order|e=binancefuturestestnet s=btcusdt b=long c=order|e=binancefuturestestnet s=btcusdt b=long q=0.0011 fp=' + tostring(entry))
if filledorder and size < 1
    fill := entry
    count := count+1 
    pause := time + 60000
    p = close+close*(tp/100)
    strategy.entry("Buy", 1, 1,  alert_message='Long|e=binancefuturestestnet s=btcusdt b=long q=0.0011 t=market')
if filledorder and size >= 1
    fill := entry
    count := count+1 
    pause := time + 60000
    strategy.entry("Buy", 1, 1,  alert_message='Long|e=binancefuturestestnet s=btcusdt b=long q=0.0011 t=market')

// if cancelorder and not filledorder
//     pause := time + 60000
//     strategy.order("Cancel", 1, 0.0001,  alert_message='Cancel Order|e=binancefuturestestnet s=btcusdt b=long c=order')

if filledorder
    last_profit := profit

closeit = crossover(high, profit) and size >= 1
if closeit
    strategy.entry("Close ALL", 0, 0, alert_message='Close Long|e=binancefuturestestnet s=btcusdt b=long c=position t=market')
    count := 0
    fill := 0.0
    last_profit := 0.0
    
//Plots
// bottom = signal ? color.green : filled ? color.red : color.white
// plot(entry, "Entry", bottom)