Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1207
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
warum diese Schleife nicht endet, wenn ... (Ich habe die zweite Bedingung für i < 2000 hinzugefügt, als mir klar wurde, dass die Schleife unendlich ist) MQL4
cv * tvp * (double)stop < ml
warum diese Schleife nicht endet, wenn ... (Ich habe die zweite Bedingung für i < 2000 hinzugefügt, als mir klar wurde, dass die Schleife unendlich ist)
Die Schleife wird nicht beendet, bis
cv * tvp * (double)stop < ml
Um die Schleife zu beenden, wenn diese Bedingung erfüllt ist, können wir folgendes in den Schleifenkörper schreiben
oder
In MQL4 nur auf diese Weise:
Ergebnis:
Nochmals vielen Dank für Ihre Hilfe. Ich wäre Ihnen sehr dankbar, wenn Sie mir auch sagen könnten, wie ich Folgendes tun kann...
Welche Funktion oder welches Sprachkonstrukt kann verwendet werden, um den Indexwert eines Array-Elements zu berechnen, das den Index vor der Sortierung hatte?
Hier habe ich Array A[] vor der Sortierung (die obere Zeile) und das gleiche Array nach der Sortierung. Ein Element mit dem Wert 5 befand sich vor der Sortierung bei Index 9
, und ein Element mit dem Wert 5 befindet sich nach der Sortierung bei Index 3.
Ich finde eine Zelle mit dem Wert 5 im sortierten Array und die Funktion speichert die Indexnummer dieser Zelle im sortierten Array in W, was gleich dem Index 3 ist
ArraySort(А,10,0,MODE_ASCEND);
W = ArrayBsearch( A,5,WHOLE_ARRAY,0,MODE_ASCEND);
FRAGE: Wie kann nach ArrayBsearch() der Wert des Index einer Zelle mit dem Wert 5 in einer Variablen gespeichert werden, die ein unsortiertes Array enthält?
Das heißt, speichern Sie den Wert von 9.
Vielen Dank für Ihre Hilfe.
Alexej Viktorow
Mihail Matkovskij
Ich danke Ihnen!
Hallo zusammen. Wer weiß, wie man einen negativen Wert in einem benutzerdefinierten Indikator einstellt und ihn zum Funktionieren bringt, z. B. "Verschiebung des Indikators relativ zum Preisdiagramm"?
Beispiel: Wenn Sie einen Wert von -4 in den Indikator für den gleitenden Durchschnitt eingeben, bewegt er sich relativ zum Diagramm nach links - und funktioniert.
Aber wenn Sie diesen Wert in den Code des Indikators einfügen, dann funktioniert der Indikator nicht mehr und zeigt alle TF-Werte rot an.
Ich danke Ihnen nochmals für Ihre Hilfe. Ich wäre Ihnen sehr dankbar, wenn Sie mir auch sagen könnten, wie ich Folgendes tun kann...
Welche Funktion oder welches Sprachkonstrukt kann verwendet werden, um den Indexwert eines Array-Elements zu berechnen, den dieses Element vor der Sortierung hatte?
Hier habe ich das Array A[] vor der Sortierung (die obere Zeile) und das gleiche Array nach der Sortierung. Ein Element mit dem Wert 5 befand sich vor der Sortierung bei Index 9
, und ein Element mit dem Wert 5 befindet sich nach der Sortierung bei Index 3.
Ich finde eine Zelle mit dem Wert 5 im sortierten Array und die Funktion speichert die Indexnummer dieser Zelle im sortierten Array in W, was gleich dem Index 3 ist
ArraySort(А,10,0,MODE_ASCEND);
W = ArrayBsearch( A,5,WHOLE_ARRAY,0,MODE_ASCEND);
FRAGE: Wie kann nach ArrayBsearch() der Wert des Index einer Zelle mit dem Wert 5 in einer Variablen gespeichert werden, die ein unsortiertes Array enthält?
Das heißt, speichern Sie den Wert von 9.
Vielen Dank für Ihre Hilfe.
aber sortieren Sie die Daten nicht willkürlich und ohne globalen Zweck.
Aus dem aktuellen Projekt: Nehmen Sie ein (kurzes) Array, die Ausgabe wird Element-Indizes in der richtigen Reihenfolge sein:
{
for(int i=0;i<5;i++)
index[i]=i;
for(int i=0;i<4;i++) {
for(int j=1;j<5;j++) {
if (data[index[i]]>data[index[j]]) {
int tmp=index[i];
index[i]=index[j];
index[j]=tmp;
}
}
}
}
für größere Arrays müssen wir den Sortieralgorithmus ändern (Bubbling funktioniert nicht für größere Arrays) - ändern Sie ihn.
Die wichtigste Botschaft lautet: Lassen Sie die Originaldaten unangetastet. Arbeiten Sie entweder mit Referenzen oder, noch besser, mit Array-Indizes. Sonst gehen Informationen verloren, die später dringend benötigt werden.
Ich danke Ihnen nochmals für Ihre Hilfe. Ich wäre Ihnen sehr dankbar, wenn Sie mir auch sagen könnten, wie ich Folgendes tun kann...
Welche Funktion oder welches Sprachkonstrukt kann verwendet werden, um den Indexwert eines Array-Elements zu berechnen, den dieses Element vor der Sortierung hatte?
Hier habe ich das Array A[] vor der Sortierung (die obere Zeile) und das gleiche Array nach der Sortierung. Ein Element mit dem Wert 5 befand sich vor der Sortierung bei Index 9
, und ein Element mit dem Wert 5 befindet sich nach der Sortierung bei Index 3.
Ich finde eine Zelle mit dem Wert 5 im sortierten Array und die Funktion speichert die Indexnummer dieser Zelle im sortierten Array in W, was gleich dem Index 3 ist
ArraySort(А,10,0,MODE_ASCEND);
W = ArrayBsearch( A,5,WHOLE_ARRAY,0,MODE_ASCEND);
FRAGE: Wie kann nach ArrayBsearch() der Wert des Index einer Zelle mit dem Wert 5 in einer Variablen gespeichert werden, die ein unsortiertes Array enthält?
Damit soll der Wert 9 gespeichert werden.
Vielen Dank für Ihre Hilfe.
Hierfür müssen Sie zwei Fragen beantworten:Was würden Sie tun, wenn:
1. Es werden mehrere Werte von 5 in verschiedenen Zellen des Feldes vorhanden sein.
2. Es wird kein Wert 5 im Array vorhanden sein.
Da die FunktionArrayBsearch (für sortierte Daten) im ersten Fall den ersten gefundenen Index liefert, bei dem der Zellenwert 5 ist, wird im zweiten Fall ein Element in der Nähe des Wertes 5 gefunden. Wie Sie mit einem unsortierten Array umgehen wollen, ist mir nicht klar.
Hallo zusammen. Wer weiß, wie man einen negativen Wert in einem benutzerdefinierten Indikator einstellt und ihn zum Funktionieren bringt, z. B. "Verschiebung des Indikators relativ zum Preisdiagramm"?
Beispiel: Wenn Sie einen Wert von -4 in den Indikator für den gleitenden Durchschnitt eingeben, verschiebt er sich relativ zum Diagramm nach links - und funktioniert.
Wenn Sie jedoch einen solchen Wert in den Indikatorcode eingeben, funktioniert der Indikator nicht mehr und zeigt alle TF-Werte rot an.
SetIndexShift.
Die Verschiebung wird auch in iMA angegeben:
iMA
Gibt den Wert destechnischen IndikatorsGleitender Durchschnittzurück.
doubleiMA(
stringsymbol,// Symbolname
inttimeframe,// Zeitrahmen
intma_period,// Zeitraum
intma_shift,// Durchschnitt verschieben
intma_method,// Mittelungsmethode
intangewandter_Preis,//Preistyp
intshift// shift
);
Parameter
Symbol
[in] Symbolname des Symbols, dessen Daten zur Berechnung des Indikators verwendet werden sollen.NULL bedeutet aktuelles Symbol.
Zeitrahmen
[in] Zeitraum. Kann einer der Werte der AufzählungENUM_TIMEFRAMES sein. 0 bedeutet die Periode des aktuellen Diagramms.
ma_Zeitraum
[in] Zeitraum der Mittelwertbildung für die Berechnung des Indikators.
ma_shift
[in] Verschiebung des Indikators relativ zum Preisdiagramm.
ma_method
[in] Mittelungsmethode. Kann einer der Werte der AufzählungENUM_MA_METHOD sein.
angewandter_Preis
[in] Angewandter Preis. Kann ein beliebiger Wert aus der AufzählungENUM_APPLIED_PRICE sein.
Schicht
[in] Index des aus dem Indikatorpuffer gewonnenen Wertes (Verschiebung relativ zum aktuellen Takt um eine bestimmte Anzahl von Perioden zurück).
Zurückgegebener Wert
Wertdes technischen Indikators Gleitender Durchschnitt.
Beispiel:
AlligatorJawsBuffer[i]=iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i);
https://docs.mql4.com/ru/indicators/ima
Hier ist ein vorgefertigtes Beispiel, aber in MQL5: https://www.mql5.com/ru/docs/indicators/ima,
die leicht in MQL4 übersetzt werden können.
Es gibt keine Verschiebung bei den Indikatoreinstellungen. Ich bin in den Code gegangen und habe Shift -4 in den Code eingefügt, woraufhin der Indikator nicht mehr funktioniert hat - er zeigt an, dass alle TFs rot sind. Ich sitze hier und frage mich, warum.
Zu diesem Zweck müssen Sie zwei Fragen beantworten:Was werden Sie tun, wenn
1. Es wird mehrere Werte von 5 geben, die in verschiedenen Zellen des Feldes liegen.
2. Der Wert 5 wird nicht im Array enthalten sein.
Da die FunktionArrayBsearch (für sortierte Daten) im ersten Fall den ersten gefundenen Index liefert, bei dem der Zellenwert 5 ist, wird im zweiten Fall ein Element in der Nähe des Wertes 5 gefunden. Wie Sie mit einem unsortierten Array umgehen wollen, ist mir nicht klar.
Vielen Dank für Ihre schnelle Antwort. In meinem Fall ist jeder Wert eines Array-Elements eindeutig und existiert nur in einer einzigen Instanz. Das heißt, dass der Wert 5, wie andere Werte auch, nicht wiederholt wird.
In meinem Fall darf der Wert 5 in einem unsortierten Array nicht existieren. Das bedeutet, dass einige Zellen im unsortierten Array leer sein können.
Aber wenn der Wert 5 nicht im unsortierten Array ist, dann kann ich den Wert 5 nicht als zweiten Parameter in der Funktion ArrayBsearch() angeben. Nur Werte, die notwendigerweise im unsortierten Array vorhanden sind, gelangen in diese Funktion.
Vielen Dank für Ihre Hilfe