Chiến lược theo dõi xu hướng rùa xung là một chiến lược theo xu hướng dựa trên các quy tắc giao dịch rùa. Nó sử dụng các chỉ số rùa để xác định xu hướng và kết hợp các số liệu xung để lọc một số giao dịch tiếng ồn. Ưu điểm chính của chiến lược này là khả năng nắm bắt xu hướng giá mạnh và đạt được lợi nhuận dư thừa.
Chiến lược này sử dụng hệ thống đột phá trong Chỉ số Rùa để xác định hướng xu hướng. Cụ thể, khi giá đóng cao hơn mức giá cao nhất trong 20 ngày qua, đó là tín hiệu tăng và đi dài; khi giá đóng thấp hơn mức giá thấp nhất trong 20 ngày qua, đó là tín hiệu giảm và chiến lược đi ngắn.
Để lọc ra một số giao dịch tiếng ồn, chiến lược này cũng kết hợp một yếu tố động lực. Nếu biến động giá thấp hơn 5 ATRs, chiến lược sẽ không tham gia giao dịch. Điều này tránh thiệt hại từ whipsaws trong thị trường bên.
Sau khi mở các vị trí, chiến lược sử dụng N-breakout exits trong các quy tắc Turtle ban đầu để dừng lỗ. Hệ thống này thiết lập stop loss dựa trên giá cao nhất và thấp nhất trong 20 ngày qua. Ví dụ, stop loss cho các vị trí dài sẽ là 2N ATRs dưới mức thấp nhất trong 20 ngày qua. Lợi nhuận cho chiến lược này rất đơn giản - được thiết lập ở mức 10% tổng giá trị tài khoản.
Lợi thế lớn nhất của chiến lược này là nó kết hợp cả việc theo dõi xu hướng và quản lý đà. Hệ thống Rùa có thể nắm bắt chính xác xu hướng trung hạn trong giá mà không bị xáo trộn bởi tiếng ồn thị trường. Bộ lọc đà ATR bổ sung làm giảm thêm số lượng giao dịch không cần thiết, do đó làm tăng rất nhiều tiềm năng lợi nhuận.
Cụ thể, chiến lược này có những điểm mạnh sau đây:
Mặc dù có tiềm năng tối ưu hóa hơn nữa, chiến lược cũng mang theo một số rủi ro để phòng ngừa:
Dựa trên các rủi ro trên, các cơ hội tối ưu hóa chính bao gồm:
Tổng thể, chiến lược theo dõi xu hướng Momentum Turtle là một hệ thống mạnh mẽ để theo dõi xu hướng trung và dài hạn. Nó kết hợp các chỉ số Turtle để xác định xu hướng và bộ lọc ATR để quản lý biến động để nắm bắt xu hướng mạnh mẽ. Ngoài ra, kiểm soát rủi ro và điều chỉnh tham số là vững chắc để giảm giảm. Các cải tiến hơn nữa như kích thước năng động, đảo ngược và lấy lợi nhuận có thể cải thiện hiệu suất.
/*backtest start: 2023-10-23 00:00:00 end: 2023-11-22 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Heiken Ashi BF 🚀", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075) /////////////// Time Frame /////////////// testStartYear = input(2017, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0) testStopYear = input(2029, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(31, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0) testPeriod() => true ///////////// HA ///////////// haTicker = heikinashi(syminfo.tickerid) haOpen = security(haTicker, "D", open) haHigh = security(haTicker, "D", high) haLow = security(haTicker, "D", low) haClose = security(haTicker, "D", close) ///////////// Rate Of Change ///////////// source = close roclength = input(30, minval=1) pcntChange = input(7.0, minval=1) roc = 100 * (source - source[roclength]) / source[roclength] emaroc = ema(roc, roclength / 2) isMoving() => emaroc > (pcntChange / 2) or emaroc < (0 - (pcntChange / 2)) /////////////// Strategy /////////////// long = haOpen < haClose and isMoving() short = haOpen > haClose and isMoving() last_long = 0.0 last_short = 0.0 last_long := long ? time : nz(last_long[1]) last_short := short ? time : nz(last_short[1]) long_signal = crossover(last_long, last_short) short_signal = crossover(last_short, last_long) last_open_long_signal = 0.0 last_open_short_signal = 0.0 last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1]) last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1]) last_long_signal = 0.0 last_short_signal = 0.0 last_long_signal := long_signal ? time : nz(last_long_signal[1]) last_short_signal := short_signal ? time : nz(last_short_signal[1]) in_long_signal = last_long_signal > last_short_signal in_short_signal = last_short_signal > last_long_signal last_high = 0.0 last_low = 0.0 last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1]) last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1]) sl_inp = input(2.0, title='Stop Loss %') / 100 tp_inp = input(5000.0, title='Take Profit %') / 100 take_level_l = strategy.position_avg_price * (1 + tp_inp) take_level_s = strategy.position_avg_price * (1 - tp_inp) since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na slShort = strategy.position_avg_price * (1 + sl_inp) long_sl = in_long_signal ? slLong : na short_sl = in_short_signal ? slShort : na /////////////// Execution /////////////// if testPeriod() strategy.entry("L", strategy.long, when=long) strategy.entry("S", strategy.short, when=short) strategy.exit("L SL", "L", stop=long_sl, limit=take_level_l, when=since_longEntry > 0) strategy.exit("S SL", "S", stop=short_sl, limit=take_level_s, when=since_shortEntry > 0) /////////////// Plotting /////////////// plotcandle(haOpen, haHigh, haLow, haClose, title='HA Candles', color = haOpen < haClose ? color.lime : color.red) bgcolor(isMoving() ? long ? color.lime : short ? color.red : na : color.white, transp=70) bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=50)