Indikator, Benötigt Ratschläge zur automatischen Kontrolle des Abstands zwischen Texten (MT-4)

 

Hallo liebe Programmierer!
Bitte geben Sie Ihren Rat:

Wir machen einen Expert Advisor in Form eines Indikators! Seine Aufgabe - für ein Muster auf dem Chart zu suchen, und über die Balken zu schreiben Text (mehrzeilige (!), wie

Zeile #1 "Signalname"
Zeile #2 "% Wahrscheinlichkeit"
Zeile #3 "Symbol" (Pfeil)

Das Problem ist, dass WENN Sie einen FIXIERTEN Abstand zwischen den Linien festlegen = z.B. 25 Pips, alles ist in Ordnung auf m5 ... aber bei H1 = liegen die Zeilen zu weit auseinander (das ist das Problem bei festem Text (!!!)


Bitte um Rat - WIE können wir eine "automatische Berechnung" des Abstands zwischen den Linien vornehmen, wenn sich die TF ändert, oder die "Höhe" des Diagramms, wenn das Diagramm leicht nach links oder in der Höhe verschoben wird (????!!!)

..... fällt mir nur eine Sache ein:

1) "get" die aktuelle Chart-Höhe (min. und max. Preis) :


2) Max Price - Min. Price = "chart height in pips" und wir nehmen es immer als 100%.

3) anstelle von "fester Abstand zwischen den Linien (25 Pips) - geben Sie den Abstand in Prozent an (z.B. 2% der Charthöhe von Punkt 2))


..... hat mit einem Programmierer gesprochen - er sagt == OBJEKTE NICHT BEWEGEN ... Nun, nach dem Umdrehen des Diagramms kann man nicht ....... == den mehrzeiligen Text so positionieren, dass er sich nicht überschneidet == man muss den gesamten Text nach dem Umdrehen des Diagramms löschen == den gesamten Text löschen und neu schreiben, wobei die neue Höhe des Diagramms zu berücksichtigen ist (Punkt 2) (!)


..... dann überlege ich weiter == OK, was ist, wenn ich die Zeichnung NUR im SCREEN GUIDE mache ???!

Es heißt = ok, NEUE Signale werden geschrieben Richtig, aber die, die übrig bleiben = = = ODER wieder übereinander passen, oder umgekehrt = noch weiter strecken (nach oben und unten), denn "man kann die bereits gezeichneten Objekte nicht verschieben, sondern muss sie nur löschen, und neu zeichnen (!)


Frage an Sie = Ist jemand bereits auf ein solches ??????? gestoßen, wie haben Sie dieses Problem gelöst? )))
(so dass bei jedem Maßstab und jeder Höhe des Diagramms = mehrzeiliger Text zum normalen Zeilenabstand zurückkehrt (wenn mit einem Lineal visuell gemessen == 3mm mit dem Auge) ... d.h. die Zeilenabstände sollten DYNAMISCH sein) ????? )))))))))

Ich möchte nur nicht die gesamte Aufschrift in EINER Zeile und in einem Winkel von 45° (!) machen, denn es ist visuell bequemer, den Text HORIZONTAL und in 2-3 Zeilen zu machen :)

Bitte um Rat (teilen Sie Ihre Erfahrungen mit)


Danke)).

 
Vitaliy Kostrubko:


Studieren Sie diesen kurzen Code und er könnte Ihnen helfen. Alles ist in Canvas implementiert.

Das Gute an Canvas ist, dass der Code für MT4 und MT5 fast derselbe sein wird.

Dateien:
 
Vitaliy Kostrubko:

Hallo, liebe Programmierer!
Bitte geben Sie Ihren besten Rat:

...


Ich danke Ihnen ))

Zeichnen Sie auf Leinwand:

Документация по MQL5: Стандартная библиотека / Пользовательская графика / CCanvas
Документация по MQL5: Стандартная библиотека / Пользовательская графика / CCanvas
  • www.mql5.com
Стандартная библиотека / Пользовательская графика / CCanvas - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Ups... Nikolai ist mir zuvorgekommen...
 

Sie denken richtig.

//подсчитывает количество пунктов цены в одном пикселе
double GetPointsInPixel(long eChartId, int eWindow)
   {
   double eMin=EMPTY_VALUE;
   ChartGetDouble(eChartId,CHART_PRICE_MIN,eWindow,eMin);
   if(eMin==EMPTY_VALUE) return(0);
   double eMax=EMPTY_VALUE;
   ChartGetDouble(eChartId,CHART_PRICE_MAX,eWindow,eMax);
   if(eMax==EMPTY_VALUE) return(0);
   long ePixels=-1;
   ChartGetInteger(eChartId,CHART_HEIGHT_IN_PIXELS,eWindow,ePixels);
   if(ePixels<=0) return(0);
   return(double(eMax-eMin)/ePixels);
   }

double eIndent=GetPointsInPixel(eChartId,eWindow);

Dann addieren oder subtrahieren Sie diesen Wert zu dem gewünschten Preis, wenn sich die Ereignisse ändern:

-Änderung des Zeitrahmens,

-Vergrößerung/Verkleinerung einer Karte,

-Schrumpfung der Preisskala.

 
Nikolai Semko:

Studieren Sie diesen kurzen Code und er könnte Ihnen helfen. Alles ist in Canvas implementiert.

Das Gute an Canvas ist, dass der Code für MT4 und MT5 fast derselbe sein wird.

OK, Danke )

 
Artyom Trishkin:
Ups... Nikolai ist mir zuvorgekommen...

... ))))))Die Hauptsache ist, dass die Gedanken dieselben sind ))))
Danke )))))

 
Aleksei Stepanenko:

Sie denken richtig.

double eIndent=GetPointsInPixel(eChartId,eWindow);

Dann addieren oder subtrahieren Sie diesen Wert zu dem gewünschten Preis, wenn sich die Ereignisse ändern:

-Änderung des Zeitrahmens,

-Vergrößerung/Verkleinerung einer Karte,

-Schrumpfung der Preisskala.

Vielen Dank ))))))))

 

Vitaliy Kostrubko:

Aleksei Stepanenko:

Sie denken richtig.

double eIndent=GetPointsInPixel(eChartId,eWindow);

Dann addieren oder subtrahieren Sie diesen Wert zu dem gewünschten Preis, wenn sich die Ereignisse ändern:

-Änderung des Zeitrahmens,

-Vergrößerung/Verkleinerung einer Karte,

-Schrumpfung der Preisskala.

Vielen Dank ))))))))

Und sagen Sie dem bedauernswerten Berater, dass er anfangen muss, die Sprache zu lernen, nicht die Beispiele von ****.

 
Alexey Viktorov:

Und sagen Sie dem bedauernswerten Berater, dass er anfangen muss, die Sprache zu lernen, nicht die Beispiele von ****.

Kopieren )))))
... Die Zeit zeigt, dass selbst 10 Jahre Programmiererfahrung mit einer Vielzahl von EAs (verschiedene Komplexitätsstufen) == nicht ausreichen, um das gesamte Gebiet der Programmierung zu kennen)
denn in diesen 10 Jahren können Sie ein Superprofi in 2/3 der Programmiersprachen werden ... und weiß nicht einmal 1/3 davon))
also kein Grund, beleidigt zu sein)) aber es liegt an Ihnen, diesen 1/3 Teil zu meistern == es ist eine individuelle Angelegenheit)).

.... er ist einfach mehr an "schlauen ALGORITHMEN interessiert, die PROFIT bringen... und das Schreiben von "Cartoons" ist nicht sein Interesse ...

Aber Ihr Beispiel werde ich ihm sicher zeigen)).
Danke ))))

 
Vitaliy Kostrubko:

Nimm es )))))
... Die Zeit zeigt, dass selbst 10 Jahre Programmiererfahrung mit den verschiedensten EAs (verschiedene Komplexitätsstufen) == nicht ausreichen, um den GESAMTEN Bereich der Programmierung zu kennen)
denn in diesen 10 Jahren können Sie ein Superprofi in 2/3 der Programmiersprachen werden ... und weiß nicht einmal 1/3 davon))
also kein Grund, beleidigt zu sein)) aber es liegt an Ihnen, diesen 1/3 Teil zu meistern == es ist eine individuelle Angelegenheit)).

.... er ist einfach mehr an "schlauen ALGORITHMEN interessiert, die PROFIT bringen... und "Cartoons" sind nicht sein Interesse ...

Aber dein Beispiel werde ich ihm sicher zeigen )).
Danke ))))

Sie brauchen sich nicht auf mich zu beziehen. Diese Möglichkeit habe ich zwar genutzt, aber nicht geäußert. Ich habe meinen Namensvetter nur in seiner Meinung unterstützt.

Und wenn ein "Programmierer" von der Unmöglichkeit spricht , ein grafisches Objekt zu bewegen, dann ist er überhaupt kein Programmierer und nicht einmal eine Parodie eines Programmierers, sondern einfach nur ****coder.