Libros


Busca todo lo que quieras en Invertirenbolsa.info con este buscador personalizado de Google:
Búsqueda personalizada

Anuncio

Colapsar
No hay anuncio todavía.

Recuperar el tiempo perdido

Colapsar
X
 
  • Filtrar
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes

  • #21
    Hola de nuevo.

    Después de bastante tiempo detrás de Abertis, hoy he entrado en el valor. 298 acciones a 13,20.

    Respecto de lo que comentáis del mercado americano, yo también tengo mis dudas respecto de cual es la mejor manera de funcionar allí, estoy debatiéndome entre la opción más fácil (algún ETF con buen dividendo) o el otro extremo que es lo que comentáis de Interactive Brokers. bueno, sin prisa, leyendo, aprendiendo y probando iré viendo lo que me conviene.
    Mi hilo
    Mi cartera

    Comentario


    • #22
      He aprovechado la calma chicha de Agosto en mi trabajo con el tiempo libre que conlleva, para actualizar el seguimiento de cartera. Además de remozarla un poquillo y cambiarla para que automáticamente me actualice posiciones con sólo anotar las compras y dividendos, he estado enredando con los google scripts y he creado un "periscopio" que se ejecuta cada hora para mandarme un email si alguna acción de las que voy seleccionando se pone a tiro.

      Este es el enlace a la cartera.
      Mi hilo
      Mi cartera

      Comentario


      • #23
        Originalmente publicado por Jesus321 Ver Mensaje
        He aprovechado la calma chicha de Agosto en mi trabajo con el tiempo libre que conlleva, para actualizar el seguimiento de cartera. Además de remozarla un poquillo y cambiarla para que automáticamente me actualice posiciones con sólo anotar las compras y dividendos, he estado enredando con los google scripts y he creado un "periscopio" que se ejecuta cada hora para mandarme un email si alguna acción de las que voy seleccionando se pone a tiro.

        Este es el enlace a la cartera.
        Nunca he usado google docs pero hay una cosa que me ha llamado muchiíiiiiisimo la atención. ¿Cómo haces eso del periscopio para que te envíe un mail avisándote de que se pone a tiro una acción? ¿Sabes si se puede hacer también con excel?

        Comentario


        • #24
          Originalmente publicado por Toño Ver Mensaje
          Nunca he usado google docs pero hay una cosa que me ha llamado muchiíiiiiisimo la atención. ¿Cómo haces eso del periscopio para que te envíe un mail avisándote de que se pone a tiro una acción? ¿Sabes si se puede hacer también con excel?
          Hola Toño, google docs es muy parecido a excel pero con la versatilidad que da "la nube" para compartir y acceder y la potencia de las APIs de Google (Mail, Maps, Adsense, etc etc).

          Supongo que se puede hacer con excel pero la ventaja de google además de lo anterior es que siempre tienen el ordenador encendido y puedes dejar a un "chino" trabajando 24 horas al día revisándose las cotizaciones.

          Con gdocs puedes hacer más o menos lo mismo que el excel, es muy sencillo crearte una hoja o subir un excel que ya tengas directamente, y si quieres sacarle toda la potencia hay que programar scripts, una buena forma de empezar es leerte sus tutoriales aqui. Si no tienes costumbre de programar hay que dedicarle tiempo, eso sí. Y si no has programado nunca, más aún. Yo programé en mis años jóvenes hará 10 o 15 años, y por eso y falta de tiempo he montado una chapuza de script a base de retales cogidos de aquí y allá, bastante poco elegante pero funciona para lo que quiero.

          Abrazos.
          Editado por última vez por Jesus321; 28 ago 2013, 10:49, 10:49:41.
          Mi hilo
          Mi cartera

          Comentario


          • #25
            Buenas, hoy Enagás ha caído por debajo de 17,15, que es donde le había "puesto el cebo" a la vista de que andaba golosa, y he ampliado posiciones con 173 acciones más.

            La verdad es que el mercado español todavía nos está dando alguna alegría, sigo haciendo compras "fuertes" apostando que queda poco para que rompa resistencias y no volvamos a ver precios como los de este Julio en muuucho tiempo.
            Mi hilo
            Mi cartera

            Comentario


            • #26
              Originalmente publicado por Jesus321 Ver Mensaje
              Hola Toño, google docs es muy parecido a excel pero con la versatilidad que da "la nube" para compartir y acceder y la potencia de las APIs de Google (Mail, Maps, Adsense, etc etc).

              Supongo que se puede hacer con excel pero la ventaja de google además de lo anterior es que siempre tienen el ordenador encendido y puedes dejar a un "chino" trabajando 24 horas al día revisándose las cotizaciones.

              Con gdocs puedes hacer más o menos lo mismo que el excel, es muy sencillo crearte una hoja o subir un excel que ya tengas directamente, y si quieres sacarle toda la potencia hay que programar scripts, una buena forma de empezar es leerte sus tutoriales aqui. Si no tienes costumbre de programar hay que dedicarle tiempo, eso sí. Y si no has programado nunca, más aún. Yo programé en mis años jóvenes hará 10 o 15 años, y por eso y falta de tiempo he montado una chapuza de script a base de retales cogidos de aquí y allá, bastante poco elegante pero funciona para lo que quiero.

              Abrazos.
              Lo del chino trabajando me ha gustado, y me ha convencido. Voy a ver si me hago una hoja de cálculo con los precios de entrada y a ver si soy capaz de hacer que me avise por correo. Voy a leerme el enlace que me has puesto a ver si me aclaro. Si tengo dudas te pregunto.

              Muchas gracias

              Comentario


              • #27
                Hola Jesus321.

                Esto del google docs me parece un poco chunguillo, pero he estado investigando y he sido capaz de crear la hoja de cálculo, pero soy absolutamente incapaz de hacer el "periscopio".

                Nunca ha programado, pero he investigado y he creado (copiado) este script que hay para mandar emails:

                function sendEmails() {
                var sheet = SpreadsheetApp.getActiveSheet();
                var startRow = 2; // First row of data to process
                var numRows = 2; // Number of rows to process
                // Fetch the range of cells A2:B3
                var dataRange = sheet.getRange(startRow, 1, numRows, 2)
                // Fetch values for each row in the Range.
                var data = dataRange.getValues();
                for (i in data) {
                var row = data[i];
                var emailAddress = row[0]; // First column
                var message = row[1]; // Second column
                var subject = "Sending emails from a Spreadsheet";
                MailApp.sendEmail(emailAddress, subject, message);
                }
                }

                Sin embargo, no encuentro la forma de que me envíe el correo automáticamente cuando la cotización llegue a un determinado valor, y menos aún que se ejecute automáticamente, sin tener que dar yo al botoncito de ejecutar el script.

                Entiendo que en range of cells tengo que poner las celdas que tienen que cumplir la condición, y el mensaje que quiero que aparezca, pero no doy para más. Me viene muuuuuy grande.

                Comentario


                • #28
                  Originalmente publicado por Toño Ver Mensaje
                  Hola Jesus321.

                  Esto del google docs me parece un poco chunguillo, pero he estado investigando y he sido capaz de crear la hoja de cálculo, pero soy absolutamente incapaz de hacer el "periscopio".

                  Nunca ha programado, pero he investigado y he creado (copiado) este script que hay para mandar emails:

                  function sendEmails() {
                  var sheet = SpreadsheetApp.getActiveSheet();
                  var startRow = 2; // First row of data to process
                  var numRows = 2; // Number of rows to process
                  // Fetch the range of cells A2:B3
                  var dataRange = sheet.getRange(startRow, 1, numRows, 2)
                  // Fetch values for each row in the Range.
                  var data = dataRange.getValues();
                  for (i in data) {
                  var row = data[i];
                  var emailAddress = row[0]; // First column
                  var message = row[1]; // Second column
                  var subject = "Sending emails from a Spreadsheet";
                  MailApp.sendEmail(emailAddress, subject, message);
                  }
                  }

                  Sin embargo, no encuentro la forma de que me envíe el correo automáticamente cuando la cotización llegue a un determinado valor, y menos aún que se ejecute automáticamente, sin tener que dar yo al botoncito de ejecutar el script.

                  Entiendo que en range of cells tengo que poner las celdas que tienen que cumplir la condición, y el mensaje que quiero que aparezca, pero no doy para más. Me viene muuuuuy grande.
                  Hola Toño,

                  yo creo que lo más sencillo es usar las "Reglas de Notificación" bajo el menú "Herramientas" y aplicar una regla para que envíe email cada vez que se produzca una modificación en las celdas de una columna X. Por ejemplo, puedes construir una regla según la cual, cada vez que la cotización entre en un rango (%) suficientemente cercano al precio de disparo se ponga un 1... y cuando salga de ese rango, vuelva a poner un 0. Así, por cada modificación de 1 a 0 ó de 0 a 1, se enviará un correo...

                  Saludos.
                  Crowdlending
                  Mintos, la referencia en préstamos P2P.
                  EstateGuru, de lo más recomendable en crowdlending inmobiliario.
                  Criptos sin arriesgar un duro
                  EARN de Coinbase, enseña cómo funcionan y paga $ mientras aprendes.

                  Comentario


                  • #29
                    Originalmente publicado por duke Ver Mensaje
                    Hola Toño,

                    yo creo que lo más sencillo es usar las "Reglas de Notificación" bajo el menú "Herramientas" y aplicar una regla para que envíe email cada vez que se produzca una modificación en las celdas de una columna X. Por ejemplo, puedes construir una regla según la cual, cada vez que la cotización entre en un rango (%) suficientemente cercano al precio de disparo se ponga un 1... y cuando salga de ese rango, vuelva a poner un 0. Así, por cada modificación de 1 a 0 ó de 0 a 1, se enviará un correo...

                    Saludos.
                    Muchas gracias, Duke.

                    El asunto es que en la hoja de cálculo que he hecho, tengo una columna (la D) en la que va calculándose el % que falta para llegar a mi precio de entrada. En la siguiente columna (la E), he puesto que, por ejemplo, en la celda e2 esta fórmula =if(D2<0,02;"Alerta";""), para que cuando falte un 2% me avise.

                    En Herramientas/Reglas de notificación, he pinchado "cuando se modifiquen cualquiera de estas celdas", y he seleccionado toda la columna E. Después he pinchado en "por correo electrónico inmediatamente".

                    Después he modificado uno de los precios de entrada, para provocar que se cambie la celda E2.

                    Pero no me envía ningún correo.

                    Es por eso que estoy buscando la forma de hacer un script, para ver si así sí que me lo envía.

                    Comentario


                    • #30
                      Originalmente publicado por Toño Ver Mensaje
                      Muchas gracias, Duke.

                      El asunto es que en la hoja de cálculo que he hecho, tengo una columna (la D) en la que va calculándose el % que falta para llegar a mi precio de entrada. En la siguiente columna (la E), he puesto que, por ejemplo, en la celda e2 esta fórmula =if(D2<0,02;"Alerta";""), para que cuando falte un 2% me avise.

                      En Herramientas/Reglas de notificación, he pinchado "cuando se modifiquen cualquiera de estas celdas", y he seleccionado toda la columna E. Después he pinchado en "por correo electrónico inmediatamente".

                      Después he modificado uno de los precios de entrada, para provocar que se cambie la celda E2.

                      Pero no me envía ningún correo.

                      Es por eso que estoy buscando la forma de hacer un script, para ver si así sí que me lo envía.
                      Vale, yo tenía pendiente implementarlo en mi "Stock Hunter"... así que creía que conocía eso de las reglas de notificación (a juzgar por el nombre y las opciones que ofrece el cuadro de diálogo)... Pero resulta que, tras realizar mi primera prueba de implementación, me he dado cuenta de que la funcionalidad de estas notificaciones está enfocada a proveer avisos cuando sean los demás colaboradores los que realicen modificaciones, pero no uno mismo. Por tanto, todo cambio que realicemos nosotros o el actor tiempo (modificando las cotizaciones) quedará excluído del ámbito de actuación de estas reglas de notificación. No nos sirve... lo siento

                      Lo del script, salvo casos especiales como el mío, que tengo el ordenador encendido 24/7 y un buen montón de pestañas abiertas en el navegador, tampoco creo que sirva, ya que probablemente obligue a tener la hoja de cálculo abierta (e, incluso, es posible que en primer plano) para que las cotizaciones se actualicen, las celdas se modifiquen, el script se ejecute y el sistema de notificación actúe.

                      Al final, yo creo que lo suyo es hacer un seguimiento semanal del % que falta hasta llegar a nuestro precio de compra objetivo. Así tampoco desconectamos por completo del mercado y estaremos más motivados para acumular liquidez si vamos viendo semana a semana que se va acercando el momento que si estamos completamente out y de repente un día nos llega un email...
                      Ya luego la semana que estemos muy cerca del precio objetivo habría que estar atento a las cotizaciones diarias con el móvil, o usar alguna de las herramientas de notificación de que disponen algunas de las aplicaciones de gestión de cartera en el móvil.

                      Si te apetece, puedes probar si las cotizaciones se actualizan y los scripts se ejecutan cuando la hoja de cálculo no está abierta. Aquí verás un script que se lanza con un activador/disparador temporal y envía un email al autor del documento conteniendo a éste como adjunto.
                      Edito: Ya lo he probado yo... aunque sin cotizaciones (por la mañana probaré). En principio, al usar un disparador temporal parece que funciona y me está enviando correos cada minuto. Pero claro, llamando a la función desde una celda supongo que cambiará el tema... La esperanza pasa porque, cuando haya cotizaciones en directo, las versiones enviadas por este sistema difieran entre sí. De hacerlo, es posible que puedan ejecutarse scripts estando el documento cerrado (estaría bien, pero lo dudo mucho mucho...) En cualquier caso, con este script ya podrías configurar tu periscopio para obtener un vistazo periódico (...diario/semanal/mensual...) o puntual (a fecha dada) en tu bandeja de entrada.
                      Edito2: Funciona... Con la hoja de cálculo cerrada me está mandando actualizaciones del documento por email cada hora, conteniendo cada versión adjuntada diferentes cotizaciones para cada acción. Lo próximo, realizar la llamada a la función sendEmail() desde una celda cuando se cumpla un IF... Me temo que esto va a ser más porculero. Cuando tenga un ratillo me pondré a probarlo y, si consigo resultados satisfactorios, avisaré.

                      Un saludo.
                      Editado por última vez por duke; 09 sep 2013, 11:28, 11:28:34.
                      Crowdlending
                      Mintos, la referencia en préstamos P2P.
                      EstateGuru, de lo más recomendable en crowdlending inmobiliario.
                      Criptos sin arriesgar un duro
                      EARN de Coinbase, enseña cómo funcionan y paga $ mientras aprendes.

                      Comentario


                      • #31
                        Originalmente publicado por duke Ver Mensaje
                        Vale, yo tenía pendiente implementarlo en mi "Stock Hunter"... así que creía que conocía eso de las reglas de notificación (a juzgar por el nombre y las opciones que ofrece el cuadro de diálogo)... Pero resulta que, tras realizar mi primera prueba de implementación, me he dado cuenta de que la funcionalidad de estas notificaciones está enfocada a proveer avisos cuando sean los demás colaboradores los que realicen modificaciones, pero no uno mismo. Por tanto, todo cambio que realicemos nosotros o el actor tiempo (modificando las cotizaciones) quedará excluído del ámbito de actuación de estas reglas de notificación. No nos sirve... lo siento

                        Lo del script, salvo casos especiales como el mío, que tengo el ordenador encendido 24/7 y un buen montón de pestañas abiertas en el navegador, tampoco creo que sirva, ya que probablemente obligue a tener la hoja de cálculo abierta (e, incluso, es posible que en primer plano) para que las cotizaciones se actualicen, las celdas se modifiquen, el script se ejecute y el sistema de notificación actúe.

                        Al final, yo creo que lo suyo es hacer un seguimiento semanal del % que falta hasta llegar a nuestro precio de compra objetivo. Así tampoco desconectamos por completo del mercado y estaremos más motivados para acumular liquidez si vamos viendo semana a semana que se va acercando el momento que si estamos completamente out y de repente un día nos llega un email...
                        Ya luego la semana que estemos muy cerca del precio objetivo habría que estar atento a las cotizaciones diarias con el móvil, o usar alguna de las herramientas de notificación de que disponen algunas de las aplicaciones de gestión de cartera en el móvil.

                        Si te apetece, puedes probar si las cotizaciones se actualizan y los scripts se ejecutan cuando la hoja de cálculo no está abierta. Aquí verás un script que se lanza con un activador/disparador temporal y envía un email al autor del documento conteniendo a éste como adjunto.
                        Edito: Ya lo he probado yo... aunque sin cotizaciones (por la mañana probaré). En principio, al usar un disparador temporal parece que funciona y me está enviando correos cada minuto. Pero claro, llamando a la función desde una celda supongo que cambiará el tema... La esperanza pasa porque, cuando haya cotizaciones en directo, las versiones enviadas por este sistema difieran entre sí. De hacerlo, es posible que puedan ejecutarse scripts estando el documento cerrado (estaría bien, pero lo dudo mucho mucho...) En cualquier caso, con este script ya podrías configurar tu periscopio para obtener un vistazo periódico (...diario/semanal/mensual...) o puntual (a fecha dada) en tu bandeja de entrada.
                        Edito2: Funciona... Con la hoja de cálculo cerrada me está mandando actualizaciones del documento por email cada hora, conteniendo cada versión adjuntada diferentes cotizaciones para cada acción. Lo próximo, realizar la llamada a la función sendEmail() desde una celda cuando se cumpla un IF... Me temo que esto va a ser más porculero. Cuando tenga un ratillo me pondré a probarlo y, si consigo resultados satisfactorios, avisaré.

                        Un saludo.
                        Muchas gracias Duke.

                        La verdad es que estoy totalmente perdido con el docs. En excel tengo más soltura, pero veo que para trabajar con docs hay que saber programar.

                        Lo de que las cotizaciones se actualizan yo tenía entendido que sí, pero ya veo que tú lo has comprobado.

                        En fin, tengo claro que no voy a ser capaz de hacerlo yo solo, así que quedo a la espera de si consigues sacarlo. Eso sí, me ofrezco a hacer de "pinche" en lo que pueda ayudar.

                        Comentario


                        • #32
                          scrip de alertas

                          Hola, ya que preguntáis por aquí y he recibido algún otro privado con el tema de las "alertas", trato de explicaros un poco cómo lo he hecho:

                          1- Lo primero, el disparo con el tiempo: La opción la tenéis en el editor de scripts (herramientas/editor secuencia de comandos). Ahí hay un "relojito" que cuando lo pincháis os dará la opción de indicar qué función queréis ejecutar y cada cuánto tiempo. Mas facil imposible cuando lo encuentras, claro.

                          2- En la pestaña "datos" capturo los datos de cotizaciones de infobolsa (cualquiera que os guste más la podéis usar) cada minuto. Para ello utilizo la fórmula siguiente:
                          =ImportHtml("http://www.infobolsa.es/mercado-nacional/mercado-continuo?"& year(now()) & month(now()) & day(now()) & hour(now()) & minute(now());"table";1)

                          3- En la pestaña "periscopio" tomo ese dato mediante la función vlookup (es idéntica a excel) y calculo la "distancia" porcentual entre la cotización actual y mi "soporte" para actuar con una sencilla formula distancia= (cotizacion-soporte)/soporte.

                          4- Ya solo queda hacer un script que se recorra la columna "distancia", lea los valores y si están por debajo de un umbral X (yo he puesto 8%) me mande un correo, y activarlo para que se repita cada hora (o lo que quieras) mediante lo dicho en 1.

                          El núcleo de mi script es este, y está fusilado en un altísimo porcentaje del script "valalerts" hecho por un tal Logu Venkatachalam que está en la "biblioteca de scripts" de google (Herramientas/Galería de secuencia de comandos):

                          function checkForAlerts()
                          {
                          var email = Session.getActiveUser().getEmail();

                          var wbk = SpreadsheetApp.getActiveSpreadsheet();
                          var Periscopio = wbk.getSheetByName("Periscopio");
                          if(Periscopio == null) {
                          return showmsg("No encuentro la hoja Periscopio");
                          }
                          //saco cuantas filas hay y las meto en nr
                          var nr = Periscopio.getLastRow();

                          // carga las columnas en el array columns
                          var columns = new getColumns(Periscopio);

                          var symbolCol = columns["nombre"];
                          if(symbolCol == undefined) {
                          return showmsg("NOMBRE column is missing");

                          }
                          var soporteCol = columns["soporte"];
                          if(soporteCol == undefined) {
                          return showmsg("Soporte column is missing");
                          }

                          var difCol = columns["diferencia"];
                          if(difCol == undefined) {
                          return showmsg("Diferencia column is missing");

                          }

                          var priceCol = columns["cotizacion"];
                          if(priceCol == undefined) {
                          return showmsg("Cotizacion column is missing");
                          }

                          var grafCol = columns["grafica"];
                          if(grafCol == undefined) {
                          return showmsg("Grafico column is missing");
                          }

                          var alertCol = columns["alerta"];
                          if(alertCol == undefined) {
                          return showmsg("Alerta column is missing");
                          }

                          var msg = "<h3><bold>Tenemos acciones a tiro " + new Date() + "</bold></h3><br>" +
                          "<table border=1 width=80%><tr width=90%>" +
                          "<th>Valor</th><th>Precio</th><th>Alert</alert></tr>";

                          var nAlerts = 0;

                          for(var row = 2; row <= nr; row++) {
                          try {

                          var symbol = Periscopio.getRange(row, symbolCol).getValue();
                          var Dif = Periscopio.getRange(row, difCol).getValue();
                          var price = Periscopio.getRange(row, priceCol).getValue();
                          var soporte = Periscopio.getRange(row, soporteCol).getValue();
                          var grafico = Periscopio.getRange(row, grafCol).getValue();
                          var alertaActiva= Periscopio.getRange(row, alertCol).getValue();


                          var Difalert = 0.08; //fijar aqui el umbral de alerta


                          Periscopio.getRange(row, alertCol).setValue("");
                          highlight(Periscopio, row, symbolCol, "white");
                          highlight(Periscopio, row, difCol, "white");


                          var alert = "";
                          if(Dif < Difalert && Dif !="") {
                          alert = "Precio [" + price.toFixed(2) + "] cerca de objetivo " + soporte.toFixed(2) + " " + new Date() + nl;
                          backColor = (nAlerts % 2 == 0) ? "#FFF8C6" : "white";
                          msg += "<tr bgcolor=" + backColor + "><td> " + symbol + "</td><td>" +
                          price.toFixed(2) + "</td><td> Precio cerca de " + soporte + "</td><td> grafica " + grafico + "</td></tr>";
                          highlight(Periscopio, row, difCol, "yellow");

                          }

                          if(alert != "") {
                          Periscopio.getRange(row, alertCol).setValue(alert);
                          highlight(Periscopio, row, symbolCol, "yellow");
                          if (alertaActiva == ""){
                          nAlerts = nAlerts+1;
                          }
                          }


                          if (symbol ==""){
                          //marco en la última fila (dejarla vacía) la última actualización para verificar que se está ejecutando
                          Periscopio.getRange(row, alertCol).setValue("Ultima ejecucion alerta automatica: "+ new Date());
                          }

                          //en cualquier otro caso, pongo un mensaje del error para poder depurar

                          }

                          catch(e) {
                          highlight(Periscopio, row, 1, "red");
                          Periscopio.getRange(row, alertCol).setValue("Me salio error-> " +e);
                          }
                          }

                          msg += "</table>";
                          msg += "<p><p>" + "<h4><bold>Powered by Alertillas.</bold></h4>" + nl;
                          if (nAlerts >0){
                          MailApp.sendEmail(email, "Alerta de acciones", msg, {htmlBody: msg});
                          }
                          }

                          Y las funciones "getcolumns" y "getcolumn" que leen la hoja y busca en qué columna está la variable:

                          function getColumn(wsh, colname)
                          // Recupera en qué columna está la variable buscada. Entrada wsh (nombre de la hoja) y colname (nombre buscado). Si no la encuentra devuelve 0
                          {
                          var nc = wsh.getLastCol();
                          for(var col = 1; col <= nc; col++) {
                          if(wsh.getRange(1, col).getValue().toLowerCase() == colname.toLowerCase()) {
                          return col;
                          }
                          }
                          return 0;
                          }

                          function getColumns(wsh)
                          // Lee la hoja wsh y devuelve un array con los valores de cada columna
                          {
                          var columns = new Array();
                          nc = wsh.getLastColumn();
                          for(var col = 1; col <= nc; col++) {
                          var key = wsh.getRange(1, col).getValue().toLowerCase();
                          if(columns[key] > 0) {
                          showmsg("Duplicate column [" + col + "]: '" + key + "' in the header row.");
                          }

                          columns[key] = col;
                          }
                          return columns;
                          }


                          Espero que esto no líe más, realmente como ya dije lo que he hecho ha sido partir del script ya hecho y adaptarlo a mis necesidades, seguro que se puede hacer más simple y elegante pero como no tengo tiempo y "me funciona para andar por casa", yo encantado. Si a alguien le vale, me alegrará saberlo.

                          Abrazos, paciencia y suerte con esos scripts, no son tan fieros como los pintan si te empeñas en ello.
                          Mi hilo
                          Mi cartera

                          Comentario


                          • #33
                            Originalmente publicado por Jesus321 Ver Mensaje
                            Hola, ya que preguntáis por aquí y he recibido algún otro privado con el tema de las "alertas", trato de explicaros un poco cómo lo he hecho: [...]

                            Leches! No me había dado cuenta de que este era tu hilo, Jesus321, así que déjame pedirte disculpas por haberlo invadido así... Creía que era el hilo de Toño... Y ahora que venía a avisarlo de que ya implementé el script, vi tu post y me di cuenta...

                            En fin, si lo llego a haber visto antes te hubiera copypasteado vilmente y me hubiera ahorrado picar código, pero ya que lo hice... dejo un enlace a mi Stock Hunter por si le interesa a alguno más de tus lectores, para que pueda ver las celdas a las que se hace referencia en el script.

                            Para ponerlo a andar, la función asociada al disparador temporal se llama "check". Desde ella ya se reparte el trabajo... El código viene siendo éste:

                            function check() {

                            var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0]; //Trabajamos sobre la 1ª hoja del libro
                            var last_row = sheet.getLastRow();
                            var columna_trigger = sheet.getRange("O2:O"+last_row);
                            var columna_nombre = sheet.getRange("A2:A"+last_row);
                            var trigger = columna_trigger.getValues();
                            var nombres = columna_nombre.getValues();
                            var alertFlag = 0; //las filas con alerta suman, sin alerta restan
                            var vector_a_tiro = [];
                            var j = 0;
                            var modificado = false;

                            //************************************************** ************************************
                            // CAPTURAR ALERTAS
                            //************************************************** ************************************
                            for (var i = 2;i<=last_row+2;i++) {
                            if (trigger[i-2] == "Alerta!") {
                            vector_a_tiro[j] = nombres[i-2]; //Guardamos en un vector los nombres de las empresas en alerta de disparo próximo
                            sheet.getRange("A"+i).setBackgroundColor("orange") ; //Modificamos la hoja para destacar dichar empresas en naranja
                            j++;
                            alertFlag++;
                            }
                            else {
                            if (i > 1 && i <= last_row) {
                            sheet.getRange("A"+i).setBackgroundRGB(239,239,239 );
                            }
                            alertFlag--;
                            }
                            }

                            //************************************************** ************************************
                            // CONTROLAMOS MODIFICACIONES en la lista de alertas
                            //************************************************** ************************************
                            if (UserProperties.getProperty("storedAlertFlag") != alertFlag) {
                            modificado = true;
                            UserProperties.setProperty("storedAlertFlag", alertFlag);
                            }
                            else {
                            modificado = false;
                            }

                            //************************************************** ************************************
                            // ENVÍO EMAIL si la lista de alertas activas se ha modificado pero sigue conteniendo alertas (NO está vacía)
                            //************************************************** ************************************
                            if (hayAlerta() && modificado == true) {
                            enviaMail(vector_a_tiro);
                            }
                            }


                            function hayAlerta() { //Indica si hay alguna alerta activa en la lista
                            var i = 2;
                            while (i<=SpreadsheetApp.getActiveSpreadsheet().getSheet s()[0].getLastRow()+2) {
                            if (SpreadsheetApp.getActiveSpreadsheet().getSheets()[0].getRange("O2:O"+SpreadsheetApp.getActiveSpreadshe et().getSheets()[0].getLastRow()).getValues()[i-2] == "Alerta!") {
                            return true;
                            }
                            else {i++;}
                            }
                            return false;
                            }


                            function enviaMail(vector_empresas) {

                            //************************************************** ************************************
                            // EMAIL DATA: dirección, asunto, cuerpo...
                            //************************************************** ************************************
                            var email = Session.getEffectiveUser().getEmail();
                            var subject = "Vaca a la vista!";
                            var body = "No se puede mostrar HTML";

                            //Cuerpo HTML en "mensaje". Cuerpo en texto plano en "body".
                            if (vector_empresas.length < 2) {
                            var mensaje = "La siguiente empresa se está acercando a su precio de compra en el <a href=\""+SpreadsheetApp.getActiveSpreadsheet().get Url()+"\" title=\"Ver Stock Hunter\">Stock Hunter</a>. <br /><br /><b>";
                            var body = "La siguiente empresa se está acercando a su precio de compra";
                            }
                            else {
                            var mensaje = "Las siguientes empresas se están acercando a su precio de compra en el <a href=\""+SpreadsheetApp.getActiveSpreadsheet().get Url()+"\" title=\"Ver Stock Hunter\">Stock Hunter</a>. <br /><br /><b>"
                            var body = "Las siguientes empresas se están acercando a su precio de compra: |";
                            }

                            for (var i = 0; i < vector_empresas.length; i++) {
                            mensaje += vector_empresas[i]+"<br />";
                            body += vector_empresas[i]+" | ";
                            }

                            mensaje += "</b>";

                            //************************************************** ************************************
                            // ATTACHMENT DATA: nombre de la hoja, URL, autorizaciones de acceso...
                            //************************************************** ************************************
                            var oauthConfig = UrlFetchApp.addOAuthService("google");
                            oauthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");
                            oauthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope=https://spreadsheets.google.com/feeds/");
                            oauthConfig.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken");
                            oauthConfig.setConsumerKey("anonymous");
                            oauthConfig.setConsumerSecret("anonymous");
                            var requestData = {"method": "GET", "oAuthServiceName": "google", "oAuthUseToken": "always"};
                            var ssID = SpreadsheetApp.getActiveSpreadsheet().getId();
                            var url = "https://spreadsheets.google.com/feeds/download/spreadsheets/Export?key=" + ssID + "&gid=0&portrait=true" +"&exportFormat=xls";
                            var result = UrlFetchApp.fetch(url , requestData);
                            var sheetName = SpreadsheetApp.getActiveSpreadsheet().getName();
                            var contents = result.getContent();

                            //************************************************** ************************************
                            // SEND EMAIL
                            //************************************************** ************************************
                            MailApp.sendEmail(email, subject, body, {htmlBody: mensaje, attachments:[{fileName:sheetName+".xls", content:contents, mimeType:"application//xls"}]});

                            }

                            En cuanto a la funcionalidad, yo he preferido utilizar una columna en la hoja para poder programar el % de las alertas de manera individual o conjunta. Si quiero que me avise cuando estén por debajo del 5% de distancia, perfecto. Pero si quiero que, para alguna empresa en particular, el umbral esté a un 7,5% sólo tengo que cambiar esa condición en la fila que sea para la columna del trigger.
                            En relación a esto, me gustaría avisarte de que hay un pequeño fallo en el código de tu script, ya que declaras la variable var Difalert = 0.08; en medio de un bucle for... No pasa nada en este caso, pero no es recomendable declarar variables como ésa en mitad de un loop.

                            El resultado obtenido es un script con las siguientes características:
                            - Envía email cuando detecta que la cotización está un x% próxima al precio objetivo de compra. Pero si en la siguiente ejecución del script (un minuto, un día o un año después... cuando sea) el escenario no ha cambiado, el script no envía emails tocahuevos repitiendo lo mismo...
                            - Compatible con clientes de correo que no soporten HTML (aunque provee información más limitada en este caso)
                            - Añade la hoja de cálculo como adjunto en formato excel.
                            - Colorea en naranja (y descolorea cuando la cotización se aleja) el nombre de la empresa en la hoja para una mejor identificación visual.

                            En fin, supongo que el código será muy mejorable, pero como primer acercamiento al Google Apps Script me doy por satisfecho. Ni le hubiera añadido comentarios de no ser por compartirlo con vosotros y que se entienda mejor...

                            Espero que os sea de utilidad (si alguien quiere invitarme a una caña, no seré yo quien se lo prohíba ).

                            Un saludo!
                            Editado por última vez por duke; 10 sep 2013, 11:28, 11:28:32.
                            Crowdlending
                            Mintos, la referencia en préstamos P2P.
                            EstateGuru, de lo más recomendable en crowdlending inmobiliario.
                            Criptos sin arriesgar un duro
                            EARN de Coinbase, enseña cómo funcionan y paga $ mientras aprendes.

                            Comentario


                            • #34
                              Muchas gracias a Jesus321 y Duke.

                              Definitivamente, no tenía ninguna posibilidad de haberlo hecho yo solo.

                              En cuanto llegue a casa lo pruebo, a ver si lo entiendo.

                              Da gusto formar parte de un foro con unos compañeros como los que hay en este.

                              Comentario


                              • #35
                                Originalmente publicado por duke Ver Mensaje

                                En cuanto a la funcionalidad, yo he preferido utilizar una columna en la hoja para poder programar el % de las alertas de manera individual o conjunta. Si quiero que me avise cuando estén por debajo del 5% de distancia, perfecto. Pero si quiero que, para alguna empresa en particular, el umbral esté a un 7,5% sólo tengo que cambiar esa condición en la fila que sea para la columna del trigger.
                                En relación a esto, me gustaría avisarte de que hay un pequeño fallo en el código de tu script, ya que declaras la variable var Difalert = 0.08; en medio de un bucle for... No pasa nada en este caso, pero no es recomendable declarar variables como ésa en mitad de un loop.
                                Jajaja, si solo ese es el error de mi script , no iba tan mal encaminado entonces

                                Creo que el tuyo es más avanzado, ordenado y claro, me planteo fusilártelo y recomiendo al personal usar el tuyo que parece bastante más limpio. Lo de poner el umbral % individual me lo pensé pero ya se sabe... "arrancadas programadoras" no le dan a uno todos los días y Agosto ya pasó.

                                Tampoco te preocupes de que sea "mi hilo", lo único que quizá sea interesante explicar tu "stock hunter" en la parte de "herramientas", que ahí puede que lo encuentre más gente y reciba más aportaciones de otros "cracks programadores" para mejorarlo y completarlo en pro de la comunidad, lo dejo a tu criterio.

                                Lo importante es que ahora ya me puedo "tumbar a descansar" (trabajar, analizar otras posibles empresas, etc) mientras "el chino" se mira las cotizaciones por si salta "el cisne negro".

                                Saludos
                                Mi hilo
                                Mi cartera

                                Comentario


                                • #36
                                  Hola, actualizo un poco mi marcha en la construcción de mi cartera por disciplina y por si alguien me sigue y le interesa

                                  En las últimas semanas he procedido a:

                                  - Abrir un plan de reinversión de dividendos de BBVA a nombre de mi hija, donde he cargado ya 243 acciones, 120 a 8,39 y otras 121 ayer a 8,92 aprovechando que corrigieron un 3%. Otras 2 han caído redondeando el script.

                                  - Compra de 298 Abertis a 13,20, ampliadas a 312 con la última ampliación liberada.

                                  - Han caído algunos dividendos que ponen la RPD en el 1% en los primeros seis meses, que teniendo en cuenta que los he dedicado a comprar no está nada mal.

                                  Hasta ahora estoy bastante contento con los momentos de compra, casi todos hechos en correcciones y por el momento he visto siempre números verdes. Si quiero seguir ampliando cartera me temo que tendré que resignarme a ver más rojo, lo cual no ha de importar pero psicológicamente se siente uno muy tranquilo.

                                  La oveja negra es CocaCola, por ahora mi única incursión en USA, que la compré en cuanto bajó un poco y la muy jodida se ha ido un 10% más para abajo, y encima el dólar ha bajado tras la compra con lo cual está bien como lección para el futuro intentar mirar mejor el momento también de la divisa.

                                  Viendo que se acaba el periodo de "chollos", mi idea ahora es empollarme la operativa de opciones para seguir ampliando cartera vía venta de puts.


                                  Abrazos.
                                  Mi hilo
                                  Mi cartera

                                  Comentario


                                  • #37
                                    Balance 2013

                                    Hola.

                                    Os comento el balance que acabo de hacer del primer año de gestión consciente de activos.

                                    Capítulo de Ingresos:

                                    Afortunadamente sigo manteniendo mi trabajo y aunque no he aumentado mis ingresos es todo un logro en un año como el pasado.

                                    En 2014 no preveo aumentar ingresos por el trabajo, pero sí me marco el de aumentar los ingresos procedentes del ahorro (depósitos y dividendos) en un 150% como mínimo.

                                    Capítulo de gastos

                                    La mayoría del dinero (30%) del gasto se ha ido en alquiler, en 2014 debe disminuir tras renegociar con el casero una rebaja del 7% (objetivo cumplido). Podría reducirla mucho más mudándome a una vivienda más modesta pero no me lo planteo para 2014, sobre todo pensando en mi hija, comodidad, cercanía al colegio, etc.

                                    Las pensiones por divorcio alcanzan el 10% de los gastos. Es otro gasto absurdo que debería tratar de reducir o eliminar, y de paso conseguir que mi "ex-santa" colabore de manera alícuota en el epígrafe de gastos de educación, ropa, etc que alcanza el 7% de mis gastos del año. El problema es que a día de hoy la jurisprudencia sigue considerando que los hombres no somos capaces de afrontar nuestras tareas de educación y manutención de nuestros hijos y las mujeres no son capaces de afrontar sus facturas. Mientras no haya un cambio claro en la legislación, no me atrevo a abordar la eliminación de esta partida. Máxime teniendo en cuenta que en lo referente al tiempo que paso con mi hija me puedo considerar un "aristócrata de los divorciados" y es algo que no quiero poner en riesgo alegremente. Seguramente a final de año seguiré rumiando el tema sin haber hecho nada...

                                    Otros gastos importantes han sido vacaciones, donaciones y préstamos que no pienso dejar de hacer allí donde pienso que estén bien rentabilizados, no necesariamente en retornos monetarios.

                                    Capítulo de ahorro

                                    El porcentaje de ingresos procedentes del ahorro anual (depósitos y dividendos) frente a gastos es de un 13,5%, que está muy bien para ser el primer año que hago un seguimiento y gestión seria del ahorro.

                                    Durante 2013 he conseguido ahorrar un 35% de los ingresos, que considero muy buena cifra, simplemente gastando con cabeza y sin sacrificios de ningún tipo. He abierto una cuenta en Bestinfond, y he comenzado la formación de cartera logrando un rendimiento por dividendos del 2,6%. Todos los detalles de la cartera están en el enlace de la firma para el que tenga curiosidad.

                                    En 2014 el objetivo esta en duplicar el importe de exposición en renta variable, completando la cartera con 18-20 valores. Por supuesto manteniendo la estrategia elegida de B&H.

                                    Veremos qué se cumple.

                                    Como siempre, agradeceré comentarios y sugerencias.

                                    Abrazos a todos, suerte con vuestras inversiones y gracias por la información que compartís.
                                    Mi hilo
                                    Mi cartera

                                    Comentario


                                    • #38
                                      Balance primer año de cartera B&amp;H

                                      Buenas, voy a exponer mi visión de cómo me ha ido la película recién cumplido el primer año de la estrategia “buy and hold”.
                                      La idea es devolver al foro parte de lo aprendido en él para intentar enriquecerlo y que otros puedan hacerse mejores opiniones. Todos los detalles de mis posiciones están en el link de mi firma.

                                      Plusvalías “latentes”:
                                      Ahora mismo un 26,5%. Llamo así a la revalorización del dinero invertido incluyendo comisiones (que suponen un 0,3%), es decir lo que ganaría en bruto antes de impuestos y comisiones de venta, si ahora vendiera toda la cartera. Aquí también incluyo las acciones adquiridas a través de scrip.
                                      Así que he batido a Bestinver. Muy bien. Pero no he batido al IBEX. Vaya por Dios. ;-)

                                      Plusvalías “realizadas”:
                                      En el primer año he cobrado el 4,19% en dividendos brutos. Muy bien para el primer año creo yo y teniendo en cuenta que me he apuntado al papel en casi todos los scrip menos el último del Santander que vendí la mitad de los derechos.
                                      Así que he batido a la inflación, y por mucho. Muy bien.
                                      Los ingresos brutos por dividendos e intereses son el 10,5% de los gastos en lo que llevo de 2014, Muy bien también para el primer año.

                                      Conclusiones e impresiones:
                                      - Si se tiene suerte en el “timing” de entrada, como es mi caso, esto parece terriblemente fácil. No me extraña que haya quien empiece a cometer estupideces y acaben perdiendo mucho si no definieron sus objetivos ni mantuvieron una estrategia.
                                      - Sólo me lamento de no haber sido más “atrevido” en mis primeras entradas, pero no me arrepiento porque me autoimpuse la prudencia asumiendo el riesgo de minorar ganancias, y de hecho mis resultados son mejores de los que estimé para el primer año. Mantengo mis objetivos a medio-largo que son un 7% bruto de plusvalías “realizadas” y me dan igual las plusvalías “latentes” salvo si llega el momento de rotar, algo que no vislumbro a medio.
                                      - Lo mejor de este primer año es todo lo que he aprendido, entre otros gracias a este foro y la experiencia adquirida. Y sé que me falta vivir un ciclo bajista para de verdad poder decir que tengo experiencia, porque hasta ahora en ningún momento he llegado a ver la cartera en rojo.

                                      Los principales objetivos para este año son:
                                      - aumentar posiciones USA (dejé escapar buenas oportunidades en febrero: ATT, JNJ, PG, MCD…, por puro exceso de vagancia, ni siquiera de prudencia) antes de que el dólar se recupere, que parece bastante claro que lo hará.
                                      - encontrar algún sitio “razonablemente seguro y rentable” para mi fondo de reserva y mi liquidez, que en este momento se me antoja que no existen.

                                      Un abrazo.
                                      Cualquier comentario o idea para avanzar en estos objetivos, bienvenido y agradecido.
                                      Editado por última vez por Jesus321; 02 jul 2014, 11:43, 11:43:19.
                                      Mi hilo
                                      Mi cartera

                                      Comentario


                                      • #39
                                        Hola Jesús,

                                        Me alegro de que te vaya tan bien.

                                        Lo de haber metido más dinero al principio o no, creo que hiciste bien. Ahora, cuando ya sabemos lo que ha pasado, se podría decir que habría sido mejor meter más dinero. Pero creo que no es la forma correcta de verlo.

                                        Yo creo que la forma correcta de verlo es que fuiste prudente, porque invertiste lo que te decía la prudencia. Y ser prudente da muy buenas rentabilidades a largo plazo.

                                        Si hubieras metido más dinero al principio habrías sido imprudente, porque en aquel momento concreto y en tu caso concreto la prudencia te decía que metieras menos. En este caso te habría salido bien ser imprudente, pero a largo plazo da malos resultados ser imprudente. Por eso es muy peligroso no ser prudente y que salga bien, porque se tienen a aumentar el riesgo en el futuro (cogiendo empresas demasiado arriesgadas para el largo plazo, por ejeplo), y lo normal es que eso acabe dando malos resultados.

                                        Sí es posible que el dólar esté haciendo un suelo de medio o largo plazo.

                                        Ahora mismo, la renta fija sin riesgo no da casi nada. Y creo que es mejor conformarse con eso que arriesgar, porque si se arriesga ahora con la renta fija habrá que estar ágil para salir en algún momento y no tener pérdidas.


                                        Un saludo.


                                        Gestionar dinero es algo que absolutamente todo el mundo, sin excepción, va a tener que hacer a lo largo de su vida. No solamente es imposible vivir sin gestionar dinero, sino que la forma en que se gestione es una de las cosas que más determinan la vida de una persona, para bien o para mal, en todos los sentidos. Libros publicados:

                                        "Conoce la Bolsa y deja de tenerle miedo (Todo el mundo puede aprender a invertir en Bolsa)" (Nota: Este libro es la "Guía para principiantes")
                                        "Educación financiera partiendo de cero (Aprenda a gestionar su dinero para transformar su vida)"
                                        "Cómo invertir en Bolsa a largo plazo partiendo de cero (Consiga la jubilación que se merece)"
                                        "Más cosas sobre la Bolsa (Aprende más para invertir mejor)"
                                        "Análisis técnico y velas japonesas para inversores de medio y largo plazo partiendo de cero (Es mucho más fácil de lo que crees)"
                                        "Opciones y futuros partiendo de cero (También es mucho más fácil de lo que crees)"
                                        "Pensiones públicas: La esclavitud de nuestra época (Así empobrecen a la población para controlarla y manipularla)"
                                        "¡Haz que el dinero sea tu amigo! (Te acompañará toda la vida)"
                                        Novela: "Proyecto Sal (¿Podrás cambiar el Mundo?)"
                                        "La Economía funcionará cuando TÚ la entiendas (Se trata de TU vida, de verdad)"
                                        "Novela: Tú a la UCO y yo a la UDEF (Firmes ante el Poder)"
                                        "Psicología para ganar dinero y tranquilidad con la Bolsa (Invierte mejor para vivir mejor)"
                                        "Papá, ¿Qué es el dinero? (Así educaría financieramente a mi hijo)"
                                        "Crea tu propia Asociación o Partido político (Es posible cambiar el Sistema)"
                                        "Libros para aprender idiomas con historias (storytelling)"

                                        Donaciones

                                        Gregorio Hernández Jiménez en Youtube
                                        Gregorio Hernández Jiménez en Instagram
                                        Gregorio Hernández Jiménez en TikTok
                                        Gregorio Hernández Jiménez en Facebook

                                        Comentario


                                        • #40
                                          Libros de Gregorio Hernández Jiménez (invertirenbolsa.info)
                                          Vaya envidia de cartera. Con esas cifras que manejas en un sólo año, yo me daba con un canto en los dientes en los próximos 5 años. No sé si disponías de liquidez inicial, pero sino es así puedes conseguir la IF muy pronto. Aunque claro, depende de tus expectativas.

                                          Comentario

                                          Trabajando...
                                          X
                                          😀
                                          🥰
                                          🤢
                                          😎
                                          😡
                                          👍
                                          👎