Chiến lược giao dịch Bugra dựa trên đường trung bình động động kép

Tác giả:ChaoZhang, Ngày: 2024-02-19 14:36:37
Tags:

img

Tổng quan

Chiến lược giao dịch Bugra là một chiến lược kết hợp chỉ số OTT được phát triển bởi giáo viên thân Anıl Özekşi của tôi và chỉ số Wavetrend Oscillator của lonestar108. Nó tạo thành một chỉ số giao dịch thành công bằng cách tích hợp hai chỉ số. Chiến lược có thể giao dịch dài và ngắn trong thị trường hai chiều.

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

Chiến lược giao dịch Bugra đầu tiên tính toán đường giữa của Bollinger Bands, đó là đường trung bình động MAvg. Sau đó, dựa trên phạm vi phần trăm và thời gian được thiết lập bởi người dùng, nó tính toán stop loss longStop dài và stop loss shortStop ngắn. Khi giá vượt qua đường ray trên, đi dài. Khi nó vượt qua đường ray dưới, đi ngắn.

Đặc biệt, chỉ số cốt lõi của chiến lược này là chỉ số OTT. Chỉ số OTT bao gồm đường trung bình động và đường ranh giới. Nó điều chỉnh vị trí của đường ranh giới theo sự biến động của thị trường dựa trên một số thuật toán nhất định. Khi giá vượt qua đường ranh giới dưới OTT, đi ngắn. Khi nó vượt qua đường ranh giới trên OTT, đi dài.

Chiến lược này cũng sử dụng chỉ số Wavetrend để xác định hướng của xu hướng giá. Nếu được đánh giá là xu hướng giảm, chỉ đi ngắn, không dài. Nếu được đánh giá là xu hướng tăng, chỉ đi dài, không ngắn.

Phân tích lợi thế

Chiến lược giao dịch Bugra kết hợp các lợi thế của đường trung bình động, Bollinger Bands và chỉ số OTT. Nó có thể tự động điều chỉnh các vị trí dừng lỗ và giảm xác suất dừng lỗ được kích hoạt. Đồng thời, bằng cách kết hợp các chỉ số đánh giá xu hướng, nó tránh bị mắc kẹt trong xu hướng dao động.

Cụ thể, những lợi thế chính của chiến lược này là:

  1. Nó có thể tự động điều chỉnh các vị trí dừng lỗ để kiểm soát rủi ro hiệu quả.
  2. Chỉ số OTT có thể xác định các điểm đảo ngược tương đối chính xác.
  3. Bằng cách kết hợp các chỉ số đánh giá xu hướng, nó tránh bị mắc kẹt trong thị trường dao động.
  4. Các quy tắc của nó tương đối đơn giản và rõ ràng, dễ hiểu và áp dụng.

Phân tích rủi ro

Chiến lược thương mại Bugra cũng có một số rủi ro, chủ yếu là trong các khía cạnh sau:

  1. Trong điều kiện thị trường dữ dội, dừng lỗ có thể bị phá vỡ, gây ra tổn thất lớn hơn.
  2. Các tín hiệu đảo ngược được đánh giá bởi chỉ số OTT có thể không chính xác và có thể xảy ra các tín hiệu bị lỗi.
  3. Phán đoán xu hướng cũng có thể sai. Đi dài trong một dao động giảm sẽ gây ra tổn thất.
  4. Cài đặt tham số không đúng cũng sẽ ảnh hưởng đến hiệu suất chiến lược.

Các biện pháp đối phó chủ yếu là:

  1. Nới lỏng phạm vi dừng lỗ một cách thích hợp để đảm bảo rằng các đường dừng lỗ không dễ dàng được kích hoạt.
  2. Kết hợp với các chỉ số khác để đánh giá độ tin cậy của tín hiệu OTT để tránh tín hiệu sai.
  3. Điều chỉnh các thông số phù hợp để đánh giá xu hướng đáng tin cậy hơn.
  4. Tối ưu hóa các tham số để tìm kết hợp tham số tốt nhất.

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

Vẫn còn chỗ để tối ưu hóa hơn nữa chiến lược giao dịch trung bình động động kép:

  1. Xem xét kết hợp với các chỉ số khác để cải thiện độ chính xác của đánh giá tín hiệu.
  2. Nghiên cứu các thuật toán dừng lỗ thích nghi để các đường dừng lỗ có thể được điều chỉnh theo biến động thị trường.
  3. Thêm các chỉ số khối lượng giao dịch để tránh các vụ phá vỡ sai với khối lượng thấp.
  4. Kiểm tra các loại trung bình động khác nhau để tìm ra trung bình động phù hợp nhất.
  5. Hãy thử học máy và các phương pháp khác để tự động tối ưu hóa các thông số.

Tóm lại

Chiến lược giao dịch trung bình động kép tích hợp các lợi thế của nhiều chỉ số. Nó có thể tự động điều chỉnh các vị trí dừng lỗ, đánh giá tín hiệu đảo ngược và xác định hướng xu hướng. Nó có những lợi thế như khả năng kiểm soát rủi ro mạnh mẽ và dễ hiểu và sử dụng. Nhưng nó cũng có những rủi ro như bị mắc kẹt và tín hiệu không chính xác. Chiến lược này có thể được tối ưu hóa hơn nữa bằng cách kết hợp với các chỉ số khác, nghiên cứu các thuật toán thích nghi, v.v. Nói chung, chiến lược giao dịch trung bình động kép là một chiến lược giao dịch đột phá thực tế.


/*backtest
start: 2023-02-12 00:00:00
end: 2024-02-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Bugra trade strategy", shorttitle="Bugra trade strategy", overlay=true)

// Kullanıcı Girdileri
length = input(5, title="Period", minval=1)
percent = input(1, title="Sihirli Yüzde", type=input.float, step=0.1, minval=0)
mav = input(title="Hareketli Ortalama Türü", defval="VAR", options=["SMA", "EMA", "WMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF"])
wt_n1 = input(10, title="Kanal Periyodu")
wt_n2 = input(21, title="Averaj Uzunluğu")
src = close

// Tarih Aralığı Girdileri
startDate = input(20200101, title="Başlangıç Tarihi (YYYYMMDD)")
endDate = input(20201231, title="Bitiş Tarihi (YYYYMMDD)")

// Tarih Filtresi Fonksiyonu
isDateInRange() => true
// Özel Fonksiyonlar
Var_Func(src, length) =>
    valpha = 2 / (length + 1)
    vud1 = src > src[1] ? src - src[1] : 0
    vdd1 = src < src[1] ? src[1] - src : 0
    vUD = sum(vud1, length)
    vDD = sum(vdd1, length)
    vCMO = (vUD - vDD) / (vUD + vDD)
    varResult = 0.0
    varResult := nz(valpha * abs(vCMO) * src + (1 - valpha * abs(vCMO)) * nz(varResult[1]))
    varResult

Wwma_Func(src, length) =>
    wwalpha = 1 / length
    wwma = 0.0
    wwma := wwalpha * src + (1 - wwalpha) * nz(wwma[1])
    wwma

Zlema_Func(src, length) =>
    zxLag = floor(length / 2)
    zxEMAData = src + (src - src[zxLag])
    zlema = ema(zxEMAData, length)
    zlema

Tsf_Func(src, length) =>
    lrc = linreg(src, length, 0)
    lrs = lrc - linreg(src, length, 1)
    tsf = lrc + lrs
    tsf

getMA(src, length) =>
    ma = mav == "SMA" ? sma(src, length) :
         mav == "EMA" ? ema(src, length) :
         mav == "WMA" ? wma(src, length) :
         mav == "TMA" ? sma(sma(src, ceil(length / 2)), floor(length / 2) + 1) :
         mav == "VAR" ? Var_Func(src, length) :
         mav == "WWMA" ? Wwma_Func(src, length) :
         mav == "ZLEMA" ? Zlema_Func(src, length) :
         mav == "TSF" ? Tsf_Func(src, length) : na

// Strateji Hesaplamaları
MAvg = getMA(src, length)
fark = MAvg * percent * 0.01
longStop = MAvg - fark
longStopPrev = nz(longStop[1], longStop)
longStop := MAvg > longStopPrev ? max(longStop, longStopPrev) : longStop
shortStop = MAvg + fark
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := MAvg < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop

dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir
MT = dir==1 ? longStop: shortStop
OTT = MAvg > MT ? MT*(200+percent)/200 : MT*(200-percent)/200

plot(OTT, title="BugRA", color=color.rgb(251, 126, 9))

// Alım ve Satım Koşulları
longCondition = crossover(src, OTT) and isDateInRange()
shortCondition = crossunder(src, OTT) and isDateInRange()

// Strateji Giriş ve Çıkış Emirleri
if (longCondition)
    strategy.entry("Long", strategy.long)

if (shortCondition)
    strategy.close("Long")


Thêm nữa