Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 264

 
aber so scheint es zu sein. Wenn die Größe des Arrays nicht voreingestellt ist, dann muss es definitiv ArrayResize sein. Und am Ende des ArrayResize(array,0); ja, das ist genau richtig, nie gedacht, dass...........Uchtu....... Danke))))
 
Sie können nicht ein ArrayResize auf jedem tick!!!!!!! tun Andernfalls werden Sie sich in Berechnungen verzetteln................... Und kein Multi-Core-Prozessor wird Sie retten........
 
Der am 11.11.2013 07:54 veröffentlichte Artikel "ShowCandleSize" wird nicht korrekt angezeigt und kann aus unbekannten Gründen nicht bearbeitet werden.
Ich habe mich am 15. November mit diesem Problem an den Kundendienst unter noreply@metaquotes.net gewandt, aber keine Antwort erhalten.
Können Sie mir bitte die richtige Adresse für eine solche Frage nennen?
Hochachtungsvoll.
--
Wladislaw Schurkin,
Am 20. November 2013.
 
artmedia70:
Alle Ergebnisse von abgeschlossenen Geschäften können in der Kontohistorie eingesehen werden. Mit Software. Ist es notwendig, ein Array ständig mit ihnen vollzustopfen? Es kann viele von ihnen geben. Es ist besser, die notwendige Tiefe der Geschichte zu begrenzen und das Feld zu füllen, wenn man wirklich nicht ohne sie leben kann.

Danke für die Klarstellung!

"Alle Ergebnisse von abgeschlossenen Geschäften können in der Kontohistorie eingesehen werden. Durch Software." - Wie?
 
VladislavVG:


Bei Programmende muss der dynamisch zugewiesene Speicher wieder freigegeben werden, um Speicherlecks zu vermeiden. Ich weiß nicht, ob die Entwickler von MKL dies befolgen.



Sie tun, das ist der Grund, warum Arrays statisch sind, um sie an einem Ort zu sammeln und später frei. ArrayResize(a,0) am Ende des Programms ist nicht sehr sinnvoll, wenn auch nur zur Selbstvergewisserung.
 
Leo59:
Ich danke Ihnen für Ihre Klarstellung!

"Alle Ergebnisse von abgeschlossenen Geschäften können in der Kontohistorie eingesehen werden. Programmatisch." - Wie?

OrderSelect(ticket,SELECT_BY_TICKET,MODE_HISTORY)

oder

OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)

 
alsu:

OrderSelect(ticket,SELECT_BY_TICKET,MODE_HISTORY)

oder

OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)




Vielen Dank!


Was ist gut an der Anleitung von Kovalev? Ich finde es gut, weil man lernt, wie man einfache Probleme anhand von einfachen Beispielen von Programmcode löst.

Eigentlich habe ich angefangen, das Programmieren anhand des Indikatorcodes von Vladislav Goshkov zu lernen. Ich habe diesen Indikator mit den Unterstützungs- und Widerstandsstrahlen von De-Mark gezeichnet. Es gab die folgenden Zeilen:
ObjectMove(buff_str, 1, UpBT[0], UpP[0]);
ObjectMove(buff_str, 0, UpBT[1], UpP[1]);
Ich habe sie platziert. Ich habe es mir im Testgerät angesehen und gesehen, wie es funktioniert. Es zeichnet Strahlen durch Fraktale, aber es schaut in die Vergangenheit statt in die Zukunft... )))). Ich habe angefangen, Fragen zu stellen, und es hat geklappt! Respekt an Vladislav!!!!
Auf das Kovalev-Lehrbuch bin ich erst später gestoßen. Ich wünschte, es würden mehr Fragen in diesem Format beantwortet.

Und noch eine Sache.
"Sie wollen Ihren eigenen Experten schreiben und wissen nicht, wo Sie anfangen sollen? Mit dem Erscheinen von Rosh's Artikeln auf der Alpari-Website können die ersten Schritte zur Erstellung eines Experten einfach und schmerzlos gemacht werden.
Rosh erklärt die Schritte, die jeder EA-Autor durchläuft, auf einfache und verständliche Art und Weise. Viele der Feinheiten der Programmierung, deren Kenntnis eine lange Erfahrung voraussetzt, sind nun für jedermann zugänglich.
Schritt für Schritt, ausgehend von den Grundlagen, lernen Sie die Feinheiten der Forex-Programmierung kennen."

Vielleicht wissen Sie, unter welchem Link diese Artikelübersicht zu lesen ist?
 
VladislavVG:


Denn es handelt sich nicht um ein Array, um genau zu sein. Wenn Sie mehr Details wollen - siehe Beschreibungen von C. Ich beziehe mich darauf, weil die Entwickler von Anfang an gesagt haben, dass auf alles, was nicht klar oder unvollständig dargestellt ist - siehe Standard C.

Wenn Sie die Variable double buffer[] deklarieren , weisen Sie Speicher für eine Variable zu, die in C als "Pointer" bezeichnet wird, vom Typ Integer ist und die Adresse der Speicherzelle speichert, mit der das Array beginnt. Wenn Sie die Dimensionalität der Variablen in MCL überprüfen, erhalten Sie den Wert 0. Das bedeutet, dass dem Array selbst kein Speicher zugewiesen wird, und wenn Sie versuchen, einen Wert zuzuweisen, können Sie ihn nirgendwo hinschreiben: In MCL gibt es keine Adressarithmetik und Zeiger können nicht verarbeitet werden. In C kann man es zwar schreiben, aber mit "nicht zugewiesenem" Speicher führt es normalerweise zu einem Systemabsturz. Wenn Sie AreiResize(array,N), (N>0) anwenden, wird Speicher für das Array (mindestens ein Element) zugewiesen und Platz für das Schreiben von Werten geschaffen. Bei der Überprüfung wird die Dimension des Arrays von 0 verschieden sein.

Das Konzept des statischen Arrays in C hat mehrere Bedeutungen:

1. ein statisches Array (sowie eine statische Variable/ein statischer Typ) sind solche Variablen/Arrays, deren Dimensionalität in der Kompilierungsphase (Vorkompilierung für MKL4) bekannt ist. Wenn zum Beispiel double buff[10000]; beschrieben wird, erfährt der Compiler die Größe der Variablen und kann sofort Speicher zuweisen. Im Gegensatz zu diesem Konzept gibt es das Konzept eines "dynamischen Arrays", d.h. eines solchen Arrays, dessen Größe zur Kompilierzeit unbekannt ist und erst zur Laufzeit bekannt wird; dies sind alle Arrays mit variabler Größe. Beim Zugriff auf solche Arrays muss zuvor Speicher zugewiesen werden. Der Speicher wird außerhalb des statischen Programmspeichers zugewiesen.

Wenn in C/C++ ein Array in einem Block beschrieben wird, ist seine Sichtbarkeit durch den Block begrenzt - unabhängig davon, ob es sich um ein statisches oder ein dynamisches Array handelt. Fehler in Programmen wie "Speicherlecks" sind mit lokal definierten dynamischen Arrays verbunden, d.h. wenn ein Speicherzeiger zerstört wird, weil er den Gültigkeitsbereich verlässt, aber der ihm zugewiesene Speicher belegt bleibt.

2 Das Konzept des "statischen" Arrays als Variable, die mit dem Modifikator static beschrieben wird - solche Variablen werden nicht zerstört, wenn sie den Bereich des Blocks verlassen - sie befinden sich in einem separaten Speicherbereich - daher bleiben die Werte in ihnen erhalten. Das Risiko von Speicherlecks wird reduziert. Ein Array, das als dynamisch im Sinne von p.1 deklariert ist (d.h. die Größe des Arrays ist zum Zeitpunkt der Kompilierung nicht bekannt), kann auch statisch im Sinne von p.2 sein, d.h. mit dem Modifikator "static" deklariert werden.

Beim Beenden von Programmen muss dynamisch zugewiesener Speicher freigegeben werden, um Speicherlecks zu vermeiden. Ich weiß nicht, ob die Entwickler von MKL dies beachten, aber in meinen Programmen gebe ich immer Speicher frei - Gewohnheit aus C - ArreyResize(array,0);

In MKL sind alle Arrays statisch im Sinne von Punkt 2.

Nun zu Ihrer Frage: "Warumkönnen einem statischen Array double buffer[]; keine Werte zugewiesen werden?". Denn es wird kein Speicher dafür zugewiesen (es handelt sich um ein dynamisches Array mit einem statischen Modifikator). Bevor Werte zugewiesen werden, sollte Speicher zugewiesen werden, d.h. ArrayResize mit einer Größe größer als 0 sollte auf dieses Array angewendet werden. Bei Arrays müssen Sie den Speicherüberlauf (außerhalb des Arrays) kontrollieren.

SZ Ich hoffe, ich habe mich klar ausgedrückt. Ich habe versucht, es so einfach wie möglich zu machen.

"Man darf sein handwerkliches Geschick nicht verlieren"!
Dankeschön!!!!!!!!
 
VladislavVG:

Denn es handelt sich nicht um ein Array, um genau zu sein. Ich beziehe mich darauf, weil die Entwickler von Anfang an gesagt haben, dass alles, was unklar oder unvollständig ist, in der C-Norm nachzulesen ist.
........

Ich danke Ihnen vielmals. Ich bin mit klebenden Augen aufgewacht, aber ich bin so froh, alles gelesen zu haben.
 
Leo59:


Kennen Sie vielleicht einen Link, unter dem dieser Artikel nachgelesen werden kann?


https://www.mql5.com/ru/articles/mt4


Ah nein, es lässt sich nicht mehr öffnen(((.