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

 
trader781:

Okay, fangen wir an.

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?

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.

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++;
         }
}
 
sile:
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:

if(AccountInfoDouble(ACCOUNT_MARGIN_FREE)/AccountInfoDouble(ACCOUNT_BALANCE)<0.5) {действие}
 
Vitalie Postolache:


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?
 
trader781:

Okay, fangen wir an.

struct myorder
{
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"?

 
Hallo. Gibt es einen universellen Code, der am Ende der Beschreibung eines beliebigen Indikators eingefügt werden kann, um die TF dieses Indikators zu ändern (z. B. M5 in M1)?
 
Artyom Trishkin:

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"?

Werfen wir nicht mit faulen Pissern und faulen Eiern nach der Fähigkeit von jemandem, Material zu lernen. 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?
 
trader781:
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 mich weigern, Ihnen nach solch wilden Fantasien 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. Schreiben Sie die Werte und die Größe des Arrays auf - was und wohin wird bei jeder Iteration der Schleife geschrieben. Suchen Sie nicht nach Codestücken, die Sie für passend halten.
Verstehen Sie, dass das Unterrichten schwierig ist, vor allem, wenn man nicht wirklich lernen will.
 
Artyom Trishkin:
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.
Verstehen Sie, dass Lehren schwierig ist, vor allem, wenn eine Person nicht wirklich lernen will.

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.

 
trader781:

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.

Ich habe einen solchen Befehl nicht. Ich muss meine eigenen machen. D.h. - Funktion.
 
Artyom Trishkin:
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
Grund der Beschwerde: