Chiến lược theo dõi xu hướng dây chuyền Brin hướng hai

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

双向自适应布林带趋势追踪策略

Thông tin chi tiết

Chiến lược này sử dụng các chỉ số dây chuyền Brin tự điều chỉnh hai chiều để xác định hướng xu hướng và kết hợp với danh sách giá thị trường để theo dõi dừng lỗ, để đạt được giao dịch theo dõi xu hướng hiệu quả cao.

Nguyên tắc chiến lược

  1. Tính theo một chu kỳ nhất định, tính trung tâm, trên và dưới đường ray của Brin
  2. Để xác định giá vượt lên đường, bạn nên theo dõi nhiều hơn, và vượt xuống đường, bạn nên theo dõi không.
  3. Nhập nhanh theo giá thị trường
  4. Thiết lập vị trí dừng lỗ, vị trí dừng tăng để quản lý kho

Phân tích ưu thế

  1. Tự điều chỉnh các chỉ số dây chuyền, nhạy cảm với biến động thị trường, có thể nhanh chóng xác định xu hướng chuyển hướng
  2. Sử dụng giá thị trường để nhanh chóng vào sân, giảm rủi ro điểm trượt
  3. Tự động dừng lỗ, kiểm soát rủi ro chặt chẽ, khóa lợi nhuận

Phân tích rủi ro

  1. Dây nhựa tự nó có độ trễ và không thể tránh hoàn toàn sự đột phá giả
  2. Không thể kiểm soát giá cả giao dịch bằng bảng giá thị trường
  3. Cần thiết lập đúng vị trí và vị trí dừng mất mát

Định hướng tối ưu

  1. Điều chỉnh các tham số của dây chuyền Brin để tối ưu hóa độ nhạy của việc xác định xu hướng
  2. Thêm các chỉ số như khối lượng giao dịch hoặc MACD để lọc các bước đột phá giả
  3. Tối ưu hóa các thiết lập stop loss và stop loss

Tóm lại

Chiến lược này tận dụng lợi thế của việc xác định xu hướng và sự thay đổi, kết hợp với các danh sách giá nhanh chóng ra khỏi thị trường để theo dõi hai chiều và thu được lợi nhuận vượt trội trong trường hợp kiểm soát rủi ro. Hiệu suất chiến lược tốt hơn có thể đạt được bằng cách tối ưu hóa thêm các tham số của dây chuyền Brin, thêm các chỉ số lọc phụ trợ, điều chỉnh logic dừng lỗ dừng lỗ.


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

Nhiều hơn nữa