Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Facebook!
und werden Sie Mitglied unserer Fangruppe
Interessantes Skript?
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Hat Ihnen das Skript gefallen?
Bewerten Sie es im Terminal MetaTrader 5
Ansichten:
1291
Rating:
(35)
Veröffentlicht:
2018.01.30 11:28
\MQL5\Include\fxsaber\Clock\
Canvas.mqh (0.36 KB) ansehen
Color.mqh (1.48 KB) ansehen
File.mqh (2.45 KB) ansehen
Image.mqh (1.17 KB) ansehen
Pixel.mqh (0.33 KB) ansehen
Settings.mqh (1.26 KB) ansehen
Layer.mqh (2.05 KB) ansehen
\MQL5\Include\fxsaber\
Clock.mqh (1.65 KB) ansehen
\MQL5\Indicators\fxsaber\
Clock.mq5 (2.84 KB) ansehen
\MQL5\Files\
Clocks.zip (903.45 KB)
MQL5 Freelance Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance

Die Bibliothek (Clock.mqh) erlaubt es, eine Analoguhr als grafische Ressource zu erstellen.


Möglichkeiten

Die Verwendung der Bibliothek ist im folgenden Quellcode zu sehen:

// MQL4&5-code
// Ein Beispiel für einen plattformübergreifenden Expert Advisor, der eine Analoguhr im Chart erstellt

#property strict

#include <fxsaber\Clock.mqh> // https://www.mql5.com/de/code/19388

const string ObjName = __FILE__;            // Name des Bitmap-Objekts für die Ausgabe der Uhr
const string ResourceName = "::" + ObjName; // Name der Ressource, in welcher die Uhr erstellt wird

// Die Uhr anhand der Einstellungen der entsprechenden INI-Datei erstellen
CLOCK Clock("Clocks\\Clock01\\Clock01.INI", ResourceName);

void OnINIt()
{
  // Ein grafisches Objekt für die Ausgabe der Uhr erstellen
  ObjectCreate(0, ObjName, OBJ_BITMAP_LABEL, 0, 0, 0);

  // Den Namen der Ressource angeben, in welcher die Uhr abgelegt ist
  ObjectSetString(0, ObjName, OBJPROP_BMPFILE, 0, ResourceName);

  // Die Möglichkeit hinzufügen, ein Objekt auszuwählen, indem man es mit der Maus zieht
  ObjectSetInteger(0, ObjName, OBJPROP_SELECTABLE, true);

  // Sekundentimer aktivieren, um die Uhr zu aktualisieren
  EventSetTimer(1);
}

void OnTimer()
{
  // Die Uhr auf aktuelle Zeit setzen
  Clock.SetTime(TimeLocal());

  // Den Chart neu zeichnen, damit die Änderungen sofort sichtbar sind
  ChartRedraw();
}

Nach dem Starten erscheint die folgende Uhr im Chart:


Indikator

Der plattformübergreifende Indikator Clock.mq5 im Anhang erlaubt es, die Uhr "out-of-the-box" zu verwenden.

In diesem Indikator ist ein interaktiver Wechsel von "Themen" implementiert: die Varianten der Uhr werden mithilfe der Tasten NACH OBEN/NACH UNTEN (entpacken Sie die ZIP-Datei) umgeschaltet.


Besonderheiten

  • Rasteruhr (keine Vektoruhr);
  • Die Bewegung der Uhrzeiger ohne Glättung;
  • Die Bibliothek funktioniert in MetaTrader 4/5.


Wie die Uhr gebildet wird

Das Original der Uhr aus dem Beispiel wurde im Internet durch eine schnelle Suche nach eine Flash-Uhr gefunden (swf-Dateien sind in der ZIP-Datei). Es ist praktisch, dass es grafische Darstellungen von Zifferblättern, Uhrzeiger usw. in den Dateien gibt. Man kann natürlich andere Quellen verwenden. Z.B. fertige Vektordateien wieder aus dem Internet. Oder selbst zeichnen.

INI-Dateien (s. Beispiele) setzen die Einstellungen für die Erstellung der Uhr schichtweise. Die Einstellungen können in jedem Texteditor bearbeitet werden und sehen wie folgt aus:

ImageName = ClockFace.bmp
BoundX = 0 // die X-Koordinate des Nullpunktes innerhalb des bmp-Bildes (Schicht)
BoundY = 0 // die Y-Koordinate des Nullpunktes innerhalb des bmp-Bildes (Schicht)
X = 0      // die X-Koordinate des Nullpunktes innerhalb einer sich (aus Schichten) bildenden Abbildung
Y = 0      // die Y-Koordinate des Nullpunktes innerhalb einer sich (aus Schichten) bildenden Abbildung
Rotate = 0 // Die Geschwindigkeit des Drehens 
A = 100%   // Welcher Teil des Alpha-Kanals verwendet wird
R = 100%   // Welcher Teil des Red-Kanals verwendet wird
G = 100%   // Welcher Teil des Green-Kanals verwendet wird
B = 100%   // Welcher Teil des Blue-Kanals verwendet wird

Je niedriger die Beschreibung der Schicht in der Liste ist, desto höher befindet sie sich als die vorher beschriebene Schicht. Es gibt keine Einschränkung für die Anzahl der Schichten.

Wegen dieser Methode der Erstellung von Abbildungen kann die Bibliothek nicht nur für die Erstellung einer Uhr, sondern auch anderer statischer/dynamischer Objekte verwendet werden. Für die Dynamik der Uhr reicht die Möglichkeit, die Drehung zu setzen. Auch andere Arten von Bewegungen können dem Code mit wenigen Strings hinzugefügt werden (Verschiebung, Scalieren usw.). Der Quellcode im Anhang stellt ein einfaches Beispiel für die Umsetzung dieses Ansatzes bei der Beschreibung von Abbildungen dar.

Die Schicht-für-Schicht-Arbeit erlaubt es, die Schatten der Uhrzeiger und die Beleuchtung zu implementieren (wie in Flash-Uhren).

Wenn man das Zifferblatt transparent machen will, muss man den Alpha-Kanal kleiner als 100% in der entsprechenden INI-Datei setzen. Man bekommt das folgende Ergebnis:

Alpha-Kanal des Zifferblatts 90% (A = 90)

Zum Moment der Veröffentlichung gab es kaum Analoguhren im Market. In der CodeBase habe ich diese Variante gefunden.

Die neue Eigenschaft dieser Bibliothek ist LAYER::Rotate, die für die Bewegung verantwortlich ist. Vielleicht kann diese Funktion jemanden zur Entwicklung anderer Lösungen basierend auf dynamischen grafischen Ressourcen, ähnlich der Uhr, anregen.

Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/19388

JS-Chaos JS-Chaos

Ein Expert Advisor basierend auf der Strategie von Bill Williams.

KI_signals_v2 KI_signals_v2

Ein Trendindikator, der Handelssignale vom XMACD Histogramm erhält.

N seconds N points N seconds N points

Der Expert Advisor verfolgt Positionen aller Symbole nach allen Magic Numbers. Wenn eine Position bereits "Waiting for seconds" offen ist und ihr Profit "Take Profit" Punkte erreicht hat, schließt der Expert Advisor die Position. Wenn der Profit nicht "Take Profit" Punkte erreicht hat, verschiebt der Expert Advisor den Take Profit Level.

Dtm Dtm

Ein Oszillator im DRAW_FILLING Stil unter Verwendung digitaler Filter.