Estrategia de seguimiento de tendencias de bandas de Bollinger adaptativas bidireccionales


Fecha de creación: 2024-02-04 15:30:46 Última modificación: 2024-02-04 15:30:46
Copiar: 4 Número de Visitas: 607
1
Seguir
1617
Seguidores

Estrategia de seguimiento de tendencias de bandas de Bollinger adaptativas bidireccionales

Descripción general

Esta estrategia utiliza un indicador bidireccional de adaptación a la banda de Brin para identificar la dirección de la tendencia y, en combinación con una lista de precios de mercado, realiza un seguimiento de la tendencia de alto rendimiento para el seguimiento de la tendencia.

Principio de estrategia

  1. El tren central, el tren superior y el tren inferior de Brin se calculan en función de un período determinado
  2. Si el precio se rompe en la vía, se hace un seguimiento más, si se rompe en la vía, se hace un seguimiento vacío.
  3. Entradas rápidas a precio de mercado
  4. Establecer la posición de stop loss y la posición de stop loss para la gestión de la posición

Análisis de las ventajas

  1. Adaptado a los indicadores de la banda de Brin, es sensible a las fluctuaciones del mercado y puede determinar rápidamente el giro de la tendencia
  2. El uso de la tarjeta de precios de mercado para entrar rápidamente en el campo reduce el riesgo de deslizamiento
  3. Detención automática de pérdidas, control estricto de riesgos, bloqueo de ganancias

Análisis de riesgos

  1. El cinturón de Brin es un retraso en sí mismo y no puede evitarse completamente una falsa brecha.
  2. El precio de venta no puede ser controlado por el precio de venta.
  3. La necesidad de establecer un límite de pérdidas y paradas razonables

Dirección de optimización

  1. Ajuste de los parámetros de la banda de Bryn para optimizar la sensibilidad de las tendencias de juicio
  2. Adición de indicadores como volumen de transacciones o MACD para filtrar brechas falsas
  3. Optimización de las configuraciones de stop loss y stop loss

Resumir

Esta estrategia aprovecha al máximo las ventajas de las bandas de Brin para determinar la dirección de la tendencia y el cambio, se combina con una lista de precios de mercado de salida rápida para un seguimiento bidireccional y obtiene ganancias adicionales bajo la premisa de controlar el riesgo. Se puede obtener un mejor rendimiento de la estrategia mediante la optimización adicional de los parámetros de las bandas de Brin, la adición de indicadores de filtración auxiliar y la adaptación de la lógica de stop loss. La idea de la estrategia es clara y fácil de implementar y es una estrategia de negociación de seguimiento de tendencias eficiente y confiable.

Código Fuente de la Estrategia
/*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)