Estrategia de stop-limit móvil basada en índice de fibra


Fecha de creación: 2024-02-06 14:33:06 Última modificación: 2024-02-06 14:33:06
Copiar: 0 Número de Visitas: 677
1
Seguir
1617
Seguidores

Estrategia de stop-limit móvil basada en índice de fibra

Descripción general

La estrategia utiliza un indicador de rango para configurar automáticamente los precios de stop loss y stop-loss, y permite la negociación de precios de stop loss móviles. Se puede obtener más ganancias en situaciones de tendencia y, al mismo tiempo, reducir las pérdidas en situaciones de crisis.

Principio de estrategia

La estrategia se basa principalmente en el indicador de corto plazo para establecer los precios. El indicador de corto plazo puede reflejar el apoyo y la resistencia potencial del mercado. La estrategia utiliza los diferentes niveles del indicador de corto plazo como precios de stop loss y stop loss.

Concretamente, la estrategia sigue los puntos altos y bajos, calcula un intervalo de precios de 10 tramos. Luego, según la configuración, selecciona un precio de tramo como estrategia de entrada.

Después de la orden, la estrategia continúa siguiendo el precio más reciente de la transacción. Cuando se produce una transacción más baja, la estrategia cancela el encargo original, vuelve a ordenar y realiza un stop loss móvil.

Análisis de las ventajas

La mayor ventaja de esta estrategia es que puede ajustar de forma dinámica los precios de stop loss y stop stop, específicamente para el mercado de tendencias. Tiene las siguientes características:

  1. Se puede obtener más dinero en las tendencias. La configuración de la parada basada en el precio promedio de entrada permite participar al máximo en las tendencias y obtener mayores ganancias.

  2. La capacidad de reducir las pérdidas en situaciones de crisis. Cuando el precio vuelve a tocar un rango más bajo, se detiene a tiempo para evitar ser atrapado en la crisis.

  3. Soporte de alza de posición. Configuración de alza de posición, que aumenta la posición cuando el precio cae a un cierto nivel, lo que reduce el costo promedio de la posición.

  4. La operación es sencilla. Sólo se necesita configurar la distancia y la proporción de la barra, y la transacción se realiza automáticamente, sin necesidad de intervención manual.

Análisis de riesgos

La estrategia también tiene algunos riesgos, que se centran en:

  1. Es susceptible a ser detenido repetidamente durante la liquidación de la oscilación. Cuando se produce un movimiento horizontal o oscilante, los precios pueden subir y bajar varias veces para detener la detención de la pérdida, aumentando la frecuencia de las transacciones y el gasto en honorarios.

  2. La estrategia no tiene un límite de pérdidas para obtener más ganancias. Si ocurre un cambio significativo en la tendencia, se pueden enfrentar grandes pérdidas.

  3. No hay límite en el número y la cantidad de veces que se puede depositar. Una mayor cantidad de veces que se puede depositar puede aumentar las pérdidas.

Resolución de las mismas:

  1. Se pueden establecer condiciones para suspender las operaciones en caso de crisis.
  2. El mercado de divisas en el mercado de divisas es un mercado de divisas en el mercado de divisas, donde el mercado de divisas es un mercado de divisas.
  3. Establezca un límite para el número y el monto de las adiciones.

Dirección de optimización

La estrategia también tiene un gran margen de optimización, principalmente en los siguientes aspectos:

  1. La confirmación de la entrada se puede agregar a las condiciones de entrada mediante la combinación de otros indicadores. Se puede agregar la confirmación de indicadores como EMA, MACD, etc., para evitar ser bloqueado en situaciones de temblor.

  2. La inclusión de un mecanismo de stop loss. La configuración de un stop loss fijo o un stop loss de seguimiento puede evitar grandes pérdidas en situaciones extremas.

  3. Optimización de la lógica de alza. Se puede optimizar el rango de precios y la frecuencia de alza en función de las condiciones específicas del mercado.

  4. Combinación de algoritmos de aprendizaje automático. Por ejemplo, el uso de algoritmos como LSTM para predecir el posible movimiento de los precios y la resistencia de soporte.

Resumir

La estrategia en su conjunto es adecuada para el seguimiento de las tendencias. Puede obtener ganancias adicionales mediante el ajuste dinámico del precio de parada. También existe un cierto riesgo que requiere optimización y mejora en combinación con otros mecanismos para adaptarse a un entorno de mercado más complejo.

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