Ayuda para GSV de Larry Williams
Forums › ProRealTime foro Español › Soporte ProBuilder › Ayuda para GSV de Larry Williams
- This topic has 16 replies, 5 voices, and was last updated 3 years ago by nonidrilo.
-
-
04/23/2021 at 12:14 AM #167831
Hola a todos
Soy nuevo en el foro y he estado buscando algún post relacionado con Greatest Swing Value de Williams, pero no he encontrado nada.
He intentado crear el indicador, pero soy principiante en ProRealCode y no se como programar.
Las condiciones son
Si close < open, día bajista, tomar el valor de high – open. Sacar la media de los últimos 4 días.
Si close > open, día alcista, tomar el valor de open – low. Sacar la media de los últimos 4 días.
Por favor, si alguien pudiera programar el código, se agradecería.
Gracias anticipadas
04/23/2021 at 9:16 AM #167844Creo que este es el indicador que está buscando: https://www.prorealcode.com/prorealtime-indicators/williams-highs-lows/ Un evaluador sobre esa metodología: https://www.prorealcode.com/prorealtime- evaluadores de mercado / williams-swing-points /
04/23/2021 at 9:29 AM #167855Buenos días Nicolas.
El indicador que me dice es el de swing highs y lows de Williams.
Yo el que busco es el GSV.
En lenguaje amibroker sería
//rango hacia arriba de los días que cierran por debajo de la apertura//
r1=ValueWhen(C<O,H–O,1);r2=ValueWhen(C<O,H–O,2);
r3=ValueWhen(C<O,H–O,3);r4=ValueWhen(C<O,H–O,4);
r_medio=0.25*(r1+r2+r3+r4);Lo que hace este código es calcular la diferencia High-Open en las 4 últimas
ocurrencias en las que Close < Open. Luego sumamos los 4 valores (r1+r2+r3+r4) y
dividimos por 4 para tener la media.Gracias por su interés
04/23/2021 at 10:05 AM #167863El siguiente código debería replicar el cálculo de Bill Williams Swing que publicó:
12345678910111213141516171819202122//r1 = ValueWhen ( C < O , H - O , 1 ); r2 = ValueWhen ( C < O , H - O , 2 );//r3 = ValueWhen ( C < O , H - O , 3 ); r4 = ValueWhen ( C < O , H - O , 4 );$r[0]=0$r[1]=0$r[2]=0$r[3]=0a = 0for i = 0 to 200 doif close[i]<open[1] then$r[a] = high[i]-open[1]a=a+1if a=3 thenbreakendifendifnextrmedium = 0.25 * ($r[0] + $r[1] + $r[2] + $r[3])return rmedium04/23/2021 at 10:53 AM #167872El código parece correcto, aunque hay un error, culpa mía por no haber explicado bien.
El valor (1,2,3,4) que aparece en el código de amibroker se refiere a la barra actual(1), la anterior(2),… que en prorealcode es [0], [1],….
Por tanto el código debería quedar así, supongo
//r1 = ValueWhen ( C < O , H – O , 1 ); r2 = ValueWhen ( C < O , H – O , 2 );
//r3 = ValueWhen ( C < O , H – O , 3 ); r4 = ValueWhen ( C < O , H – O , 4 );$r[0]=0
$r[1]=0
$r[2]=0
$r[3]=0a = 0
for i = 0 to 200 do
if close[i]<open[i] then
$r[a] = high[i]-open[i]
a=a+1
if a=3 then
break
endif
endif
nextrmedium = 0.25 * ($r[0] + $r[1] + $r[2] + $r[3])
return rmedium
Pero por alguna razón no da el resultado correcto.
Acabo de probarlo en el gráfico del SPY y en los últimos 4 días bajistas se han producido los siguientes valores
Día HIGH LOW H-L
16 abril 417.91 417.25 0.66
19 abril 416.74 416.26 0.48
20 abril 415.09 413.91 1.18
22 abril 416.78 415.89 0.89
SUMA 3.21 MEDIA = 3.21/4 = 0.8025
Ese es el resultado que debería dar, pero el indicador me da como resultado 0.63750
No alcanzo a ver donde está el error
04/23/2021 at 11:09 AM #167874Este debería ser el indicador:
1234Periods = 4Bears = (summation[Periods]((high - open) * (close < open)) / Periods)Bulls = (summation[Periods]((open - low) * (close > open)) / Periods)RETURN Bulls AS "Bulls",Bears AS "Bears"04/23/2021 at 1:01 PM #167883Buenos días Roberto
Tampoco da los valores correctos.
Los días que son alcistas deberían tener el mismo valor que el último día bajista anterior para bears. Al contrario para los alcistas.
En el ejemplo que he puesto arriba de los últimos días bajistas del SPY, tu código da el mismo resultado que el de Nicolas, 0.63750, cuando debería tener un valor de 0.8025, la media de los últimos 4 días bajistas, es decir que close < open.
De todas formas, gracias por la ayuda.
Es un placer leer este foro
04/23/2021 at 1:16 PM #167885De hecho, cometí un error tipográfico en mi código, pruebe esta versión:
12345678910111213141516171819202122//r1 = ValueWhen ( C < O , H - O , 1 ); r2 = ValueWhen ( C < O , H - O , 2 );//r3 = ValueWhen ( C < O , H - O , 3 ); r4 = ValueWhen ( C < O , H - O , 4 );$r[0]=0$r[1]=0$r[2]=0$r[3]=0a = 0for i = 0 to 200 doif close[i]<open[i] then$r[a] = high[i]-open[i]a=a+1if a=3 thenbreakendifendifnextrmedium = 0.25 * ($r[0] + $r[1] + $r[2] + $r[3])return rmedium04/23/2021 at 1:24 PM #167888Mi interpretación es que los días alcistas y bajistas de los últimos 4 días deben tomarse por separado, NO los últimos 4 valores bajistas y los últimos 4 alcistas, de lo contrario se convierte en más de una semana de operaciones.
04/23/2021 at 1:29 PM #167893Sin embargo, en mi ejemplo hay un error, ya que también considero que HOY son los 4 días, mientras que los 4 anteriores deberían serlo.
Para corregirlo, simplemente coloque [1] junto a HIGH, CLOSE, OPEN y LOW, que se convertirán en HIGH [1], CLOSE [1], OPEN [1] y LOW [1].
04/23/2021 at 1:33 PM #16789404/23/2021 at 5:16 PM #167910Perdón que me inmiscuya en el tema nonidrilo, pero creo que el valor que calculas en el post #167872 es incorrecto. Calculas la media sobre el rango (high-low) y según la definición del indicador sería para los días bajistas (close<open) , sumar la distancia desde la apertura al máximo de los últimos 4 días que cerraron bajistas. Ese valor lo dividimos entre 4 y así obtenemos la media. Los días no tienen por que ser consecutivos.
Lo explicas tú mismo bien en el post#167855, pero luego cuando haces el calculo en el post anterior que te indique, estas teniendo en cuenta el high y el open.
Creo que las soluciones que te dan tanto Nicolas como Robertogozzi, son correctas.
Compruébalo si puedes.
Un saludo
04/23/2021 at 7:28 PM #167916Efectivamente cjr30, estaba mirando mal los datos, había cogido como bajista a un día alcista, el 16 de abril fue alcista por 0.01.
Pero una vez que he empezado hacia atrás a comprobar resultados, lo que hace el código de Nicolas es hacer la media de los últimos 4 días, y en caso de que sea alcista lo anota como cero, en ese caso el último valor del indicador si sería correcto, pero lo que tiene que hacer es sumar los 4 último días bajistas, estén seguidos o no.
El indicador tiene que recoger la media de la diferencia entre high y open de los 4 últimos días bajistas
Ejemplo del SPY
Fecha High Low H-L
10/02/2021 bajista 392.28 392.12 0.16
11/02/2021 bajista 391.69 391.24 0.45
12/02/2021 alcista
16/02/2021 bajista 394.17 393.96 0.21
17/02/2021 alcista
18/02/2021 alcista
19/02/2021 bajista 392.38 392.07 0.31
22/02/2021 alcista
23/02/2021 alcista
24/02/2021 alcista
25/02/2021 bajista 391.88 390.41 1.47
El indicador debería marcar el día 19 la media de los 4 días bajistas (10, 11, 16 y 19) cuya media es 0.2825. Sin embargo el indicador marca 0.2425.
El día 25 recogería la media de los últimos 4 días bajistas (11, 16, 19 y 25) cuya media es 0.61, pero el indicador marca 1.085.
El código, tanto de Nicolas como de Roberto lo veo lógico pero no alcanzo a comprender de donde saca esos valores el indicador.
Un saludo y perdón por el tostón
04/23/2021 at 7:31 PM #16791704/23/2021 at 8:21 PM #167920Hola, creo que hay un bug en el codigo de Nicolas, todo esta bien salvo que esta promediando unicamente los 3 ultimos dias . Para promediar los 4 anteriores dias bajistas habría que cambiar la linea 14 , quedaría asi:
12345678910111213141516171819202122//r1 = ValueWhen ( C < O , H - O , 1 ); r2 = ValueWhen ( C < O , H - O , 2 );//r3 = ValueWhen ( C < O , H - O , 3 ); r4 = ValueWhen ( C < O , H - O , 4 );$r[0]=0$r[1]=0$r[2]=0$r[3]=0a = 0for i = 0 to 200 doif close[i]<open[i] then$r[a] = high[i]-open[i]a=a+1if a=4 thenbreakendifendifnextrmedium = 0.25 * ($r[0] + $r[1] + $r[2] + $r[3])return rmedium -
AuthorPosts
Find exclusive trading pro-tools on