Stratégie de suivi de tendance adaptative bidirectionnelle des bandes de Bollinger


Date de création: 2024-02-04 15:30:46 Dernière modification: 2024-02-04 15:30:46
Copier: 4 Nombre de clics: 607
1
Suivre
1617
Abonnés

Stratégie de suivi de tendance adaptative bidirectionnelle des bandes de Bollinger

Aperçu

Cette stratégie utilise un indicateur bidirectionnel auto-adaptatif de la courbe de Brin pour identifier l’orientation de la tendance et, en combinaison avec une liste de prix du marché, pour suivre les arrêts de perte et réaliser des transactions de suivi de tendance très efficaces.

Principe de stratégie

  1. La moyenne, la haute et la basse des rails de Brin sont calculées sur une période donnée
  2. Pour déterminer si le prix est en hausse, on fait un suivi plus, et si le prix est en baisse, on fait un suivi vide.
  3. Le prix du billet du marché est le prix de l’entrée rapide.
  4. Définition de la position stop-loss et de la position stop-loss pour la gestion de la position

Analyse des avantages

  1. Adapté à l’indicateur de la ceinture de Brin, sensible aux fluctuations du marché et capable de juger rapidement des changements de tendance
  2. Le prix du marché est utilisé pour accélérer l’entrée sur le terrain et réduire le risque de glissement.
  3. Stop-loss automatique, contrôle strict des risques et verrouillage des bénéfices

Analyse des risques

  1. La ceinture de Brin est en soi retardataire et ne permet pas d’éviter complètement les fausses percées
  2. Le prix du marché ne contrôle pas le prix de transaction
  3. Il est nécessaire de définir des arrêts et arrêts raisonnables.

Direction d’optimisation

  1. Ajuster les paramètres de la bande de Bryn pour optimiser la sensibilité des tendances à juger
  2. Ajout d’indicateurs tels que le volume de transactions ou le MACD pour filtrer les fausses percées
  3. Optimisation des paramètres de stop loss et de stop loss

Résumer

Cette stratégie exploite pleinement les avantages de la courbe de Boolin pour déterminer la direction et le changement de la tendance, le suivi bidirectionnel du cours du marché combiné à une sortie rapide, pour obtenir des gains supplémentaires dans le cadre de la maîtrise du risque. Une meilleure performance de la stratégie peut être obtenue en optimisant davantage les paramètres de la courbe de Boolin, en ajoutant des indicateurs de filtrage auxiliaires, en ajustant la logique d’arrêt-stop.

Code source de la stratégie
/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 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("Automated - Fibs with Market orders", "Strategy", true)

//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("Buy", 1, 1,  alert_message='Long|e=binancefuturestestnet s=btcusdt b=long q=0.0011 t=market')
if filledorder and size >= 1
    fill := entry
    count := count+1 
    pause := time + 60000
    strategy.entry("Buy", 1, 1,  alert_message='Long|e=binancefuturestestnet s=btcusdt b=long q=0.0011 t=market')

// 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='Close Long|e=binancefuturestestnet s=btcusdt b=long c=position t=market')
    count := 0
    fill := 0.0
    last_profit := 0.0
    
//Plots
// bottom = signal ? color.green : filled ? color.red : color.white
// plot(entry, "Entry", bottom)