
Chiến lược giao dịch theo dõi thông minh hai đường cong là một chiến lược theo dõi xu hướng dựa trên đường cong và một chỉ số cụ thể. Chiến lược này sử dụng hai thiết lập tham số khác nhau để xây dựng kênh bằng đường cong và kết hợp với các chỉ số OTT để thiết lập giới hạn trên và dưới của kênh để thực hiện theo dõi thông minh về xu hướng giá.
Chiến lược này chủ yếu sử dụng hai trung bình di động và các chỉ số OTT để xây dựng kênh thích ứng, các nguyên tắc cụ thể như sau:
Tính đường MAvg nhanh, với giá đóng cửa CLOSE và đường trung bình tùy chỉnh là đầu vào, có chiều dài 5;
Theo MAvg và tỷ lệ phần trăm thiết lập, tính toán đường dẫn đường dài và đường ngắn ở vị trí Stop;
Tính toán giá kênh OTT dựa trên trạng thái trống, tính toán MT di động kênh trong chỉ số OTT;
Khi giá phá vỡ OTT, nó sẽ tạo ra tín hiệu giao dịch.
Việc xây dựng các kênh thích ứng cho phép chiến lược theo dõi xu hướng thay đổi giá trong thời gian thực và tạo ra tín hiệu giao dịch.
Chiến lược này có những ưu điểm sau:
Chiến lược này cũng có một số rủi ro:
Đối với các rủi ro trên, có thể cải thiện và tối ưu hóa bằng cách tối ưu hóa tham số, kết hợp với các chỉ số khác hoặc các tín hiệu lọc cơ bản.
Chiến lược này có thể được tối ưu hóa theo các hướng sau:
Chiến lược này nói chung là một chiến lược theo dõi xu hướng dựa trên kênh song song song và chỉ số OTT, ý tưởng cốt lõi là xây dựng kênh thích ứng và tạo tín hiệu giao dịch bằng cách đột phá. Chiến lược này có một số ưu điểm, nhưng cũng có thể cải thiện.
/*backtest
start: 2023-02-11 00:00:00
end: 2024-02-17 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")