Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 13.05.16
oli44 oli44 ist offline
Neues Mitglied
 
Registriert seit: Nov 2012
Beiträge: 17
oli44 befindet sich auf einem aufstrebenden Ast
Standard MT4 Order Pool funktioniert nicht richtig!?

Hallo Zusammen,

bin grad der Verzweiflung nahe und bräuchte eine Erklärung die mein Weltbild in MQL4 wieder gerade rückt! Zu meinem EA (eigentlich nichts kompliziertes):

Er eröffnet 6 Währungspaare welche zusämmenhängend permanent auf Gewinn / Verlust überprüft werden sollen:

EURUSD / GBPUSD / USDCHF / USDCAD / NZDUSD / AUDUSD
0 1 2 3 4 5

Dabei werden folgende korrelierende Paare geprüft:

(EURUSD/GBPUSD) , (USDCHF/USDCAD) , (NZDUSD/AUDUSD)

Ein solches zusammenhängendes Paar nenne ich einen "Basket" (Korb).

Sollte z.B. der Basket (USDCHF/USDCAD) im Profit von x-Euro sein, so wird
das Paar USDCHF geschlossen und danach sofort wieder eröffnet. Weiters
wird dann auch das Paar USDCAD sofort geschlossen und dann wieder eröffnet. Also kurz gesagt: der Basket geschlossen und dann wieder eröffnet.

Sollte der Basket im Verlust von y-Euro sein, wird er wie auch oben beschrieben geschlossen.

Somit werden also ständig alle Basket´s überprüft.

Soweit zur Erklärung der Handelslogik. Die Umsetzung in MQL4 fand ich mittelts verschachtelter Schleifen nicht sonderlich schwierig. Die einzelnen Order werden mittels OrderSelect(Counter,SELECT_BY_POS) aus dem OrderPool selektiert.

Allerdings fiel mir bei einem Durchlauf auf, das mein EA die Baskets nicht wieder im richtigen Zusammenhang in den OrderPool aufnimmt, die Baskets werden demnach "auseinandergebrochen". Somit kann der EA diese dann nachfolgend nicht mehr korrekt überprüfen.

Anbei ein Auszug meines EA´s (Hauptteil der Handelslogik):

/////////// Begin of trading block /////////

// EA Trade logic ...


// Bevor Counter for-Schleife laufen darf muss geprüft werden, ob OrderCount > 0 && OrderCount = gerade ist
// Sonst haben wir keine Baskets, ein Basket besteht immer aus zwei Paaren
// Mathmod überprüft ob die Anzahl der Positionen geradzahlig ist (Division durch 2 = Rest 0) nur dann
// haben wir eine vollständige Anzahl von Baskets

if(OrdersTotal() >= 2 && MathMod(OrdersTotal(),2) == 0 && IsConnected() == true)
{
for(int Counter = 0; Counter <= OrdersTotal()-2; Counter+=2)
{
// Durchlaufe Orderpool und prüfe ob ein Basket im Profit (Profit >= CashWin) oder Verlust (Profit <= CashLoss) liegt

Selected = false;
while(Selected == false)
{
Selected = OrderSelect(Counter,SELECT_BY_POS);
}
OrderProfit_1 = OrderProfit() - ( OrderCommission() + OrderSwap() );

Selected = false;
while(Selected == false)
{
Selected = OrderSelect(Counter+1,SELECT_BY_POS);
}
OrderProfit_2 = OrderProfit() - ( OrderCommission() + OrderSwap() );

// Prüfe ob Basket im Profit (Profit >= CashWin) liegt

if(OrderProfit_1 + OrderProfit_2 >= CashWin || OrderProfit_1 + OrderProfit_2 <= CashLoss)
{
// Basket wird nun gecashed und danach sofort ein neues gleichwertiges Basket eröffnet
BasketCount++;
if(OrderProfit_1 + OrderProfit_2 >= CashWin) {WinBasketCount++;CashWin += 0.1;CashLoss += 0.1; if(CashLoss >= -0.1){CashLoss = -1.0;}} // Bei Gewinn ziehen wir unseren CashLoss (um x Cent) zusammen (max. bis -0.1 Cent)
if(OrderProfit_1 + OrderProfit_2 <= CashLoss) {LossBasketCount++;CashWin -= 0.1;CashLoss -= 0.1;} // Bei Verlust weiten wir unseren CashLoss (um x Cent) aus

Print("Counter by Cash = ",Counter);
Print("CashLoss = ",CashLoss);
Print("CashWin = ",CashWin);

for(int i = 1; i <= 2; i++)
{
Selected = false;
while(Selected == false)
{
Selected = OrderSelect(Counter,SELECT_BY_POS);
if(Selected == true) Print("Order Selected to close by Counter = ",Counter);
CurrencySymbol = OrderSymbol();
OrderTicketNumber = OrderTicket();
}

// Unterscheide nun ob Position eine buy oder sell Order ist
if(OrderType() == OP_BUY)
{
Closed = false;
while(Closed == false)
{
Closed = CloseBuyOrder(CurrencySymbol,OrderTicketNumber,Sli ppage);
}

if(Closed)
{
// Print("Order closed : ", CurrencySymbol);
// Neue identische buy Order wird eröffnet
Opened = false;
while(Opened == false)
{
Opened = OpenBuyOrder(CurrencySymbol,LotSize,Slippage,Magic Number);
}

// if(Opened) Print("Order opened : ", CurrencySymbol);
}
}

else if(OrderType() == OP_SELL)
{
Closed = false;
while(Closed == false)
{
Closed = CloseSellOrder(CurrencySymbol,OrderTicketNumber,Sl ippage);
}

if(Closed)
{
// Print("Order closed : ", CurrencySymbol);
// Neue identische sell Order wird eröffnet
Opened = false;
while(Opened == false)
{
Opened = OpenSellOrder(CurrencySymbol,LotSize,Slippage,Magi cNumber);
}

// if(Opened) Print("Order opened : ", CurrencySymbol);
}
}
}
// Counter wird um 2 reduziert, da nach löschen des Baskets die Indizes der neueren Order den Platz der gelöschten Order einnehmen (nachrutschen)
// Diese Position muss also erneut geprüft werden, ansonsten würden Baskets ausgelassen !
Counter -= 2;
}
}
}

/////////// End of trading block ///////////

Nun die Logdatei eines Programmlaufs:



0 04:19:35.202 Expert Correlation.Casher.06.05.2016 EURUSD,H4: loaded successfully
0 04:19:41.491 Correlation.Casher.06.05.2016 EURUSD,H4 inputs: RiskLimit=5000.0; CashWin=2.0; CashLoss=-2.0; LotSize=0.01; UseMessage=true; SendWaitTime=7200; Slippage=5; MagicNumber=123;
2 04:19:42.001 Correlation.Casher.06.05.2016 EURUSD,H4: open #88462415 sell 0.01 EURUSD at 1.13893 ok
2 04:19:42.412 Correlation.Casher.06.05.2016 EURUSD,H4: open #88462416 buy 0.01 GBPUSD at 1.44503 ok
2 04:19:42.622 Correlation.Casher.06.05.2016 EURUSD,H4: open #88462417 buy 0.01 USDCHF at 0.97397 ok
2 04:19:42.853 Correlation.Casher.06.05.2016 EURUSD,H4: open #88462418 sell 0.01 USDCAD at 1.29337 ok
2 04:19:43.123 Correlation.Casher.06.05.2016 EURUSD,H4: open #88462419 buy 0.01 NZDUSD at 0.68013 ok
2 04:19:43.383 Correlation.Casher.06.05.2016 EURUSD,H4: open #88462420 sell 0.01 AUDUSD at 0.73491 ok
0 04:19:43.383 Correlation.Casher.06.05.2016 EURUSD,H4: initialized
0 08:09:37.839 Correlation.Casher.06.05.2016 EURUSD,H4: Counter by Cash = 2
0 08:09:37.839 Correlation.Casher.06.05.2016 EURUSD,H4: CashLoss = -1.9
0 08:09:37.839 Correlation.Casher.06.05.2016 EURUSD,H4: CashWin = 2.1
0 08:09:37.839 Correlation.Casher.06.05.2016 EURUSD,H4: Order Selected to close by Counter = 2
2 08:09:38.329 Correlation.Casher.06.05.2016 EURUSD,H4: close #88462417 buy 0.01 USDCHF at 0.97397 at price 0.97332
2 08:09:38.630 Correlation.Casher.06.05.2016 EURUSD,H4: open #88468174 buy 0.01 USDCHF at 0.97351 ok
0 08:09:38.630 Correlation.Casher.06.05.2016 EURUSD,H4: Order Selected to close by Counter = 2
2 08:09:39.201 Correlation.Casher.06.05.2016 EURUSD,H4: close #88462418 sell 0.01 USDCAD at 1.29337 at price 1.28953
2 08:09:39.551 Correlation.Casher.06.05.2016 EURUSD,H4: open #88468175 sell 0.01 USDCAD at 1.28947 ok
0 09:04:10.635 Correlation.Casher.06.05.2016 EURUSD,H4: Counter by Cash = 4
0 09:04:10.635 Correlation.Casher.06.05.2016 EURUSD,H4: CashLoss = -2.0
0 09:04:10.635 Correlation.Casher.06.05.2016 EURUSD,H4: CashWin = 2.0
0 09:04:10.635 Correlation.Casher.06.05.2016 EURUSD,H4: Order Selected to close by Counter = 4
2 09:04:10.895 Correlation.Casher.06.05.2016 EURUSD,H4: close #88468174 buy 0.01 USDCHF at 0.97351 at price 0.97282
2 09:04:11.286 Correlation.Casher.06.05.2016 EURUSD,H4: open #88473926 buy 0.01 USDCHF at 0.97306 ok
0 09:04:11.286 Correlation.Casher.06.05.2016 EURUSD,H4: Order Selected to close by Counter = 4
2 09:04:11.646 Correlation.Casher.06.05.2016 EURUSD,H4: close #88468175 sell 0.01 USDCAD at 1.28947 at price 1.29133
2 09:04:11.867 Correlation.Casher.06.05.2016 EURUSD,H4: open #88473928 sell 0.01 USDCAD at 1.29115 ok
0 09:10:03.372 Correlation.Casher.06.05.2016 EURUSD,H4: Counter by Cash = 2
0 09:10:03.372 Correlation.Casher.06.05.2016 EURUSD,H4: CashLoss = -2.1
0 09:10:03.372 Correlation.Casher.06.05.2016 EURUSD,H4: CashWin = 1.9
0 09:10:03.372 Correlation.Casher.06.05.2016 EURUSD,H4: Order Selected to close by Counter = 2
2 09:10:03.903 Correlation.Casher.06.05.2016 EURUSD,H4: close #88462416 buy 0.01 GBPUSD at 1.44503 at price 1.44366
2 09:10:04.183 Correlation.Casher.06.05.2016 EURUSD,H4: open #88474791 buy 0.01 GBPUSD at 1.44393 ok
0 09:10:04.183 Correlation.Casher.06.05.2016 EURUSD,H4: Order Selected to close by Counter = 2
2 09:10:04.434 Correlation.Casher.06.05.2016 EURUSD,H4: close #88462419 buy 0.01 NZDUSD at 0.68013 at price 0.67906
2 09:10:05.465 Correlation.Casher.06.05.2016 EURUSD,H4: open #88474796 buy 0.01 NZDUSD at 0.67925 ok
0 09:54:01.936 Correlation.Casher.06.05.2016 EURUSD,H4: Counter by Cash = 2
0 09:54:01.936 Correlation.Casher.06.05.2016 EURUSD,H4: CashLoss = -2.2
0 09:54:01.936 Correlation.Casher.06.05.2016 EURUSD,H4: CashWin = 1.8
0 09:54:01.936 Correlation.Casher.06.05.2016 EURUSD,H4: Order Selected to close by Counter = 2
2 09:54:03.669 Correlation.Casher.06.05.2016 EURUSD,H4: close #88474791 buy 0.01 GBPUSD at 1.44393 at price 1.44172
2 09:54:06.252 Correlation.Casher.06.05.2016 EURUSD,H4: open #88482393 buy 0.01 GBPUSD at 1.44198 ok
0 09:54:06.252 Correlation.Casher.06.05.2016 EURUSD,H4: Order Selected to close by Counter = 2
2 09:54:07.174 Correlation.Casher.06.05.2016 EURUSD,H4: close #88474796 buy 0.01 NZDUSD at 0.67925 at price 0.67897
2 09:54:07.374 Correlation.Casher.06.05.2016 EURUSD,H4: open #88482397 buy 0.01 NZDUSD at 0.67914 ok
0 10:12:19.514 Correlation.Casher.06.05.2016 EURUSD,H4: Counter by Cash = 4
0 10:12:19.514 Correlation.Casher.06.05.2016 EURUSD,H4: CashLoss = -2.1
0 10:12:19.514 Correlation.Casher.06.05.2016 EURUSD,H4: CashWin = 1.9
0 10:12:19.514 Correlation.Casher.06.05.2016 EURUSD,H4: Order Selected to close by Counter = 4
2 10:12:20.726 Correlation.Casher.06.05.2016 EURUSD,H4: close #88482393 buy 0.01 GBPUSD at 1.44198 at price 1.44333
2 10:12:22.759 Correlation.Casher.06.05.2016 EURUSD,H4: open #88484788 buy 0.01 GBPUSD at 1.44352 ok
0 10:12:22.759 Correlation.Casher.06.05.2016 EURUSD,H4: Order Selected to close by Counter = 4
2 10:12:22.949 Correlation.Casher.06.05.2016 EURUSD,H4: close #88482397 buy 0.01 NZDUSD at 0.67914 at price 0.67988
2 10:12:24.351 Correlation.Casher.06.05.2016 EURUSD,H4: open #88484794 buy 0.01 NZDUSD at 0.68000 ok
0 10:20:25.874 Correlation.Casher.06.05.2016 EURUSD,H4: Counter by Cash = 4
0 10:20:25.874 Correlation.Casher.06.05.2016 EURUSD,H4: CashLoss = -2.2
0 10:20:25.874 Correlation.Casher.06.05.2016 EURUSD,H4: CashWin = 1.8
0 10:20:25.874 Correlation.Casher.06.05.2016 EURUSD,H4: Order Selected to close by Counter = 4
2 10:20:26.104 Correlation.Casher.06.05.2016 EURUSD,H4: close #88484788 buy 0.01 GBPUSD at 1.44352 at price 1.44238
2 10:20:26.605 Correlation.Casher.06.05.2016 EURUSD,H4: open #88485593 buy 0.01 GBPUSD at 1.44254 ok
0 10:20:26.605 Correlation.Casher.06.05.2016 EURUSD,H4: Order Selected to close by Counter = 4
2 10:20:27.706 Correlation.Casher.06.05.2016 EURUSD,H4: close #88484794 buy 0.01 NZDUSD at 0.68000 at price 0.67874
2 10:20:27.907 Correlation.Casher.06.05.2016 EURUSD,H4: open #88485597 buy 0.01 NZDUSD at 0.67886 ok
0 10:34:08.396 Correlation.Casher.06.05.2016 EURUSD,H4: Counter by Cash = 4
0 10:34:08.396 Correlation.Casher.06.05.2016 EURUSD,H4: CashLoss = -2.3
0 10:34:08.396 Correlation.Casher.06.05.2016 EURUSD,H4: CashWin = 1.7
0 10:34:08.396 Correlation.Casher.06.05.2016 EURUSD,H4: Order Selected to close by Counter = 4
2 10:34:09.438 Correlation.Casher.06.05.2016 EURUSD,H4: close #88485593 buy 0.01 GBPUSD at 1.44254 at price 1.44078
2 10:34:11.351 Correlation.Casher.06.05.2016 EURUSD,H4: open #88487328 buy 0.01 GBPUSD at 1.44106 ok
0 10:34:11.351 Correlation.Casher.06.05.2016 EURUSD,H4: Order Selected to close by Counter = 4
2 10:34:11.441 Correlation.Casher.06.05.2016 EURUSD,H4: close #88485597 buy 0.01 NZDUSD at 0.67886 at price 0.67803
2 10:34:12.703 Correlation.Casher.06.05.2016 EURUSD,H4: open #88487332 buy 0.01 NZDUSD at 0.67825 ok
0 11:28:47.642 Correlation.Casher.06.05.2016 EURUSD,H4: uninit reason 1
2 11:28:47.752 Correlation.Casher.06.05.2016 EURUSD,H4: close #88473926 buy 0.01 USDCHF at 0.97306 at price 0.97442
2 11:28:47.842 Correlation.Casher.06.05.2016 EURUSD,H4: close #88487328 buy 0.01 GBPUSD at 1.44106 at price 1.44036
2 11:28:47.972 Correlation.Casher.06.05.2016 EURUSD,H4: close #88487332 buy 0.01 NZDUSD at 0.67825 at price 0.67904
2 11:28:48.132 Correlation.Casher.06.05.2016 EURUSD,H4: close #88462420 sell 0.01 AUDUSD at 0.73491 at price 0.73489
2 11:28:48.253 Correlation.Casher.06.05.2016 EURUSD,H4: close #88462415 sell 0.01 EURUSD at 1.13893 at price 1.13916
2 11:28:48.393 Correlation.Casher.06.05.2016 EURUSD,H4: close #88473928 sell 0.01 USDCAD at 1.29115 at price 1.29179
0 11:28:48.403 Expert Correlation.Casher.06.05.2016 EURUSD,H4: removed

//////////////////////////////

Der Fehler tritt auf, als er zum ersten Mal das Paar GBPUSD im Index 2 löscht - dieses Paar
wurde zu Beginn nach dem EURUSD Paar eröffnet und müsste eigentlich den Index 1 haben ! Hat es aber nicht und das geht mir nicht in den Sinn - wie kann das sein ?! Wird der Inhalt des Index vom Broker übermittelt, sodas dieser evtl. nicht korrekt ist - falls ja würde es keinen Sinn machen mit diesem Befehl zu arbeiten.

Wäre für Eure Hilfe sehr dankbar - sorry aber die Einrückungen meines EA´s wurde hier beim reinkopieren nicht richtig dargestellt. Hoffe man kann ihn trotzdem einigermassen gut lesen.

Grüße

Oliver