Estrategia de negociación de banda de volatilidad de ruptura


Fecha de creación: 2023-10-07 09:59:11 Última modificación: 2023-10-07 09:59:11
Copiar: 0 Número de Visitas: 658
1
Seguir
1617
Seguidores

Descripción general

La estrategia se basa en el principio de la ruptura de la banda de Bryn, donde se realiza una operación inversa cuando el precio se rompe por completo la vía ascendente o descendente. Puede capturar el movimiento de la línea de equilibrio de retorno después de una fluctuación anormal y es aplicable a los operadores activos que buscan obtener ganancias eficientes.

El principio

La estrategia utiliza la banda de Brin para definir el rango de fluctuación del mercado actual. Cuando los precios forman una columna de sol o columna de sol completa y rompen completamente la banda de Brin para subir o bajar de la vía, indica que el mercado ha alcanzado un estado de alta fluctuación y los precios se volverán a la dirección de la línea de equilibrio.

En concreto, la estrategia calcula los precios de cierre de la banda de Bryn en la línea de 20 K. Se produce una señal de breakeven cuando el precio es más alto que el precio de cierre y el precio de cierre es más alto que el precio de apertura. Luego se utiliza el punto de ruptura como punto de parada y la línea media como el primer nivel de precio objetivo.

Las ventajas

Las principales ventajas de esta estrategia son:

  1. El uso de las bandas de Bryn para determinar el grado de fluctuación del mercado y la identificación efectiva de los estados anormales.

  2. El punto de ruptura sirve como punto de parada para controlar el riesgo de manera efectiva.

  3. El regreso a la órbita media establece una posición objetivo razonable para evitar una caída excesiva.

  4. El filtro de la línea K completa es falso y mejora la calidad de la señal.

  5. Parámetros sencillos, fáciles de implementar y optimizar.

  6. La lógica es clara y fácil de entender, el código es sencillo y elegante.

El riesgo

La estrategia también tiene los siguientes riesgos:

  1. Los parámetros incorrectos de la banda de Bryn pueden causar una falla.

  2. La brecha podría ser el comienzo de una nueva tendencia, con el riesgo de una salida prematura.

  3. Los objetivos de la órbita central podrían ser demasiado conservadores para generar beneficios sostenibles.

  4. La brecha más grande no se puede llenar por completo, existe el riesgo de un deslizamiento.

  5. La tendencia a la oscilación puede ocasionar frecuentes y innecesarias transacciones.

Dirección de optimización

La estrategia puede ser mejorada en los siguientes puntos:

  1. Evaluar la intensidad de la tendencia, ajustar los parámetros o la frecuencia de las transacciones.

  2. En combinación con otros indicadores para determinar el mejor momento de ingreso.

  3. Ajuste el Stop Loss en función de la volatilidad

  4. Optimización de la fijación del primer objetivo para obtener ganancias rápidas.

  5. El objetivo de la iniciativa es mejorar la calidad de vida de las personas con discapacidad, a través de un mecanismo de reingreso.

  6. Evaluar la credibilidad de las brechas y evitar transacciones erróneas.

Resumir

Esta estrategia se basa en el principio de la ruptura de la banda de Brin, y es adecuada para los comerciantes activos que buscan ganancias a corto plazo. La ventaja es que el control del riesgo es claro, la desventaja es que es posible una salida anticipada y un espacio de ganancias limitado. Se puede mejorar la eficacia mediante la optimización de parámetros, indicadores auxiliares y otros métodos.

Código Fuente de la Estrategia
/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 00:00:00
period: 3h
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/
// © Bishnu103

//@version=4
strategy(title="Full Candle Outside BB [v1.0][Bishnu103]",shorttitle="OUTSIDE BB",overlay=true,calc_on_every_tick=true,backtest_fill_limits_assumption=2)

// ***********************************************************************************************************************
// input variables
buy_session         = input(title="Buy Session", type=input.session, defval="0915-1430")
exit_inraday        = input(title="Exit Intraday?", type=input.bool, defval=true)
entry_distance      = input(title="Entry distance from alert", minval=1, maxval=10, defval=3)
show_bb_switch      = input(title="Show BB", type=input.bool, defval=true)
//
bbLength            = input(title="BB Length", minval=1, defval=20)
bbStdDev            = input(title="BB StdDev", minval=1, defval=2)

// ***********************************************************************************************************************
// global variables
long_entry          = false
short_entry         = false
long_exit           = false
short_exit          = false

// variable values available across candles
var entry_price     = 0.0  
var sl_price        = 0.0
var exit_price      = 0.0
var candle_count    = 0

// ***********************************************************************************************************************
// function to return bollinger band values based on candle poition passed 
getBB(pos) => [mBB, uBB, lBB] = bb(close[pos], bbLength, bbStdDev)

// function returns true if current time is within intraday byuing session set in input
BarInSession(sess) => time(timeframe.period, sess) != 0

// ***********************************************************************************************************************
// strategy
//
// get current bb value
[mBB_0,uBB_0,lBB_0] = getBB(0)

// check if full candle outside upper BB
outside_uBB = low > uBB_0 and close <= open
outside_lBB = high < lBB_0 and close >= open

// ***********************************************************************************************************************
// entry conditions 
long_entry   := outside_lBB
short_entry  := outside_uBB

// keep candle count since the alert generated so that order can be cancelled after N number of candle calling it out as invalid alert
candle_count := candle_count + 1
if long_entry or short_entry
    candle_count    := 0

// ***********************************************************************************************************************
// risk management
//
// decide entry and sl price
if long_entry
    entry_price := high
    
if short_entry
    entry_price := low
    
if long_entry
    sl_price    := low
    
if short_entry
    sl_price    := high

// first exit is when price hits middle BB, gets updated for each candle based on it's middle BB value
exit_price  := mBB_0

// ***********************************************************************************************************************
// position sizing
price = if close[0] > 25000
    25000
else
    price = close[0]

qty = 25000/price

// ***********************************************************************************************************************
// entry
//if long_entry and strategy.position_size == 0
//    strategy.entry("BUY", strategy.long, qty, stop=entry_price, comment="BUY @ "+ tostring(entry_price)) 
if long_entry and strategy.position_size == 0
    strategy.order("BUY", strategy.long, qty, stop=entry_price, comment="BUY @ "+ tostring(entry_price))

//if short_entry and strategy.position_size == 0
//    strategy.entry("SELL", strategy.short, qty, stop=entry_price, comment="SELL @ "+ tostring(entry_price))
if short_entry and strategy.position_size == 0
    strategy.order("SELL", strategy.short, qty, stop=entry_price, comment="SELL @ "+ tostring(entry_price))

// cancel an order if N number of candles are completed after alert candle
strategy.cancel_all(candle_count > entry_distance)

// if current time is outside byuing session then do not enter intraday trade
strategy.cancel_all(timeframe.isintraday and not BarInSession(buy_session))

// ***********************************************************************************************************************
// exit
if strategy.position_size > 0
    strategy.cancel("EXIT at MBB", true)
    strategy.cancel("EXIT at SL", true)
    strategy.order("EXIT at MBB", strategy.short, abs(strategy.position_size), limit=exit_price, comment="EXIT TG @ "+ tostring(exit_price))
    strategy.order("EXIT at SL", strategy.short, abs(strategy.position_size), stop=sl_price, comment="EXIT SL @ "+ tostring(sl_price))

if strategy.position_size < 0
    strategy.cancel("EXIT at MBB", true)
    strategy.cancel("EXIT at SL", true)
    strategy.order("EXIT at MBB", strategy.long, abs(strategy.position_size), limit=exit_price, comment="EXIT TG @ "+ tostring(exit_price))
    strategy.order("EXIT at SL", strategy.long, abs(strategy.position_size), stop=sl_price, comment="EXIT SL @ "+ tostring(sl_price))

// if intraday trade, close the trade at open of 15:15 candle //!!!!!!!!!!!!!!!!!!!!! TO BE CORRECTED !!!!!!!!!!!!!!!!!!!!!!!
if timeframe.isintraday and exit_inraday and hour == 15 and minute == 00
    strategy.close("BUY",  when=strategy.position_size > 0, qty=strategy.position_size, comment="EXIT @ "+ tostring(close))
    strategy.close("SELL", when=strategy.position_size < 0, qty=strategy.position_size, comment="EXIT @ "+ tostring(close))

// ***********************************************************************************************************************
// plots    
//
// plot BB
[mBBp,uBBp,lBBp] = getBB(0)
p_mBB = plot(show_bb_switch ? mBBp : na, color=color.teal)
p_uBB = plot(show_bb_switch ? uBBp : na, color=color.teal)
p_lBB = plot(show_bb_switch ? lBBp : na, color=color.teal)
fill(p_uBB,p_lBB,color=color.teal,transp=95)