Estrategia de oscilación de bandas de sección áurea


Fecha de creación: 2023-11-21 13:47:12 Última modificación: 2023-11-21 13:47:12
Copiar: 0 Número de Visitas: 348
1
Seguir
1166
Seguidores

Estrategia de oscilación de bandas de sección áurea

Descripción general

La estrategia de oscilación de la franja de oro es una estrategia cuantitativa diseñada en base a la teoría de la franja de oro. La estrategia utiliza principalmente la regla de la franja de oro para calcular varias bandas de precios, formando bandas altas y bajas.

Principio de estrategia

La lógica central del código es calcular el segmento de onda de la división del oro en el precio como un punto clave. Los pasos principales son:

  1. Calcula el promedio de la EMA de 14 ciclos como el eje central
  2. Las 4 líneas de banda de arriba a abajo se calculan según el ATR y el Gold Split Ratio
  3. Una señal de negociación se genera cuando el precio se rompe hacia arriba en el rango de bajada o hacia abajo en el rango de subida
  4. Establezca un Stop Loss para seguir las fluctuaciones de los precios

Con este método basado en puntos clave, se puede capturar eficazmente las fluctuaciones a corto plazo en el mercado y obtener ganancias de transacciones de ida y vuelta entre bandas.

Ventajas estratégicas

La mayor ventaja de esta estrategia es que utiliza la división del oro, un importante indicador teórico para ubicar los puntos clave de los precios, lo que mejora la probabilidad de obtener ganancias. Las ventajas concretas se reflejan principalmente en:

  1. El oro divide las bandas con claridad, lo que facilita la determinación de la brecha
  2. El rango de banda es adecuado, no demasiado pequeño ni demasiado flexible
  3. Se puede elegir entre varias bandas de onda, tanto para operaciones agresivas como conservadoras.
  4. Las características de la oscilación de la banda son evidentes, la estrategia de maniobra de línea corta funciona bien

Riesgo estratégico

Como la estrategia busca ganancias a corto plazo, también hay algunos riesgos a tener en cuenta:

  1. No se puede ganar con la tendencia del gran ciclo
  2. El riesgo de pérdidas se incrementa cuando los precios fluctúan fuertemente
  3. La mayoría de las señales son de ruptura y hay que elegir con cuidado.
  4. No tiene efecto cuando desaparece la característica de vibración de la banda

Estos riesgos pueden ser controlados mediante ajustes adecuados de los parámetros, la selección de la banda adecuada y la gestión de fondos.

Optimización de la estrategia

La estrategia tiene espacio para ser optimizada aún más:

  1. La combinación de un indicador de tendencia y un filtro de una dirección de tendencia determinada generan una señal
  2. Cierre de la estrategia en un período de tiempo específico o antes de un punto de evento importante
  3. Ajuste dinámico de la amplitud de los paros para adaptarse a la frecuencia de las fluctuaciones del mercado
  4. Parámetros de optimización para elegir diferentes periodos de EMA como referencia de la línea media

Resumir

La estrategia de oscilación de la franja de la división del oro es una estrategia de línea corta muy práctica en general. Utiliza la teoría de la división del oro para establecer puntos críticos de precios y obtener grandes ganancias cuando los precios oscilan cerca de estos puntos. Este método basado en brechas de rango es adecuado para mercados con cierta volatilidad y características, puede usarse solo o en combinación con otras estrategias.

Código Fuente de la Estrategia
/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 00:00:00
period: 1d
basePeriod: 1h
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/
// © drhakankilic

//@version=5
strategy("FIBONACCI BANDS Strategy", shorttitle="FBANDS Strategy", overlay=true)
// === Date === { 
//Backtest dates
fromDay = input.int(defval=1, title='From Day',minval=1,maxval=31)
fromMonth = input.int(defval=2, title='From Month',minval=1,maxval=12)
fromYear = input.int(defval=2022, title='From Year')
thruDay = input.int(defval=1, title='Thru Day',minval=1,maxval=31)
thruMonth = input.int(defval=1, title='Thru Month',minval=1,maxval=12)
thruYear = input.int(defval=2112, title='Thru Year')
showDate = true  // input(defval=true, title="Show Date Range")
start = timestamp(fromYear, fromMonth, fromDay, 00, 00)  // backtest start window
finish = timestamp(thruYear, thruMonth, thruDay, 23, 59)  // backtest finish window
window() =>  // create function "within window of time"
    time >= start and time <= finish ? true : false
// }

// === Long or Short ===  
tradeDirection = input.string(title="Long veya Short", options=["Long", "Short", "Both"], defval="Both",                                       group="Bot")
// Translate input into trading conditions
longOK  = (tradeDirection == "Long") or (tradeDirection == "Both")
shortOK = (tradeDirection == "Short") or (tradeDirection == "Both")
copypaste   = input('{{strategy.order.alert_message}}',         title='alert message to copy/paste',                                    group="Bot")
// }

// === FIBONACCI BANDS === {
EMAperiod = input.int(14, title='EMAperiod', minval=1, maxval=500, group="Fibonacci")
ATRperiod = input.int(14, title='ATRperiod', minval=1, maxval=500, group="Fibonacci")
EMA = ta.ema(close, EMAperiod)
TR1 = math.max(high - low, math.abs(high - close[1]))
TR = math.max(TR1, math.abs(low - close[1]))
ATR = ta.sma(TR, ATRperiod)
F2 = input(defval=1.618, title='Fibonacci Ratio 2', group="Fibonacci")
F3 = input(defval=2.618, title='Fibonacci Ratio 3', group="Fibonacci")
F4 = input(defval=4.236, title='Fibonacci Ratio 4', group="Fibonacci")
R1 = ATR
R2 = ATR * F2
R3 = ATR * F3
R4 = ATR * F4
FIBOTOP4 = EMA + R4
FIBOTOP3 = EMA + R3
FIBOTOP2 = EMA + R2
FIBOTOP1 = EMA + R1
FIBOBOT1 = EMA - R1
FIBOBOT2 = EMA - R2
FIBOBOT3 = EMA - R3
FIBOBOT4 = EMA - R4
plot(FIBOTOP4[1], title='FIBOTOP4', linewidth=1, color=color.new(color.orange, 0))
plot(FIBOTOP3[1], title='FIBOTOP3', linewidth=1, color=color.new(color.aqua, 20))
plot(FIBOTOP2[1], title='FIBOTOP2', linewidth=1, color=color.new(color.gray, 40))
plot(FIBOTOP1[1], title='FIBOTOP1', linewidth=1, color=color.new(color.purple, 40))

plot(FIBOBOT1[1], title='FIBOBOT1', linewidth=1, color=color.new(color.green, 40))
plot(FIBOBOT2[1], title='FIBOBOT2', linewidth=1, color=color.new(color.yellow, 40))
plot(FIBOBOT3[1], title='FIBOBOT3', linewidth=1, color=color.new(color.blue, 20))
plot(FIBOBOT4[1], title='FIBOBOT4', linewidth=1, color=color.new(color.aqua, 0))
// plot(EMA[1], style=plot.style_cross, title='EMA', color=color.new(color.red, 0))

prefm = input.string(title="Fibo", options=["close>FIBOTOP4(orange)", "close>FIBOTOP3(aqua)","close>FIBOTOP2(gray)","close>FIBOTOP1(purple)", "Disable"] , defval="close>FIBOTOP1(purple)", group="Long")
_prefm = false 
if (prefm == "close>FIBOTOP4(orange)" )
    _prefm := close>FIBOTOP4[1]
    
if (prefm == "close>FIBOTOP3(aqua)" )
    _prefm := close>FIBOTOP3[1]

if (prefm == "close>FIBOTOP2(gray)" )
    _prefm := close>FIBOTOP2[1]
    
if (prefm == "close>FIBOTOP1(purple)" )
    _prefm := close>FIBOTOP2[1]
 
 
if (prefm == "Disable" )
    _prefm := low<low[1] or low>low[1]  
    
prefmS = input.string(title="Fibo", options=["close<FIBOBOT1(green)", "close<FIBOBOT2(yellow)", "close<FIBOBOT3(blue)", "close<FIBOBOT4(aqua)", "Disable"] , defval="close<FIBOBOT1(green)", group="Short")
_prefmS = false 
if (prefmS == "close<FIBOBOT1(green)" )
    _prefmS := close<FIBOBOT1[1]
  
if (prefmS == "close<FIBOBOT2(yellow)" )
    _prefmS := close<FIBOBOT2[1]

if (prefmS == "close<FIBOBOT3(blue)" )
    _prefmS := close<FIBOBOT3[1]
  
if (prefmS == "close<FIBOBOT4(aqua)" )
    _prefmS := close<FIBOBOT4[1]

if (prefmS == "Disable" )
    _prefmS := low<low[1] or low>low[1]  

// }

long2= _prefm 

short2= _prefmS
//

// === Bot Codes === { 
enterlong = input("Long Code", title='Long İlk Alım', group="Long Code")
entershort= input("Short Code", title='Short İlk Alım', group="Short Code")
exitlong = input("Long Exit Code", title='Long Exit', group="Long Code")
exitshort= input("Short Exit Code", title='Short Exit', group="Short Code")
// }

////////////////////////////////////////////////////////////////////////////////////////////TPSL
// Inputs
sl_inp = input.float(4, title='Stop %', step=0.1, group="Long") / 100
tp_inp = input.float(1.5, title='TP %', step=0.1, group="Long") / 100

sl_inp2 = input.float(4, title='Stop %', step=0.1, group="Short") / 100
tp_inp2 = input.float(1.5, title='TP %', step=0.1, group="Short") / 100

longtp = strategy.position_avg_price * (1 + tp_inp) 
longstop=  strategy.position_avg_price * (1 - sl_inp)

shortstop=  strategy.position_avg_price * (1 + sl_inp2)
shorttp = strategy.position_avg_price * (1 - tp_inp2) 
////////////////////////////////////////////////////////////////////////////////////////////
if window() and strategy.position_size==0 and longOK
    strategy.entry("Long", strategy.long, when= long2, alert_message=enterlong, comment="Long")
    
if strategy.position_size>0
    strategy.exit("Long", stop= longstop, limit=longtp, alert_message=exitlong, comment="TPSL")
////////////////////////////////////////////////////////////////////////////////////////////SHORT
if window() and strategy.position_size==0 and shortOK 
    strategy.entry("Short", strategy.short, when= short2, alert_message=entershort, comment="Short")
    
if strategy.position_size<0
    strategy.exit("Short", stop= shortstop, limit= shorttp, alert_message=exitshort, comment="TPSL")