Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4
Startseite Registrieren Hilfe Community Kalender Heutige Beiträge Suchen

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4978
Beiträge: 43264
Benutzer: 7.223
Aktive Benutzer: 75
Links: 84
Wir begrüßen unseren neuesten Benutzer: Sundaytrader
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 6 Tagen
- Sundaytrad...
vor einer Woche
- TS_6
vor einer Woche
- Mane
vor 3 Wochen
- AlbertZiz
vor 3 Wochen
- michak

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 438
Gesamt: 438
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 13.02.17
Neues Mitglied
 
Registriert seit: Dec 2016
Beiträge: 29
Ado1964 befindet sich auf einem aufstrebenden Ast
Standard 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
  #2 (permalink)  
Alt 13.02.17
Mitglied
 
Registriert seit: Feb 2017
Beiträge: 79
pascalper befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Ado1964 Beitrag anzeigen
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
Die schnelle Lösung, kann mit OrderMagicNumber() erweitert werden

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);
}
  #3 (permalink)  
Alt 13.02.17
Neues Mitglied
 
Registriert seit: Dec 2016
Beiträge: 29
Ado1964 befindet sich auf einem aufstrebenden Ast
Standard 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
  #4 (permalink)  
Alt 13.02.17
Neues Mitglied
 
Registriert seit: Dec 2016
Beiträge: 29
Ado1964 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von pascalper Beitrag anzeigen
Die schnelle Lösung, kann mit OrderMagicNumber() erweitert werden

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);
}
Vielen Dank Scalper :-))

....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 :-)
  #5 (permalink)  
Alt 14.02.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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);
      }
   }
}
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #6 (permalink)  
Alt 14.02.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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.
  #7 (permalink)  
Alt 15.02.17
Neues Mitglied
 
Registriert seit: Dec 2016
Beiträge: 29
Ado1964 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
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
....danke DOC :-)

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
Thema geschlossen

Lesezeichen

Stichworte
mql4, offene order, programmierung, programmierung metatrader, programmierung mql4, symbol order


Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +2. Es ist jetzt 16:43 Uhr.





Suchmaschine - Reisen - Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------