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.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3822
Beiträge: 36901
Benutzer: 6.068
Aktive Benutzer: 492
Links: 80
Wir begrüßen unseren neuesten Benutzer: supadog
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 14 Stunden
- supadog
vor einem Tag
- POCJonah7
vor einem Tag
- flowi88
vor einem Tag
- dealtycoon
vor einem Tag
- VicenteWuc

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

Empfehlungen

Werbung

Like Tree6Likes
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 02.06.13
Mitglied
 
Registriert seit: Jun 2013
Beiträge: 220
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
Mitglied
 
Registriert seit: Jun 2013
Beiträge: 220
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: 1.873
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
Mitglied
 
Registriert seit: Jun 2013
Beiträge: 220
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
Mitglied
 
Registriert seit: Jun 2013
Beiträge: 220
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: 1.873
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
Mitglied
 
Registriert seit: Jun 2013
Beiträge: 220
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: 1.873
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 +1. Es ist jetzt 13:36 Uhr.



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