|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Anzahl offener Order für EIN Symbol
Hi Leute, ich stehe gerade etwas auf dem Schlauch
... ich möchte alle offenen Orders für ein Symbol (nicht für alle Symbole) ermitteln, zB alle offenen bei EURUSD, ohne dass offene Orders bei zB EURCHF mitgezählt werden (also nicht OrdersTotal() ).. ich habe dazu auch schon eine Funktion (gbalube von TraderDoc gepostet) gefunden, die ich etwas abgewandelt habe: int CheckOrders() { int Anzahl = _maxOrders; // Anzahl der maximal offenen Orders int AnzOrder=0; for (int i= OrdersTotal()-1; i>=Anzahl; i--) { if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; if (OrderSymbol() == Symbol()) { AnzOrder++; } } return(AnzOrder); } ...diese Funktion gibt bei Aufruf mit if (CheckOrders()< _maxOrders) ... leider nicht die Anzahl der offenen Positionen zurück... bei Print()...sowohl vor als auch nach dem Eröffnen der 1. Position erfolgt jeweils Rückgabe von 0 .. Ich möchte die Anzahl der maximal offenen Positionen auf 3 begrenzen, d.h. wenn 3 erreicht, nix neues senden Wo liegt der Fehler?? Danke |
|
|||
Zitat:
int CountOrders(){ int _CountOrd; _CountOrd=0; for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol())_CountOrd++; } return(_CountOrd); } |
|
|||
Lösung gefunden...danke
Hi...
habe folgene Lösung gefunden (falls jemand mal dasselbe Problem hat): als Function: int CheckOrders(string strSymbol) { int AnzOrder=0; for (int i= OrdersTotal()-1; i>=0; i--) { if (!OrderSelect(i, SELECT_BY_POS)) continue; if (OrderSymbol() == strSymbol) AnzOrder++; } return(AnzOrder); } und Aufruf mit: if (CheckOrders(Symbol())<= _maxOrders) .....usw schönen Abend noch |
|
|||
Zitat:
....jetzt ein ganz anderes Problem: de EA öffnet, abhängig von unterschiedlichen Bedingungen nacheinander möglicherweise mehrere Trades. Z.B. öffnet er zuerst Buy , dann Sell , dann Buy oder Buy, Buy, Sell etc. Nun möchte ich erreichen, dass er die zeitlich erste Order zB mit einem TrailStopLoss von 10 und die zeitlichen danach liegenden Ordes im Chart nur noch mit TrailStopLoss 6 heranzieht Da unterschiedliche Konstellationen der geöffneten Orders auftreten können, finde ich keine richtige Lösung dafür. Hat jemand vielleicht einen Lösungs-Ansatz?.... danke :-) |
|
|||
Code:
void CheckOrders(string strSymbol) { int count = 0; for (int = OrdersTotal()-1; i >= 0; i--) { if (!OrderSelect(i, SELECT_BY_POS)) continue; if (OrderSymbol() == strSymbol) { count++; if (count == 1) Trailing(OrderTicketNumber(), OrderType(), 10); else Trailing(OrderTicketNumber(), OrderType(), 6); } } }
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Sorry, da auf meinem iPad der Korrekturbutton nicht sichtbar ist, sollte die erste for-Zeile natürlich lauten:
for (int i = OrdersTotal()-1; i >= 0; i--) { traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Zitat:
so in der Art sieht mein Code auch aus... die Anzahl der offenen Trades lese ich aus und packe sie in eine Schleife die solange läuft wie die Anzahl der offenen Orders des Symbols grösser als 0 ist und momentan so aussieht: while(CheckOrders(Symbol())>0) {..... if (_SellTicket>0) ==>soll vorhandenen Sell prüfen ==> hier folgen bestimmte Bedingungen ... dann soll im Prinzip die Unterscheidung erfolgen if (i>1) { if ( !OrderModify( _SellTicket, _SellOpenPrice, NormalizeDouble( Bid + Trailingstop_2*MyPoint, Digits ),_SellTakeProfit, 0 ) ) { Alert( "OrderModify Error StopLoss-Trail Sell auf: ",Symbol()," ",_SellTicket, "#: ", GetLastError() ); //return(-1); } } if(i==1) { // Nachziehen Stoploss if ( !OrderModify( _SellTicket, _SellOpenPrice, NormalizeDouble( Bid + TrailingStop*MyPoint, Digits ),_SellTakeProfit, 0 ) ) { Alert( "OrderModify Error StopLoss-Trail Sell auf: ",Symbol()," ",_SellTicket, "#: ", GetLastError() ); //return(-1); } } suche gerade noch nach einer Lösung dafür, wie ich die Ordernummer/MAgicnummer der offenen Trades mitübergeben kann oder wie löst man das am besten (über i ja nicht, weil dieses nicht übergeben wird aus CheckOrders() danke für eure Mühe |
Lesezeichen |
Stichworte |
mql4, offene order, programmierung, programmierung metatrader, programmierung mql4, symbol order |
|
|