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: 4973
Beiträge: 43248
Benutzer: 7.220
Aktive Benutzer: 82
Links: 84
Wir begrüßen unseren neuesten Benutzer: JosephTK
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 2 Stunden
- JosephTK
vor 2 Tagen
- Hopfen&Mal...
vor 2 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107

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

Empfehlungen

Like Tree1Likes
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 06.11.17
Neues Mitglied
 
Registriert seit: Feb 2017
Beiträge: 27
Elfenstein befindet sich auf einem aufstrebenden Ast
Standard Profit von mehreren zur gleichen Zeit geschlossenen Orders überwachen

Hallo, ich habe da eine kleine Programmierungsfrage:

Ich habe mir einen EA gebastelt. Ein EA der häufig mehrere Order zur gleichen Zeit schließt. Mal werden alle Order geschlossen, weil alle Order zusammengerechnet einen gewünschten TakeProfit erreicht haben und mal werden alle Order geschlossen, weil einer oder mehrere der laufenden Order in den StopLoss gelaufen sind. Und dieser Teil vom Code überwacht nach dem Schließen den Profit:

Code:
bool checkforlosses()
{
   int losses=0;
   int i;
   for(i=0; i<OrdersHistoryTotal(); i++)
   {
       OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
       if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber) continue;
       if(OrderProfit()<0) losses++;
       else                losses=0;
   }
   if(losses>0)  return(true);
   return(false);
}
Jetzt habe ich das Problem, dass mit diesem Code nur der Profit vom letzten geschlossenen Order überwacht wird, doch ich brauche das Ergebnis von dem Order-Haufen, der eben geschlossen wurde. Doch ich brauche das korrekte Ergebnis, denn anhand "if(checkforlosses())" kann ich dann wunderbar weitere Befehle ausführen oder eben nicht ausführen lassen. Z.B.:

Code:
if(checkforlosses())
      {
      if (lots < 2.20) lots += 0.10;
      }
      else
      {
      if (lots > 0.05) lots -= 0.05;
      }
Was kann man denn da machen?
  #2 (permalink)  
Alt 06.11.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Da muss sich Dein EA die Zeit merken, zu der alle Orders geschlossen wurden.
Und in der Funktion checkforlosses werden dann nur die geschlossenen Orders selektiert, welche zwischen dieser Zeit und der Zeit des Einsprunges in diese Funktion geschlossen wurden.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #3 (permalink)  
Alt 06.11.17
Neues Mitglied
 
Registriert seit: Feb 2017
Beiträge: 27
Elfenstein befindet sich auf einem aufstrebenden Ast
Standard

Die laufenden Order werden sowieso mit einem Count gezählt und "o_count" ist die Ausgabe für die laufende Order und beim Schließen wird "o_count" immer wieder zurückgesetzt. Könnte ich "o_count" z.B. so nutzen: "OrderSelect(o_count,SELECT_BY_POS,MODE_HISTOR Y);" sodass immer exakt anhand der Zahl von "o_count" rückblickend zusammengerechnet wird. Doch mit "OrderSelect(o_count,SELECT_BY_POS,MODE_HISTOR Y);" würde ja trotzdem immer nur der eine beachtet werden. Wie müsste der Code aussehen, sodass mehrere beachtet und zusammengerechnet werden?

Geändert von Elfenstein (06.11.17 um 19:34 Uhr)
  #4 (permalink)  
Alt 06.11.17
Gesperrter Benutzer
 
Registriert seit: Feb 2016
Ort: 2100 Österreich
Beiträge: 313
Kronenchakra befindet sich auf einem aufstrebenden Ast
Standard

Kurz drübergeschaut: nimm die Zeile
Code:
else losses=0;
Aus der for-Schleife raus und ich denke es wird funktionieren.
  #5 (permalink)  
Alt 06.11.17
Neues Mitglied
 
Registriert seit: Feb 2017
Beiträge: 27
Elfenstein befindet sich auf einem aufstrebenden Ast
Standard

Nein, das funktioniert auch nicht. Wie kann ich denn mehrere Order von der Historie selektieren?
  #6 (permalink)  
Alt 06.11.17
Gesperrter Benutzer
 
Registriert seit: Feb 2016
Ort: 2100 Österreich
Beiträge: 313
Kronenchakra befindet sich auf einem aufstrebenden Ast
Standard

Sorry ich versteh das ganze nicht wirklich.
Du zählst ja nur die Positionen die im Verlust waren und nicht den Verlust oder Profit.
Weiters gibt dir diese Funktion nur wahr oder falsch zurück.
Was willst du mit dem anfangen?
Ich klink mich da mal aus.
  #7 (permalink)  
Alt 06.11.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Ich kann Dir nur schreiben, versuche das mit den genannten Zeiten umzusetzen oder formuliere Dein Anliegen evtl. nochmals, aber diesmal eineindeutig.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #8 (permalink)  
Alt 07.11.17
Neues Mitglied
 
Registriert seit: Feb 2017
Beiträge: 27
Elfenstein befindet sich auf einem aufstrebenden Ast
Standard

Nein Kronenchakra, klingt dich wieder ein
Ich erkläre es euch genauer. Der EA macht folgendes. Er öffnet einen Buy mit Lot 0.01 und SL 700, doch mit einer Range von 200. Das heisst wenn der Buy um 200 Pips runterfällt, dann wird ein Sell mit Lot 0.02 und SL 700 geöffnet. Wenn dieser Sell um 200 Pips steigt, dann wird wieder der nächste Order als Buy mit Lot 0.04 und SL 700 geöffnet und so weiter. Wieviel Order er maximal öffnet variiert auch nach der Startlot. Das ist also auch nicht immer gleich. Irgendeiner von denen könnte dann in den SL 700 laufen. Welcher es sein wird, ist auch unterschiedlich, doch wie lasse ich dann nach dem Schließen der Order alles zusammenrechnen, damit der EA weiß, ob das jetzt profitabel war oder nicht?
  #9 (permalink)  
Alt 07.11.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

So jetzt schreibe ich es Dir das dritte Mal. Du brauchst eine Startzeit. Das kann die Zeit des Schließens aller Orders sein oder auch die Zeit des Öffnens der ersten Order. Beim Selektieren der historischen Orders ist diese Zeit nun das sog. linke Zeitmaß und die Zeit in der in die Funktion gesprungen wird, das rechte Zeitmaß. Und dazwischen müssen die geschlossenen Orders dieses! Währungspaares liegen. Beim OrderSend() sollte deshalb auch eine MagicNumber gesetzt werden, die für jeden EA jedes Charts eine andere ist. Bei der Selektion der historischen Orders wird dann also nach dem Symbol des Währungspaares und!! nach der Übereinstimmung der MagicNumber selektiert.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #10 (permalink)  
Alt 07.11.17
Mitglied
 
Registriert seit: Feb 2016
Beiträge: 240
RetepM befindet sich auf einem aufstrebenden Ast
Standard

Hi, Ja, Ja, so ist das mir den kleinen Anfragen... das verwende ich für so was. Bei jedem Tick aufrufen. Davor guckst Du noch, ob Orders vorhanden sind. Die Variablen (CheckAmount und MagicNo) musst Du anpassen:

---------------------------------------------------------
void CheckOpenOrdersAll()
{
double profit = 0;
for (int i=OrdersTotal()-1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol())
{
profit += OrderProfit();
}
}
else
{
Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
}
}
if (profit > CheckAmount)
{
CloseOrders();
}
}

void CloseOrders(int type=-1)
{
bool select,close,del;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&Order MagicNumber()==MagicNo)
{
if(OrderType()==type||type==-1)
{
if(OrderType()==OP_BUY){close=OrderClose(OrderTick et(),OrderLots(),NormalizeDouble(Bid,Digits),4*Pip Value*Point);}
if(OrderType()==OP_SELL){close=OrderClose(OrderTic ket(),OrderLots(),NormalizeDouble(Ask,Digits),4*Pi pValue*Point);}
if(OrderType()>OP_SELL){del=OrderDelete(OrderTicke t());}
}
}
}
}

---------------------------------------------------------

Grüße
Thema geschlossen

Lesezeichen

Stichworte
mql4, profit, profit order, profit überwachen, programmierung, programmierung metatrader, programmierung mql4

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 00:14 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.
-----------------------------------------------------------------------------------------------------------------------------