So zeichnen Sie alle 10 Pips eine Referenzlinie

 

Hier ist ein praktisches Skript, das ich ständig verwende. Es zeichnet alle 10 Pips Referenzlinien, die mir dabei helfen, die Bewegungen auf dem Markt abzuschätzen. Ich war wirklich frustriert, als ich versuchte, dies anhand der Preise auf der rechten Seite des Bildschirms herauszufinden, also habe ich ein Skript erstellt. Das Skript könnte für Anfänger gut geeignet sein, um das Zeichnen von Objekten zu üben.

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:

Hier ist ein praktisches Skript, das ich ständig verwende. Es zeichnet alle 10 Pips Referenzlinien, die mir dabei helfen, die Bewegungen auf dem Markt abzuschätzen. Ich war wirklich frustriert, als ich versuchte, dies anhand der Preise auf der rechten Seite des Bildschirms herauszufinden, also habe ich ein Skript erstellt. Das Skript könnte für Anfänger gut geeignet sein, um das Zeichnen von Objekten zu üben.

Machen Sie es zu einem CI und nicht zu einem Skript, rechnen Sie von 0 und nicht vom Schlusskurs, zeichnen Sie nur auf dem sichtbaren Teil des Charts (WinPriceMax() und seine Schwester), aktualisieren Sie es, wenn sich der Preis über das Limit hinaus bewegt (in Ihrem Fall, Linienintervall = 10 Pips), verwenden Sie OBJ_RECTANGLE statt OBJ_HLINE.

Es wird sich auf allen geöffneten Charts synchronisieren.

:D

 

Oder ... machen Sie einen Indikator daraus ... braucht ein bisschen mehr Code, damit er nur zu Beginn eines neuen Taktes aktualisiert wird ...

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:

Machen Sie es zu einem CI und nicht zu einem Skript, berechnen Sie von 0 und nicht vom Schlusskurs, zeichnen Sie nur auf dem sichtbaren Teil des Charts (WinPriceMax() und seine Schwester), aktualisieren Sie es, wenn sich der Preis über das Limit hinaus bewegt (in Ihrem Fall, Linienintervall = 10 Pips), verwenden Sie OBJ_RECTANGLE statt OBJ_HLINE.

Es wird sich auf allen geöffneten Charts synchronisieren.

:D


Das macht alles Sinn, bis auf den Teil "OBJ_RECTANGLE statt OBJ_HLINE". Warum Rechtecke?
 
RaptorUK:

Oder ... machen Sie einen Indikator daraus ... braucht ein bisschen mehr Code, damit er nur zu Beginn eines neuen Taktes aktualisiert wird ...


Ja, natürlich - viel besser. Sagen Sie mir, gibt es eine Möglichkeit, eine Art "Platzhalter" für Dinge wie ObjectDelete zu verwenden? Ich würde gerne so etwas tun, ObjectDelete("tensLines "*); mit anderen Worten, alles löschen, was mit "tensLines" beginnt.
 
MisterDog:

Das macht alles Sinn, bis auf den Teil "OBJ_RECTANGLE statt OBJ_HLINE". Warum Rechtecke?

Ich habe dieses Gitternetz-Ding seit Jahren, ich sehe sowieso nie Preise auf der rechten Seite, wahrscheinlich mögen Sie kein Rechteck, verwenden Sie WindowsBarsPerChart() und vielleicht WindowsFirstVisibleBar().

Siehe rechts unten im Chart, es ist 25/341. Das bedeutet, dass das Raster 25 Pips beträgt und die Höhe des Charts 341 Pips.

:D

 
onewithzachy:

Ich habe dieses Gitternetz-Ding seit Jahren, ich sehe sowieso nie Preise auf der rechten Seite, wahrscheinlich mögen Sie kein Rechteck, verwenden Sie WindowsBarsPerChart() und vielleicht WindowsFirstVisibleBar().

Siehe rechts unten im Chart, es ist 25/341. Das bedeutet, dass das Raster 25 Pips beträgt und die Höhe des Charts 341 Pips.

:D

Mir gefällt die Art und Weise, wie Sie das mit den Balken gestaltet haben. Es ist einfach für die Augen. Sie sagen, "man sieht die Preise sowieso nie auf der rechten Seite". Ich habe mich oft gefragt, warum ich bei nur zwei Möglichkeiten - Kaufen oder Verkaufen - eine 50:50-Chance habe, aber in 80 % der Fälle falsch liege ;-)
 
MisterDog:
Mir gefällt eigentlich die Art und Weise, wie du das mit den Balken gestaltet hast. Es ist einfach für die Augen. Du sagst, "man sieht die Preise auf der rechten Seite sowieso nie". Ich habe mich oft gefragt, warum ich bei nur zwei Möglichkeiten - Kaufen oder Verkaufen - eine 50:50-Chance habe, aber in 80 % der Fälle falsch liege ;-)

Ich auch ...

:D

 
MisterDog:
Mir gefällt die Art und Weise, wie Sie das mit den Balken gestaltet haben. Es ist einfach für die Augen. Sie sagen, "man sieht die Preise sowieso nie auf der rechten Seite". Ich habe mich oft gefragt, warum ich bei nur zwei Möglichkeiten - Kaufen oder Verkaufen - eine 50:50-Chance habe, aber in 80 % der Fälle falsch liege ;-)

Das ist sehr einfach zu beantworten ... vorausgesetzt, das, was ich beim Testen von EAs gesehen habe, stimmt. Wenn Sie ein Risiko von 20 und eine Belohnung von 80 (oder ein ähnliches Verhältnis) haben, kann ich verstehen, wie Sie eine Gewinnrate von 20% haben können. . ganz so einfach ist es aber nicht, denn man muss den Spread berücksichtigen, wenn man kleine Trades macht...
 
onewithzachy, ich bin gerade dabei, IhrDiagramm im Stil OBJ_RECTANGLE einzurichten.Sie erwähnten "WindowsBarsPerChart() und vielleicht WindowsFirstVisibleBar()". Ich habe immer noch Schwierigkeiten, herauszufinden, wie man die Balken von der linken Seite des Bildschirms nach rechts laufen lässt. Aber ich mag das Layout! Irgendwelche Hinweise, wie man das macht?
 
MisterDog:
onewithzachy, ich bin gerade dabei, IhrDiagramm im Stil OBJ_RECTANGLE einzurichten.Sie erwähnten "WindowsBarsPerChart() und vielleicht WindowsFirstVisibleBar()". Ich habe immer noch Schwierigkeiten, herauszufinden, wie man die Balken von der linken Seite des Bildschirms nach rechts laufen lässt. Aber ich mag das Layout! Irgendwelche Hinweise, wie man das macht?

Hallo MisterDog,

einfach.

1. Ermitteln Sie den zeitlichen Abstand zwischen einem Balken und einem anderen. Wir können dies erhalten, indem wir die Zeit des aktuellen Balkens von der Zeit des vorherigen Balkens subtrahieren oder die Periode mit 60 Sekunden multiplizieren, wählen Sie letzteres, denn am Montag gibt es eine Zeitlücke.

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() ist der ganz linke Balken. Beginnen Sie mit dem Zeichnen ab diesem Balken, oder besser noch, beginnen Sie mit dem Zeichnen ab n links von diesem Balken, sagen wir 5 Balken weiter links. Angenommen, der Rückgabewert von WindowsFirstVisibleBar() ist 20. Das bedeutet, dass der ganz linke Balken der Balken [20] ist, dann beginnen Sie ab Balken [25] zu zeichnen. Ich zeichne eigentlich ab [Balken - 1].

datetime Start;

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

3. WindowsBarsPerChart() ist die Anzahl der Balken im Chart . Sagen wir, die Rückgabe vonWindowsBarsPerChart() ist 35 und WindowsFirstVisibleBar() ist 20. Ausgehend von Balken [0] gibt esalso etwa 15 leere Balken auf der rechten Seite. Ziehen Sie das Ende des Rechtecks bis zum rechten Balken dieses leeren Raums, oder besser noch, beginnen Sie mit dem Zeichnen von n rechts von diesem Balken, sagen wir 5 Balken nach rechts.

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

End = Time[0] + Right_Bar * Bar_Time_Gap;

Wenn ein neuer Balken kommt, wird sich dieser rechte Balken nach links bewegen, so dass das Ende des Rechtecks sichtbar wird, und wir müssen es erneut zeichnen.

Ich hoffe, ich mache hier keinen Fehler, denn ich habe das schnell geschrieben.

:D