Chiến lược này là một chiến lược động lực khung thời gian kép. Nó xác định hướng xu hướng trên khung thời gian cao hơn bằng cách sử dụng Mức trung bình di chuyển đơn giản (SMA) và xác định các điểm đảo ngược trên khung thời gian thấp hơn bằng cách sử dụng các điểm trục (PivotLow và PivotHigh). Nó đi dài khi khung thời gian cao hơn cho thấy xu hướng tăng và một điểm trục tăng xuất hiện trên khung thời gian thấp hơn, và đi ngắn khi khung thời gian cao hơn cho thấy xu hướng giảm và một điểm trục giảm xuất hiện trên khung thời gian thấp hơn.
Nguyên tắc chính của chiến lược này là hướng xu hướng của khung thời gian cao hơn sẽ ảnh hưởng đến sự chuyển động của khung thời gian thấp hơn. Khi khung thời gian cao hơn cho thấy xu hướng tăng, sự rút lui trên khung thời gian thấp hơn có nhiều khả năng là cơ hội mua; khi khung thời gian cao hơn cho thấy xu hướng giảm, sự phục hồi trên khung thời gian thấp hơn có nhiều khả năng là cơ hội mua ngắn. Chiến lược này sử dụng Mức trung bình di chuyển đơn giản (SMA) để xác định hướng xu hướng của khung thời gian cao hơn và các điểm pivot (PivotLow và PivotHigh) để xác định các điểm đảo ngược trên khung thời gian thấp hơn.
Chiến lược động lực khung thời gian kép này tận dụng kết nối giữa khung thời gian cao hơn và thấp hơn, xác định hướng xu hướng trên khung thời gian cao hơn và nắm bắt các điểm đảo ngược trên khung thời gian thấp hơn để đạt được xu hướng theo dõi và giao dịch đảo ngược. Chiến lược có logic rõ ràng và những lợi thế rõ ràng, nhưng cũng có một số rủi ro. Trong tương lai, chiến lược có thể được tối ưu hóa từ các khía cạnh như phát hiện thay đổi xu hướng, tối ưu hóa tham số, kiểm soát rủi ro và hợp nhất đa yếu tố để cải thiện khả năng thích nghi và độ bền của nó.
/*backtest start: 2023-04-19 00:00:00 end: 2024-04-24 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Riester //@version=5 strategy("Dual Timeframe Momentum", overlay=true, precision=6, pyramiding=0, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=25.0, commission_value=0.05) n = input.int(20, "Moving Average Period", minval=1) src = input.source(close, "Source") high_tf = input.timeframe("240", "Resolution") pivot_l = input.int(5, "Pivot Let Bars") pivot_r = input.int(2, "Pivot Right Bars") //----------------------------------------------------------------------------------------------------------------------------------------------------------------- // Calculations //----------------------------------------------------------------------------------------------------------------------------------------------------------------- // 1. Define low and high timeframe prices low_src = src high_src = request.security(syminfo.tickerid, high_tf, src) // 2. Use simple moving average to determine trend of higher timeframe (up or down) high_tf_ma = ta.sma(high_src, n) plot(high_tf_ma, color=color.yellow) high_tf_trend = high_tf_ma > high_tf_ma[1] ? 1 : -1 // 3. Use pivots to identify reversals on the low timeframe low_tf_pl = ta.pivotlow(high_src, pivot_l, pivot_r) plot(low_tf_pl, style=plot.style_line, linewidth=3, color= color.green, offset=-pivot_r) low_tf_ph = ta.pivothigh(high_src, pivot_l, pivot_r) plot(low_tf_ph, style=plot.style_line, linewidth=3, color= color.red, offset=-pivot_r) bool long = low_tf_pl and high_tf_trend == 1 bool short = low_tf_ph and high_tf_trend == -1 //----------------------------------------------------------------------------------------------------------------------------------------------------------------- // Plots //----------------------------------------------------------------------------------------------------------------------------------------------------------------- // this message is an alert that can be sent to a webhook, which allows for simple automation if you have a server that listens to alerts and trades programmatically. enter_long_alert = '{"side": "Long", "order": "Enter", "price": ' + str.tostring(open) + ', "timestamp": ' + str.tostring(timenow) + '}' exit_long_alert = '{"side": "Long", "order": "Exit", "price": ' + str.tostring(open) + ', "timestamp": ' + str.tostring(timenow) + '}' if long strategy.entry(id="Long", direction=strategy.long, limit=open, alert_message=enter_long_alert) if short strategy.close(id="Long", comment="Close Long", alert_message=exit_long_alert)