Chiến lược này là một hệ thống theo dõi xu hướng dựa trên chỉ số Tillson T3 và Twin Optimized Trend Tracker (TOTT). Nó tối ưu hóa việc tạo tín hiệu giao dịch bằng cách kết hợp dao động động lực Williams % R. Chiến lược sử dụng các cài đặt tham số mua và bán riêng biệt, cho phép điều chỉnh độ nhạy linh hoạt cho các điều kiện thị trường khác nhau.
Chiến lược bao gồm ba thành phần cốt lõi: 1. Chỉ số Tillson T3 - Một biến thể tối ưu hóa của Mức trung bình chuyển động nhân tố (EMA) tạo ra một đường xu hướng mượt mà hơn thông qua nhiều tính toán EMA cân nhắc. 2. Twin Optimized Trend Tracker (TOTT) - Một công cụ theo dõi xu hướng thích nghi điều chỉnh dựa trên hành động giá và hệ số biến động, tính toán dải trên và dưới cho các điều kiện mua và bán. 3. Williams % R Indicator - Một dao động động được sử dụng để xác định các điều kiện mua quá mức và bán quá mức.
Logic tạo tín hiệu: - Điều kiện mua: Khi đường T3 vượt trên dải trên TOTT và Williams % R trên -20 (đã bán quá) - Điều kiện bán: Khi đường T3 vượt dưới dải dưới TOTT và Williams % R trên -70
Các đề xuất kiểm soát rủi ro: - Thực hiện các cơ chế dừng lỗ - Đặt giới hạn khối lượng giao dịch - Thêm bộ lọc xác nhận xu hướng
Đây là một xu hướng được cấu trúc tốt theo chiến lược với logic rõ ràng. Thông qua sự kết hợp của chỉ số T3 và TOTT, cùng với bộ lọc Williams %R, nó hoạt động xuất sắc trong các thị trường xu hướng. Mặc dù có một số sự chậm trễ vốn có, chiến lược cho thấy giá trị thực tế tốt và không gian mở rộng thông qua tối ưu hóa tham số và cải thiện quản lý rủi ro.
/*backtest start: 2019-12-23 08:00:00 end: 2025-01-15 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ //@version=6 strategy("FON60DK by leventsah", overlay=true) // Girdi AL t3_length = input.int(5, title="Tillson Per AL", minval=1) t3_opt = input.float(0.1, title="Tillson Opt AL", step=0.1, minval=0) tott_length = input.int(5, title="TOTT Per AL", minval=1) tott_opt = input.float(0.1, title="TOTT Opt AL", step=0.1, minval=0) tott_coeff = input.float(0.006, title="TOTT Coeff AL", step=0.001, minval=0) //GİRDİ SAT t3_lengthSAT = input.int(5, title="Tillson Per SAT", minval=1) t3_optSAT = input.float(0.1, title="Tillson Opt SAT", step=0.1, minval=0) tott_lengthSAT = input.int(5, title="TOTT Per SAT", minval=1) tott_opt_SAT = input.float(0.1, title="TOTT Opt SAT", step=0.1, minval=0) tott_coeff_SAT = input.float(0.006, title="TOTT Coeff SAT", step=0.001, minval=0) william_length = input.int(3, title="William %R Periyodu", minval=1) // Tillson T3 AL t3(src, length, opt) => k = 2 / (length + 1) ema1 = ta.ema(src, length) ema2 = ta.ema(ema1, length) ema3 = ta.ema(ema2, length) ema4 = ta.ema(ema3, length) c1 = -opt * opt * opt c2 = 3 * opt * opt + 3 * opt * opt * opt c3 = -6 * opt * opt - 3 * opt - 3 * opt * opt * opt c4 = 1 + 3 * opt + opt * opt * opt + 3 * opt * opt t3_val = c1 * ema4 + c2 * ema3 + c3 * ema2 + c4 * ema1 t3_val t3_value = t3(close, t3_length, t3_opt) t3_valueSAT = t3(close, t3_lengthSAT, t3_optSAT) // TOTT hesaplaması (Twin Optimized Trend Tracker) Var_Func(src, length) => valpha = 2 / (length + 1) vud1 = math.max(src - src[1], 0) vdd1 = math.max(src[1] - src, 0) vUD = math.sum(vud1, 9) vDD = math.sum(vdd1, 9) vCMO = (vUD - vDD) / (vUD + vDD) var float VAR = na VAR := valpha * math.abs(vCMO) * src + (1 - valpha * math.abs(vCMO)) * nz(VAR[1], src) VAR VAR = Var_Func(close, tott_length) VAR_SAT = Var_Func(close, tott_lengthSAT) //LONG MAvg = VAR fark = MAvg * tott_opt * 0.01 longStop = MAvg - fark longStopPrev = nz(longStop[1], longStop) longStop := MAvg > longStopPrev ? math.max(longStop, longStopPrev) : longStop shortStop = MAvg + fark shortStopPrev = nz(shortStop[1], shortStop) shortStop := MAvg < shortStopPrev ? math.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 + tott_opt) / 200 : MT * (200 - tott_opt) / 200 OTTup = OTT * (1 + tott_coeff) OTTdn = OTT * (1 - tott_coeff) //CLOSE MAvgS = VAR_SAT farkS = MAvgS * tott_opt_SAT * 0.01 longStopS = MAvgS - farkS longStopPrevS = nz(longStopS[1], longStopS) longStopS := MAvgS > longStopPrevS ? math.max(longStopS, longStopPrevS) : longStopS shortStopS = MAvgS + farkS shortStopPrevS = nz(shortStopS[1], shortStopS) shortStopS := MAvgS < shortStopPrevS ? math.min(shortStopS, shortStopPrevS) : shortStopS dirS = 1 dirS := nz(dirS[1], dirS) dirS := dirS == -1 and MAvgS > shortStopPrevS ? 1 : dirS == 1 and MAvgS < longStopPrevS ? -1 : dirS MTS = dirS == 1 ? longStopS : shortStopS OTTS = MAvgS > MTS ? MTS * (200 + tott_opt_SAT) / 200 : MTS * (200 - tott_opt_SAT) / 200 OTTupS = OTTS * (1 + tott_coeff_SAT) OTTdnS = OTTS * (1 - tott_coeff_SAT) // Calculation of Williams %R williamsR = -100 * (ta.highest(high, william_length) - close) / (ta.highest(high, william_length) - ta.lowest(low, william_length)) // Alım koşulu longCondition = (t3_value > OTTup) and (williamsR > -20) // Short koşulu (long pozisyonunu kapatmak için) shortCondition = (t3_valueSAT < OTTdnS) and (williamsR > -70) // Alım pozisyonu açma if (longCondition) strategy.entry("Long", strategy.long) // Short koşulu sağlandığında long pozisyonunu kapama if (shortCondition) strategy.close("Long") // Alım pozisyonu boyunca barları yeşil yapma barcolor(strategy.position_size > 0 ? color.green : na) // Grafikte göstergeleri çizme plot(t3_value, color=color.blue, linewidth=1, title="Tillson AL") plot(OTTup, color=color.green, linewidth=1, title="TOTT Up AL") plot(OTTdn, color=color.red, linewidth=1, title="TOTT Down AL") // Grafikte göstergeleri çizme plot(t3_valueSAT, color=color.blue, linewidth=1, title="Tillson SAT") plot(OTTupS, color=color.green, linewidth=1, title="TOTT Up SAT") plot(OTTdnS, color=color.red, linewidth=1, title="TOTT Down SAT")