Stratégie de déplacement stop-limit basée sur l'indice de fibre


Date de création: 2024-02-06 14:33:06 Dernière modification: 2024-02-06 14:33:06
Copier: 0 Nombre de clics: 677
1
Suivre
1617
Abonnés

Stratégie de déplacement stop-limit basée sur l’indice de fibre

Aperçu

Cette stratégie utilise les indicateurs de fléchissement pour définir automatiquement les prix stop-loss et stop-stop, permettant de négocier des prix stop-loss mobiles. Elle permet d’obtenir plus de profit dans des conditions de tendance, tout en réduisant les pertes dans des conditions de choc.

Principe de stratégie

Cette stratégie est principalement basée sur les indicateurs de courbe pour fixer les prix. Les indicateurs de courbe peuvent refléter le soutien et la résistance potentiels du marché. La stratégie utilise les différents niveaux de l’indicateur de courbe comme prix d’arrêt et de rupture.

Plus précisément, la stratégie suit les hauts et les bas et calcule une fourchette de 10 tranches de prix. Elle choisit ensuite une tranche de prix comme stratégie d’entrée en fonction de la configuration.

Une fois la commande passée, la stratégie continue à suivre le prix de la tranche la plus récente. Lorsqu’une tranche plus faible se produit, la stratégie annule la commande initiale, ré-commande et met en œuvre un stop-loss mobile.

Analyse des avantages

Le plus grand avantage de cette stratégie est qu’elle permet d’ajuster de manière dynamique les prix de stop loss et de stop loss, et est spécialement conçue pour les conditions de tendance. Elle présente les caractéristiques suivantes:

  1. Il est possible d’obtenir plus d’argent dans les tendances. Le paramètre de blocage basé sur le prix d’entrée moyen permet de participer au maximum aux tendances et de générer des gains plus élevés.

  2. Il permet de réduire les pertes en cas de choc. Il permet de réduire les pertes en cas de choc, en évitant d’être bloqué en cas de choc lorsque le prix revient à un niveau inférieur.

  3. Prise en charge de la prise de position. La configuration de la prise de position augmente la position lorsque le prix baisse à un certain niveau, ce qui réduit le coût moyen de la position.

  4. Les opérations sont simples: il suffit de configurer la distance et le rapport de freinage, et la transaction est entièrement automatisée, sans intervention manuelle.

Analyse des risques

Cette stratégie comporte également des risques, principalement liés aux points suivants:

  1. Il est susceptible d’être stoppé à plusieurs reprises lors d’un cycle de choc. En cas de courbe horizontale ou de choc, le prix peut déclencher plusieurs arrêts de perte, augmentant la fréquence des transactions et les frais de traitement.

  2. Il n’y a pas de stop-loss. La stratégie n’a pas de stop-loss pour la poursuite d’une plus grande fortune. Si la situation change radicalement, il peut y avoir des pertes importantes.

  3. Il n’y a pas de limite quant au nombre et au montant des mises en réserve.

La réponse:

  1. Les conditions peuvent être définies pour suspendre les transactions en cas de choc.
  2. Il est possible de surveiller manuellement la situation et d’imposer un arrêt de la position en cas de besoin.
  3. Limite du nombre de fois que vous pouvez placer un pari et du montant que vous pouvez le placer.

Direction d’optimisation

La stratégie a également beaucoup de marge d’optimisation, principalement dans les domaines suivants:

  1. La confirmation de l’admission peut être effectuée en utilisant d’autres combinaisons d’indicateurs. La confirmation d’indicateurs tels que l’EMA, le MACD peut être ajoutée aux conditions d’admission, afin d’éviter d’être bloquée dans une situation de choc.

  2. L’adhésion à un mécanisme d’arrêt des pertes. La configuration d’un arrêt fixe ou d’un arrêt de suivi permet d’éviter des pertes massives dans des situations extrêmes.

  3. Optimisation de la logique de mise en place. La fourchette de prix et le nombre de mises en place peuvent être optimisés en fonction de la situation du marché.

  4. Combinaison d’algorithmes d’apprentissage automatique. Par exemple, l’utilisation d’algorithmes tels que LSTM pour prédire les mouvements possibles des prix et la résistance des supports. Aide à déterminer une meilleure logique d’entrée et de sortie.

Résumer

Cette stratégie est globalement adaptée pour suivre les tendances. Elle permet d’obtenir des bénéfices supplémentaires en ajustant dynamiquement le prix d’arrêt et de perte. Il existe également un certain risque, qui nécessite une optimisation et une amélioration combinées à d’autres mécanismes pour l’adapter à un environnement de marché plus complexe.

Code source de la stratégie
/*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)