Tài nguyên đang được tải lên... tải...

Chiến lược theo dõi xu hướng Bollinger Bands thích nghi

Tác giả:ChaoZhang, Ngày: 2024-02-04 15:30:46
Tags:

img

Tổng quan

Chiến lược này sử dụng chỉ số Bollinger Bands thích nghi để xác định hướng xu hướng và lệnh thị trường để theo dõi xu hướng với dừng lỗ cho giao dịch xu hướng hiệu quả.

Chiến lược logic

  1. Tính toán giữa, trên và dưới dải Bollinger dựa trên một khoảng thời gian nhất định
  2. Đi dài khi giá vượt qua dải trên và đi ngắn khi phá vỡ dải dưới để theo dõi xu hướng
  3. Sử dụng lệnh thị trường để nhập nhanh
  4. Đặt lệnh dừng lỗ và lấy lợi nhuận để quản lý vị trí

Ưu điểm

  1. Dải Bollinger thích nghi nhạy cảm với biến động thị trường để đánh giá nhanh chóng sự đảo ngược xu hướng
  2. Các lệnh thị trường đảm bảo nhập khẩu nhanh chóng với rủi ro trượt giảm
  3. Tự động dừng lỗ và lấy lợi nhuận kiểm soát nghiêm ngặt rủi ro và khóa trong lợi nhuận

Rủi ro

  1. Bollinger Bands có một số bản chất chậm lại, không thể hoàn toàn tránh breakouts sai
  2. Các lệnh thị trường không thể kiểm soát chính xác giá thực thi
  3. Cần thiết lập đúng mức dừng lỗ và lấy lợi nhuận

Hướng dẫn tối ưu hóa

  1. Điều chỉnh các thông số Bollinger để có độ nhạy tốt hơn trong việc đánh giá xu hướng
  2. Thêm các chỉ số như khối lượng hoặc MACD để lọc các đột phá sai
  3. Tối ưu hóa mức dừng lỗ và lấy lợi nhuận

Tóm lại

Chiến lược này sử dụng đầy đủ lợi thế của Bollinger Bands trong việc đánh giá hướng xu hướng và kết hợp các lệnh thị trường thoát nhanh để theo dõi xu hướng từ cả hai bên, đạt được lợi nhuận dư thừa dưới rủi ro được kiểm soát. Những cải tiến hơn nữa như tối ưu hóa các thông số Bollinger, thêm các chỉ số lọc và điều chỉnh logic dừng lỗ / lấy lợi nhuận có thể dẫn đến hiệu suất chiến lược tốt hơn. Với logic rõ ràng và dễ thực hiện, đây là một chiến lược giao dịch theo dõi xu hướng hiệu quả và đáng tin cậy.


/*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)

Thêm nữa