/ This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © jjandamio //**************ChangeLog**************************** //20220319 Cambio de las reglas de George para volatilidades por encima de 35, pasamos de 65 a 70 puntos. //20220323 Desde la actualización del código la volatilidad no había bajado de 30 y no se porqué, se duplicaba la etiqueta de información. //20230110 Observamos que Georg toma el rango (max y min de la mañana) a partir de los open/close de las velas y no a partir de los máximos y mínimos // de la mañana, bajo esta premisa modifico el código para amumir dichos valores, esto genera un problema porque va a depender del timeframe. // Por otro lado, he visto que había un error para los casos de Volatilidad > 30, no estaba cogiendo los valores de las zonas de largos para el SETUP1 //20230122 El setup 1 se construye a partir de los rangos que dibujan los cuerpos de la velas, pero el tamaño del cuerpo depende de la temporalidad, realizo // un cambio en el código para respetar la temporalidad de los cuerpos en velas de 15 minutos // Además incluyo una sentencia para en aquellos casos que el rango de la mañana no se cubra, se incremente a 100 o 125 puntos dicho rango en función de la volatilidad. //@version=5 indicator("Extensión de Rango verano", overlay=true) // Valor VDAX-new (trandingview sólo da un valor al día, utilizamos del VIX del S&P500) VDAX = request.security("DV1X", "D", close) //Índice de Volatilidad del DAX, horario limitado VIXSP = request.security("VIX", "1", close) //Índice de Volatilidad del S&P500, al minuto "SÓLO COTIZA DE 15:30 A 22:14" VIXDOW = request.security("VXD", "1", close) //Índice de Volatilidad del Dow, al minuto "SÓLO COTIZA DE 15:30 A 22:14" max_vola = math.max(VDAX,0) //VIXSP,VIXDOW) //DAX_CIERRE = security("XETR:DAX", "240", close) //Índice DAX // volatilidad <= 20 -----> 40 puntos // volatilidad entre 20-25 -----> 50 puntos // volatilidad entre 25-30 -----> 55 puntos // volatilidad entre 30-35 -----> 65 puntos por zona para cortos y 100 la primera zona de largos y 65 más para la segunda // volatilidad > 35 -----> //El requisito previo para negociar por la tarde son los siguientes diferenciales de negociación intradía: //Desde 100 puntos por listado VDAX hasta 20 //A partir de 125 puntos para listado VDAX entre 20 y 30 //Excepto configuración 3 zona=0 zonaLargos=0 if max_vola <= 20 zona := 40 zonaLargos := 40 else if max_vola <= 25 zona := 50 zonaLargos := 50 else if max_vola <= 30 zona := 55 zonaLargos := 55 else if max_vola <= 35 zona := 65 zonaLargos := 100 else if max_vola > 35 zona := 70 zonaLargos := 140 // en verano poner GMT+2 y en invierno GMT+1 in_time_int_02 = time(timeframe.period, "0800-1430", "GMT+1") var highe_02 = 0.0 var lowe_02 = 0.0 OPEN_15 = request.security(syminfo.tickerid, "15", open) CLOSE_15 = request.security(syminfo.tickerid, "15", close) if in_time_int_02 if not in_time_int_02[1] if open >= close highe_02 := OPEN_15//open lowe_02 := CLOSE_15//close else highe_02 := CLOSE_15//close lowe_02 := OPEN_15//open else if OPEN_15 >= CLOSE_15//open >= close highe_02 := math.max(OPEN_15, highe_02) lowe_02 := math.min(CLOSE_15, lowe_02) else highe_02 := math.max(CLOSE_15, highe_02) lowe_02 := math.min(OPEN_15, lowe_02) rango = highe_02-lowe_02 // graficado de líneas horizontales // en verano poner GMT+2 y en invierno GMT+1 linezonetime = time("1", "1430-2200","GMT+1") // formación de la bandas del setup1 (extensión de rango) var L1 =0.0 var L2 =0.0 var LStop =0.0 var S1 =0.0 var S2 =0.0 var SStop =0.0 if linezonetime if not linezonetime[1] if (VDAX <= 20) and (rango < 100) if math.abs(close - highe_02) <= math.abs(close - lowe_02) //highe_02 := 100 + lowe_02 lowe_02 := highe_02 - 100 else //lowe_02 := highe_02 - 100 highe_02 := 100 + lowe_02 if VDAX > 20 and rango < 125 if math.abs(close - highe_02) <= math.abs(close - lowe_02) //highe_02 := 125 + lowe_02 lowe_02 := highe_02 - 125 else //lowe_02 := highe_02 - 125 highe_02 := 125 + lowe_02 if linezonetime if not linezonetime[1] S1 := highe_02 + zona //Intervalo S2 := S1 + zona //Intervalo SStop := S2 + 35 L1 := lowe_02 - zonaLargos //Intervalo L2 := L1 - zona //Intervalo LStop := L2 - 35 plot(not in_time_int_02 ? highe_02 : na, title="Morning High", color=color.orange, linewidth=2, style=plot.style_linebr) plot(not in_time_int_02 ? lowe_02 : na, title="Morning Low", color=color.orange, linewidth=2, style=plot.style_linebr) //plotshape(not in_time_int_02 ? highe_02 : na, style=shape.labelup, location=location.absolute, color=color.green, textcolor=color.black, show_last=1, text=, offset = offset_val, transp=20, title="Monday High") plot(linezonetime ? L1 : na, title="L1", color=color.blue, linewidth=2, style=plot.style_linebr) plot(linezonetime ? L2 : na, title="L2", color=color.fuchsia, linewidth=2, style=plot.style_linebr) plot(linezonetime ? LStop : na, title="L Stop", color=color.black, linewidth=1, style=plot.style_linebr) plot(linezonetime ? S1 : na, title="L1", color=color.blue, linewidth=2, style=plot.style_linebr) plot(linezonetime ? S2 : na, title="L2", color=color.fuchsia, linewidth=2, style=plot.style_linebr) plot(linezonetime ? SStop : na, title="L Stop", color=color.black, linewidth=1, style=plot.style_linebr) ourlabel = label.new(bar_index, y=low - 100, text="Rango\n" +str.tostring(rango), style=label.style_label_up, yloc=yloc.price, color=color.purple, textcolor=color.white, size=size.small) label.delete(ourlabel[1])