Cette stratégie utilise les niveaux de retracement de Fibonacci pour définir automatiquement le stop loss et prendre les prix de profit pour la gestion de position.
Le noyau de cette stratégie repose sur l'indicateur de retracement de Fibonacci pour déterminer les niveaux de support et de résistance clés. Il suit les hauts et les bas récents pour tracer 10 zones de prix de Fibonacci. En fonction de la configuration, l'un des niveaux de Fibonacci est choisi comme déclencheur d'entrée. Lorsque le prix dépasse ce niveau, un ordre long sera placé en fonction du levier configuré.
Après l'entrée, la stratégie continue à suivre les niveaux de Fibonacci mis à jour. Si un niveau Fib inférieur émerge, indiquant un renversement potentiel, la stratégie annulera les ordres existants et ré-placera les ordres au prix inférieur en tant que mécanisme de stop loss. Lorsque le prix dépasse finalement le prix de prise de profit, la position sera fermée pour le profit.
Le plus grand avantage de cette stratégie est la capacité d'ajuster dynamiquement le stop loss et de prendre des prix de profit pour les marchés tendance.
Capturez des profits plus importants dans des conditions de tendance en arrêtant les trailers basés sur le prix d'entrée.
Atténuer les pertes dans la consolidation en s'arrêtant à des niveaux Fib plus bas émergents.
Permettez la pyramide en ajoutant à la position lorsque le prix chute un certain pourcentage par rapport au dernier prix d'entrée.
Facile à utiliser avec un placement automatique de commandes une fois correctement configuré.
Il y a encore des risques à prendre en compte:
Prédisposé à des arrêts répétés pendant les marchés latéraux, augmentation des frais.
Aucun mécanisme de stop loss fixe, risque de grosses pertes.
Une pyramide non couverte pourrait exacerber les pertes.
Solution correspondante:
Arrêter la négociation lorsque le prix oscille dans la fourchette.
Surveiller manuellement les marchés et fermer les positions si nécessaire.
Mettez des limites aux ordres pyramidaux.
Il reste beaucoup de place pour l'optimisation:
Ajoutez des indicateurs supplémentaires comme EMA, MACD pour une confirmation d'entrée supplémentaire pour éviter de fausses ruptures.
Incorporer des mécanismes d'arrêt des pertes fixes/trailing pour limiter les pertes dans des conditions extrêmes.
Améliorer la logique de la pyramide basée sur les régimes de marché pour éviter le surendettement.
Utiliser des modèles d'apprentissage automatique comme LSTM pour prévoir le prix et identifier de meilleures entrées/sorties.
En résumé, cette stratégie est adaptée aux scénarios de déclin des tendances. En ajustant constamment les arrêts, elle permet de conduire efficacement les tendances. Des optimisations et des garde-corps appropriés sont nécessaires pour gérer des conditions de marché plus difficiles.
/*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)