Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 82
![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Du wirst den letzten Verlierer bekommen, was damit zu tun ist und welche Parameter du für dich selbst einstellen musst, das wirst du schon herausfinden.
Danke, ich glaube, ich habe es verstanden.
Wie kann ich erreichen, dass das Los nach der Gewinnmitnahme wieder seinen ursprünglichen Wert erreicht?
{
lot=0.1
}
Danke, ich glaube, ich habe es verstanden.
Wie kann ich erreichen, dass das Los nach der Gewinnmitnahme wieder auf seinen ursprünglichen Wert zurückfällt?
{
lot=0.1
}
Ich habe das folgende Schema
if (AufträgeSumme()==0)
{
offen mit Anfangspartie
}
sonst
...
d.h. wenn es keine Aufträge gibt, wird es nicht mit der alten Partie eröffnet
Natürlich ist es möglich, sich jede Reihenfolge einzuprägen, aber sie sagen uns nicht, wie man das macht.Ein Zähler sollte gestartet und auf seinen Anfangswert zurückgesetzt werden, wenn ein bestimmter Schwellenwert erreicht wird:
{
//---
int b_STOP,s_STOP,b=0,s=0;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if (OrderType()==OP_BUY) b++;
if (OrderType()==OP_SELL) s++;
if (OrderType()==OP_BUYSTOP) b_STOP++;
if (OrderType()==OP_SELLSTOP) s_STOP++;
}
if (OrderType()==OP_BUY)
{
if(b>=1&&s==1)//бай позиций больше или 1 и появилась SELL позиция
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,CLR_NONE);
CLOSEORDER(OP_SELL);
}
}
}
}
Erklären Sie, warum die Funktion OrderProfit()<0 nicht funktioniert?
{
if(OrderSelect(q,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderType()<2 && OrderMagicNumber()==magic)
{
if (OrderProfit()<0)
{
if (DayOfWeek()==1)
{
day1++;
Print ("Понедельник SL=",day1);
}
if (DayOfWeek()==2)
{
day2++;
Print ("Вторник SL=",day2);
}
}
}
}
}
Ich möchte sehen, wie viele Stop-Losses es pro Wochentag gibt.
{
if(OrderSelect(l,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderProfit()<0 && OrderType()<2)
{
oldticket=OrderTicket();
}
if (oldticket>=ticket)
{
ticket=oldticket;
lot=OrderLots()*4;
}
if (OrderProfit()>0 && OrderType()<2)
{
lot=0.01;
}
}
}
und hier denke ich, dass es derselbe Grund ist, warum es nicht funktioniert
Erklären Sie, warum die Funktion OrderProfit()<0 nicht funktioniert?
{
if(OrderSelect(q,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderType()<2 && OrderMagicNumber()==magic)
{
if (OrderProfit()<0)
{
if (DayOfWeek()==1)
{
day1++;
Print ("Понедельник SL=",day1);
}
if (DayOfWeek()==2)
{
day2++;
Print ("Вторник SL=",day2);
}
}
}
}
}
Ich möchte sehen, wie viele Stop-Losses es pro Wochentag gibt.
{
if(OrderSelect(l,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderProfit()<0 && OrderType()<2)
{
oldticket=OrderTicket();
}
if (oldticket>=ticket)
{
ticket=oldticket;
lot=OrderLots()*4;
}
if (OrderProfit()<0 && OrderType()<2)
{
lot=0.01;
}
}
}
und hier nehme ich an, dass es derselbe Grund ist, warum es nicht funktioniert
Denn DayOfWeek() gibt die Ordnungszahl des Wochentags der letzten bekannten Serverzeit zurück.
Und Sie benötigen den Wochentag des Auftragsschlusses: TimeDayOfWeek(OrderCloseTime());
Denn DayOfWeek() gibt die Ordnungszahl des Wochentags der letzten bekannten Serverzeit zurück.
Und Sie benötigen den Wochentag des Auftragsschlusses: TimeDayOfWeek(OrderCloseTime());
Aber das Ergebnis ist das gleiche, als ob ignorieren, wenn(OrderProfit()<0) und es ist eine Schleife, Variablen erhalten große Werte.
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Понедельник SL=963666
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Вторник SL=1430207
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Понедельник SL=963665
Ich habe sie hier falsch kopiert und das Vorzeichenif(OrderProfit()>0&&OrderType()<2) korrigiert, aber das ändert nichts am Kern der Sache, die Schleife funktioniert auch ohne diese Bedingung korrekt.
Aber das Ergebnis ist dasselbe, dennwenn(OrderProfit()<0) ignoriert wird und es eine Schleife gibt, haben die Variablen große Werte.
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Понедельник SL=963666
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Вторник SL=1430207
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Понедельник SL=963665
Und über die Schleife mit viel? Ich habe es hier falsch kopiert, korrigiert das Zeichenif(OrderProfit()>0&&OrderType()<2), aber es ändert nicht das Wesen, die Schleife funktioniert richtig ohne diese Bedingung.
Wo werden Tag1 und Tag2 angegeben?
Wo werden Tag1 und Tag2 angegeben?
Ich vermute, dass ich die Reihenfolge falsch auswähle, es funktioniert nicht(OrderProfit()<0), ich muss genauer sein, welche Reihenfolge ich brauche. Ich weiß nicht, warum eine Bestellung übersprungen wird, wenn die letzte am Take-Point abgeschlossen wurde und es keine weiteren gibt. Vielleicht sollte die Schleife anders aufgebaut werden, wenn ich die Historie durchsuchen möchte?
{
if(OrderSelect(w,SELECT_BY_POS,MODE_HISTORY))
Der Grund dafür ist, dass Expert Advisors Schleifen mit ähnlichen Bedingungen erstellen und diese wie gewünscht funktionieren, aber sie arbeiten mitOrdersTotal().
{
if(OrderSelect(n,SELECT_BY_POS))
{
if(OrderMagicNumber()==magic)
{
if(OrderType()>OP_SELL)
{
//---
int b_STOP,s_STOP,b=0,s=0;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if (OrderType()==OP_BUY) b++;
if (OrderType()==OP_SELL) s++;
if (OrderType()==OP_BUYSTOP) b_STOP++;
if (OrderType()==OP_SELLSTOP) s_STOP++;
}
if (OrderType()==OP_BUY)
{
if(b>=1&&s==1)//бай позиций больше или 1 и появилась SELL позиция
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,CLR_NONE);
CLOSEORDER(OP_SELL);
}
}
}
}
Dies kann nicht in einem einzigen Zyklus gelöst werden. In dieser Schleife sollten Sie sich die Ticker der zu löschenden Aufträge im Array merken, in der nächsten Schleife sollten Sie sie nach Tickern löschen.
Darüber hinaus haben Sie ein Durcheinander mit geschweiften Klammern, Sie arbeiten mit Aufträgen außerhalb desOrderSelect{}-Blocks, das ist nicht korrekt.