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: 43249
Benutzer: 7.220
Aktive Benutzer: 81
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 12 Stunden
- JosephTK
vor 2 Tagen
- Hopfen&Mal...
vor 3 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107

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

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #11 (permalink)  
Alt 06.09.11
Elite Mitglied
 
Registriert seit: Aug 2011
Ort: NRW
Beiträge: 764
Mast83 befindet sich auf einem aufstrebenden Ast
Mast83 eine Nachricht über ICQ schicken Mast83 eine Nachricht über Skype™ schicken
Standard

Hallo Zusammen,

nun habe ich mal den EA so abgeändert. Komischerweise wird keine Order platziert . Allerdings erhalte ich im Journal auch keinen HInweis auf Fehler. Kann es sein, dass da evtl noch was fehlt?

//+------------------------------------------------------------------+
//| 10 Pips a Day.mq4 |
//| Marc |
//| ... |
//+------------------------------------------------------------------+
#property copyright "Marc"
#property link "..."

extern int BTP=100;
extern int BSL=200;
extern int STP=100;
extern int SSL=200;
int OBS=10;
int OSS=-10;
int TradeSignal=0;
extern double Lots=0.02;
extern int slippage=20;
int iOrderOpenStatus;
extern int MaxTrades=1;
int TotalTrades;



//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{

//----Kauflogik
if (Open[-1] < Close[-1])
TradeSignal=OBS;
TotalTrades=OrdersTotal();

if ((TradeSignal == OBS) && (TotalTrades < MaxTrades))
{
double BSL=High[1]-(BSL*Point);
double BTP=High[1]+(BTP*Point);


iOrderOpenStatus=OrderSend (Symbol(), OP_BUYSTOP,Lots, High[1], slippage, BSL, BTP, "Kauf",0,Green);
}

//----Verkaufslogik
if (Close[-1] < Open[-1])
TradeSignal=OSS;
TotalTrades=OrdersTotal();

if ((TradeSignal == OSS) && (TotalTrades < MaxTrades))
{
double SSL=Low[1]+(SSL*Point);
double STP=Low[1]-(STP*Point);


iOrderOpenStatus=OrderSend (Symbol(), OP_BUYSTOP,Lots, Low[1], slippage, BSL, BTP, "Kauf",0,Green);
}

return(0);
}
//+------------------------------------------------------------------+



Was ich noch ergänzen muss ist die Orderdauer...
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn...
  #12 (permalink)  
Alt 06.09.11
Mitglied
 
Registriert seit: Apr 2011
Ort: Osnabrück
Beiträge: 103
Racki befindet sich auf einem aufstrebenden Ast
Standard

Hallo, dein Fehler sollte hier liegen:
if (Open[-1] < Close[-1]) und if (Close[-1] < Open[-1])

Du vergleichst hier ob 0 < 0 ist und das wird wohl nie der Fall sein.

s.l.
Racki
  #13 (permalink)  
Alt 07.09.11
Elite Mitglied
 
Registriert seit: Aug 2011
Ort: NRW
Beiträge: 764
Mast83 befindet sich auf einem aufstrebenden Ast
Mast83 eine Nachricht über ICQ schicken Mast83 eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von Racki Beitrag anzeigen
Hallo, dein Fehler sollte hier liegen:
if (Open[-1] < Close[-1]) und if (Close[-1] < Open[-1])

Du vergleichst hier ob 0 < 0 ist und das wird wohl nie der Fall sein.

s.l.
Racki
Hallo Racki,

eigentlich wollte ich herausfinden, ob das Opening der letzten Kerze niedriger ist, als das Closing der gleichen Kerze...Im anderen Fall wollte ich herausfinden ob das Closing niedriger ist als das Opening. Also ob ich eine Kerze habe die im Minus geschlossen hat oder im Plus.

Kann es sein, dass ich ggf gar nicht "[-1]" einsetzen darf, sondern nur "[1]"?
Bei den Einstiegsstopps wurde mir auch gepostet, dass ich "Low[1]" und "High[1]" eingeben muss.

Übrigens bekomme ich immer ein Errorhinweis 130...eigentlich handelt mein Broker mit 5 Stellen nach dem Komma und bei anderen EA's hat es auch geklappt^^ kannst Du mir bei diesen 2 oder 3 Fragen noch helfen?

Vielen Dnak

Marc
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn...
  #14 (permalink)  
Alt 07.09.11
Gesperrter Benutzer
 
Registriert seit: Sep 2011
Ort: Kassel
Beiträge: 749
JoeDormann befindet sich auf einem aufstrebenden Ast
JoeDormann eine Nachricht über Skype™ schicken
Standard

Hallo,
Du bemerkst es bereits richtig:
if (Close[-1] < Open[-1]) geht nicht, da zukünftige Kurse gaänzlich unbekannt sind. Das maximale ist das jetzt, und das wäre 0.

if (Close[1] < Open[1])
bool fallendeTendenz=true;

if (Close[1] > Open[1])
fallendeTendenz=false;

[1] vorherige Kerze
[2] Kerze vor vorheriger Kerze.


Fehler 130 = ERR_INVALID_STOPS
Vermutlich bist Du zu nah am Kurs mit dem Stoploss.
Abstand mindestends 2 x Spread, dann könnte es klappen.

Gruß Joe
  #15 (permalink)  
Alt 07.09.11
Elite Mitglied
 
Registriert seit: Aug 2011
Ort: NRW
Beiträge: 764
Mast83 befindet sich auf einem aufstrebenden Ast
Mast83 eine Nachricht über ICQ schicken Mast83 eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von JoeDormann Beitrag anzeigen
Hallo,
Du bemerkst es bereits richtig:
if (Close[-1] < Open[-1]) geht nicht, da zukünftige Kurse gaänzlich unbekannt sind. Das maximale ist das jetzt, und das wäre 0.

if (Close[1] < Open[1])
bool fallendeTendenz=true;

if (Close[1] > Open[1])
fallendeTendenz=false;

[1] vorherige Kerze
[2] Kerze vor vorheriger Kerze.


Fehler 130 = ERR_INVALID_STOPS
Vermutlich bist Du zu nah am Kurs mit dem Stoploss.
Abstand mindestends 2 x Spread, dann könnte es klappen.

Gruß Joe
Vielen Dank für den Hinweis. Darauf werde ich in zukunft achten. Habe das System auch soweit angepast. Nun kommt das interessant ;-)
Ich habe gestern abend den SL noch auf 1000 Punkte bzw. Brokerbedingt 100 Pips geändert. Sowohl beim long als auch short Trade kam der gleiche Fehlerhinweis...Der Spread lag gestern Abend um die 2 Pips. Ergo wäre es ja dann eine Entfernung von 4. Mein Broker gibt 50 Punkte bzw. 5 Pips als SL vor. Da müsste ich eigentlich drin gewesen sein ...
Vll mache ich doch was mehr falsch?
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn...
  #16 (permalink)  
Alt 11.09.11
Gesperrter Benutzer
 
Registriert seit: Sep 2011
Ort: Kassel
Beiträge: 749
JoeDormann befindet sich auf einem aufstrebenden Ast
JoeDormann eine Nachricht über Skype™ schicken
Standard

Also,
soweit ich in deinem proggi sehen kann möchtest Du für verkauf(SELL) folgendes benutzen :
iOrderOpenStatus=OrderSend (Symbol(), OP_BUYSTOP,Lots, Low[1], slippage, BSL, BTP, "Kauf",0,Green);

Da wird nichts draus weil, SELL braucht in dem Fall "OP_SELLSTOP"

Achte darauf, das beim Sellstop der kurs min. 2 x pips höher ist als Bid.
Und das Target tiefer als Bid -2 x spread und sl höher als Ask + 2 x spread.

Und noch ein Tipp:
Mache ein SELLSTOP oder BUYSTOP erstmal ohne Target und ohne Stoploss.
Wird die Order so angenommen, dann modifiziere die Order mit Modify.
Das hilft auch sehr bei ECN-Konten. Ich machs so, weil am wenigsten Probleme.

Siehe im Editor die Methoden mit Beispiel, das hilft fast immer
(rechte seite, da wo die Files stehen, da gibts unterhalb rechts den Reiter "Dictionary" wo die Methoden gruppiert sind.

Gruß Joe
  #17 (permalink)  
Alt 11.09.11
Gesperrter Benutzer
 
Registriert seit: Sep 2011
Ort: Kassel
Beiträge: 749
JoeDormann befindet sich auf einem aufstrebenden Ast
JoeDormann eine Nachricht über Skype™ schicken
Standard Ich habe mir erlaubt Deinen EA zu fixen :)

//Hier fehlt z.B. noch das Löschen veralteter Trades und eine Magicnumber, etc...

//+------------------------------------------------------------------+
//| 10 Pips a Day.mq4 |
//| Marc |
//| ... |
//+------------------------------------------------------------------+
#property copyright "Marc"
#property link "..."

extern int _BTP=100;
extern int _BSL=200;
extern int _STP=100;
extern int _SSL=200;
extern double Lots=0.02;
extern int slippage=20;
extern int MaxTrades=1;

int OBS=10;
int OSS=-10;
int TradeSignal=0;
int iTicket;
int TotalTrades;
int spread;



//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start() {

//----Kauflogik
if (Open[1] < Close[1])
TradeSignal=OBS;
TotalTrades=OrdersTotal();
spread=(Ask-Bid)/Point;

if ((TradeSignal == OBS) && (TotalTrades < MaxTrades)) {
double BSL=High[1]-_BSL*Point;
double BTP=High[1]+_BTP*Point;
if(High[1]>=Ask+2*spread*Point) {
Print("DoLong price=",High[1]," BSL=",BSL," BTP=",BTP);
iTicket=OrderSend(Symbol(), OP_BUYSTOP, Lots, High[1], slippage, NormalizeDouble(BSL,Digits), 0, "Kauf",0,0,Blue);
if(OrderSelect(iTicket,SELECT_BY_TICKET))
OrderModify(OrderTicket(),OrderOpenPrice(),OrderSt opLoss(),NormalizeDouble(BTP,Digits),0,Blue);
}
}

//----Verkaufslogik
if (Close[1] < Open[1])
TradeSignal=OSS;
TotalTrades=OrdersTotal();

if ((TradeSignal == OSS) && (TotalTrades < MaxTrades)) {
double SSL=Low[1]+_SSL*Point;
double STP=Low[1]-_STP*Point;
if(Low[1]<=Bid-2*spread*Point) {
Print("DoShort price=",Low[1]," SSL=",SSL," STP=",STP);
iTicket=OrderSend (Symbol(), OP_SELLSTOP, Lots, Low[1], slippage, NormalizeDouble(SSL,Digits), 0, "Verkauf",0,0,Red);
if(OrderSelect(iTicket,SELECT_BY_TICKET))
OrderModify(OrderTicket(),OrderOpenPrice(),OrderSt opLoss(),NormalizeDouble(STP,Digits),0,Red);
}
}

return(0);
}
//+------------------------------------------------------------------+
  #18 (permalink)  
Alt 12.09.11
Elite Mitglied
 
Registriert seit: Aug 2011
Ort: NRW
Beiträge: 764
Mast83 befindet sich auf einem aufstrebenden Ast
Mast83 eine Nachricht über ICQ schicken Mast83 eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von JoeDormann Beitrag anzeigen
Also,
soweit ich in deinem proggi sehen kann möchtest Du für verkauf(SELL) folgendes benutzen :
iOrderOpenStatus=OrderSend (Symbol(), OP_BUYSTOP,Lots, Low[1], slippage, BSL, BTP, "Kauf",0,Green);

Da wird nichts draus weil, SELL braucht in dem Fall "OP_SELLSTOP"

Achte darauf, das beim Sellstop der kurs min. 2 x pips höher ist als Bid.
Und das Target tiefer als Bid -2 x spread und sl höher als Ask + 2 x spread.

Und noch ein Tipp:
Mache ein SELLSTOP oder BUYSTOP erstmal ohne Target und ohne Stoploss.
Wird die Order so angenommen, dann modifiziere die Order mit Modify.
Das hilft auch sehr bei ECN-Konten. Ich machs so, weil am wenigsten Probleme.

Siehe im Editor die Methoden mit Beispiel, das hilft fast immer
(rechte seite, da wo die Files stehen, da gibts unterhalb rechts den Reiter "Dictionary" wo die Methoden gruppiert sind.

Gruß Joe
Hi Joe,

ich hatte beim kopieren wohl vergessen aus dem OP_BUYSTOP ein OP_SELLSTOP zu machen.
Das Dictionary werde ich mir im Laufe der Woche mal anschauen.

Vielen Dank schon mal fürs fixen Habe das Programm natürlich schon getestet und festestellt, dass es nicht so toll läuft wie ich erhofft hatte...Zudem wurden in 3 Jahren gerade mal 40 oder 50 Trades ausgeführt...das stimmt mich bedenklich...Werde erst mal an der Sache festhalten udn schauen was ich optimieren kann...Das nächste Zel ist die fortführung des MA vs Candle
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn...
  #19 (permalink)  
Alt 12.09.11
Gesperrter Benutzer
 
Registriert seit: Sep 2011
Ort: Kassel
Beiträge: 749
JoeDormann befindet sich auf einem aufstrebenden Ast
JoeDormann eine Nachricht über Skype™ schicken
Standard

Hallo,

es ist nicht wichtig, wieviele Trades ein EA macht.
Wichtig ist, das er möglichst nur Plus-Trades produziert, bei kleinstem Drawdown Dann kann man nämlich mit dem Risiko kompensieren.

Hast Du zumindest festgestellt, wo der Unterschied zu Deinem Code ist?

Gruß Joe
  #20 (permalink)  
Alt 12.09.11
Elite Mitglied
 
Registriert seit: Aug 2011
Ort: NRW
Beiträge: 764
Mast83 befindet sich auf einem aufstrebenden Ast
Mast83 eine Nachricht über ICQ schicken Mast83 eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von JoeDormann Beitrag anzeigen
Hallo,

es ist nicht wichtig, wieviele Trades ein EA macht.
Wichtig ist, das er möglichst nur Plus-Trades produziert, bei kleinstem Drawdown Dann kann man nämlich mit dem Risiko kompensieren.

Hast Du zumindest festgestellt, wo der Unterschied zu Deinem Code ist?

Gruß Joe
Ich werde mich heute Abend mal ein wenig in deinen gefixten Code einlesen. Zumindest kann ich erkennen, dass hier die Spread mit einem Faktor von 2 berücksichtigt wurde. Was zum Beispiel das Thema des Orderverfalls angeht, sollte ein "D" im Ordersend reichen, aber bei mir hat das Prog das nicht angenommen...weder "D" oder "D, 23:59:59" etc. Das sollte eigentlich nicht schwer sein oder?
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn...
Thema geschlossen

Lesezeichen

Stichworte
metatrader programmierung, programmierung mql

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 10:15 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.
-----------------------------------------------------------------------------------------------------------------------------