Esta estrategia es una estrategia de impulso de doble marco de tiempo. Determina la dirección de la tendencia en el marco de tiempo superior utilizando un promedio móvil simple (SMA) e identifica puntos de reversión en el marco de tiempo inferior utilizando puntos de pivote (PivotLow y PivotHigh).
El principio principal de esta estrategia es que la dirección de tendencia del marco de tiempo superior influirá en el movimiento del marco de tiempo inferior. Cuando el marco de tiempo superior muestra una tendencia alcista, los retrocesos en el marco de tiempo inferior son más propensos a ser oportunidades de compra; cuando el marco de tiempo superior muestra una tendencia bajista, los rebotes en el marco de tiempo inferior son más propensos a ser oportunidades de cortocircuito. Esta estrategia utiliza el promedio móvil simple (SMA) para determinar la dirección de tendencia del marco de tiempo superior y los puntos de giro (PivotLow y PivotHigh) para identificar los puntos de reversión en el marco de tiempo inferior.
Esta estrategia de impulso de doble marco de tiempo aprovecha la conexión entre los marcos de tiempo más altos y más bajos, determinando la dirección de la tendencia en el marco de tiempo más alto y capturando puntos de reversión en el marco de tiempo más bajo para lograr el seguimiento de la tendencia y la negociación de reversió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)