Comment tracer une ligne de référence tous les 10 pips ?

 

Voici un script pratique que j'utilise tout le temps. Il trace des lignes de référence tous les 10 pips pour m'aider à évaluer le mouvement du marché. J'étais vraiment frustré d'essayer de comprendre cela en regardant les prix sur le côté droit de l'écran, alors j'ai créé un script. Ce script pourrait être utile aux débutants pour s'entraîner à dessiner des objets.

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:

Voici un script pratique que j'utilise tout le temps. Il trace des lignes de référence tous les 10 pips pour m'aider à évaluer le mouvement du marché. J'étais vraiment frustré d'essayer de comprendre cela en regardant les prix sur le côté droit de l'écran, alors j'ai créé un script. Ce script pourrait être un bon moyen pour les débutants de s'entraîner à dessiner des objets.

Faites-en un CI et non un script, calculez à partir de 0 et non à partir du cours de clôture, dessinez uniquement sur la partie visible du graphique (WinPriceMax() et sa sœur), mettez-le à jour lorsque le cours dépasse la limite (dans votre cas, l'intervalle de la ligne = 10 pips), utilisez OBJ_RECTANGLE au lieu de OBJ_HLINE.

Cela se synchronisera sur tous les graphiques ouverts.

:D

 

Ou ... en faire un indicateur ... nécessite un peu plus de code pour qu'il ne soit rafraîchi qu'au début d'une nouvelle barre ....

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:

Faites-en un CI et non un script, calculez à partir de 0 et non à partir du prix de clôture, dessinez uniquement sur la partie visible du graphique (WinPriceMax() et sa sœur), mettez-le à jour lorsque le prix se déplace au-delà de la limite (dans votre cas, l'intervalle de la ligne = 10 pips), utilisez OBJ_RECTANGLE au lieu de OBJ_HLINE.

Cela se synchronisera sur tous les graphiques ouverts.

:D


Tout cela est logique, sauf la partie "OBJ_RECTANGLE au lieu de OBJ_HLINE". Pourquoi des rectangles ?
 
RaptorUK:

Ou ... en faire un indicateur ... nécessite un peu plus de code pour qu'il ne soit rafraîchi qu'au début d'une nouvelle barre ....


Oui, bien sûr, c'est beaucoup mieux. Dites-moi, y a-t-il un moyen d'utiliser une sorte de "joker" pour des choses comme l'ObjectDelete ? Je voudrais faire quelque chose comme ceci : ObjectDelete("tensLines "*) ; en d'autres termes, supprimer tout ce qui commence par "tensLines".
 
MisterDog:

Tout cela a du sens sauf pour la partie "OBJ_RECTANGLE au lieu de OBJ_HLINE". Pourquoi des rectangles ?

J'ai cette grille depuis des années, je ne vois jamais les prix à droite de toute façon, vous n'aimez probablement pas le rectangle, utilisez WindowsBarsPerChart() et peut-être WindowsFirstVisibleBar().

Regardez en bas à droite du graphique, c'est 25/341. Cela signifie que la grille est de 25 pips et que la hauteur du graphique est de 341 pips.

:D

 
onewithzachy:

J'ai cette grille depuis des années, je ne vois jamais les prix à droite de toute façon, vous n'aimez probablement pas le rectangle, utilisez WindowsBarsPerChart() et peut-être WindowsFirstVisibleBar().

Regardez en bas à droite du graphique, c'est 25/341. Cela signifie que la grille est de 25 pips et que la hauteur du graphique est de 341 pips.

:D

J'aime bien la façon dont tu as disposé les barres. C'est facile pour les yeux. Vous dites, "vous ne voyez jamais les prix sur le côté droit de toute façon". Je me suis souvent demandé pourquoi avec seulement deux choix, acheter ou vendre, j'ai une chance sur deux mais je me trompe 80 % du temps ;-)
 
MisterDog:
En fait, j'aime bien la façon dont tu as disposé les barres. C'est facile pour les yeux. Vous dites, "vous ne voyez jamais les prix sur le côté droit de toute façon". Je me suis souvent demandé pourquoi avec seulement deux choix, acheter ou vendre, j'ai une chance sur deux mais je me trompe 80% du temps ;-)

Même chose ici...

:D

 
MisterDog:
J'aime bien la façon dont tu as disposé les barres. C'est facile pour les yeux. Vous dites, "vous ne voyez jamais les prix sur le côté droit de toute façon". Je me suis souvent demandé pourquoi avec seulement deux choix, acheter ou vendre, j'ai une chance sur deux mais je me trompe 80% du temps ;-)

C'est très facile de répondre à cette question... en supposant que ce que j'ai vu en testant les EA soit vrai. Tout dépend de votre rapport risque/récompense, si vous avez un risque de 20 et une récompense de 80 (ou un rapport similaire), je peux voir comment vous pouvez avoir un taux de gain de 20 % . ... ce n'est pas aussi simple que cela car il faut prendre en compte le spread si vous faites de petites transactions... ...
 
onewithzachy, je suis en train de mettre en place votregraphique de style OBJ_RECTANGLE. Vous avez mentionné "WindowsBarsPerChart() et peut-être WindowsFirstVisibleBar() ". J'ai encore du mal à comprendre comment faire passer les barres de la gauche à la droite de l'écran. Mais j'aime bien la disposition ! Avez-vous des idées sur la façon de procéder ?
 
MisterDog:
onewithzachy, je suis en train de mettre en place votregraphique de style OBJ_RECTANGLE. Vous avez mentionné "WindowsBarsPerChart() et peut-être WindowsFirstVisibleBar() ". J'ai encore du mal à comprendre comment faire passer les barres de la gauche à la droite de l'écran. Mais j'aime bien la disposition ! Avez-vous des idées sur la façon de procéder ?

Salut MisterDog,

C'est simple.

1. Obtenez la distance temporelle entre une barre et une autre. On peut l'obtenir en soustrayant l'heure de la barre actuelle de l'heure de la barre précédente ou en multipliant la période par 60 secondes, choisissez la dernière option, car il y a un écart de temps le lundi.

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() est la barre la plus à gauche. Commencez à dessiner à partir de cette barre, ou mieux encore, commencez à dessiner à n gauche de cette barre, disons 5 barres à gauche. Disons que le retour de WindowsFirstVisibleBar() est 20. Cela signifie que la barre la plus à gauche est la barre [20], commencez à dessiner à partir de la barre [25]. En fait, je dessine à partir de [Bars - 1].

datetime Start;

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

3. WindowsBarsPerChart() est le nombre de barres sur le graphique . Disons que le retour deWindowsBarsPerChart() est 35 et WindowsFirstVisibleBar() est 20. Donc, à partir de la barre [0], il y a environ 15 barres d'espace vide sur le côté droit. Dessinez l'extrémité de ce rectangle jusqu'à la barre de droite de cet espace vide, ou mieux encore, commencez à dessiner à partir de la droite de cette barre, disons 5 barres vers la droite.

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

End = Time[0] + Right_Bar * Bar_Time_Gap;

Lorsqu'une nouvelle barre arrivera, cette barre de droite se déplacera vers la gauche, donc l'extrémité du rectangle sera visible, et nous devrons le dessiner à nouveau.

J'espère que je ne fais pas d'erreur ici, car j'ai écrit cela rapidement.

:D

Raison: