Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4978
Beiträge: 43259
Benutzer: 7.222
Aktive Benutzer: 75
Links: 84
Wir begrüßen unseren neuesten Benutzer: AlbertZiz
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einer Woche
- AlbertZiz
vor einer Woche
- michak
vor 2 Wochen
- Amateur
vor 2 Wochen
- infos1982
vor 2 Wochen
- Thomas75

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

Empfehlungen

Like Tree6Likes
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 02.06.13
Premium Mitglied
 
Registriert seit: Jun 2013
Beiträge: 364
Ca$hDigger befindet sich auf einem aufstrebenden Ast
Question Wie die letzten Trades auslesen?

Hallo,

mit welchem Code kann ich denn die letzten Orderergebnisse die schon geschlossen sind auslesen? Sozusagen EA Zugriff auf die Tradehistory. Will den Gewinn bzw Verlust der letzten x Orders verwenden.

LG

Ca$hDigger
  #2 (permalink)  
Alt 02.06.13
Mitglied
 
Registriert seit: Jan 2012
Beiträge: 142
Hoschie befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Ca$hDigger Beitrag anzeigen
Hallo,

mit welchem Code kann ich denn die letzten Orderergebnisse die schon geschlossen sind auslesen? Sozusagen EA Zugriff auf die Tradehistory. Will den Gewinn bzw Verlust der letzten x Orders verwenden.

LG

Ca$hDigger
Hoi,

versuch es mal so:

Code:
...
   int nTickets = GetHistoryOrderByCloseTime();
    if (nTickets == 0) int   nInARow = 0;
    else{                   nInARow = 0;
        OrderSelect(nTickets, SELECT_BY_TICKET);
        double  lastProfit = OrderProfit() + OrderSwap() + OrderCommission();
        for (int iPos = 1; iPos < nTickets; iPos++){
            OrderSelect(iPos, SELECT_BY_TICKET);
            double  prevProfit = OrderProfit() + OrderSwap() + OrderCommission();
            if (prevProfit * lastProfit < 0)    break;     
            nInARow++;
        }
    }
    if (lastProfit < 0) string last="Verluste";   
    else 
    {
    Print("Letzter Gewinn",lastProfit);
    last = "Gewinne";
    }
    Print("G/V:",last,"in Zeile:",nInARow);
...
//entscheidende Methode
int GetHistoryOrderByCloseTime( int asc=1){   // Rückwärts
    int nTickets = 0;
    int tickets[100];
        for(int iPos=OrdersHistoryTotal()-1; iPos >= 0; iPos--) if (
        OrderSelect(iPos, SELECT_BY_POS, MODE_HISTORY)  
    &&  OrderMagicNumber()  == Magic            
    &&  OrderSymbol()       == Symbol()               
    
    ){
        int nextTicket = OrderTicket(); datetime nextOCT = OrderCloseTime();
        ArrayResize(tickets, nTickets+1);
        for (int iTicket = nTickets; iTicket > 0; iTicket--){
            int         prevTicket  = tickets[iTicket-1];
            OrderSelect(prevTicket, SELECT_BY_TICKET);
            datetime    prevOCT     = OrderCloseTime();
            if ((prevOCT - nextOCT) * asc <= 0) break;
            tickets[iTicket] = prevTicket;
        }
        nTickets++;     tickets[iTicket] = nextTicket;           
    }
    return(nTickets);
}
Ca$hDigger likes this.
  #3 (permalink)  
Alt 02.06.13
Premium Mitglied
 
Registriert seit: Jun 2013
Beiträge: 364
Ca$hDigger befindet sich auf einem aufstrebenden Ast
Question

Vielen Dank schon mal! Ich kann noch nicht ganz alles nachvollziehen mein MQL-Skill ist dafür noch nicht ausreichend...
Als Beispiel man hat 10 Variablen in denen als Betrag immer die aktuellen letzten 10 Tradeergebnisse stehen sollen. Wie kann ich konkret dafür den Code nutzen? Habe noch nicht ganz verstanden, ob mit dem Code nur der letzte Trade oder mehrere ausgewählt werden können...

LG
  #4 (permalink)  
Alt 03.06.13
Mitglied
 
Registriert seit: Jan 2012
Beiträge: 142
Hoschie befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Ca$hDigger Beitrag anzeigen
Vielen Dank schon mal! Ich kann noch nicht ganz alles nachvollziehen mein MQL-Skill ist dafür noch nicht ausreichend...
Als Beispiel man hat 10 Variablen in denen als Betrag immer die aktuellen letzten 10 Tradeergebnisse stehen sollen. Wie kann ich konkret dafür den Code nutzen? Habe noch nicht ganz verstanden, ob mit dem Code nur der letzte Trade oder mehrere ausgewählt werden können...

LG
Du musst in der OrderHistorie suchen:

Hier mal ein CodeSnippet.
Code:
int hstTotal = 10; // Nur Beispiel von 10 Trades in der Historie
int HistoryOrderType; 
  int HistoryOrderTicket; 
  int HistoryOrderCloseTime;
  double HistoryOrderClosePrice;
  int HistoryOrderOpenTime;
  double HistoryOrderOpenPrice;
  double HistoryOrderOpenProfit;
  double HistoryOrderOpenStopLoss;
  string OrderName;
  for(i=0;i<hstTotal;i++)
    {
     //---- check selection result
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
       {
        Print("Access to history failed with error (",GetLastError(),")");
        break;
       }
     HistoryOrderType = OrderType();
     if (OrderSymbol() == Symbol())
     {
         HistoryOrderCloseTime=OrderCloseTime();
         HistoryOrderClosePrice=OrderClosePrice();
         HistoryOrderOpenTime=OrderOpenTime();
         HistoryOrderOpenPrice=OrderOpenPrice();
         HistoryOrderOpenProfit=OrderProfit();
         HistoryOrderOpenStopLoss=OrderStopLoss();
         HistoryOrderTicket=OrderTicket();
         OrderName=DoubleToStr(HistoryOrderTicket,0)+" "+TimeToStr(HistoryOrderOpenTime)+" "+DoubleToStr(HistoryOrderOpenPrice,4);
          if(!ObjectCreate(DoubleToStr(HistoryOrderTicket,0), OBJ_TEXT, 0, HistoryOrderOpenTime, (HistoryOrderOpenPrice+HistoryOrderOpenStopLoss)/2))
          {
            Print("error: can't create text_object! code #",GetLastError());
            return(0);
          }
         
         ObjectSetText(DoubleToStr(HistoryOrderTicket,0),OrderName,10,"Times New Roman", Yellow);
        if (HistoryOrderType == OP_BUY)
        {
         Print("Order ",OrderName,": BUY t/p ",HistoryOrderOpenProfit," s/l ",HistoryOrderOpenStopLoss);
         SetArrow(HistoryOrderOpenTime,HistoryOrderOpenPrice,233,Blue);  
         SetArrow(HistoryOrderOpenTime,HistoryOrderOpenPrice + HistoryOrderOpenProfit * Point,177,Blue);
         SetArrow(HistoryOrderOpenTime,HistoryOrderOpenStopLoss,251,Yellow);
         if (HistoryOrderClosePrice >= HistoryOrderOpenProfit) 
            SetArrow(HistoryOrderCloseTime,HistoryOrderClosePrice,252,Blue);  
         if (HistoryOrderClosePrice <= HistoryOrderOpenStopLoss) 
         {
            if (HistoryOrderClosePrice <= HistoryOrderOpenPrice)
            SetArrow(HistoryOrderCloseTime,HistoryOrderClosePrice,78,Yellow);                
            if (HistoryOrderClosePrice > HistoryOrderOpenPrice)
            SetArrow(HistoryOrderCloseTime,HistoryOrderClosePrice,254,Blue);                          
         }   
        }
        if (HistoryOrderType == OP_BUYSTOP)
        {
         Print("Order ",OrderName,": BUYSTOP t/p ",HistoryOrderOpenProfit," s/l ",HistoryOrderOpenStopLoss);
         SetArrow(HistoryOrderOpenTime,HistoryOrderOpenPrice,228,Blue);  
         SetArrow(HistoryOrderOpenTime,HistoryOrderOpenPrice + HistoryOrderOpenProfit * Point,177,Blue);           
         SetArrow(HistoryOrderOpenTime,HistoryOrderOpenStopLoss,251,Yellow);
         if (HistoryOrderClosePrice >= HistoryOrderOpenProfit) 
            SetArrow(HistoryOrderCloseTime,HistoryOrderClosePrice,252,Blue);  
         if (HistoryOrderClosePrice <= HistoryOrderOpenStopLoss) 
         {
            if (HistoryOrderClosePrice <= HistoryOrderOpenPrice)
            SetArrow(HistoryOrderCloseTime,HistoryOrderClosePrice,78,Yellow);                
            if (HistoryOrderClosePrice > HistoryOrderOpenPrice)
            SetArrow(HistoryOrderCloseTime,HistoryOrderClosePrice,254,Blue);                          
         }   
        }
        if (HistoryOrderType == OP_BUYLIMIT)
        {
         Print("Order ",OrderName,": BUYLIMIT t/p ",HistoryOrderOpenProfit," s/l ",HistoryOrderOpenStopLoss);
         SetArrow(HistoryOrderOpenTime,HistoryOrderOpenPrice,200,Blue);  
         SetArrow(HistoryOrderOpenTime,HistoryOrderOpenPrice + HistoryOrderOpenProfit * Point,177,Blue);           
         SetArrow(HistoryOrderOpenTime,HistoryOrderOpenStopLoss,251,Yellow);
         if (HistoryOrderClosePrice >= HistoryOrderOpenProfit) 
            SetArrow(HistoryOrderCloseTime,HistoryOrderClosePrice,252,Blue);  
         if (HistoryOrderClosePrice <= HistoryOrderOpenStopLoss) 
         {
            if (HistoryOrderClosePrice <= HistoryOrderOpenPrice)
            SetArrow(HistoryOrderCloseTime,HistoryOrderClosePrice,78,Yellow);                
            if (HistoryOrderClosePrice > HistoryOrderOpenPrice)
            SetArrow(HistoryOrderCloseTime,HistoryOrderClosePrice,254,Blue);                          
         }   
        }
     
        if (HistoryOrderType == OP_SELL)
        {
         Print("Order ",OrderName,": SELL t/p ",HistoryOrderOpenProfit," s/l ",HistoryOrderOpenStopLoss);
         SetArrow(HistoryOrderOpenTime,HistoryOrderOpenPrice,234,Red);  
         SetArrow(HistoryOrderOpenTime,HistoryOrderOpenPrice - HistoryOrderOpenProfit * Point,177,Red);           
         SetArrow(HistoryOrderOpenTime,HistoryOrderOpenStopLoss,251,Yellow);
         if (HistoryOrderClosePrice <= HistoryOrderOpenProfit) 
            SetArrow(HistoryOrderCloseTime,HistoryOrderClosePrice,252,Red);  
         if (HistoryOrderClosePrice >= HistoryOrderOpenStopLoss) 
         {
            if (HistoryOrderClosePrice >= HistoryOrderOpenPrice)
            SetArrow(HistoryOrderCloseTime,HistoryOrderClosePrice,78,Yellow);                
            if (HistoryOrderClosePrice < HistoryOrderOpenPrice)
            SetArrow(HistoryOrderCloseTime,HistoryOrderClosePrice,254,Red);                          
         }   
        }
        if (HistoryOrderType == OP_SELLSTOP)
        {
         Print("Order ",OrderName,": SELLSTOP t/p ",HistoryOrderOpenProfit," s/l ",HistoryOrderOpenStopLoss);
         SetArrow(HistoryOrderOpenTime,HistoryOrderOpenPrice,230,Red);  
         SetArrow(HistoryOrderOpenTime,HistoryOrderOpenPrice - HistoryOrderOpenProfit * Point,177,Red);           
         SetArrow(HistoryOrderOpenTime,HistoryOrderOpenStopLoss,251,Yellow);
         if (HistoryOrderClosePrice <= HistoryOrderOpenProfit) 
            SetArrow(HistoryOrderCloseTime,HistoryOrderClosePrice,252,Red);  
         if (HistoryOrderClosePrice >= HistoryOrderOpenStopLoss) 
         {
            if (HistoryOrderClosePrice >= HistoryOrderOpenPrice)
            SetArrow(HistoryOrderCloseTime,HistoryOrderClosePrice,78,Yellow);                
            if (HistoryOrderClosePrice < HistoryOrderOpenPrice)
            SetArrow(HistoryOrderCloseTime,HistoryOrderClosePrice,254,Red);                          
         }   
        }
        if (HistoryOrderType == OP_SELLLIMIT)
        {
         Print("Order ",OrderName,": SELLIMIT t/p ",HistoryOrderOpenProfit," s/l ",HistoryOrderOpenStopLoss);
         SetArrow(HistoryOrderOpenTime,HistoryOrderOpenPrice,202,Red);  
         SetArrow(HistoryOrderOpenTime,HistoryOrderOpenPrice - HistoryOrderOpenProfit * Point,177,Red);           
         SetArrow(HistoryOrderOpenTime,HistoryOrderOpenStopLoss,251,Yellow);
         if (HistoryOrderClosePrice <= HistoryOrderOpenProfit) 
            SetArrow(HistoryOrderCloseTime,HistoryOrderClosePrice,252,Red);  
         if (HistoryOrderClosePrice >= HistoryOrderOpenStopLoss) 
         {
            if (HistoryOrderClosePrice >= HistoryOrderOpenPrice)
            SetArrow(HistoryOrderCloseTime,HistoryOrderClosePrice,78,Yellow);                
            if (HistoryOrderClosePrice < HistoryOrderOpenPrice)
            SetArrow(HistoryOrderCloseTime,HistoryOrderClosePrice,254,Red);                          
         }   
        }
     
     }   
     {
     
     
     }
    }
Carpe Diem,
Hoschie
Ca$hDigger likes this.
  #5 (permalink)  
Alt 03.06.13
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

@Ca$hDigger
"Will den Gewinn bzw Verlust der letzten x Orders verwenden."

Der arme Mensch will doch nur den Gewinn bzw. Verlust von einer bestimmten Anzahl geschlossener Trades wissen, also gebt ihm doch nicht solche riesigen Brocken.

Der Code reicht doch völlig aus und funktioniert dazu auch noch sofort.

Code:
//ein Beispiel für die letzten 10 Trades in der Historie
  double Profit = 0;
  double Verlust = 0;
  double x;
  for (i = 0; i < 10; i++) {
     OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
     x = OrderProfit() + OrderSwap() + OrderCommission();
     if (x >= 0) Profit += x;
        else  Verlust += x;
  }
Sollen es mehr Trades sein, dann statt 10 eine andere Zahl oder als Variable deklarieren - fertig!

traderdoc
Ca$hDigger likes this.
  #6 (permalink)  
Alt 01.08.13
Premium Mitglied
 
Registriert seit: Jun 2013
Beiträge: 364
Ca$hDigger befindet sich auf einem aufstrebenden Ast
Standard

@traderdoc
Habe ein Problem.
Hab zum Code noch Variable i hinzugefügt weil sonst variable nicht definiert war und definiere statt Profit und Verlust einfach nur die Summe also noch vereinfachter.
Will den Code nun folgendermaßen nutzen:

Code:
double summe = 0; //als globale variable

if(test)
{
  double x;
  double i;
  for (i = 0; i < 10; i++) 
  {
     OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
     x = OrderProfit() + OrderSwap() + OrderCommission();
     summe += x;
     Print("summe=", summe);
  }
Das Problem ist nun das riesige negative Zahlen als Summe entstehen statt der korrekten Addierung der History. Im Print also im Journal sieht man das dann zB -173022.4788 oder ähnliche unkorrekte Werte

LG C$D
  #7 (permalink)  
Alt 01.08.13
Premium Mitglied
 
Registriert seit: Jun 2013
Beiträge: 364
Ca$hDigger befindet sich auf einem aufstrebenden Ast
Question

verstehe nicht woher diese riesen negativen Werte kommen. Lotgröße usw hab ich alles überprüft beim Gewinn kommen maximale Werte zwischen -13€ bis 13€ raus also das x10 dann höchstens +-130€. Wo liegt der Fehler
  #8 (permalink)  
Alt 01.08.13
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Gut, jetzt hatte ich vorausgesetzt, dass Du die Variable i vorher!!
mit
int i;
deklarierst und nicht mit double!!!
Das geht natürlich auch in
for (int i;...........)

traderdoc
Ca$hDigger likes this.
  #9 (permalink)  
Alt 01.08.13
Premium Mitglied
 
Registriert seit: Jun 2013
Beiträge: 364
Ca$hDigger befindet sich auf einem aufstrebenden Ast
Standard

Danke das Problem war double

Jetzt noch eine wichtige Sache:
Es werden immer dieselben ersten 10 Werte des Tradeverlaufs ausgelesen und nicht die letzten 10. Also sprich die ersten 10 Orders die geöffnet wurden werden ausnahmslos ausgelesen, zB. nach 100 Orders werden immer nur die ersten 10 (1,2,3,4,5,6,7,8,9,10) ausgelesen statt die letzten 10 Orders (99, 98, 97, 96, 95, 94 ,93, 92, 91, 90)
Wie kann ich das noch fixen?

Danke und Gruß C$D
  #10 (permalink)  
Alt 01.08.13
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Code:
double summe = 0; //als globale variable

if(test)
{
  double x;
  int i;
  for (i = OrdersHistoryTotal() - 1 ; i > OrdersHistoryTotal() - 10; i--) 
  {
     OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
     x = OrderProfit() + OrderSwap() + OrderCommission();
     summe += x;
     Print("summe=", summe);
  }
traderdoc
Ca$hDigger likes this.
Thema geschlossen

Lesezeichen

Stichworte
mql4, programmierung, programmierung metatrader, tradehistory, trades auslesen

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 18:59 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.
-----------------------------------------------------------------------------------------------------------------------------