Ich bin völlig verloren - Seite 3

 
FMIC es gibt DINGE in dieser Dokumentation, die nicht wirklich Sinn machen. Wer auch immer das geschrieben hat, hat es eindeutig für ein Publikum geschrieben, das noch nie ein Programm in Gwbasic oder Pseudocode geschrieben hat, geschweige denn mit höheren Programmierkonzepten in Berührung gekommen ist. Oder zumindest war es die Absicht des Autors, dass es für solche Leute verständlich ist, nicht unbedingt, dass es sich ausschließlich an solche Leute richtet. Ich neige dazu, die Teile zu überspringen, in denen es um if/else-Anweisungen und for-Schleifen geht und darum, was eine Variable ist, also nein, ich lese es nicht von Anfang bis Ende. Doch wenn ich diese Teile überspringe, kann der Autor in den nächsten Abschnitten das Ganze nicht ganz erfolgreich aus der Perspektive eines relativen Anfängers sehen, weil jemand wie ich daherkommt, der eine begrenzte Programmiererfahrung hat, und die Teile immer noch nicht zusammenpassen, wenn er zu einem bestimmten Punkt in der Literatur kommt. Hier ist ein weiteres Beispiel. Der Datetime-Datentyp. Ich gehe hier hin: http://msdn.microsoft.com/en-us/library/system.datetime_members%28v=VS.90%29.aspx und sehe, dass datetime-Variablen standardmäßig viel komplizierter sind, als es in dieser Dokumentation steht. Zum Beispiel enthält er Informationen über die MILLISECONDS. Es kann jedes beliebige Jahr bis zu AD 9999 sein. Doch diese Dokumentation SAGT, dass es anders ist, aber sie geht nicht genügend ins Detail. Vielleicht handelt es sich nicht um die Standard-C++-Variable datetime, sondern um etwas Spezifisches für MQL4? Die Anzahl der Sekunden seit Anfang 1970, gültig bis zum Ende des Jahres 2037. In diesem Zeitintervall gibt es zufällig fast 2^31 Sekunden. Das deutet darauf hin, dass es sich um eine vorzeichenbehaftete lange Ganzzahl handelt - denn eine vorzeichenlose lange Ganzzahl würde ab 1970 tatsächlich bis ins 22. Kann ich sie bei arithmetischen Operationen tatsächlich VERWENDEN, WENN sie eine vorzeichenbehaftete lange Ganzzahl ist? Das steht dort nicht. Es ist zweideutig. Sie KÖNNTE eine glorifizierte stringähnliche Variable sein, nur mit bestimmten Einschränkungen, was der String sein kann. Es werden auch ein paar unvollständige Möglichkeiten aufgezeigt, sie zu verwenden. Aber es ist nicht eindeutig genug, was alle Möglichkeiten des Zugriffs oder der Manipulation angeht. Kann ich sie einfach in der Integer-Arithmetik neben Ints verwenden? Wenn ich den Zeitindex einer Probe auslese, kann ich dann einfach eine von einem 1-Minuten-Diagramm von einem anderen 1-Minuten-Diagramm subtrahieren und, wenn es sich um aufeinanderfolgende Minuten handelt, erwarten, dass sie sich um 60 unterscheiden (möglicherweise plus oder minus 1)?

Da war noch eine andere Sache, mit der ich bereits ein Problem hatte - die Beschreibung der ArrayCopySeries ist zweideutig. Sie suggeriert in Teilen, dass array[] in einigen Teilen beschrieben wird, in anderen Teilen aber nicht. Und wenn ich sie mir ansehe, verstehe ich absolut nicht den Zweck der Funktion, wenn sie die Währungsdaten NICHT in array kopiert.

Hier ist noch etwas, das ich gerne wissen würde. Es heißt, dass ein EA 3 Hauptfunktionen haben kann: init, deinit und start. init wird einmal beim ersten Start ausgeführt, start wird immer dann ausgeführt, wenn es einen neuen Tick gibt, und es steht nichts über deinit drin. Das Beispiel hier https://book.mql4.com/samples/expert hat nicht einmal ein init. Es hat einen Start. Es hat einige komplizierte Dinge für die scheinbare Behandlung von Fehlern wie Fun_Error, was auch immer das alles ist. Kein init. Was ist mit Variablen. Sind Variablen, die innerhalb von init definiert wurden, immer noch gültig, wenn es fertig ist und wenn "start" läuft? Oder sollten sie außerhalb beider Variablen deklariert werden? Werden die innerhalb von start deklarierten Variablen jedes Mal gelöscht, wenn start erneut ausgeführt wird? Werden Variablen, die außerhalb von start deklariert wurden, gelöscht? Ich hoffe nicht! Ich bin mir nicht einmal ganz sicher, ob ich die Variablen, die außerhalb einer Funktion deklariert sind, ändern darf. Nach dem, was ich gesehen habe, scheinen sie alle globale statische Variablen zu sein.

Übrigens, müssen Währungssymbole, die in Funktionen wie iTime verwendet werden, in einfachen oder doppelten Anführungszeichen stehen: "USDCHF" oder 'USDCHF'. Tausend kleine Dinge wie dieses. Jede einzelne davon wird sicher dazu führen, dass das Programm nicht kompiliert wird, wenn ich am Ende ankomme. Und bei tausend verschiedenen kleinen, zufälligen Fehlern wird es eine Fehlersuche geben.

RaptorUK oh, natürlich sind Sie nicht verpflichtet, mir zu helfen. Und wenn Ihre Vorstellung von einer guten Zeit darin besteht, Leute in Foren zu trollen und sie dafür zu verspotten, dass sie in einem Forum um Hilfe bitten, während der Zweck eines Forums ganz klar darin besteht, Leute zu trollen, dann sehe ich, dass Sie sich in der Tat amüsieren und das erfüllen, was Sie für die richtige Rolle eines Forenbenutzers halten. Was mich betrifft, so wäre ich, wenn ich QUALIFIZIERT wäre, jemandem zu helfen, indem ich eine Frage beantworte, die ich beantworten kann, hypothetisch gesehen durchaus bereit, das zu tun. Ich verstehe viel von geheimnisvoller Mathematik, weniger vom Programmieren. Wenn Sie zum Beispiel ein Dutzend Indikatoren haben, die statistisch nicht unabhängig sind, weiß ich, wie man sie optimal zu einem zusammengesetzten Indikator kombiniert, der die Tatsache ausgleicht, dass sie statistisch abhängig sind. Natürlich werde ich IHNEN jetzt sicher nicht helfen. Donnerwetter, wenn ich Sie mit dem Fuß in den Gleisen stecken sähe, würde ich sagen: "Ich KÖNNTE Ihnen helfen, aber was habe ich davon?"

 
zortharg:
FMIC es gibt DINGE in dieser Dokumentation, die nicht QUITE Sinn machen. ...

Ich hatte keine Schwierigkeiten, das ganze Buch von Anfang bis Ende zu lesen, obwohl ich mich mit Hoch- und Niedrigsprachen gut auskenne.

Ich bin 45 Jahre alt und arbeite seit 1986 als Softwareentwickler und habe einen Bachelor of Science in Ingenieurwissenschaften (Schwachstromelektronik). Ich beherrsche C, C++, C#, Pascal, Cobol, Fortran, Perl und viele andere, die schon lange nicht mehr existieren. Ich kenne mich auch gut mit der Assembler-Programmierung für x86, Z-80, Pics und viele andere Architekturen aus. Auch hier kann ich sagen, dass ich keine Schwierigkeiten hatte, MQL4 zu lesen und zu lernen.

Ich kann also nur zu dem Schluss kommen, dass Ihre hochmütige Haltung, die Dokumentation zu kritisieren, anstatt sich auf das eigentliche Ziel des Erlernens von MQL zu konzentrieren, nur eines bedeuten kann - Sie sind tatsächlich dümmer als die Nicht-Programmierer, für die die Dokumentation geschrieben wurde.

Wenn Sie glauben, dass MetaTrader und MQL so unter Ihrer Würde sind, warum sind Sie dann hier? Ganz im Ernst! Und warum?

Es gibt viele andere Handelsanwendungen und algorithmische Systeme da draußen. Suchen Sie sich eine aus und machen Sie sich die Mühe!

Übrigens, "RaptorUK" ist ein MODERATOR in diesem Forum. SIE SIND hier der TROLL!

Dies ist mein letzter Beitrag in diesem Thread! Sie sind die Mühe nicht wert.

 
zortharg:

RaptorUK oh, natürlich sind Sie nicht verpflichtet, mir zu helfen. Und wenn Ihre Vorstellung von einer guten Zeit darin besteht, Leute in Foren zu trollen und sie dafür zu verspotten, dass sie in einem Forum um Hilfe bitten, während der Zweck eines Forums ganz klar darin besteht, Leute zu trollen, dann sehe ich, dass Sie sich tatsächlich amüsieren und das erfüllen, was Sie für die richtige Rolle eines Forenbenutzers halten. Was mich betrifft, so wäre ich, wenn ich QUALIFIZIERT wäre, jemandem zu helfen, indem ich eine Frage beantworte, die ich beantworten könnte, hypothetisch gesehen durchaus bereit, das zu tun. Ich verstehe viel von geheimnisvoller Mathematik, weniger vom Programmieren. Wenn Sie zum Beispiel ein Dutzend Indikatoren haben, die statistisch nicht unabhängig sind, weiß ich, wie man sie optimal zu einem zusammengesetzten Indikator kombiniert, der die Tatsache ausgleicht, dass sie statistisch abhängig sind. Natürlich werde ich IHNEN jetzt sicher nicht helfen. Donnerwetter, wenn ich Sie mit dem Fuß in den Gleisen stecken sähe, würde ich sagen: "Ich KÖNNTE Ihnen helfen, aber was habe ich davon?"

Vielleicht sollten Sie diesen Kommentar erklären?

Die Dreistigkeit der Leute in diesem Forum!


Viele Menschen in diesem Forum opfern ihre Freizeit, um zu helfen. . und Sie kommen daher und erwarten, dass man Ihnen hilft, als ob es ein Recht wäre! Ich denke, jeder wäre froh, Ihnen zu helfen, bis Sie Ihre Einstellung demonstrieren ... Sie sollten ein wenig Demut zeigen, wenn Sie um Hilfe bitten.

Sie können mich bezeichnen, wie Sie wollen, es ist mir wirklich egal, ich weiß, warum ich hier bin, und manche Leute danken mir sogar dafür, dass ich versuche zu helfen. . . Ich schätze, das ist Ihnen zu hoch.

 
zortharg:

Ich muss also die historischen Kurse einzeln mit iclose herunterladen? https://docs.mql4.com/series/iClose Das Problem dabei ist, dass sich die Daten aktualisieren können, während ich gerade dabei bin, sie herunterzuladen. Es wäre sehr schön, wenn man das Ganze als Block herunterladen könnte. Ich vermute, ich kann die Zeit mit iTime herunterladen und DANN iclose verwenden und DANN iTime wieder auf dem gleichen Index verwenden und wenn es sich geändert hat, dann hat es ein neues Taktzeitintervall begonnen und ich muss eine Indexnummer zurückgehen. Verstehe ich das richtig oder gibt es etwas, das ich nicht verstehe?


Warum sollte eine Funktion, die ArrayCopySeries() heißt, erfordern, dass Sie die Reihen selbst kopieren?

Sie deklarieren das Array, müssen aber die Größe nicht angeben.

Wann immer Sie auf das Array zugreifen, macht mql "Magie" und (hoffentlich) erscheint der richtige Wert an der richtigen Stelle.

Es gibt ein Beispiel auf der Seite.

Abgesehen davon ist die Online-Dokumentation im Moment nicht auf dem neuesten Stand, also benutzen Sie die Hilfe im Meta-Editor als primäre Referenz.

Schauen Sie sich das Beispiel an, bis es Sinn macht!

 
zortharg:
Der datetime-Datentyp. Ich gehe hier hin: http://msdn.microsoft.com/en-us/library/system.datetime_members%28v=VS.90%29.aspx und sehe, dass datetime-Variablen standardmäßig viel komplizierter sind als in dieser Dokumentation angegeben. Zum Beispiel enthält sie Informationen über die MILLISECONDS. Es kann jedes beliebige Jahr bis zu AD 9999 sein. Doch diese Dokumentation SAGT, dass es anders ist, aber sie geht nicht genügend ins Detail. Vielleicht handelt es sich nicht um die Standard-C++-Variable datetime, sondern um etwas Spezifisches für MQL4? Die Anzahl der Sekunden seit Anfang 1970, gültig bis zum Ende des Jahres 2037. In diesem Zeitintervall gibt es zufällig fast 2^31 Sekunden. Das deutet darauf hin, dass es sich um eine vorzeichenbehaftete lange Ganzzahl handelt - denn eine vorzeichenlose lange Ganzzahl würde ab 1970 tatsächlich bis ins 22. Kann ich sie bei arithmetischen Operationen tatsächlich VERWENDEN, WENN sie eine vorzeichenbehaftete lange Ganzzahl ist? Das steht dort nicht. Es ist zweideutig. Sie KÖNNTE eine glorifizierte stringähnliche Variable sein, nur mit bestimmten Einschränkungen, was der String sein kann. Es werden auch ein paar unvollständige Möglichkeiten aufgezeigt, sie zu verwenden. Aber es ist nicht eindeutig genug, was alle Möglichkeiten des Zugriffs oder der Manipulation angeht. Kann ich sie einfach in der Integer-Arithmetik neben Ints verwenden? Wenn ich den Zeitindex einer Probe auslese, kann ich dann einfach eine von einem 1-Minuten-Diagramm von einem anderen 1-Minuten-Diagramm subtrahieren und, wenn es sich um aufeinanderfolgende Minuten handelt, erwarten, dass sie sich um 60 unterscheiden (möglicherweise plus oder minus 1)?

Warum so viele Worte, um eine einfache Sache zu fragen :)

Altes MQL: https://docs.mql4.com/dateandtime Eine Gruppe von Funktionen, die das Arbeiten mit Daten vom Typ datetime(Ganzzahl , die die Anzahl der seit Mitternacht, 1. Januar 1970, verstrichenen Sekunden darstellt) ermöglichen.

Neue MQL: https://www.mql5.com/en/docs/basis/types/integer/datetime - Der datetime-Typ ist für die Speicherung des Datums und der Uhrzeit als Anzahl der seit dem 01. Januar 1970 verstrichenen Sekunden vorgesehen. Dieser Typ belegt 8 Bytes Speicherplatz.

Die meisten Sprachen, die den alten 32-Bit-Integer zum Speichern der Zeit verwendet haben, sind auf 64 Bit umgestiegen, um den Ruin zu vermeiden, wenn das Jahr 2038 anbricht.

Sie addieren und subtrahieren einfach, wie Sie es vermuten. Behalten Sie aber den Datentyp datetime bei und vermeiden Sie die Versuchung, die Zeit in einer langen Variable zu speichern.

 

DANKE ydrol!

Hmmmmm. Ich weiß nicht, ob es static_cast in mql4 überhaupt gibt, aber kann ich dann einfach irgendwelche normalen arithmetischen Operationen auf datetimes anwenden, solange ich das Ergebnis in einer anderen datetime speichere? Wenn z.B. X[] ein Array von datetimes ist und ich mit der Minutenzahl arbeiten möchte, könnte ich Y=(X[17]+30)/60 nehmen, solange Y eine datetime und keine long ist? Richtig? Oder würde ich vielleicht Y=(X[17]-X[16]+30)/60 nehmen, weil es schlecht wäre, wenn X[17] 29 mod 60 und X[16] 30 mod 60 wäre, weil es denken würde, dass sie 2 Minuten auseinander liegen, wenn ich es auf die erste Weise mache.

Oh Mann, der Code, den ich bisher gemacht habe, ist schon so lang, und alles, was ich gemacht habe, ist, die Daten einzulesen, und jetzt muss ich die fehlenden Minuten (oder das ganze Wochenende!) kompensieren, indem ich die Daten weiter verschiebe und interpoliere, ich frage mich, wie die Chancen stehen, dass dieser Truthahn funktioniert, wenn ich damit fertig bin, ha ha. Das alles mit einem Matlab-Programm, das zeigt, dass ich endlich eine Handelsmethode habe, mit der ich den Spread/die Kommission schlagen kann, aber die Umsetzung in die Praxis ist etwas ganz anderes.

An alle, die nicht ydrol sind, ok, ich erkläre euch zu den Gewinnern eurer jeweiligen P***ing-Wettbewerbe, also herzlichen Glückwunsch und da ihr gewonnen habt, könnt ihr jetzt aufhören, in diesem Thread zu posten.

 

Hmmmmm. I don't know if static_cast even exists in mql4, but can I just use any regular arithmetic operations on datetimes then, so long as I save the result in another datetime?

Wenn das Ergebnis Ihrer Arithmetik immer noch ein Zeitpunkt ist (d.h. immer noch ein Wert, der die Anzahl der Sekunden seit 1970 ist), dann behalten Sie es als datetime, andernfalls können Sie es in einen long oder int umwandeln. (Sie müssen das nicht, aber es wird später Verwirrung vermeiden)

Es hilft nicht, alle zu verärgern, ändern Sie einfach den Ansatz, um die gewünschte Hilfe zu erhalten :)

 

Nun, nachdem ich etwas Code geschrieben habe, scheint es in der Tat sehr schwer für mich zu sein, das Speichern von arithmetischen Ergebnissen mit Datumsangaben als Eingaben in ints zu vermeiden. Aber static_cast<long> würde theoretisch wie in C++ funktionieren? Ich sehe keine Erwähnung in den Docs.

Ach, übrigens, Zeitzone. Ist es UTC? In dem Buch steht immer nur die Anzahl der Sekunden seit dem 1. Januar 1970 um 0:00 Uhr. Ich könnte annehmen, dass es sich um UTC handelt, wie die UNIX-Zeit, aber wir haben bereits festgestellt, dass es zumindest einige Diskrepanzen zwischen den "datetime"-Variablen hier und dem gibt, was C++ verwendet (z. B. keine Millisekunden) - was zugegebenermaßen selbst keine UNIX-Zeit ist, aber trotzdem "datetime" genannt wird -, also sollte ich nicht davon ausgehen, dass es das ist, nur weil es oberflächlich gesehen der UNIX-Zeit ähnelt, weil es mit dem Beginn des Jahres 1970 beginnt. Ist es notwendigerweise UTC oder ist es möglich, dass jeder Broker seinen eigenen Offset auf der Grundlage seiner eigenen Zeitzone hat und dass ich ihn im Code haben muss, damit er anhand der Daten herausfindet, wo der Wochenanfang modulo 10080 Minuten liegt? Es geht darum, die Zeit modulo 10080 zu kennen, zu der der Handel beginnt und endet, da der Markt nur 7200 von diesen 10080 Minuten geöffnet ist, so dass er die Positionen abbauen kann, wenn das Wochenende naht, und nicht gleich zu Beginn Vollgas gibt oder, was noch viel schlimmer ist, drastische Handelsentscheidungen auf der Grundlage von Preisunterschieden zwischen dem Ende einer Woche und dem Beginn der nächsten trifft, oder sogar Lücken bei der Bestimmung von Informationen wie der Volatilität zu ignorieren - die ich als mittlere quadratische Preisänderung nach 1 Minute definiere - und dann addiere ich das 1/4-fache der mittleren quadratischen Preisänderung nach 2 Minuten und das 1/9-fache der mittleren quadratischen Preisänderung nach 3 Minuten und das 1/16-fache der mittleren quadratischen Preisänderung nach 4 Minuten und multipliziere das Ganze dann mit 1/(1+1/2+1/3+1/4)=0.48.

Hey, was soll ich sagen, ich habe um Hilfe gebeten und sie waren von Anfang an böse und feindselig zu mir. Wenn jemand um Hilfe bittet, gebe ich sie ihm entweder nicht oder ich gebe sie ihm. Wenn ich die Antwort auf eine Frage nicht weiß, mache ich keinen Smalltalk, anstatt sie zu beantworten, und wenn ich mir nicht die Zeit nehmen will, die Frage richtig zu beantworten, nehme ich mir nicht die Zeit, mich über die Frage lustig zu machen oder eine nutzlose Nicht-Antwort zu geben. Letzteres gilt für jemanden, der eine Frage stellt, auf die er die Antwort kennen sollte, wenn er länger als einen Tag auf dem Planeten Erde gelebt hat, oder wenn die Frage rhetorisch ist und vor allem, wenn sie darauf abzielt, eine bestimmte Gruppe von Menschen zu beleidigen. Ich bin ein Mensch, der gleich zur Sache kommt, und ich arbeite nach einem ethischen Kodex, der auf Gegenseitigkeit beruht. Ich bin höflich zu den Leuten, bis sie böse zu mir sind, und dann höre ich auf, höflich zu sein, und ich bin auch ehrlich zu den Leuten, bis sie mich belügen, betrügen und bestehlen, und dann ist mein Standardkodex des zivilen Verhaltens zum Fenster hinausgeworfen und ich werde im Gegenzug lügen, betrügen und stehlen und kein Mitleid oder Zurückhaltung zeigen. Das mag eine vereinfachte Sicht auf die Welt sein, aber ich bin stur und unversöhnlich.

Aber an Sie: Danke für Ihre Hilfe. Und wenn es etwas gibt, womit ich Ihnen helfen kann, fragen Sie ruhig. Nicht, dass ich annehme, dass Sie Hilfe bei irgendetwas suchen, bei dem ich helfen könnte.

 
zortharg:

Nun, nachdem ich etwas Code geschrieben habe, scheint es in der Tat sehr schwer für mich zu sein, das Speichern von arithmetischen Ergebnissen mit Datumsangaben als Eingaben in ints zu vermeiden. Aber static_cast<long> würde theoretisch wie in C++ funktionieren? Ich sehe keine Erwähnung in den Docs.

Ach, übrigens, Zeitzone. Ist es UTC?


Sie ist zeitzonenunabhängig. . wie viele Sekunden liegen zwischen 14.00 und 15.00 Uhr? Sie brauchen die Zeitzone nicht zu kennen, um 3600 zu beantworten ... wenn es Ihnen hilft, nehmen Sie einfach an, dass die Startzeit, Mitternacht am 1. Januar 1970, und die Zeit, an der Sie interessiert sind, beide in der gleichen Zeitzone liegen.
 

EDIT: Ups, wie bereits erwähnt wurde, gibt es keine spezifische Zeitzone für datetime. Es kommt darauf an, woher man sie bezogen hat! (dies führt zu unnötigen Komplikationen, im Gegensatz zu UnixTime, auf dem es letztendlich basiert!).

Die Zeitzone für datetime (Sekunden nach 1970) basiert auf UTC. Genau wie die Unix-Zeit. Es ist UnixTime - 64 Bit Unix-Zeit.

Unile true UTC, UnixTime ignoriert Schaltsekunden (siehe 1. Absatz) und so funktioniert die Modulo-Arithmetik für Minuten und Stunden.

datetime - datetime = long (Sekunden Dauer) - obwohl es sich, soweit es den Handel betrifft, in den meisten Fällen, die ich mir vorstellen kann, um einen int handeln wird!

datetime +/- seconds(long) = datetime(ein anderes Datum)

datetime +/- seconds(int) = datetime(ein anderes Datum)