
La estrategia de seguimiento de tendencias de cruce de doble línea es un sistema de negociación cuantitativo que combina análisis técnico con una gestión integral del riesgo. El núcleo de la estrategia utiliza señales cruzadas de promedios móviles simples rápidos (Fast SMA) y promedios simples móviles lentos (Slow SMA) para identificar cambios en las tendencias del mercado y garantizar la seguridad de los fondos a través de múltiples mecanismos de control de riesgo. La estrategia se implementa en la plataforma Pine Script y es adecuada para el seguimiento de tendencias en varias variedades de operaciones.
La estrategia toma sus decisiones de negociación basándose en la interacción entre dos medias móviles simples:
Mecanismo de generación de señales:
Ejecutar el control de tiempo: La estrategia de ejecutar todas las decisiones de negociación al cierre de la línea K evita el sesgo de visión hacia adelante y garantiza la fiabilidad y veracidad de los resultados de la medición.
Sistema de gestión de fondos:
Controles de riesgo en varios niveles:
La estrategia capta tendencias mediante el cruce de líneas uniformes y utiliza medidas de gestión de riesgos integrales para garantizar la seguridad y sostenibilidad de las operaciones.
Mecanismos sólidos para identificar tendencias:
La administración de fondos precisa:
Protección contra riesgos en varios niveles:
Control de la secuencia de ejecución de la transacción:
process_orders_on_close=trueParámetros que aseguran que el procesamiento de las órdenes se ajuste al entorno de transacción realSistemas de deterioro de seguimiento adaptados:
Identificación de las tendencias de retraso:
Problemas de adaptabilidad de parámetros fijos:
Seguimiento de la hora de activación de stop loss:
Riesgos de la gestión de fondos:
Las limitaciones de la tecnología:
Mecanismo de generación de señales optimizado:
Mejora de los sistemas de gestión de riesgos:
Optimización de ingreso:
Marco de retroalimentación y evaluación:
Mejora de la tecnología:
La estrategia de seguimiento de tendencias de cruzamiento de dos líneas es un sistema de negociación completo que combina métodos clásicos de análisis técnico con las modernas ideas de gestión de riesgos. Su principal ventaja es que un mecanismo de identificación de tendencias sencillo y claro y un sistema de control de riesgos en varios niveles, en particular, su gestión de fondos minuciosa y un mecanismo de alto seguimiento de pérdidas, proporcionan una buena estrategia de ajuste de riesgo y potencial de retorno.
Sin embargo, la estrategia también se enfrenta a desafíos como el atraso y la adaptabilidad de los parámetros inherentes a las medias móviles. Se espera que el rendimiento de la estrategia se mejore aún más mediante la introducción de parámetros de adaptación, el aumento de los mecanismos de filtración de señales y la mejora del sistema de gestión de riesgos.
En general, se trata de un marco de estrategia cuantitativa bien estructurado y con claridad lógica, adecuado para ser la base de un sistema de seguimiento de tendencias a medio y largo plazo, especialmente para mercados con características de tendencia evidentes. Para los operadores, entender y dominar su filosofía de gestión de riesgos es más importante que simplemente copiar los parámetros de la estrategia, y es la parte más valiosa de la estrategia.
/*backtest
start: 2025-06-04 00:00:00
end: 2025-06-11 00:00:00
period: 5m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title="Dual SMA Crossover Strategy", overlay=true, calc_on_every_tick=false, process_orders_on_close=true)
// --- Inputs ---
// SMA Lengths
fast_length = input.int(24, title="Fast SMA Length", minval=1)
slow_length = input.int(48, title="Slow SMA Length", minval=1)
// Risk Management
risk_per_trade_percent = input.float(2.0, title="Risk Per Trade (%)", minval=0.1, maxval=10.0, step=0.1) // % of equity to risk per trade
stop_loss_percent = input.float(0.8, title="Stop Loss (%)", minval=0.1, step=0.1) // % from entry price
risk_reward_ratio = input.float(2.0, title="Risk-Reward Ratio", minval=0.5, step=0.1) // 2.0 = 2R, 3.0 = 3R etc.
// Advanced Trailing Stop Loss
trailing_start_percent = input.float(1.0, title="Trailing Stop Start (%)", minval=0.1, step=0.1) // % profit to activate TSL
trailing_stop_percent = input.float(0.5, title="Trailing Stop Trail (%)", minval=0.1, step=0.1) // % to trail by once activated
// --- Calculations ---
// Calculate SMAs
fast_sma = ta.sma(close, fast_length)
slow_sma = ta.sma(close, slow_length)
// Plot SMAs on chart
plot(fast_sma, color=color.blue, title="Fast SMA")
plot(slow_sma, color=color.red, title="Slow SMA")
// Crossover conditions (calculated on previous bar to prevent look-ahead bias)
long_condition = ta.crossover(fast_sma[1], slow_sma[1])
short_condition = ta.crossunder(fast_sma[1], slow_sma[1])
// --- Money Management and Position Sizing ---
// Calculate account equity and risk amount
account_equity = strategy.initial_capital + strategy.netprofit
risk_amount = account_equity * (risk_per_trade_percent / 100)
// Calculate Stop Loss price based on entry and SL percentage
var float long_stop_price = na
var float short_stop_price = na
var float long_take_profit_price = na
var float short_take_profit_price = na
// --- Trailing Stop Loss Variables ---
var float trailing_long_activated_price = na // Price at which TSL is activated for long
var float trailing_short_activated_price = na // Price at which TSL is activated for short
var float current_trailing_stop_long = na
var float current_trailing_stop_short = na
var bool is_long_trailing_active = false
var bool is_short_trailing_active = false
// --- Strategy Entry and Exit Orders ---
if long_condition
// Reset TSL variables for a new entry
trailing_long_activated_price := na
current_trailing_stop_long := na
is_long_trailing_active := false
// Calculate SL, TP for long entry
long_stop_price := close * (1 - stop_loss_percent / 100) // SL below entry
long_take_profit_price := close * (1 + (stop_loss_percent * risk_reward_ratio) / 100) // TP above entry based on RRR
// Calculate position size for long entry
price_change_per_unit = close * (stop_loss_percent / 100)
if price_change_per_unit > 0
long_quantity = risk_amount / price_change_per_unit
strategy.entry("Long", strategy.long, qty=long_quantity, comment="Buy Signal")
else
strategy.entry("Long", strategy.long, comment="Buy Signal (Risk calculation skipped)") // Fallback if SL is 0 or negative
if short_condition
// Reset TSL variables for a new entry
trailing_short_activated_price := na
current_trailing_stop_short := na
is_short_trailing_active := false
// Calculate SL, TP for short entry
short_stop_price := close * (1 + stop_loss_percent / 100) // SL above entry
short_take_profit_price := close * (1 - (stop_loss_percent * risk_reward_ratio) / 100) // TP below entry based on RRR
// Calculate position size for short entry
price_change_per_unit = close * (stop_loss_percent / 100)
if price_change_per_unit > 0
short_quantity = risk_amount / price_change_per_unit
strategy.entry("Short", strategy.short, qty=short_quantity, comment="Sell Signal")
else
strategy.entry("Short", strategy.short, comment="Sell Signal (Risk calculation skipped)") // Fallback if SL is 0 or negative
// --- Stop Loss, Take Profit, Trailing Stop Logic ---
// Long position management
if strategy.position_size > 0 // We are in a long position
entry_price = strategy.opentrades.entry_price(0)
current_profit_percent = ((close - entry_price) / entry_price) * 100
// Initial SL and TP set at entry
strategy.exit("Exit Long", from_entry="Long", stop=long_stop_price, limit=long_take_profit_price, comment="TP/SL Long")
// Check for Trailing Stop activation
if not is_long_trailing_active and current_profit_percent >= trailing_start_percent
is_long_trailing_active := true
// Set initial trailing stop when activated
trailing_long_activated_price := high // Or close, depending on preference
current_trailing_stop_long := high * (1 - trailing_stop_percent / 100)
// If trailing stop is active, update it
if is_long_trailing_active
// Only move the trailing stop up (for long positions)
potential_new_stop = high * (1 - trailing_stop_percent / 100)
current_trailing_stop_long := math.max(current_trailing_stop_long, potential_new_stop)
// Ensure trailing stop is not below the initial long_stop_price
// This prevents the trailing stop from being less protective than the initial SL if the price drops after activation.
current_trailing_stop_long := math.max(current_trailing_stop_long, long_stop_price)
strategy.exit("Trailing Exit Long", from_entry="Long", stop=current_trailing_stop_long, comment="Trailing SL Long")
// Short position management
if strategy.position_size < 0 // We are in a short position
entry_price = strategy.opentrades.entry_price(0)
current_profit_percent = ((entry_price - close) / entry_price) * 100
// Initial SL and TP set at entry
strategy.exit("Exit Short", from_entry="Short", stop=short_stop_price, limit=short_take_profit_price, comment="TP/SL Short")
// Check for Trailing Stop activation
if not is_short_trailing_active and current_profit_percent >= trailing_start_percent
is_short_trailing_active := true
// Set initial trailing stop when activated
trailing_short_activated_price := low // Or close, depending on preference
current_trailing_stop_short := low * (1 + trailing_stop_percent / 100)
// If trailing stop is active, update it
if is_short_trailing_active
// Only move the trailing stop down (for short positions)
potential_new_stop = low * (1 + trailing_stop_percent / 100)
current_trailing_stop_short := math.min(current_trailing_stop_short, potential_new_stop)
// Ensure trailing stop is not above the initial short_stop_price
current_trailing_stop_short := math.min(current_trailing_stop_short, short_stop_price)
strategy.exit("Trailing Exit Short", from_entry="Short", stop=current_trailing_stop_short, comment="Trailing SL Short")
// Plot background color to indicate active position (optional)
bgcolor(strategy.position_size > 0 ? color.new(color.green, 90) : na, title="Long Position Background")
bgcolor(strategy.position_size < 0 ? color.new(color.red, 90) : na, title="Short Position Background")