Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 1134
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
Liebe Programmierer, bitte helfen Sie einem Neuling in diesem Geschäft.
Der EA öffnet Kauf- und Verkaufsaufträge nach einer bestimmten Zeitspanne nacheinander. Ich möchte, dass alle früheren Aufträge geändert werden (insbesondere sollen alle früheren Aufträge durch Take Profit des letzten Auftrags geschlossen werden). D.h. wenn der letzte Kaufauftrag und der vorherige Verkaufsauftrag, dann wird der Stop-Loss des vorherigen Auftrags auf das Take-Profit-Niveau des letzten Auftrags gesetzt,
Wenn der vorherige Kauf kauft, dann wird sein TakeProfit auf das Niveau des letzten TakeProfit gesetzt. usw. Der Punkt ist, dass bei der Gewinnmitnahme des letzten Auftrags alle Aufträge geschlossen werden müssen).
Ich hoffe, ich habe es klar und deutlich erklärt, auch wenn es schwer zu verstehen ist, wie es umgesetzt werden soll. Ich danke Ihnen im Voraus.
Ich verstehe, dass wir alle offenen Aufträge durchgehen und sie ändern können, aber wie können wir den letzten Auftrag auslassen?
Das Wichtigste bei all dem ist zu verstehen, was geschehen soll.
Was ist die "letzte Bestellung"? Wird es bis zur Öffnungszeit dauern? Oder nach dem Eröffnungspreisniveau?
Was ist, wenn wir "die letzte" Bestellung als "KAUFEN" betrachten, der Preis aber in die Höhe schießen wird? Oder umgekehrt, der letzte Auftrag wird VERKAUFEN, aber der Preis geht nach Norden? Welcher ist dann der letzte? Das müssen wir erkennen.
Hallo. Wenn Sie vorher nicht wissen, wie viele Elemente das Array enthalten wird, wie können Sie das Array so deklarieren, dass das Array mit jedem neuen Element größer wird?
Ein Beispiel, um es deutlicher zu machen:
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
HighA[i]=A[i];
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Hallo. Wenn Sie vorher nicht wissen, wie viele Elemente das Array enthalten wird, wie können Sie das Array so deklarieren, dass das Array mit jedem neuen Element größer wird?
Ein Beispiel, um es deutlicher zu machen:
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
HighA[i]=A[i];
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Sie sollten die Dokumentation öfters lesen.
Ich habe gelesen und versucht, aber ich erhalte eine Fehlermeldung "array out of range". In dem Beispiel sah das so aus:
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines);
HighA[i]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Ich habe gelesen und versucht, aber ich erhalte eine Fehlermeldung "array out of range". In dem Beispiel sah das so aus:
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines);
HighA[i]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Wenn die Bedingung A[i] < B[i] nicht erfüllt ist, bleibt die Array-Größe unverändert und der Schleifenzähler wird inkrementiert. Deshalb liegt sie außerhalb der Reichweite.
Versuchen Sie es auf diese Weise.
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
int size = ArraySize(HighA);
ArrayResize(HighA, size+1);
HighA[size]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Wenn die Bedingung A[i] < B[i] nicht erfüllt ist, bleibt die Array-Größe unverändert und der Schleifenzähler wird erhöht. Deshalb ist sie nicht zulässig.
Versuchen Sie es auf diese Weise.
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
int size = ArraySize(HighA);
ArrayResize(HighA, size+1);
HighA[size]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Ich habe gelesen und versucht, aber ich erhalte die Fehlermeldung "array out of range". In dem Beispiel sah das so aus:
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines);
HighA[i]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Nun, das würde schneller gehen
double HighA[];
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines);
HighA[countHlines-1]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
// Вариант №2
int countHlines=-1;
double HighA[];
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines+1);
HighA[countHlines]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Nun, so geht es schneller
double HighA[];
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines);
HighA[countHlines-1]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
// Вариант №2
int countHlines=-1;
double HighA[];
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines+1);
HighA[countHlines]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Danke, ich verstehe! Es wird schneller sein, weil der ArraySize, verlangsamt es irgendwie?
Nicht viel, aber es ist klar und fehlerfrei.