Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 178

 
Andrey Dik:

Ja, ich danke Ihnen!

Nein, aber trotzdem danke!)
Hätte nicht gedacht, dass es so klemmen kann... :-)))
 

Guten Abend.

Bei der Verwendung von iOpen wird eine Schicht angegeben. Wenn nicht genügend Historie für den angegebenen Schieber vorhanden ist, wird das iOpen des ältesten Taktes zurückgegeben.

Frage: Wie kann ich einen Scheck für eine Stange mit dem angegebenen Schalthebel ausstellen? Und falls es nicht genug Geschichte gibt, geben Sie iOpen?

 
Sergey:

Guten Abend.

Bei der Verwendung von iOpen wird eine Schicht angegeben. Wenn nicht genügend Historie für den angegebenen Schieber vorhanden ist, wird das iOpen des ältesten Taktes zurückgegeben.

Frage: Wie kann ich einen Scheck für eine Stange mit dem angegebenen Schalthebel ausstellen? Und wenn es nicht genug Historie gibt, warum sollte iOpen nicht zurückgegeben werden?


CopyOpen

Die Funktion empfängt die historischen Daten der Bar-Eröffnungskurse für ein angegebenes Symbol-Perioden-Paar in das open_array-Array in der angegebenen Menge. Es ist zu beachten, dass die Zählung der Elemente von der Startposition aus von der Gegenwart in die Vergangenheit erfolgt, d.h. die Startposition gleich 0 bedeutet den aktuellen Takt.


Beim Kopieren einer unbekannten Datenmenge empfiehlt es sich, ein dynamisches Array als Zielarray zu verwenden, denn wenn die Daten weniger (oder mehr) sind, als das Array aufnehmen kann, wird versucht, das Array neu zu ordnen, damit die angeforderten Daten vollständig kopiert werden können.

Wenn es notwendig ist, eine bekannte Datenmenge zu kopieren, ist es besser, sie in einen statisch zugewiesenen Puffer zu kopieren, um unnötige Speicherüberlastung zu vermeiden.

Unabhängig davon, ob die Eigenschaft as_series=true oder as_series=false des empfangenden Arrays ist, werden die Daten so kopiert, dass das älteste Element am Anfang des dem Array zugewiesenen physischen Speichers steht. Es gibt 3 Varianten der Funktion.

Referenzierung nach Startposition und Anzahl der erforderlichen Elemente

intCopyOpen(
stringsymbol_name,// Name des Symbols
ENUM_TIMEFRAMEStimeframe,// Zeitraum
intstart_pos,//Anfangspunkt
intcount,// wie viele wir kopieren
doubleopen_array[]// Array zum Kopieren der Eröffnungskurse
);

Abruf nach Startdatum und Anzahl der erforderlichen Elemente

intCopyOpen(
stringsymbol_name,// Name des Symbols
ENUM_TIMEFRAMEStimeframe,// Zeitraum
datetimestart_time,// ab welchem Datum
intcount,// wie viele wir kopieren
doubleopen_array[]// Array zum Kopieren der Eröffnungskurse
);

Zugriff nach Startdatum und Enddatum des gewünschten Zeitintervalls

intCopyOpen(
stringsymbol_name,// Name des Symbols
ENUM_TIMEFRAMEStimeframe,// Zeitraum
datetimestart_time,// ab welchem Datum
datetimestop_time,// bis zu welchem Datum
doubleopen_array[]// Array zum Kopieren der Eröffnungskurse
);

Parameter

symbol_name

[in] Das Symbol.

Zeitrahmen

[in] Zeitraum.

start_pos

[in] Nummer des ersten zu kopierenden Elements.

zählen

[in] Anzahl der zu kopierenden Positionen.

start_zeit

[in] Taktzeit, die dem ersten zu kopierenden Element entspricht.

stop_zeit

[in] Die dem letzten Element entsprechende Taktzeit.

open_array[]

[out] Array vom Typ double.

Zurückgegebener Wert

Die Anzahl der kopierten Array-Elemente oder -1 im Falle eines Fehlers.

Hinweis

Wenn das Intervall der angeforderten Daten vollständig außerhalb der auf dem Server verfügbaren Daten liegt, gibt die Funktion -1 zurück. Wenn Daten außerhalb von TERMINAL_MAXBARS (maximale Anzahl von Balken im Diagramm) angefordert werden, gibt die Funktion ebenfalls -1 zurück.

Wenn die angeforderten Zeitreihen noch nicht erstellt wurden oder erst vom Server heruntergeladen werden müssen, gibt die Funktion sofort -1 zurück.

Wenn Daten vom Expert Advisor oder einem Skript angefordert werden, wird das Laden vom Server initiiert, wenn das Terminal diese Daten nicht lokal hat, oder der Aufbau der benötigten Zeitreihen beginnt, wenn die Daten aus der lokalen Historie aufgebaut werden können, aber noch nicht bereit sind. Die Funktion gibt die Datenmenge zurück, die bis zur Timeout-Zeit fertig ist, aber das Laden der Historie wird fortgesetzt, und die nächste ähnliche Anfrage wird mehr Daten zurückgeben.

Bei der Abfrage von Daten nach dem Anfangsdatum und der Anzahl der gewünschten Positionen werden nur Daten mit einem Datum kleiner (vor) oder gleich dem angegebenen Datum zurückgegeben. Gleichzeitig wird das Intervall auf die Sekunde genau angegeben und berücksichtigt. Es bedeutet, dass das Eröffnungsdatum eines jeden Balkens, für den der Wert zurückgegeben wird (Volumen, Spread, Wert im Indikatorpuffer, Preis Open, High, Low, Close oder Open Time Time), immer gleich oder kleiner als der angegebene Wert ist.

Bei der Abfrage von Daten im angegebenen Datumsbereich werden nur Daten zurückgegeben, die in das angeforderte Intervall fallen, wobei das Intervall auf die Sekunde genau angegeben und berücksichtigt wird. Das bedeutet, dass die Eröffnungszeit eines jeden Balkens, für den ein Wert zurückgegeben wird (Volumen, Spread, Wert im Indikatorpuffer, Preis Open, High, Low, Close oder Open Time Time), immer innerhalb des angeforderten Intervalls liegt.

Wenn also deraktuelle Wochentag der Samstag ist, gibt die Funktionbeim Versuch, die Daten in den wöchentlichen Zeitrahmen zu kopieren, unter Angabe von start_time=Last Tuesday und stop_time=Last Friday den Wert 0 zurück, da die Eröffnungszeit des wöchentlichen Zeitrahmens immer auf den Sonntag fällt, aber kein wöchentlicher Balken in den angegebenen Bereich fällt.

Wenn wir den Wert für den aktuellen, noch nicht abgeschlossenen Balken benötigen, können wir die erste Form des Aufrufs verwenden und dabei start_pos=0 und count=1angeben .

 

Grüße.

Meine Herren, können Sie mir sagen, wie man eine Bedingung für das Überschreiten von Kursniveaus mit 1-2-3 Nullen am Ende erstellt?

 
Andrey Sokolov:

Grüße.

Meine Herren, können Sie mir sagen, wie man eine Bedingung für das Überschreiten von Kursniveaus mit 1-2-3 Nullen am Ende erstellt?


Vergleicht man den vergangenen und den aktuellen Kurswert mit diesem Niveau, so hat es eine Überschneidung gegeben, wenn das Niveau zwischen diesen Werten liegt.
 
Sergey Gritsay:

Vergleicht man den vergangenen und den aktuellen Kurs mit diesem Niveau, so hat sich ein Crossing ergeben, wenn das Niveau zwischen diesen Werten liegt.


Wie kann ich diese Ebenen für den Vergleich festlegen?

Oder - wie gebe ich an, dass die Zahl die richtige Anzahl von Dezimalstellen haben soll? Nicht durch Aufrunden, sondern durch Streichen.

 
Andrey Sokolov:


Und wie schreibe ich diese Stufen zum Vergleich?

Oder - wie gebe ich an, dass die Zahl die richtige Anzahl von Dezimalstellen haben soll? Nicht durch Aufrunden, sondern durch Streichen.

Hier ist die Suchfunktion.

//===============================================================================================
//---------------------------- Возвращает ближайший круглый уровень ----------------------------+
//===============================================================================================
double GetUniversalLevel(int ne=100, string symb="0") {
 if(symb=="0") symb=Symbol();
 static double LastBid;
 double _Level=0, PriceStep=0, bid=0, point=0;
 bid=dBid(symb);
 point=dPoint(symb);
  if(LastBid<point) {LastBid=bid;} // Инициализация прошлой цены
   PriceStep=ne*point; // Шаг цены N пунктов.
   _Level=MathRound(bid/PriceStep)*PriceStep; // Круглый уровень
  LastBid=bid;
  return(_Level);
 }
Comment( GetUniversalLevel(50) );
 

Sergey Gritsay undVitaly Muzichenko danken Ihnen.

Mir wurde auch die Funktion MathFloor() vorgeschlagen, die einen ganzzahligen numerischen Wert zurückgibt, der dem Boden am nächsten liegt.

 
Vitalie Postolache:

Verstehen Sie MySQL.
Graben...interessant...vielleicht werde ich in ein paar Monaten über meine aktuellen Fragen lachen, aber ich stehe noch am Anfang der Reise...

Sergey Gritsay:
Für MT sollte ein Indikator oder ein Expert Advisor geschrieben werden, um diese Daten zu verarbeiten, oder die Terminals sollten auf einem VPS-Server platziert werden und dort sollten Sie einen Trade Copier von Ihrem Konto zu den Konten Ihrer Freunde einrichten. Eine weitere Möglichkeit ist das Kopieren Ihrer Trades, die auf bestimmten Niveausdurch einenSignaldienst ausgeführt werden. Im Allgemeinen sollten Sie Ihre finanziellen Möglichkeiten berücksichtigen, um eine geeignete Software zu bestellen.


MosheDayan:

Ich möchte Sie an die Vorgeschichte erinnern. Ich habe einen täglichen Indikator, der Daten aus einer CSV-Datei abruft und sie (horizontale Ebenen) in einem Diagramm anzeigt. Ich habe einen Server von meinem Laptop zu Hause aus eingerichtet (er ist schwach, aber ich brauche dort keine Berechnungen, und er liefert mir csvs, und die sind sehr klein). Auf dem Server für die Testverbindung goss die übliche Foren-Engine - alles scheint von außen sichtbar zu sein. Hilfe mit Rat. Das sollte auf dem Server sein, um aus ihm csv-Dateien zu lesen? D.h. wie kommuniziert der Indikator mit der csv-Datenbank? Vielleicht füllen Sie in den Motor fTP-Server oder etwas anderes und kann für MT müssen einige spezielle Ports zu öffnen? Oder bin ich generell in die falsche Richtung gegangen? Danke


Freunde, darf ich euch noch eine Frage stellen. Ist es möglich, einen Laptop zu Hause nicht zu laden, sondern zur Verknüpfung des Indikators mit csv-Dateien einen kostenlosen Cloud-Dateispeicher wie z. B. Yandex.Disk oder Облако@mail.ru oder Box.net usw. zu verwenden? Dankeschön
 
Vitaly Muzichenko:

Hier ist die Funktion des Finders

MüssendBid unddPoint separat eingegeben werden?
Grund der Beschwerde: