Esta estrategia es un sistema de negociación automatizado basado en señales de cruce de promedio móvil, optimizado a través de una relación riesgo-recompensa fija.
La lógica central se basa en señales de cruce generadas por dos promedios móviles (10 períodos y 30 períodos). El sistema genera señales largas cuando el MA rápido cruza por encima del MA lento, y señales cortas cuando el MA rápido cruza por debajo. Después de cada entrada, el sistema calcula automáticamente los niveles de stop-loss basados en un porcentaje de pérdida preestablecido del 2% y establece objetivos de toma de ganancias de acuerdo con una relación riesgo-recompensación de 2.5. Este enfoque asegura que cada operación tenga características de riesgo-recompensación consistentes.
Esta estrategia combina métodos clásicos de análisis técnico con conceptos modernos de gestión de riesgos para construir un sistema de negociación completo. Aunque tiene ciertas limitaciones, la optimización y mejora continua permiten que la estrategia mantenga un rendimiento estable en diferentes condiciones de mercado. La clave radica en ajustar constantemente los parámetros basados en los resultados reales de negociación para encontrar la configuración más adecuada para el entorno actual del mercado.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-25 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("SOL 15m 2.5 R:R Strategy", overlay=true, margin_long=100, margin_short=100, initial_capital=10000, commission_type=strategy.commission.percent, commission_value=0.1) //--------------------------------------------------- // User Inputs //--------------------------------------------------- // sym = input.symbol("swap", "Symbol") timeframe = input.timeframe("15", "Timeframe") fastLength = input.int(10, "Fast MA Length") slowLength = input.int(30, "Slow MA Length") stopLossPerc = input.float(2.0, "Stop Loss %", step=0.1) // This is an example; adjust to achieve ~45% win rate RR = input.float(2.5, "Risk to Reward Ratio", step=0.1) //--------------------------------------------------- // Data Sources //--------------------------------------------------- price = request.security("swap", timeframe, close) // Compute moving averages fastMA = ta.sma(price, fastLength) slowMA = ta.sma(price, slowLength) // Entry Conditions longCondition = ta.crossover(fastMA, slowMA) shortCondition = ta.crossunder(fastMA, slowMA) //--------------------------------------------------- // Stop Loss and Take Profit Calculation //--------------------------------------------------- var entryPrice = 0.0 if (strategy.position_size == 0) // not in a position if longCondition // Long entry entryPrice := price strategy.entry("Long", strategy.long) if shortCondition // Short entry entryPrice := price strategy.entry("Short", strategy.short) if strategy.position_size > 0 // We are in a long position if strategy.position_avg_price > 0 and strategy.position_size > 0 longStop = strategy.position_avg_price * (1 - stopLossPerc/100) longTarget = strategy.position_avg_price * (1 + (stopLossPerc/100)*RR) strategy.exit("Long Exit", "Long", stop=longStop, limit=longTarget) if strategy.position_size < 0 // We are in a short position if strategy.position_avg_price > 0 and strategy.position_size < 0 shortStop = strategy.position_avg_price * (1 + stopLossPerc/100) shortTarget = strategy.position_avg_price * (1 - (stopLossPerc/100)*RR) strategy.exit("Short Exit", "Short", stop=shortStop, limit=shortTarget) //--------------------------------------------------- // Plotting //--------------------------------------------------- plot(fastMA, color=color.new(color.teal, 0), title="Fast MA") plot(slowMA, color=color.new(color.orange, 0), title="Slow MA")