Esta estratégia utiliza os níveis de retração de Fibonacci para definir automaticamente o stop loss e tomar preços de lucro para a gestão de posições.
O núcleo desta estratégia depende do indicador de retração de Fibonacci para determinar os principais níveis de suporte e resistência. Ele rastreia os altos e baixos recentes para traçar 10 zonas de preços de Fibonacci. Com base na configuração, um dos níveis de Fibonacci é escolhido como gatilho de entrada. Quando o preço ultrapassa esse nível, uma ordem longa será colocada com base na alavancagem configurada. Ao mesmo tempo, um preço de take profit é definido em uma certa porcentagem acima do preço de entrada.
Após a entrada, a estratégia continua a rastrear os níveis atualizados de Fibonacci. Se um nível Fib mais baixo emergir, indicando uma reversão potencial, a estratégia cancelará as ordens existentes e colocará ordens no preço mais baixo como um mecanismo de stop loss. Quando o preço finalmente ultrapassar o preço de take profit, a posição será fechada para lucro.
A maior vantagem desta estratégia é a capacidade de ajustar dinamicamente o stop loss e tomar preços de lucro para os mercados de tendência.
Capture maiores lucros em condições de tendência por trailing paradas com base no preço de entrada.
Mitigar as perdas na consolidação parando nos níveis mais baixos de Fib emergentes.
Permitir a pirâmide adicionando à posição quando o preço cai uma certa porcentagem do último preço de entrada.
Simples de operar com colocação automática de pedidos uma vez configurado corretamente.
Ainda existem alguns riscos a tomar em consideração:
São propensos a paradas repetidas durante os mercados laterais, aumentando as taxas.
Não há um mecanismo fixo de stop loss, há riscos de grandes drawdowns.
A pirâmide desfeita pode exacerbar as perdas.
Soluções correspondentes:
Pausar a negociação quando o preço oscilar no intervalo.
Supervisar manualmente os mercados e fechar posições, se necessário.
Definir limites para ordens de pirâmide.
Ainda há muito espaço para otimização:
Adicionar indicadores adicionais como EMA, MACD para confirmação de entrada extra para evitar falhas.
Incorporar mecanismos de stop loss fixos/trailing para limitar as perdas em condições extremas.
Refinar a lógica da pirâmide baseada nos regimes de mercado para evitar a alavancagem excessiva.
Empregar modelos de aprendizagem de máquina como o LSTM para prever o preço e identificar melhores entradas/saídas.
Em resumo, esta estratégia é adequada para cenários de tendência de desvanecimento. Ao ajustar constantemente as paradas, permite conduzir as tendências de forma eficaz.
/*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)