OK, dann, wie ich es verstehe, erhalten wir drei verschiedene benutzerdefinierte Funktionen mit der Rückkehr der richtigen (wenn wir für drei verschiedene Parameter suchen)
ArraySort
dann
ArrayBsearch nach der richtigen Nummer
und wie geht man dann damit um?
Genau der Übergang von einem Array zu einem Strukturelement
Du verstehst das nicht.
Sie müssen eine einzige Funktion erstellen, die das global deklarierte Array auffüllt und sortiert. Das Array muss als Referenz an die Funktion übergeben werden.
Und Sie brauchen zusätzliche Funktionen, die die benötigten Daten aus diesem Array herausnehmen.
Sie müssen eine einzige Funktion erstellen, die das global deklarierte Array füllt und sortiert. Das Array muss als Referenz an die Funktion übergeben werden.
Und Sie brauchen zusätzliche Funktionen, die die Daten, die Sie benötigen, aus diesem Array übernehmen.
Ok, können Sie demonstrieren, wie man etwas aus einem Array von Strukturen nimmt? sagen wir gefüllt und sortiert
Bitte teilen Sie mir mit, wie der Zustand aussehen soll. Wenn ein Stop-Loss ausgelöst wird, wird das Lot mit 2 multipliziert, und wenn der nächste Auftrag einen Take-Profit auslöst, würde das Lot zum ursprünglichen Lot zurückkehren, das vor dem Stop-Loss lag.
Ich verstehe es so, aber ich weiß nicht, wie es weitergehen soll...
for (int i=OrdersHistoryTotal()-1; i>=0; i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) { if (OrderMagicNumber()==magic) { if (OrderStopLoss()==OrderClosePrice()) { lot=lot*4; } } }
Sie versuchen, einen Marktauftrag zu löschen. Diese werden nicht gelöscht, sondern mit der Funktion OrderClose() geschlossen. Damit die Schleife korrekt gelöscht oder geschlossen werden kann, müssen wir den Auftrag nach seinem Typ unterscheiden.
if(OrderType()<=OP_SELL) - für Marktaufträge, if(OrderType()>OP_SELL) - für schwebende Aufträge.
Bitte teilen Sie mir mit, wie der Zustand aussehen soll. Wenn ein Stop-Loss ausgelöst wird, wird das Lot mit 2 multipliziert, und wenn der nächste Auftrag einen Take-Profit auslöst, würde das Lot zum ursprünglichen Lot zurückkehren, das vor dem Stop-Loss lag.
Ich verstehe es so, aber ich weiß nicht, wie es weitergehen soll...
for (int i=OrdersHistoryTotal()-1; i>=0; i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) { if (OrderMagicNumber()==magic) { if (OrderStopLoss()==OrderClosePrice()) { lot=lot*4; } } }
}
Wenn Sie es schnell gemacht haben, wird der letzte Verlustauftrag angezeigt, und ich denke, Sie werden verstehen, was damit zu tun ist und welche Parameter zu korrigieren sind.
Bitte teilen Sie mir mit, wie der Zustand aussehen soll. Wenn ein Stop-Loss ausgelöst wird, wird das Lot mit 2 multipliziert, und wenn der nächste Auftrag einen Take-Profit auslöst, würde das Lot zum ursprünglichen Lot zurückkehren, das vor dem Stop-Loss lag.
Ich verstehe es so, aber ich weiß nicht, wie es weitergehen soll...
for (int i=OrdersHistoryTotal()-1; i>=0; i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) { if (OrderMagicNumber()==magic) { if (OrderStopLoss()==OrderClosePrice()) { lot=lot*4; } } }
}
Die Lösung dieses Problems hängt von der vollständigen Logik des Expert Advisors ab. Sie können das Auslösen von Stoploss oder Takeprofit anhand des Kommentars nachvollziehen.
Sie müssen eine einzige Funktion erstellen, die dasauf globaler Ebene deklarierteArray füllt und sortiert. Das Array muss als Referenz an die Funktion übergeben werden.
Und Sie brauchen zusätzliche Funktionen, die die benötigten Daten aus diesem Array herausnehmen.
Artem, du irrst dich. Das auf globaler Ebene deklarierte Array ist in allen Teilen des Programms sichtbar, und man muss es nicht irgendwo von irgendwoher übergeben. Es wird einfach an einer Stelle im Programm ausgefüllt, an einer anderen sortiert und an einer dritten gelesen, das spielt keine Rolle.
Wenn man es mit dem Gleichgewicht vergleicht, dann ist es so:
Ich danke Ihnen.
OK, dann, wie ich es verstehe, erhalten wir drei verschiedene benutzerdefinierte Funktionen mit der Rückkehr der richtigen (wenn wir für drei verschiedene Parameter suchen)
ArraySort
dann
ArrayBsearch nach der richtigen Nummer
und wie geht man dann damit um?
Genau der Übergang von einem Array zu einem StrukturelementDu verstehst das nicht.
Sie müssen eine einzige Funktion erstellen, die das global deklarierte Array auffüllt und sortiert. Das Array muss als Referenz an die Funktion übergeben werden.
Und Sie brauchen zusätzliche Funktionen, die die benötigten Daten aus diesem Array herausnehmen.
Du verstehst das nicht.
Sie müssen eine einzige Funktion erstellen, die das global deklarierte Array füllt und sortiert. Das Array muss als Referenz an die Funktion übergeben werden.
Und Sie brauchen zusätzliche Funktionen, die die Daten, die Sie benötigen, aus diesem Array übernehmen.
Ok, können Sie demonstrieren, wie man etwas aus einem Array von Strukturen nimmt? sagen wir gefüllt und sortiert
wie man durch Verweis und Schreiben überträgt.
Bitte teilen Sie mir mit, wie der Zustand aussehen soll. Wenn ein Stop-Loss ausgelöst wird, wird das Lot mit 2 multipliziert, und wenn der nächste Auftrag einen Take-Profit auslöst, würde das Lot zum ursprünglichen Lot zurückkehren, das vor dem Stop-Loss lag.
Ich verstehe es so, aber ich weiß nicht, wie es weitergehen soll...
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)
{
if (OrderMagicNumber()==magic)
{
if (OrderStopLoss()==OrderClosePrice())
{
lot=lot*4;
}
}
}
}
Eine weitere Frage: Was habe ich im Block "Aufträge löschen" falsch geschrieben? Es werden nicht immer Aufträge gelöscht.
market order #1 cannot be deleted
{
for(int n=OrdersTotal()-1;n>=0;n--)
{
if(OrderSelect(n,SELECT_BY_POS))
{
if(OrderMagicNumber()==magic)
{
bool del=OrderDelete(OrderTicket());
if (del==true)
{
otl_b=0; otl_s=0; //обнуляем переменные отложек
}
}
}
}
}
Noch eine Frage: Was habe ich falsch in den Block zum Löschen von Aufträgen geschrieben? Es werden nicht immer Aufträge gelöscht, im Log steht
market order #1 cannot be deleted
{
for(int n=OrdersTotal()-1;n>=0;n--)
{
if(OrderSelect(n,SELECT_BY_POS))
{
if(OrderMagicNumber()==magic)
{
bool del=OrderDelete(OrderTicket());
if (del==true)
{
otl_b=0; otl_s=0; //обнуляем переменные отложек
}
}
}
}
}
Sie versuchen, einen Marktauftrag zu löschen. Diese werden nicht gelöscht, sondern mit der Funktion OrderClose() geschlossen. Damit die Schleife korrekt gelöscht oder geschlossen werden kann, müssen wir den Auftrag nach seinem Typ unterscheiden.
if(OrderType()<=OP_SELL) - für Marktaufträge, if(OrderType()>OP_SELL) - für schwebende Aufträge.
Es gibt eine Funktion namensCHARTEVENT_MOUSE_MOVE
Frage: Funktioniert das auch auf mobilen Geräten, die keine Maus haben?
Bitte teilen Sie mir mit, wie der Zustand aussehen soll. Wenn ein Stop-Loss ausgelöst wird, wird das Lot mit 2 multipliziert, und wenn der nächste Auftrag einen Take-Profit auslöst, würde das Lot zum ursprünglichen Lot zurückkehren, das vor dem Stop-Loss lag.
Ich verstehe es so, aber ich weiß nicht, wie es weitergehen soll...
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)
{
if (OrderMagicNumber()==magic)
{
if (OrderStopLoss()==OrderClosePrice())
{
lot=lot*4;
}
}
}
}
Bitte teilen Sie mir mit, wie der Zustand aussehen soll. Wenn ein Stop-Loss ausgelöst wird, wird das Lot mit 2 multipliziert, und wenn der nächste Auftrag einen Take-Profit auslöst, würde das Lot zum ursprünglichen Lot zurückkehren, das vor dem Stop-Loss lag.
Ich verstehe es so, aber ich weiß nicht, wie es weitergehen soll...
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)
{
if (OrderMagicNumber()==magic)
{
if (OrderStopLoss()==OrderClosePrice())
{
lot=lot*4;
}
}
}
}
Die Lösung dieses Problems hängt von der vollständigen Logik des Expert Advisors ab. Sie können das Auslösen von Stoploss oder Takeprofit anhand des Kommentars nachvollziehen.
if(StringFind(OrderComment(),"tp")>=0)// сработал тейкпрофит
...
Du verstehst das nicht.
Sie müssen eine einzige Funktion erstellen, die das auf globaler Ebene deklarierte Array füllt und sortiert. Das Array muss als Referenz an die Funktion übergeben werden.
Und Sie brauchen zusätzliche Funktionen, die die benötigten Daten aus diesem Array herausnehmen.