Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Frage zur Orderhistory! (http://www.expert-advisor.com/forum/showthread.php?t=3408)

Tycoon 13.01.14 19:50

Frage zur Orderhistory!
 
Guten Abend Leute,
ihr habt mir letztens Wunderbar geholfen. ..Danke nochmals dafür. Ich habe heute ne frage,
wie ich eine Anfrage Starte um nach geiner Verlustserie von bsp. 5 trades die Lotgröße um die hälfte zu verringern. Um dann wieder wenns gut läuft, wieder mit voller Größe zu fahren. Sehe in den englischsprachigen Foren bei den Codes nicht so richtig durch. ..und wollte eigentlich nur was Programmieren was ich auch verstehe.
Danke euch im voraus. ..

fxdaytrader 13.01.14 20:19

F9 drücken, andere lotgröße eingeben, order senden ...

Soll das für einen EA sein hänge ihn hier mit dran und ggf. baut Dir jemand eine entsprechende Funktion ein ...

Und wenn man richtig sucht dann findet sich auch vieles -> https://www.google.de/#q=get+last+tr...rofit+%2B+mql4

fxdaytrader 13.01.14 20:26

Zitat:

Zitat von Tycoon (Beitrag 24657)
und wollte eigentlich nur was Programmieren was ich auch verstehe.

Dann muß man mal ein wenig googeln/die mql4-Dokumentation lesen (einzelne Befehle nachschlagen/Beispiel-Codes ansehen) ... :cool:

fxdaytrader 13.01.14 21:12

Hm, ich kann den obigen Beitrag nicht mehr editieren, deshalb ein neuer:

Auch die Forensuche kann ergiebig sein, bspw.
http://www.expert-advisor.com/forum/...-auslesen.html

traderdoc 14.01.14 11:04

In etwa so:
Code:

double GetLot()
 {
  int cnt=0;
  double profit;
  int ls = 1;
  double lotmod = Lot; //Lot - initiale LotSize
  if (MarketInfo(Symbol(), MODE_LOTSTEP) == 0.01) ls = 2;
 
  for(i=OrdersHistoryTotal(); i >=0;i--)
    {
    if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      {
        if (OrderSymbol() == Symbol())
          {
            profit = OrderProfit() + OrderSwap() + OrderCommision();
            if (profit < 0) cnt++;
                else break;
            if (cnt == 5)
              {
                lotmode = NormalizeDouble(Lot/2, ls);
                return(lotmod);
              }
          }
      }
    }
  return(lotmod);
 }

traderdoc

Tycoon 14.01.14 21:22

Der Code ist Super....Prima Danke. :rolleyes:

traderdoc 14.01.14 23:32

Da ich nicht mehr editieren kann:

for(i=OrdersHistoryTotal(); i >=0;i--)

muß korrekterweise lauten:

for(int i=OrdersHistoryTotal(); i >=0;i--) oder i wird in der Funktion vorher deklariert!

traderdoc

Tycoon 15.01.14 09:49

Ja das mit dem deklarieren habe ich gesehen..wie mache aber dann den Befehl in der
Ordersend Funktion das jeweils mit vollem Lot oder nur mit halber Größe die Order geöffnet
wird? Hatte jetzt jeweils in meiner Logik nach der History abgefragt ob Profit >0 ...dann
Ordersend (..., Lots....) oder Profit <0 dann Ordersend (..., Lots/2,..).Irgendwie macht er jetzt garnichts mehr. :o

traderdoc 15.01.14 12:16

Als externe Variable müßte stehen:

extern double Lot = 0.1;

Irgendwo im Programm, wo die Lotzahl abgefragt werden soll, steht dann

lot = GetLot(); //Achtung auf die Schreibweise von lot! und vorher deklarieren mit double

Und dann wird in die Funktion

OrderSend() an der richtigen Stelle die Variable lot eingefügt.
Und auch auf die Variablenbezeichnungen achten. Wenn bei Dir Lots steht, dann mußt Du meinen Code mit dem s anpassen, oder Du passt Deine externe Variable an den Bezeichner Lot an!
Sonst läuft nix!

Fertig!

traderdoc

traderdoc 15.01.14 16:18

So nun nochmal den Code ohne Fehlerchen:

Code:

double GetLot()
 {
  int cnt=0;
  double profit;
  int ls = 1;
  double lotmod = Lot; //Lot - initiale LotSize
  if (MarketInfo(Symbol(), MODE_LOTSTEP) == 0.01) ls = 2;
 
  for(int i=OrdersHistoryTotal(); i >=0;i--)
    {
    if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      {
        if (OrderSymbol() == Symbol())
          {
            profit = OrderProfit() + OrderSwap() + OrderCommision();
            if (profit < 0) cnt++;
                else break;
            if (cnt == 5)
              {
                lotmod = NormalizeDouble(Lot/2, ls);
                return(lotmod);
              }
          }
      }
    }
  return(lotmod);
 }

traderdoc


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

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum