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
Ja, - ich denke schon! Vielen Dank, TheXpert!
Ich werde es ausprobieren!
Ich bin kein Experte. Ich habe diese Notiz zu dieser Funktion in meinem "Hilfe"-Ordner, zusätzlich zu allem "Normalen" (ich habe sie auch hierher kopiert - ich weiß nicht mehr, in welchem Zweig) -
Und die Funktion OrderCloseBy wird NUR verwendet, um 2 Aufträge gleichzeitig zu schließen, wobei ein Spread gespeichert wird.
Wir sollten programmatisch durch das Terminal gehen, uns alle offenen Auftragsnummern und ihre Eigenschaften merken, die Hauptauftragsnummer auswählen, sie mit dem gewünschten (aus den verfügbaren) Gegenauftrag abgleichen und diese Nummer einfügen.
// Das heißt, so wie ich es verstehe, kann man mit dieser Funktion nur zwei vorgewählte Zählerpositionen schließen.
Mehr gibt es nicht zu sagen.
Ja, nun...
Deshalb heißt es ja auch so.
Lassen Sie mich die Frage neu formulieren, ob es einen wirtschaftlichen Unterschied zwischen den beiden folgenden Möglichkeiten der Positionsumkehr gibt:
1) Schließen Sie SELL mit 1 Lot des Volumens mit der OrderClose-Funktion und öffnen Sie dann BUY mit 1 Lot des Volumens
2) Während SELL in 1 Lot geöffnet ist, öffnen Sie zuerst BUY in 2 Lots und schließen Sie dann SELL mit der OrderCloseBy-Funktion, was ebenfalls eine offene BUY-Position in 1 Lot hinterlässt.
Gemäß dem Beispiel in der Arbeitsmappe bleibt bei der Variante 2) eine Streuung übrig.
https://book.mql4.com/ru/trading/orderclose - hier können Sie sehen, wie die Funktion OrderCloseBy() funktioniert. Ich habe versucht, dasselbe auf der Demo zu tun - die Streuung ist wirklich geringer. Aber es funktioniert immer noch nicht auf Expert Advisor... Ich bin wirklich verwirrt...
Sie haben diese Frage bereits in zwei Threads gestellt. Sie sind wissbegierig.
Es gibt keine einfachen Lösungen. Mit der Veröffentlichung von MQL5 wird dieses Problem vollständig verschwinden.
Ich kann Ihnen ein paar Verfahren vorschlagen, die ich in meinen EAs verwende.
//Ermitteln des aktuellen Stands der offenen Aufträge:
void CheckOrders()
{
int i;
BuyOrder = false;
SellOrder = false;
BuyLots = 0,0;
SellLots = 0,0;
for ( i=0; i < OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS);
if ( OrderSymbol() == Symbol())
{
wenn ( OrderType() == OP_BUY )
{
BuyOrder = true;
LastBuyLots = OrderLots();
BuyLots += LastBuyLots; // Summe der offenen Kaufpositionen
BuyTicket = OrderTicket();
}
if ( OrderType() == OP_SELL)
{
SellOrder = true;
LastSellLots = OrderLots();
SellLots += LastSellLots; // Summe der offenen Verkaufspositionen
SellTicket = OrderTicket();
}
}
}
}
//Auftrag öffnen (schließen):
void TradeVariant( int variant )
{
switch( variant )
{
// if (Pattern < 0 && !BuyOrder && !SellOrder && !FridayLastHour) variant = 1;
// Signal zum Verkauf, kein Auftrag ist offen und es ist nicht die letzte Stunde des Freitags
// einen Verkaufsauftrag eröffnen
Fall 1:
OpenSellOrder(Lose);
Pause;
// if (Pattern < 0 && BuyOrder && !SellOrder && !FridayLastHour) variant = 2;
// Signal zum Verkauf, es gibt einen offenen Kaufauftrag, keinen Verkaufsauftrag
// es ist nicht die letzte Stunde des Freitags - wir drehen um
Fall 2:
OpenSellOrder(Lots + BuyLots);
Pause;
// if (Pattern < 0 && BuyOrder && !SellOrder && FridayLastHour) variant = 3;
// Signal zum Verkauf, es gibt einen offenen Kaufauftrag, keinen Verkaufsauftrag
// es ist die letzte Stunde des Freitags - schließen Sie den Kaufauftrag
Fall 3:
CloseBuyOrders();
Pause;
// if (Pattern > 0 && !SellOrder && !BuyOrder && !FridayLastHour) variant = 4;
// Kaufsignal, kein Auftrag ist offen und es ist nicht die letzte Stunde des Freitags
// Kaufauftrag eröffnen
Fall 4:
OpenBuyOrder(Lose);
Pause;
// if (Pattern > 0 && SellOrder && !BuyOrder && !FridayLastHour) variant = 5;
// Kaufsignal, es liegt eine offene Verkaufsorder vor, keine Kauforder
// es ist nicht die letzte Stunde des Freitags - wir drehen um
Fall 5:
OpenBuyOrder(Lots + SellLots);
Pause;
// if (Pattern > 0 && SellOrder && !BuyOrder && FridayLastHour) variant = 6;
// Kaufsignal, es liegt eine offene Verkaufsorder vor, keine Kauforder
// es ist die letzte Stunde des Freitags - schließen Sie den Verkaufsauftrag
Fall 6:
CloseSellOrders();
Pause;
case 7:
// if (SellOrder && BuyOrder) variant = 7;
// have an open cross order
if (WaitBeforeTransaction(WaitSeconds) == 1) // pause between requests
{
if (LastBuyLots <= LastSellLots)
OrderCloseBy( BuyTicket, SellTicket);
else
OrderCloseBy( SellTicket, BuyTicket);
}
break
// in anderen Varianten nichts tun
Standard:
Pause;
}
}
Ich hoffe, Sie werden mit den Variablen zurechtkommen.
>> Viel Glück!