Esta estrategia utiliza los niveles de retroceso de Fibonacci para establecer automáticamente el stop loss y tomar precios de ganancia para la gestión de posiciones.
El núcleo de esta estrategia se basa en el indicador de retroceso de Fibonacci para determinar los niveles clave de soporte y resistencia. Rastrea los máximos y mínimos recientes para trazar 10 zonas de precios de Fibonacci. Basado en la configuración, se elige uno de los niveles de Fibonacci como el disparador de entrada. Cuando el precio se rompe por encima de ese nivel, se colocará un pedido largo basado en el apalancamiento configurado. Al mismo tiempo, se establece un precio de toma de ganancias a un cierto porcentaje por encima del precio de entrada.
Si aparece un nivel Fib más bajo, lo que indica una posible reversión, la estrategia cancelará las órdenes existentes y volverá a colocarlas al precio más bajo como un mecanismo de stop loss.
La mayor ventaja de esta estrategia es la capacidad de ajustar dinámicamente el stop loss y tomar precios de ganancia para los mercados de tendencia.
Captura mayores ganancias en condiciones de tendencia mediante paradas de seguimiento basadas en el precio de entrada.
Mitigar las pérdidas en la consolidación al detenerse en los niveles Fib más bajos emergentes.
Permitir la pirámide añadiendo a la posición cuando el precio cae cierto porcentaje del último precio de entrada.
Simple de operar con la colocación automática de pedidos una vez configurado correctamente.
Todavía hay algunos riesgos a tener en cuenta:
Suelen detenerse repetidamente durante los mercados laterales, aumentando las tarifas.
No hay un mecanismo fijo de stop loss, hay un riesgo de grandes reducciones.
Una pirámide abierta podría exacerbar las pérdidas.
Soluciones correspondientes:
Pausa la negociación cuando el precio oscila en el rango.
Supervisa manualmente los mercados y cierra posiciones si es necesario.
Establece límites en las órdenes piramidal.
Queda mucho espacio para la optimización:
Añadir indicadores adicionales como EMA, MACD para confirmación de entrada adicional para evitar fallas falsas.
Incorporar mecanismos fijos de detención de pérdidas para limitar las pérdidas en condiciones extremas.
Refinar la lógica piramidal basada en los regímenes de mercado para evitar el apalancamiento excesivo.
Emplear modelos de aprendizaje automático como LSTM para pronosticar el precio e identificar mejores entradas/salidas.
En resumen, esta estrategia es adecuada para escenarios de tendencia que se desvanecen. Al ajustar constantemente las paradas, permite manejar las tendencias de manera efectiva. Se necesitan optimizaciones adecuadas y barandillas de protección para manejar condiciones de mercado más difíciles.
/*backtest start: 2024-01-06 00:00:00 end: 2024-02-05 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © CryptoRox //@version=4 //Paste the line below in your alerts to run the built-in commands. //{{strategy.order.alert_message}} strategy(title="Fibs limit only", shorttitle="Strategy", overlay=true, precision=8, pyramiding=1000, commission_type=strategy.commission.percent, commission_value=0.04) //Settings testing = input(false, "Live") //Use epochconverter or something similar to get the current timestamp. starttime = input(1600976975, "Start Timestamp") * 1000 //Wait XX seconds from that timestamp before the strategy starts looking for an entry. seconds = input(60, "Start Delay") * 1000 testPeriod = true leverage = input(1, "Leverage") tp = input(1.0, "Take Profit %") / leverage dca = input(-1.0, "DCA when < %") / leverage *-1 fibEntry = input("1", "Entry Level", options=["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]) //Strategy Calls equity = strategy.equity avg = strategy.position_avg_price symbol = syminfo.tickerid openTrades = strategy.opentrades closedTrades = strategy.closedtrades size = strategy.position_size //Fibs lentt = input(60, "Pivot Length") h = highest(lentt) h1 = dev(h, lentt) ? na : h hpivot = fixnan(h1) l = lowest(lentt) l1 = dev(l, lentt) ? na : l lpivot = fixnan(l1) z = 400 p_offset= 2 transp = 60 a=(lowest(z)+highest(z))/2 b=lowest(z) c=highest(z) fib0 = (((hpivot - lpivot)) + lpivot) fib1 = (((hpivot - lpivot)*.21) + lpivot) fib2 = (((hpivot - lpivot)*.3) + lpivot) fib3 = (((hpivot - lpivot)*.5) + lpivot) fib4 = (((hpivot - lpivot)*.62) + lpivot) fib5 = (((hpivot - lpivot)*.7) + lpivot) fib6 = (((hpivot - lpivot)* 1.00) + lpivot) fib7 = (((hpivot - lpivot)* 1.27) + lpivot) fib8 = (((hpivot - lpivot)* 2) + lpivot) fib9 = (((hpivot - lpivot)* -.27) + lpivot) fib10 = (((hpivot - lpivot)* -1) + lpivot) notna = nz(fib10[60]) entry = 0.0 if fibEntry == "1" entry := fib10 if fibEntry == "2" entry := fib9 if fibEntry == "3" entry := fib0 if fibEntry == "4" entry := fib1 if fibEntry == "5" entry := fib2 if fibEntry == "6" entry := fib3 if fibEntry == "7" entry := fib4 if fibEntry == "8" entry := fib5 if fibEntry == "9" entry := fib6 if fibEntry == "10" entry := fib7 profit = avg+avg*(tp/100) pause = 0 pause := nz(pause[1]) paused = time < pause fill = 0.0 fill := nz(fill[1]) count = 0.0 count := nz(fill[1]) filled = count > 0 ? entry > fill-fill/100*dca : 0 signal = testPeriod and notna and not paused and not filled ? 1 : 0 neworder = crossover(signal, signal[1]) moveorder = entry != entry[1] and signal and not neworder ? true : false cancelorder = crossunder(signal, signal[1]) and not paused filledorder = crossunder(low[1], entry[1]) and signal[1] last_profit = 0.0 last_profit := nz(last_profit[1]) if neworder and signal strategy.order("New", 1, 0.0001, alert_message='New Order|e=binancefuturestestnet s=btcusdt b=long q=0.0011 fp=' + tostring(entry)) if moveorder strategy.order("Move", 1, 0.0001, alert_message='Move Order|e=binancefuturestestnet s=btcusdt b=long c=order|e=binancefuturestestnet s=btcusdt b=long q=0.0011 fp=' + tostring(entry)) if filledorder and size < 1 fill := entry count := count+1 pause := time + 60000 p = close+close*(tp/100) strategy.entry("Filled", 1, 1, alert_message='Long Filled|e=binancefuturestestnet s=btcusdt b=short c=order|delay=1|e=binancefuturestestnet s=btcusdt b=long c=position q=100% ro=1 fp=' + tostring(p)) if filledorder and size >= 1 fill := entry count := count+1 pause := time + 60000 strategy.entry("Filled", 1, 1, alert_message='Long Filled|e=binancefuturestestnet s=btcusdt b=short c=order|delay=1|e=binancefuturestestnet s=btcusdt b=long c=position q=100% ro=1 fp=' + tostring(profit)) if cancelorder and not filledorder pause := time + 60000 strategy.order("Cancel", 1, 0.0001, alert_message='Cancel Order|e=binancefuturestestnet s=btcusdt b=long c=order') if filledorder last_profit := profit closeit = crossover(high, profit) and size >= 1 if closeit strategy.entry("Close ALL", 0, 0, alert_message='Profit') count := 0 fill := 0.0 last_profit := 0.0 //Plots bottom = signal ? color.green : filled ? color.red : color.white plot(entry, "Entry", bottom)