Mostrando cualquier amplitud en el mismo gráfico sin tiempos de carga

Mostrando cualquier amplitud en el mismo gráfico sin tiempos de carga

Con esta entrada vamos a dar otro pequeño pasito en la automatización de la amplitud usando tickers composite. He leído en los comentarios de la anterior entrada que teníais problemas para hacer funcionar el código… en mi pc lo he usado y funciona, por lo que voy a dar por hecho que el problema radica en que aún no os lo he explicado todo y cuando termine la serie de entradas que tenía prevista haré una entrada resumen con imágenes de los puntos que os pueden dar error en todo el proceso.

amplitud

Ya debéis de tener tickers composite con nombres variables en función del watchlist sobre el que lo hayáis pasado. Por ejemplo, si lo pasásteis sobre el watchlist «SP500» tendréis 4 composite: ~Day_ADSP500, ~Day_volSP500, ~Day_suben_volSP500 y ~Day_bajan_volSP500. Obviamente si la watchlist se llama de forma distinta vuestros tickers tendrán nombres distintos, porque su nombre depende de la watchlist que usásteis para generarlo. Pero ahora… ¿qué hago para ver los indicadores? ¿Uso la función Foreign para poder coger los datos de los 4 tickers?. Podría valer, pero… ¿Y si tengo varios tickers composite después de pasar el scan por varias watchlists? ¿Uso una fórmula por cada watchlist?. Qué horror…

La solución a este dilema me la dio el gran Kchis con una de sus fórmulas del foro. Resumamos qué sabemos hasta ahora:

  1. Por cada watchlist se generan como mínimo 4 tickers. El «fundamental» es el «~Day_AD» que es el que guarda los datos que usaremos para la línea de avance-descenso.
  2. Todos los tickers generados de la misma watchlist están relacionados entre sí. Deben tener el mismo histórico y similares propiedades porque se han generado a la vez.
  3. Todos los tickers generados de watchlists distintas guardan el mismo tipo de información. El «~Day_AD» del SP500 guarda la misma variable que el «~Day_AD» del TodasMP.

Es decir, si creo una relación entre «nombre de ticker seleccionado» – «grupo de tickers composite» – «variables de amplitud» puedo usar la misma fórmula para todos los watchlist. Esto se logra con una fórmula introducida en la carpeta «include» del Amibroker. Y ahora pasemos con el código que permitirá mostrar la línea de avance descenso de un composite generado de cualquier watchlist. La prueba que publico es para el SP500.

1- Archivo include (llamado «IndicadoresDeAmplitudWatchlist.afl).

Tenemos que asegurarnos que seleccionemos el ticker del SP500 que seleccionemos, siempre nos salga su amplitud. Por eso veréis muchos «case» con distintos nombres de ticker, todos referidos al SP500. Como tengo varias bases de datos le pido al Ami que lea el nombre de la misma y en función de cómo se llame coja el precio del sp500 de un ticker distinto sin tener que hacer una fórmula distinta por cada base de datos. El número de subyacentes lo pongo a mano aunque también se puede calcular automáticamente. Me permite obtener los indicadores relativos.

BD = GetDatabaseName();

switch(Name())
{
case "ES #F":
case "$SPX":
case "~S&P 500DayAD":
case "CHRIS/CME_ES1":
case "IVV":
AD = Foreign("~S&P 500DayAD","C");
vol = Foreign("~S&P 500Dayvol","C");
precio = Foreign("ES #F","C");
nombre = "SP 500";
Symbol = "ES #F";
if(BD == "quandl")
{
precio = Foreign("CHRIS/CME_ES1","C");
Symbol = "CHRIS/CME_ES1";
}
if(BD == "Yahoo")
{
precio = Foreign("IVV","C");
Symbol = "IVV";
}
Day_suben_vol = Foreign ("~S&P 500Daysubenvol", "C");
Day_bajan_vol = Foreign ("~S&P 500Daybajanvol", "C");
subyacentes = 505;
break;

//Aquí deberíais meter la misma información para otras watchlists a las que queráis calcularle la amplitud

default:
AD= C;
nombre = Name();
precio = C;
break;
}

2- Indicador de línea AD

#include IndicadoresDeAmplitudWatchlists.afl
LineaADWS = Cum(AD);
Media = WMA(LineaADWS,150);

colordinamico = IIf(Media>Ref(media,-1),colorGreen, colorRed);

Plot(LineaADWS, "LíneaAD " + nombre, colorBlue, styleLine);
Plot(Media, "Media 150", colordinamico, styleLine| styleThick)

No os voy a mentir, lleva MUCHO tiempo generar un buen archivo include, pero es la base de la automatización con composites. Estoy seguro de que habrá programadores que sean capaces de generar bucles que no requieran repetir tantas líneas en el archivo include, pero ésta es la forma que he encontrado yo. Espero que os sirva.

Para la próxima entrada veremos cómo generar tickers composite de varias watchlist sin tener que hacer los «explore» manualmente.

¡¡Buen trading!!

¿Lo compartes?

5 comentarios en «Mostrando cualquier amplitud en el mismo gráfico sin tiempos de carga»

  1. Buenas he introducido el include y el indicador. He seleccionado el ticker ^GSPC, he introducido el Indicador Linea Ad pero me da errores. He revisado la formula del indicador y me dice que hay varias variables que no están iniciadas. ¿Me podeis ayudar?

    Gracias.

    • El problema fundamental es que el ticker «^GSPC» no está entre los «case» de mi código del include, añádele esa línea y te debe funcionar. Te pongo un fragmento de ejemplo para tu caso concreto:

      switch(Name())
      {
      case «^GSPC»:
      AD = Foreign(«~S&P 500DayAD»,»C»);
      vol = Foreign(«~S&P 500Dayvol»,»C»);
      precio = Foreign(«^GSPC»,»C»);
      nombre = «SP 500»;
      Symbol = «^GSPC»;
      Day_suben_vol = Foreign («~S&P 500Daysubenvol», «C»);
      Day_bajan_vol = Foreign («~S&P 500Daybajanvol», «C»);
      subyacentes = 505;
      break;

      default:
      AD= C;
      nombre = Name();
      precio = C;
      break;
      }

      Por otro lado, tu watchlist con los valores del SP500 debe llamarse exactamente «S&P 500» para usar exactamente mi código. Y por supuesto, debes pasarle el scan a esa watchlist con la fórmula para crear los tickers composyte antes de intentar ver el indicador. Échale un ojo a mis entradas anteriores (http://www.markettiming.es/2016/09/almacenando-la-amplitud-en-tickers-composite/)

      Un saludo.

  2. Cuando esté implantado será «la leche», pero de momento I don,t understand nothing. Seguiré intentándolo.

    • Quizá he explicado demasiado poco de programación…

      – switch es un bucle que funciona como si fuese un algoritmo de decisiones. En esta fórmula en función del nombre del ticker seleccionado continúa por un camino u otro. Los «case» son los nombres del ticker que obligarían a ir por un camino determinado. En este caso si el nombre coincide con uno de los 5 case se definen una serie de variables (AD, vol, precio, nombre, symbol) que cogen los datos de diversos tickers y que son las que usaremos para calcular la amplitud de ese camino (en este caso el SP500). Un determinado camino de switch termina con la palabra «break». Para evitar que el indicador de fallo si seleccionamos un ticker que no está en ningún «case» le pongo un camino «default».

      – los bucles if están creados para que el precio del SP500 lo tome de distintos ticker en función de la base de datos que esté abierta. Estas líneas no son obligatorias, simplemente las he puesto como ejemplo para aquellos que tienen varias bases de datos y el ticker del SP cambia según la base de datos. También las uso en fórmulas que no son de amplitud, como por ejemplo la del Mansfield, sin tener que tocar la fórmula en sí misma ni los parámetros que era lo que usaba antes.

      Y la fórmula de la AD es la básica del foro… si tenéis duda os explico lo que sea, pero eso ya sería un tutorial distinto y más básico… aunque a mí no me importa hacer entradas de programación XD