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: 3820
Beiträge: 36898
Benutzer: 6.067
Aktive Benutzer: 491
Links: 80
Wir begrüßen unseren neuesten Benutzer: POCJonah7
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 4 Stunden
- POCJonah7
vor 11 Stunden
- flowi88
vor 11 Stunden
- dealtycoon
vor 16 Stunden
- VicenteWuc
vor 19 Stunden
- sazaron

Onlineuser
'Wer ist online' anzeigen Benutzer: 2
Gäste: 64
Gesamt: 66
Team: 0
Team:  
Benutzer:  POCJonah7, Trader6969
Freunde anzeigen

Empfehlungen

Werbung

Like Tree3Likes
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 11.12.15
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 95
Adlerauge befindet sich auf einem aufstrebenden Ast
Standard Bedingung nach Negativ-Trades

Hallo allerseits,

ich möchte, dass mein EA etwas anders macht, nachdem er 2 negativ-Trades gemacht hat.

Ich müsste also soetwas programieren wie:
wenn die letzten beiden Trades im Minus geschlossen wurden, dann......

Da ich mich erst seit wenigen Wochen mit der MQL4-Programmierung befasse, wäre es schön, wenn mir jemand die konkrete(n) Befehlszeile(n) schreiben könnte.

Danke!!
  #2 (permalink)  
Alt 12.12.15
Premium Mitglied
 
Registriert seit: Apr 2015
Beiträge: 370
Raul0 befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

mit einer Zeile ist das nicht getan. Und es wäre schon ein Modul, was den Rahmen sprengen würde es hier kostenlos zu liefern.

Als Anregung jedoch um zwei Richtungen zu geben:

- Es müsste die Orderhistory ausgelesen und analysiert werden. Das wäre der fachmännische Weg.

- Als Übung für den Anfang, was auch funktioniert, eine Variable(Var1) setzen, wenn der Kurs die Höhe des Stops erreicht. Wird nicht das Stop erreicht (else), dann Var1 false.
Das zusätzlich mit einer zweiten Variable, wo die Funktion durchlaufen wird, wenn Var1 gesetzt wurde.
Der Rest halt einfach, ist Var1 und Var2 gesetzt, dann mache alles anders.
Zu beachten ist, wenn ein Trade positiv ausfällt, sollten die beiden Variablen zurückgesetzt werden.
  #3 (permalink)  
Alt 12.12.15
Gesperrter Benutzer
 
Registriert seit: Dec 2015
Beiträge: 53
TLO Trader befindet sich auf einem aufstrebenden Ast
Standard

Hallo Adlerauge,

ich habe mal etwas ähnliches programmiert, dass Dir als erster Hinweis weiterhelfen könnte:

//Auf einen Long- folgt immer ein Short-Trade und umgekehrt
int Zaehler_History=0;
if (LongShortWechsel==true)
{
for(Zaehler_History=OrdersHistoryTotal();Zaehler_H istory>=0;Zaehler_History--)//
{
OrderSelect(Zaehler_History,SELECT_BY_POS,MODE_HIS TORY);
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber)
continue;

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
LastTradeLong=true;
LastTradeShort=false;
break;
}
if(OrderType()==OP_SELL)
{
LastTradeLong=false;
LastTradeShort=true;
break;
}

}
}
}

Dieser Code testet, ob der letzte! geschlossene Trade long oder short war.
Du mußt natürlich die Bedingung ändern und testen, ob er Gewinn oder Verlust
gemacht hat und auch noch den vorletzten Trade ebenfalls testen.

Dies geht somit in Richtung des 1. Ansatzes von Raul0.

Den 2. Ansatz von Raul0 kann ich nicht so recht nachvollziehen, meines
Wissens ändert sich der Wert einer Variablen wieder auf den Ausgangswert,
wenn der EA neu initialisiert wird. Du müsstest also beim Testen Deiner Funktion jedesmal wieder von vorne anfngen, sobals Du einen Wert in der Eingabebox änderst oder den MT 4 neu startest. Das könnte sehr mühsam
sein.

Ob man den Wert einer Variablen dauerhaft speichern kann, diese Möglichkeit
habe ich bei MQL leider noch nicht gefunden.

Vielleicht weiss da ja jemand Rat?
  #4 (permalink)  
Alt 12.12.15
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 95
Adlerauge befindet sich auf einem aufstrebenden Ast
Standard

danke schonmal für die Antworten, da kann ich meine Frage schon präzisiere n:
ich dachte auch an das Auslesen der Orderhistory.
Ich finde in der MQL4 Hilfe aber nur den Befehl "OrderHistoryTotal", der mir aber so wie das sehe nur Auskunft über die Anzahl der geschlossenen Orders gibt, oder?
Meine Frage ist also, wie kann ich Informationen zu geschlossenen Orders abfragen, damit ich diese dann von meinem EA weiterbenutzen lassen kann.

Auf Stops kann ich mich leider nicht basieren, da in diesem EA keine Stops gesetzt werden. Die Orders werden auf Grund von MAs gesetzt und geschlossen.
  #5 (permalink)  
Alt 12.12.15
Gesperrter Benutzer
 
Registriert seit: Dec 2015
Beiträge: 53
TLO Trader befindet sich auf einem aufstrebenden Ast
Standard

Die Antwort findest Du in meinem obigen Code-Fragment.
OrdersHistoryTotal liefert dei Anzahl der geschlossenen Orders,
die hier in einer for-Schleife abwärts durchlaufen werden.
Für jede Order wird nun geprüft, ob sie die angegebenen Bedingungen
erfüllt (hier Währungspaar bzw. Symbol und Magic-Nummer stimmen
überein). Wenn ja, wird die Order ausgewählt und Du kannst die
entsprechenden Werte, z.B. Preis, Trade-Richtung, SL, TP oder in
Deinem Fall OrderProfit() auslesen und weiterverarbeiten.

So ist das Prinzip! So eine Schleifen-Konstruktion musst Du immer
verwenden, wenn Du auf Trades zugreifen willst.
  #6 (permalink)  
Alt 12.12.15
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 95
Adlerauge befindet sich auf einem aufstrebenden Ast
Standard

ok, danke Dir, TLO. Ich werde versuchen, mir das mal auf diese Art zurechtzubasteln..))
  #7 (permalink)  
Alt 12.12.15
Gesperrter Benutzer
 
Registriert seit: Dec 2015
Beiträge: 53
TLO Trader befindet sich auf einem aufstrebenden Ast
Standard

Adlerauge, ich hatte gerade nichts zu tun und habe mal einen Code-Entwurf gemacht, wie Dein Programm aussehen könnte:

//Aktion nach 2 Verlusttrades umkehren
int Zaehler_History = 0; //Variable enthält den "Countdown" beim Durchlaufen der geschlossenen Trades
int AnzahlVerlustTrades = 0;//Variable zählt die letzten Verlusttrades
for(Zaehler_History=OrdersHistoryTotal();Zaehler_H istory>=0;Zaehler_History--)
{
OrderSelect(Zaehler_History,SELECT_BY_POS,MODE_HIS TORY);
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber)
continue; //Order entspricht nicht den Kriterien, daher wird nach der nächsten Order gesucht.

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) //Order entspricht den Kriterien.
{
{
if(OrderProfit() >= 0)
break; // Steigt aus der Schleife aus, wenn der gefundene Trade keinen Verlust gemacht hat
else if(OrderProfit()<0)
AnzahlVerlustTrades = AnzahlVerlustTrades + 1; //Die Zahl der letzten Verlusttrades wird um
//1 erhöht, wenn der letze Trade mit Verlust
//war.
}
if AnzahlVerlustTrades >= 2
SETZE SIGNAL FÜR NEUE AKTION; //Hier könnte dann eine Varible ihren Wert wechseln oder die
//neue Aktion auf andere Weise eingeleitet werden, wenn die
//Zahl der aufeinanderfolgenden Verlusttrades 2 erreicht.
}
}

Das ist so natürlich nicht lauffähig und nicht getestet, soll aber den Denkansatz verdeutlichen. Du musst wissen, MQL ist nicht gerade eine benutzerfreundliche Programmiersprache und "glänzt" durch einige Ungereimtheiten. Insbesondere der Editor lässt einen schnell den Überblick
verlieren.

Lass mich mal wissen, ob Du damit was anfangen konntest!
  #8 (permalink)  
Alt 13.12.15
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 95
Adlerauge befindet sich auf einem aufstrebenden Ast
Standard

Cool!
Ich danke Dir, genau so einen Ansatz habe ich gesucht. Ich werde ein bißchen brauchen, um mich damit auseinanderzusetzen, ich geb Dir dann aber in jedem Fall eine Rückmeldung....
  #9 (permalink)  
Alt 14.12.15
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 95
Adlerauge befindet sich auf einem aufstrebenden Ast
Standard

Hallo TLO,

ich habe zunächst einmal versucht, Deinen Order-Wechsel-Code umzusetzen.
Dazu habe ich einfach mal einen Indikator genommen, in diesem Fall den Momentum, und versucht den Code so zu schreiben, dass er long geht, wenn der Momentum über 100 geht, und dann short geht sobald der Momentum wieder und 100 fällt.

Leider funktioniert es noch nicht .....
hier ist der ganze Quellcode:

extern double HandelsLots = 0.01;
extern double StopLoss = 100;
extern double TakeProfit = 50;
extern int PeriodMomentum = 14;

double Momentum;

int MagicNumber;
int Zaehler_History;

bool LastTradeShort;
bool LastTradeLong;
bool LongShortWechsel;

//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int init()
{
Momentum = iCustom(NULL,0,"Momentum",PeriodMomentum,0,1);
return(0);
}

//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick ()

//Auf einen Long- folgt immer ein Short-Trade und umgekehrt
{
if (LongShortWechsel==true)
{
for(Zaehler_History=OrdersHistoryTotal();Zaehler_H istory>=0;Zaehler_History--)//
{
OrderSelect(Zaehler_History,SELECT_BY_POS,MODE_HIS TORY);
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber)
continue;

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
LastTradeLong=true;
LastTradeShort=false;
break;
}
if(OrderType()==OP_SELL)
{
LastTradeLong=false;
LastTradeShort=true;
break;
}

}
}
}

// Erste Order

if (OrdersTotal() == 0)
if (Momentum > 100)
if (OrdersHistoryTotal()==0)
{
OrderSend(Symbol(),OP_BUY,HandelsLots,Ask,2,Ask-StopLoss*Point,Ask+TakeProfit*Point,NULL,0,0,Green );
}

if (OrdersTotal() == 0)
if (Momentum < 100)
if (OrdersHistoryTotal()==0)
{
OrderSend(Symbol(),OP_SELL,HandelsLots,Bid,2,Bid+S topLoss*Point,Bid-TakeProfit*Point,NULL,0,0,Red);
}

// Nachfolgende Orders

if (OrdersTotal() == 0)
if (Momentum > 100)
if (LastTradeLong=false)
if (LastTradeShort=true)
{
OrderSend(Symbol(),OP_BUY,HandelsLots,Ask,2,Ask-StopLoss*Point,Ask+TakeProfit*Point,NULL,0,0,Green );
}

if (OrdersTotal() == 0)
if (Momentum < 100)
if (LastTradeShort=false)
if (LastTradeLong=true)
{
OrderSend(Symbol(),OP_SELL,HandelsLots,Bid,2,Bid+S topLoss*Point,Bid-TakeProfit*Point,NULL,0,0,Red);
}
}

//..VG.... Adlerauge
  #10 (permalink)  
Alt 14.12.15
Gesperrter Benutzer
 
Registriert seit: Dec 2015
Beiträge: 53
TLO Trader befindet sich auf einem aufstrebenden Ast
Standard

OH, OH, wo fang ich da jetzt an?

Auf den ersten Blick nur mal das Gröbste, was ich so gesehen habe:

1. Ich würde der MagicNumber mal einen Wert zuweisen und sie gleich als
extern deklarieren, dann kannst Du den EA auch für verschiedene Paare/Timeframes verwenden.

2. iCustom ist für individuelle Indikatoren, iMomentum ist direkt integriert.
Nimm die in der Hilfe angegebenen Spezifikationen.

3. Der Indikator darf nicht bei int init() stehen, dann ändert er seinen Wert während des Programmablaufs nicht mehr!

4. Deine if-Konstruktionen können so nicht funktionieren,
wenn schon, muss es heissen:

if (OrdersTotal() = 0 && Momentum > 100 && OrdersHistoryTotal()=0)
...;

In diesem Fall würde Dein EA allerdings nur auf einem "jungfräulichen" Konto traden, auf dem es weder offene noch geschlossene Trades gibt.
Das kann irgendwie nicht der Sinn sein!!

Das nur fürs Erste, auf ein Neues!
Thema geschlossen

Lesezeichen

Stichworte
2 verlust trades, bedingung verlust trades, mql4, programmierung, programmierung metatrader, verlust


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 07:11 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.
-----------------------------------------------------------------------------------------------------------------------------