Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 71

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
Okay, fangen wir an.
{
if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
&& (OrderMagicNumber()==Magic) && (OrderType()<2))
orders[count1].Ticket=OrderTicket();
orders[count1].lot=OrderLots();
orders[count1].orderopenprice=OrderOpenPrice();
orders[count1].ordertype=OrderType();
orders[count1].profit=OrderProfit();
orders[count1].stoploss=OrderStopLoss();
count1++;
}
oder?
Sie brauchen auch geschweifte Klammern, sonst funktioniert nur die erste Zeile nachif(). Sie haben viele Klammern, wo Sie sie nicht brauchen, und dann gibt es keine Klammern, wo Sie sie brauchen. Das bricht die Programmlogik, manchmal sehr stark. Und der Zähler muss nicht global sein, aber das ist auch nicht so wichtig.
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol()
&& OrderMagicNumber()==Magic && OrderType()<2)
{
orders[count1].Ticket=OrderTicket();
orders[count1].lot=OrderLots();
orders[count1].orderopenprice=OrderOpenPrice();
orders[count1].ordertype=OrderType();
orders[count1].profit=OrderProfit();
orders[count1].stoploss=OrderStopLoss();
count1++;
}
}
Helfen Sie mir, die Bedingung zu schreiben: Wenn das verfügbare Guthaben auf dem Konto weniger als 50% der Einlage beträgt, dann {action} MT5
Von welchem Depot? Initial? Oder aus der aktuellen Bilanz?
Wenn im Vergleich zur Bilanz, dann ja:
Ich dachte, er wollte ein mt5.
Ich habe eine gute Idee, ich kann sie aufschreiben, Sie können den Zähler an den Anfang des Ontiks setzen und damit arbeiten.
Wie kann ich nun in meinem Fall etwas daraus machen?
und darüber hinaus, wenn das Array zweidimensional und mehr sein wird (es gibt einen Unterschied zwischen Schreiben und Extraktion)
Können wir ein wenig über diesen Punkt sprechen?Okay, fangen wir an.
{
int Ticket;
double orderopenprice;
int ordertype;
double profit;
double stoploss;
double lot;
};
myorder orders[];
int i;
int count1=0;
void CalcOrders()
{
for(i=OrdersTotal()-1; i>=0; i--)
{
if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
&& (OrderMagicNumber()==Magic) && (OrderType()<2))
orders[count1].Ticket=OrderTicket();
orders[count1].lot=OrderLots();
orders[count1].orderopenprice=OrderOpenPrice();
orders[count1].ordertype=OrderType();
orders[count1].profit=OrderProfit();
orders[count1].stoploss=OrderStopLoss();
count1++;
}
}
Oder?
Nein, das ist nicht richtig.
Ihr Array orders[] hat den Wert Null. Wohin werden Sie die Daten schreiben? In ein Array mit einer Größe von Null? Niemals. Sie sollten die Größe des Arrays um count1+1 erhöhen - wenn Sie den Zähler nach dem Schreiben in das Array erhöhen. Normalerweise wird der Zähler vor dem Schreiben inkrementiert, dann wird die Array-Größe um die Zählergröße erhöht, und dann werden die Werte mit dem Index [count1-1] geschrieben. Und, wie oben richtig bemerkt wurde, müssen Sie alle anderen Aktionen in geschweifte Klammern einschließen, nachdem Sie die Bedingungen überprüft haben.
Warum versuchen Sie, etwas zu tun, ohne grundlegende Kenntnisse und Ideen zu haben? Nur "auf gut Glück"?
Nein, das ist es nicht.
Ihr Array orders[] hat den Wert Null. Wohin werden Sie die Daten schreiben? in ein Array mit einer Größe von Null? Niemals. Sie sollten die Größe des Arrays um count1+1 erhöhen - wenn Sie den Zähler nach dem Schreiben in das Array erhöhen. Normalerweise wird der Zähler vor dem Schreiben inkrementiert, dann wird die Array-Größe um die Zählergröße erhöht, und dann werden die Werte mit dem Index [count1-1] geschrieben. Und, wie oben richtig bemerkt wurde, müssen Sie alle anderen Aktionen in geschweifte Klammern einschließen, nachdem Sie die Bedingungen überprüft haben.
Warum versuchen Sie, etwas zu tun, ohne grundlegende Kenntnisse und Ideen zu haben? Nur "auf gut Glück"?
Wir sollten nicht mit faulen Schwänzen und faulen Eiern nach der Lernfähigkeit anderer werfen. Ihr Vorschlag, mein Problem zu lösen, bestand darin, eine Reihe von Strukturen aufzubauen. Ich habe Lehrbücher aufgeschlagen und so zusammengefügt, wie ich es verstehen konnte, und den Code hier zur öffentlichen Überprüfung eingestellt, um zu sehen, wie korrekt das alles ist. Sie glauben doch nicht, dass ich sofort eine ideale Variante finden werde, oder?
Sollte ich nach einer derartigen Gewaltfantasie davon abgehalten werden, zu helfen? Ich bitte Sie ein letztes Mal: Schreiben Sie den Algorithmus auf ein Blatt Papier und gehen Sie ihn ein paar Mal mit einem Bleistift durch. Notieren Sie die Werte und die Größe des Arrays - was und wohin wird bei jeder Iteration der Schleife geschrieben. Suchen Sie nicht nach Codestücken, die Sie für passend halten.
Artyom, das ist verständlich, aber ich kann auch in diesem Fall verstanden werden. Nichts funktioniert, und in der aktuellen Version wird es auch nicht funktionieren. Ich habe mehrere Seiten lang über die Notwendigkeit des Befehls selbst geschrieben, um das erforderliche Element des gegebenen Arrays zu ziehen, und dass ich keine Ahnung habe, wie er für diesen speziellen Fall geschrieben werden sollte, z. B. den Stop-Loss für die fünfte Order.
Was den Bleistift und das Blatt betrifft - der Bot ist bereits seit einem Monat fertig und lässt sich perfekt auf jedes Instrument stürzen, ich möchte ihn nur modifizieren, indem ich einen Zweig mit unregelmäßiger Mittelung hinzufüge.
Artyom, das ist verständlich, aber ich kann auch in diesem Fall verstanden werden. Nichts funktioniert und wird in der aktuellen Variante nicht funktionieren. Ich habe mehrere Seiten lang über die Notwendigkeit geschrieben, dass der Befehl selbst das erforderliche Element dieses Arrays ziehen muss, und dass ich keine Ahnung habe, wie er für diesen speziellen Fall geschrieben ist, zum Beispiel Stoploss für die 5.
Ich habe keine Ahnung, wie ich es für diesen speziellen Fall schreiben soll, z.B. Stoploss für die 5te Order.
Einen solchen Befehl gibt es nicht. Sie müssen sie selbst herstellen. D.h. - eine Funktion.
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 gehe ich dann damit um?
Genau der Übergang von einem Array zu einem Strukturelement