Líneas horizontales según MACD
Forums › ProRealTime foro Español › Soporte ProBuilder › Líneas horizontales según MACD
- This topic has 9 replies, 2 voices, and was last updated 4 months ago by druby.
-
-
06/22/2024 at 4:41 PM #234224
Querría obtener una línea horizontal en el precio cada vez que MACD alcance un máximo y después un mínimo o viceversa (soporte en verde, resistencia en rojo), ¿es posible programarlo?
Actualmente pongo las líneas a mano, pero cuando a veces necesito ver el ajuste por dividendos y estas líneas mueven la referencia.
Gracias
06/22/2024 at 9:44 PM #234228Pruebe esto, vea si dibuja líneas en la posición correcta. Si necesitas un cambio, trata de ser específico.
La variable llamada “línes” limitaba el número de líneas dibujadas.
“Lastbars” limitaba el número de barras utilizadas en los cálculos. Cero significa usar todas las barras. 100 significa comenzar en el compás 100.123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172defparam drawonlastbaronly = truelastbars = 0lines = 7once below = 0once above = 1once id = 0// indicatorsiMacd = MACDline[12,26,9](close)iSignal = MACDSignal[12,26,9](close)if barindex > min(30,lastbars) then// conditionsxover = belowif iMacd > iSignal thenxover = aboveif iMacd crosses over iSignal thenid = id + 1endifendifif xover = above thenif iMacd > iMacd[1] then$hi[id] = barindexendifendifif xover = below thenif iMacd < iMacd[1] then$lo[id] = barindexendifendifendif// drawingif islastbarupdate thenfor i = max(0,lastset($hi)-lines+1) to lastset($hi)hi = high[$hi[i]]x1 = barindex-$hi[i]y1 = high[x1]x2 = 0y2 = y1drawsegment(barindex[x1],y1,barindex[x2]+5,y2) coloured("red")style(dottedline,1)//drawtext(i,barindex[x2]+11,y1) coloured("red")drawtext(y1,-120,y1) anchor(right,xshift,value) coloured("red")nextfor i = max(0,lastset($lo)-lines+1) to lastset($lo)x1 = barindex - $lo[i]y1 = low[x1]x2 = 0y2 = y1drawsegment(barindex[x1],y1,barindex[x2]+5,y2) coloured("lime")style(dottedline,1)//drawtext(i,barindex[x2]+12,y1) coloured("lime")drawtext(y1,-50,y1)anchor(right,xshift,value) coloured("lime")nextendif//drawtext(xover,barindex,20)anchor(bottom,index,yshift)coloured("yellow")return2 users thanked author for this post.
06/23/2024 at 5:53 AM #234230Muchas gracias, es exactamente lo que buscaba.
Si quisiera cambiar el timeframe para que las líneas fuesen siempre en base al MACD mensual (aunque cambie la vista a diario o semanal), ¿dónde tendría que ponerlo?
06/23/2024 at 10:56 AM #234231Su solicitud no es fácil de implementar. El comando “Período de tiempo” no es compatible con los tres “períodos de tiempo”.
Además, el código escrito necesitaría muchos cambios para mostrarse correctamente en los otros marcos temporales.
Actualmente, la única solución que se me ocurre es derivar un MACD mensual personalizado a partir del marco temporal del gráfico y, a partir de ahí, calcular las líneas.
No es una solución rápida. Lo investigaré.
Si alguien tiene una solución, que se sume.
06/26/2024 at 9:49 AM #234358He probado a multiplicar los iMACD e iSIGNAL por 365/12/7, es una aproximación pero cuanto más te alejas de la fecha actual menos preciso es respecto al timeframe mensual.
06/27/2024 at 1:09 AM #234395Hola… Prueba esta versión.
Solo funciona en marcos temporales de 1 día, 1 semana y 1 mes.Los mejores resultados se obtienen con las unidades 1 mes = 25, 1 semana = 1000 y 1 fecha = 10 000.
Compara las líneas con lo que dibujarías.
Si detectas algún problema, publícalo y lo analizaré.
macd hi lo range v2.00123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113lines = 5 // 0 or positve integer, smaller than lines drawn!error = 1 // display error messageif barindex = 0 thenonce below = 0once above = 1once Hid = 0once Lid = 0$hi[0]=0$lo[0]=0gTF = getTimeframeif gtf = 86400 then // 1daym = 30.416667 // days 365/12 days/month 10,000 unitsTF=1elsif gtf = 604800 then // 1weekm = 4.333334 // weeks 365/52 weeks/month 1000 unitsTF=2elsif gtf >= 2419200 and gtf <= 2678400 then // 1 month 25unitsm = 1 // monthsTF=0elseTF = -1if error = 1 thenDrawtext("Monthly,<br> Weekly, <br> Daily <br> Timeframes only!"/**/ ,0,0,monospaced,bold,30) /**/ coloured("red") anchor(middle,xshift,yshift)endifendifa = 12 * mb = 26 * mc = 9 * mendifif barindex > b and TF >= 0 theniMacd = MACDline[max(1,a),max(1,b),max(1,c)](close)iSignal = MACDSignal[max(1,a),max(1,b),max(1,c)](close)// is macd line crosses aboveif iMacd > iSignal and iMacd [1] < iSignal[1] thenHid = Hid + 1HH=highHHb = barindexxOver = aboveendif// is macd line crosses belowif iMacd < iSignal and iMacd [1] > iSignal[1] thenLid = Lid + 1LL = lowLLb = barindexxOver = belowendif// highsif xover = above thenif high > HH thenHH = highHHb = barindexendifendifif openmonth <> openmonth[1] then$hi[Hid] = HHbendif// lowsif xover = below thenif low < LL thenLL = lowLLb = barindexendifendifif openmonth <> openmonth[1] then$lo[Lid] = LLbendifif islastbarupdate then// drawing highsfor i = max(0,lastset($hi)-lines+1) to lastset($hi)x1 = barindex-$hi[i]y1 = high[x1]x2 = 0y2 = y1drawsegment(barindex[x1],y1,barindex[x2]+5,y2) coloured("red")style(dottedline,1)drawtext(y1,-120,y1+5) anchor(right,xshift,value) coloured("red")next// drawing lowsfor i = max(0,lastset($lo)-lines+1) to lastset($lo)x1 = barindex - $lo[i]y1 = low[x1]x2 = 0y2 = y1drawsegment(barindex[x1],y1,barindex[x2]+5,y2) coloured("lime")style(dottedline,1)drawtext(y1,-50,y1)anchor(right,xshift,value) coloured("lime")nextendifendifreturn/**/06/27/2024 at 10:26 AM #234422En algunos tickers fallan algunas líneas. Por ejemplo en el ticker HOME (BME):
- Las líneas en 16 y 14 no se generan en base al MACD
- en mensual dibuja unas líneas entre 2020 y 2022 que en semanal no aparecen
Trabajo con zonas visibles de 145U (145 meses y 145 semanas), no sé si tendrá algo que ver.
Gracias por tu dedicación.
06/27/2024 at 2:56 PM #234438Hola..
La imagen 1 muestra el número predeterminado en las barras visibles, tanto para el gráfico semanal como para el mensual, y también se representan mediante rectángulos azules. Las líneas del gráfico semanal se alinean con las líneas correspondientes del gráfico mensual. Sin embargo, algunas líneas mensuales parecen faltar en el gráfico semanal. En la parte inferior de los gráficos, se encuentran el código MACD y el MACD de acciones, todos para el gráfico mensual.Imagen 2: El gráfico semanal se amplía en el eje x para mostrar todas las barras. La línea vertical representa el punto de inicio de la línea faltante más reciente. Sin embargo, al observar el código MACD, aún no está definido y no se puede detectar el punto de cruce para esa línea.
Imagen 3: Se amplía el gráfico mensual para mostrar todas las barras. La línea vertical se mueve al inicio del gráfico semanal y se refleja en el gráfico mensual. Las otras líneas faltantes no solo no están cubiertas por el código MACD semanal, sino que esas barras ni siquiera están presentes.
Para que el gráfico semanal represente todas las líneas mensuales, tiene que haber suficientes datos históricos cargados para capturar el código MACD de cruce, que luego dibuja su línea.
En 145 unidades, eso significa que se cargaron 650 barras históricas y se necesitan 150 barras para calcular el inicio de la señal MACD. Y luego esperar el cruce.
En este momento, la única solución es aumentar los datos históricos hasta que se representen todas las líneas requeridas.
No se muestra, noté que dos líneas no coincidían en absoluto. Esto se debió a que, cuando recorrí las matrices para dibujar las líneas, comenzó en el índice cero, y esto no era válido y debería haber comenzado en ‘1’.
Además, para el gráfico diario, habrá un escenario similar, pero se necesitan incluso más barras para representar todas las líneas mensuales.
Espero que esto explique lo que está sucediendo.
macd hi lo range v2.01123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116once iMacd = undefinedonce iSignal = undefinedlines = 5 // 0 or positve integer, smaller than lines drawn!error = 1 // display error messageif barindex = 0 thenonce below = 0once above = 1once Hid = 0once Lid = 0$hi[0]=0$lo[0]=0gTF = getTimeframeif gtf = 86400 then // 1daym = 30.416667 // days 365/12 days/month 10,000 unitsTF=1elsif gtf = 604800 then // 1weekm = 4.333334 // weeks 365/52 weeks/month 1000 unitsTF=2elsif gtf >= 2419200 and gtf <= 2678400 then // 1 month 25unitsm = 1 // monthsTF=0elseTF = -1if error = 1 thenDrawtext("Monthly,<br> Weekly, <br> Daily <br> Timeframes only!"/**/ ,0,0,monospaced,bold,30) /**/ coloured("red") anchor(middle,xshift,yshift)endifendifa = 12 * mb = 26 * mc = 9 * mendifif barindex > b and TF >= 0 theniMacd = MACDline[max(1,a),max(1,b),max(1,c)](close)iSignal = MACDSignal[max(1,a),max(1,b),max(1,c)](close)// is macd line crosses aboveif iMacd > iSignal and iMacd [1] < iSignal[1] thenHid = Hid + 1HH=highHHb = barindexxOver = aboveendif// is macd line crosses belowif iMacd < iSignal and iMacd [1] > iSignal[1] thenLid = Lid + 1LL = lowLLb = barindexxOver = belowendif// highsif xover = above thenif high > HH thenHH = highHHb = barindexendifendifif openmonth <> openmonth[1] then$hi[Hid] = HHbendif// lowsif xover = below thenif low < LL thenLL = lowLLb = barindexendifendifif openmonth <> openmonth[1] then$lo[Lid] = LLbendifif islastbarupdate then// drawing highsfor i = max(1,lastset($hi)-lines+1) to lastset($hi)x1 = barindex-$hi[i]y1 = high[x1]x2 = 0y2 = y1drawsegment(barindex[x1],y1,barindex[x2]+5,y2) coloured("red")style(dottedline,1)drawtext(y1,-120,y1+5) anchor(right,xshift,value) coloured("red")next// drawing lowsfor i = max(1,lastset($lo)-lines+1) to lastset($lo)x1 = barindex - $lo[i]y1 = low[x1]x2 = 0y2 = y1drawsegment(barindex[x1],y1,barindex[x2]+5,y2) coloured("lime")style(dottedline,1)drawtext(y1,-50,y1)anchor(right,xshift,value) coloured("lime")nextendifendifreturn/**/1 user thanked author for this post.
06/28/2024 at 9:21 AM #234465Gracias por la explicación, un saludo.
06/28/2024 at 10:20 AM #234470Aquí hay otra versión, donde calculé valores precisos para el número de días/semanas en un mes y también si es un saltoAquí hay otra versión, donde calculé valores precisos para el número de días/semanas en un mes y también si es un año bisiesto.
-
AuthorPosts
Find exclusive trading pro-tools on