Cómo dibujar una línea de referencia cada 10 pips

 

Aquí hay un script práctico que uso todo el tiempo. Dibuja líneas de referencia cada 10 pips para ayudarme a calibrar el movimiento en el mercado. Estaba realmente frustrado tratando de averiguar esto mirando los precios en el lado derecho de la pantalla, así que creé un script. El script podría ser bueno para que los principiantes practiquen el dibujo de objetos.

int start()
{  
    int nLines = 40;                                   // Number of total line to draw
    double lineInterval = 0.0010;                      // Interval between lines
    ObjectsDeleteAll(0,OBJ_HLINE);                     // Clear all the lines from the window - CAREFUL!
    double normPrice = NormalizeDouble(Close[1],3);    // Current price is rounded to nearest "10"
    for (int ix = 0; ix < nLines; ix++)                // Loop span number of times
        {
            ObjectCreate("tensLines"+ix, OBJ_HLINE, 0, 0, normPrice+((ix-(nLines/2))*lineInterval));    // Place half above and half below the current price
            ObjectSet("tensLines"+ix,OBJPROP_COLOR,DarkSlateGray);      // Make the lines look better
        }
    return(0); //All done
}
 
MisterDog:

Aquí hay un script práctico que uso todo el tiempo. Dibuja líneas de referencia cada 10 pips para ayudarme a calibrar el movimiento en el mercado. Estaba realmente frustrado tratando de averiguar esto mirando los precios en el lado derecho de la pantalla, así que creé un script. El script podría ser bueno para que los principiantes practiquen el dibujo de objetos.

Hágalo un CI no un script, calcule desde 0 no desde el precio de cierre, dibuje sólo en la parte visible del gráfico (WinPriceMax() y su hermana), actualícelo cuando el precio se mueva más allá del límite (en su caso, intervalo de línea = 10 pips), use OBJ_RECTANGLE en lugar de OBJ_HLINE.

Se sincronizará en todos los gráficos abiertos.

:D

 

O... convertirlo en un indicador... necesita un poco más de código para que se actualice sólo al inicio de una nueva barra...

int deinit()
   {
   for (int ix = 0; ix < nLines; ix++) // delete my horizontal lines
      {
      ObjectDelete("tensLines"+ix);
      }
   return(0);
   }


int start()
   {  
   int nLines = 40;                                   // Number of total line to draw
   double lineInterval = 0.0010;                      // Interval between lines
   double normPrice = NormalizeDouble(Close[1],3);    // Current price is rounded to nearest "10"

   for (int ix = 0; ix < nLines; ix++)                // Loop span number of times
      {
      if(ObjectFind("tensLines"+ix) < 0) 
         ObjectCreate("tensLines"+ix, OBJ_HLINE, 0, 0, normPrice+((ix-(nLines/2))*lineInterval));    // Place half above and half below the current price

      else ObjectSet("tensLines"+ix, OBJPROP_PRICE1, normPrice+((ix-(nLines/2))*lineInterval));
      ObjectSet("tensLines"+ix,OBJPROP_COLOR,DarkSlateGray);      // Make the lines look better
      }
   return(0); //All done
   }
 
onewithzachy:

Hágalo un CI no un script, calcule desde 0 no desde el precio de cierre, dibuje sólo en la parte visible del gráfico (WinPriceMax() y su hermana), actualícelo cuando el precio se mueva más allá del límite (en su caso, intervalo de línea = 10 pips), use OBJ_RECTANGLE en lugar de OBJ_HLINE.

Se sincronizará en todos los gráficos abiertos.

:D


Todo esto tiene sentido excepto la parte "OBJ_RECTANGLE en lugar de OBJ_HLINE". ¿Por qué rectángulos?
 
RaptorUK:

O... convertirlo en un indicador... necesita un poco más de código para que se actualice sólo al inicio de una nueva barra...


Sí, por supuesto, mucho mejor. Dime, ¿hay alguna manera de utilizar algún tipo de "comodín" para cosas como el ObjectDelete? Me gustaría hacer algo como esto, ObjectDelete("tensLines "*); en otras palabras, borrar cualquier cosa que empiece por "tensLines".
 
MisterDog:

Todo esto tiene sentido excepto la parte "OBJ_RECTANGLE en lugar de OBJ_HLINE". ¿Por qué rectángulos?

Tengo esa cosa cuadriculada durante años, nunca veo los precios en el lado derecho de todos modos, probablemente no te gusta el rectángulo sin embargo, utilizar WindowsBarsPerChart() y tal vez WindowsFirstVisibleBar().

Mira en la parte inferior derecha del gráfico, es 25/341. Significa que la rejilla es de 25 pips y la altura del gráfico es de 341 pips.

:D

 
onewithzachy:

Tengo esa cosa cuadriculada durante años, nunca veo los precios en el lado derecho de todos modos, probablemente no te gusta el rectángulo sin embargo, utilizar WindowsBarsPerChart() y tal vez WindowsFirstVisibleBar().

Mira en la parte inferior derecha del gráfico, es 25/341. Significa que la rejilla es de 25 pips y la altura del gráfico es de 341 pips.

:D

En realidad, me gusta la forma en que has presentado esto con las barras. Es fácil de ver. Dices que "de todas formas nunca se ven los precios en el lado derecho". A menudo me he preguntado por qué con sólo dos opciones, comprar o vender, tengo un 50-50 de posibilidades pero me equivoco el 80% de las veces. ;-)
 
MisterDog:
En realidad, me gusta la forma en que usted tiene este diseño con las barras. Es fácil para los ojos. Dices que "de todas formas nunca se ven los precios en el lado derecho". A menudo me he preguntado por qué con sólo dos opciones, comprar o vender, tengo un 50-50 de posibilidades pero me equivoco el 80% de las veces. ;-)

Lo mismo digo...

:D

 
MisterDog:
En realidad, me gusta la forma en que has presentado esto con las barras. Es fácil de ver. Dices que "de todas formas nunca se ven los precios en el lado derecho". A menudo me he preguntado por qué con sólo dos opciones, comprar o vender, tengo un 50-50 de posibilidades pero me equivoco el 80% de las veces. ;-)

Eso es muy fácil de responder... suponiendo que lo que he visto probando EAs sea cierto. Depende de tu riesgo:recompensa, si tienes un riesgo de 20 y una recompensa de 80 (o una proporción similar) puedo ver cómo puedes tener una tasa de ganancias del 20% . . no es tan simple porque tienes que tener en cuenta el Spread si estás tomando pequeñas operaciones... .
 
onewithzachy, recién estoy configurando tugráfico estilo OBJ_RECTANGLE. Has mencionado "WindowsBarsPerChart() y quizás WindowsFirstVisibleBar()". Todavía estoy teniendo un tiempo difícil de averiguar cómo conseguir las barras para ejecutar desde el lado izquierdo de la pantalla a la derecha. ¡Pero me gusta el diseño! ¿Alguna pista sobre cómo hacerlo?
 
MisterDog:
onewithzachy, recién estoy armando tugráfico estilo OBJ_RECTANGLE. Has mencionado "WindowsBarsPerChart() y quizás WindowsFirstVisibleBar()". Todavía estoy teniendo un tiempo difícil de averiguar cómo conseguir las barras para ejecutar desde el lado izquierdo de la pantalla a la derecha. ¡Pero me gusta el diseño! ¿Alguna pista sobre cómo hacerlo?

Hola MisterDog,

Simple.

1. Obtenga la distancia de tiempo entre una barra y otra. Podemos obtener esto restando el tiempo de la barra actual con el tiempo de la barra anterior o multiplicando el período con 60 segundos, elija este último, coz hay brecha de tiempo en el lunes.

datetime Bar_Time_Gap; // or integer type

Bar_Time_Gap = Time [0] - Time [1]; // or Time [7] - Time [8] or whatever
Bar_Time_Gap = Period()*60;

2. WindowsFirstVisibleBar() es la barra de la izquierda. Empieza a dibujar desde esa barra, o mejor aún empieza a dibujar desde n izquierda de esa barra, digamos 5 barras a la izquierda. Digamos que el retorno de WindowsFirstVisibleBar() es 20. Eso significa que la barra de la izquierda es la barra [20], entonces empieza a dibujar desde la barra [25]. En realidad dibujo desde [Barras - 1].

datetime Start;

Start = Time [WindowFirstVisibleBar() + 5];                  //which is the same ...
Start = Time [WindowFirstVisibleBar()] - 5 * Bar_Time_Gap;   //... with this one

3. WindowsBarsPerChart() es el número de barras en el gráfico . Digamos que el retorno de WindowsBarsPerChart() es 35 y WindowsFirstVisibleBar() es 20. Así que a partir de la barra [0] hay unas 15 barras de espacio vacío en el lado derecho. Dibuje el final de ese rectángulo hasta la misma barra derecha de ese espacio vacío, o mejor aún, empiece a dibujar desde n derecha de esa barra digamos 5 barras a la derecha.

datetime End;
int Right_Bar = WindowBarsPerChart() - WindowFirstVisibleBar() + 5;

End = Time[0] + Right_Bar * Bar_Time_Gap;

Cuando venga una nueva barra, esta barra de la derecha se moverá hacia la izquierda, por lo que el final del rectángulo será visible, y tendremos que dibujarlo de nuevo.

Espero no estar cometiendo un error aquí, porque escribí esto rápidamente.

:D