Frage für Kenner - Seite 13

 

Ja, - ich denke schon! Vielen Dank, TheXpert!

Ich werde es ausprobieren!

 
Liebe Experten, bitte helfen Sie mir, die Funktion OrderCloseBy() zu verstehen. Ich bin völlig verwirrt. Ich habe einen Expert Advisor, der Positionen nach umgekehrten Bedingungen öffnet und schließt. Das heißt, die Bedingungen OPEN BUY und CLOSE SELL sind die gleichen, ebenso wie OPEN SELL und CLOSE BUY, was bedeutet, dass direkt nach dem Ausstieg aus einer Position zum gleichen Preis eine Position in der entgegengesetzten Richtung mit der gleichen Größe eröffnet wird. Also beschloss ich zu versuchen, OrderClose() zu ersetzen, indem ich eine Position in der entgegengesetzten Richtung mit doppeltem Volumen eröffnete und dann die entgegengesetzten Aufträge mit OrderCloseBy() schloss. Das heißt, es hätte derselbe Algorithmus angewandt werden müssen, aber er hätte einen Spread pro Handel eingespart, aber der Tester hat ein ganz anderes Ergebnis gezeigt. Ich kann mich nicht entscheiden, ob ich den Code falsch geschrieben habe oder meine Idee falsch verstanden habe... Ich werde Ihnen für Erklärungen sehr dankbar sein...
 
Erkundigen Sie sich zunächst beim technischen Support Ihres Maklerunternehmens, ob diese Funktion von Ihrem Terminal unterstützt wird. Nicht alle Maklerhäuser erlauben die Funktion OrderCloseBy().
 
In der Demo wird OrderCloseBy() unterstützt.
 

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.

 
Kurz gesagt, der Spread von 1+1 wird kompensiert und die verbleibende 1 ist der normale Handelsspread.
 
https://book.mql4.com/ru/trading/orderclose - hier finden Sie eine Beschreibung der Funktion OrderCloseBy(). Ich habe versucht, das Gleiche mit der Demo zu tun - es reduziert die Streuung wirklich um einiges. Aber es funktioniert immer noch nicht auf Expert Advisor... Ich bin so verwirrt...
 
Dmirtiy писал(а) >>
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!

Grund der Beschwerde: