Come disegnare una linea di riferimento ogni 10 pip

 

Ecco un comodo script che uso sempre. Disegna linee di riferimento ogni 10 pip per aiutarmi a valutare il movimento del mercato. Ero davvero frustrato nel cercare di capire questo guardando i prezzi sul lato destro dello schermo, così ho creato uno script. Lo script potrebbe essere buono per i principianti per esercitarsi a disegnare oggetti.

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:

Ecco un comodo script che uso sempre. Disegna linee di riferimento ogni 10 pip per aiutarmi a valutare il movimento del mercato. Ero davvero frustrato nel cercare di capire questo guardando i prezzi sul lato destro dello schermo, così ho creato uno script. Lo script potrebbe essere un buon modo per i principianti di esercitarsi a disegnare oggetti.

Rendilo un CI non uno script, calcola da 0 non dal prezzo di chiusura, disegna solo sulla parte visibile del grafico (WinPriceMax() e sua sorella), aggiornalo quando il prezzo si muove oltre il limite (nel tuo caso, intervallo di linea = 10 pips), usa OBJ_RECTANGLE invece di OBJ_HLINE.

Si sincronizzerà su tutti i grafici aperti.

:D

 

Oppure . . . farlo diventare un indicatore . . ha bisogno di un po' più di codice in modo che sia aggiornato solo all'inizio di una nuova 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:

Fallo diventare un CI non uno script, calcola da 0 non dal prezzo di chiusura, disegna solo sulla parte visibile del grafico (WinPriceMax() e sua sorella), aggiornalo quando il prezzo si muove oltre il limite (nel tuo caso, intervallo di linea = 10 pips), usa OBJ_RECTANGLE invece di OBJ_HLINE.

Si sincronizzerà su tutti i grafici aperti.

:D


Tutto questo ha senso tranne la parte "OBJ_RECTANGLE invece di OBJ_HLINE". Perché i rettangoli?
 
RaptorUK:

Oppure . . . farlo diventare un indicatore . . ha bisogno di un po' più di codice in modo che sia aggiornato solo all'inizio di una nuova barra . . .


Sì, certo, molto meglio. Dimmi, c'è modo di usare una sorta di "jolly" per cose come ObjectDelete? Vorrei fare qualcosa del genere, ObjectDelete("tensLines "*); in altre parole, cancellare tutto ciò che inizia con "tensLines".
 
MisterDog:

Tutto questo ha senso tranne la parte "OBJ_RECTANGLE invece di OBJ_HLINE". Perché i rettangoli?

Ho quella cosa a griglia da anni, non vedo mai i prezzi sul lato destro comunque, probabilmente non ti piace il rettangolo però, usa WindowsBarsPerChart() e forse WindowsFirstVisibleBar().

Vedi in basso a destra del grafico, è 25/341. Significa che la griglia è di 25 pip e l'altezza del grafico è di 341 pip.

:D

 
onewithzachy:

Ho quella cosa a griglia da anni, non vedo mai i prezzi sul lato destro comunque, probabilmente non ti piace il rettangolo però, usa WindowsBarsPerChart() e forse WindowsFirstVisibleBar().

Vedi in basso a destra del grafico, è 25/341. Significa che la griglia è di 25 pip e l'altezza del grafico è di 341 pip.

:D

In realtà mi piace il modo in cui l'hai disposto con le barre. È facile per gli occhi. Tu dici: "non vedi mai i prezzi sul lato destro in ogni caso". Mi sono spesso chiesto perché con due sole scelte, comprare o vendere, ho il 50% di possibilità ma mi sbaglio l'80% delle volte ;-)
 
MisterDog:
In realtà mi piace il modo in cui hai disposto questo con le barre. È facile per gli occhi. Tu dici, "non vedi mai i prezzi sul lato destro comunque". Mi sono spesso chiesto perché con due sole scelte, comprare o vendere, ho il 50% di possibilità ma mi sbaglio l'80% delle volte ;-)

Lo stesso qui ...

:D

 
MisterDog:
In realtà mi piace il modo in cui l'hai disposto con le barre. È facile per gli occhi. Tu dici: "non vedi mai i prezzi sul lato destro in ogni caso". Mi sono spesso chiesto perché con due sole scelte, comprare o vendere, ho il 50% di possibilità ma mi sbaglio l'80% delle volte ;-)

Questa è una risposta molto facile da dare... supponendo che quello che ho visto testando gli EA sia vero. Dipende dal tuo rapporto rischio/ricompensa, se hai un rischio di 20 e una ricompensa di 80 (o un rapporto simile) posso capire come puoi avere un tasso di vincita del 20%. . non è proprio così semplice, però, perché devi tenere conto dello spread se stai facendo piccoli scambi...
 
onewithzachy, ho appena iniziato a configurare il tuografico in stile OBJ_RECTANGLE. Hai menzionato "WindowsBarsPerChart() e forse WindowsFirstVisibleBar()". Ho ancora difficoltà a capire come far scorrere le barre dal lato sinistro dello schermo a quello destro. Ma mi piace il layout! Qualche indizio su come farlo?
 
MisterDog:
onewithzachy, ho appena finito di impostare il tuografico in stile OBJ_RECTANGLE. Hai menzionato "WindowsBarsPerChart() e forse WindowsFirstVisibleBar()". Sto ancora avendo difficoltà a capire come far scorrere le barre dal lato sinistro dello schermo a quello destro. Ma mi piace il layout! Qualche indizio su come farlo?

Ciao MisterDog,

Semplice.

1. Ottieni la distanza temporale tra una barra e l'altra. Possiamo ottenere questo sottraendo il tempo della barra attuale con il tempo della barra precedente o moltiplicando il periodo con 60 secondi, scegliendo quest'ultimo, perché c'è un gap di tempo il lunedì.

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() è la barra di sinistra. Iniziate a disegnare da quella barra, o meglio ancora iniziate a disegnare da n a sinistra di quella barra, diciamo 5 barre a sinistra. Diciamo che il ritorno di WindowsFirstVisibleBar() è 20. Ciò significa che la barra molto a sinistra è la barra [20], iniziate a disegnare dalla barra [25] allora. In realtà disegno da [Bars - 1].

datetime Start;

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

3. WindowsBarsPerChart() è il numero di barre sul grafico . Diciamo che il ritorno diWindowsBarsPerChart() è 35 e WindowsFirstVisibleBar() è 20. Quindi a partire dalla barra [0] ci sono circa 15 barre vuote sul lato destro. Disegnate la fine di quel rettangolo fino alla barra di destra di quello spazio vuoto, o meglio ancora iniziate a disegnare da n destra di quella barra diciamo 5 barre a destra.

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

End = Time[0] + Right_Bar * Bar_Time_Gap;

Quando arriverà una nuova barra, questa barra di destra si sposterà a sinistra, quindi la fine del rettangolo sarà visibile, e dovremo disegnarla di nuovo.

Spero di non sbagliare, perché l'ho scritto in fretta.

:D

Motivazione: