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: 3824
Beiträge: 36909
Benutzer: 6.083
Aktive Benutzer: 494
Links: 80
Wir begrüßen unseren neuesten Benutzer: Wombat
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 4 Stunden
- Wombat
vor 19 Stunden
- idur
vor einem Tag
- DarthTrade...
vor einem Tag
- Eren
vor 2 Tagen
- Rene1504

Onlineuser
'Wer ist online' anzeigen Benutzer: 2
Gäste: 47
Gesamt: 49
Team: 0
Team:  
Benutzer:  fxnoob, Stier
Freunde anzeigen

Empfehlungen

Werbung

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 14.12.13
Neues Mitglied
 
Registriert seit: Dec 2013
Beiträge: 4
Spyfire befindet sich auf einem aufstrebenden Ast
Standard Logfile zur Fehler suche

Hallo Leute,

ich bin ein absoluter Neuling im Bereich EA Programmierung.
Ich habe mir über die Webseite Expert Advisor Builder for MetaTrader 4
einen EA zusammengeschusstert. Wenn ich den EA einen test im mt4 unterziehe funtioniert alles, er tradet.
Wenn ich den EA aber beim Livetrading benutzen möchte verweigert er den dienst und tut einfach garnichts.
Um den Fehler zu finden möchte ich ein Logfile einbauen das mir ein Fehlerprotokoll liefert.
Könnte mir jemand da ein Beispiel geben ?

Mein Broker ist Sensus Capital falls das relevat ist.
Ich habe meinen EA auch dort getestet.


Hier ist der EA:

//+------------------------------------------------------------------+
//| This MQL is generated by Expert Advisor Builder |
//| Expert Advisor Builder for MetaTrader 4 |
//| |
//| In no event will author be liable for any damages whatsoever. |
//| Use at your own risk. |
//| |
//+------------------- DO NOT REMOVE THIS HEADER --------------------+

#define SIGNAL_NONE 0
#define SIGNAL_BUY 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4

#property copyright "Expert Advisor Builder"
#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"

extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = False;
extern double Lots = 1.0;
extern int Slippage = 3;
extern bool UseStopLoss = True;
extern int StopLoss = 5;
extern bool UseTakeProfit = False;
extern int TakeProfit = 60;
extern bool UseTrailingStop = True;
extern int TrailingStop = 15;

int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init() {
BarCount = Bars;

if (EachTickMode) Current = 0; else Current = 1;

return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start() {
int Order = SIGNAL_NONE;
int Total, Ticket;
double StopLossLevel, TakeProfitLevel;



if (EachTickMode && Bars != BarCount) TickCheck = False;
Total = OrdersTotal();
Order = SIGNAL_NONE;

//+------------------------------------------------------------------+
//| Variable Begin |
//+------------------------------------------------------------------+

double Var1 = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, Current + 0);
double Var2 = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, Current + 1);

double Buy1_1 = Var2 < 0;
double Buy1_2 = Var2 < 0;
double Buy2_1 = Var1 > 0;
double Buy2_2 = Var1 > 0;

double CloseBuy1_1 = iADX(NULL, 0, 14, PRICE_CLOSE, MODE_PLUSDI, Current + 1);
double CloseBuy1_2 = iADX(NULL, 0, 14, PRICE_CLOSE, MODE_MINUSDI, Current + 1);
double CloseBuy2_1 = iADX(NULL, 0, 14, PRICE_CLOSE, MODE_PLUSDI, Current + 0);
double CloseBuy2_2 = iADX(NULL, 0, 14, PRICE_CLOSE, MODE_MINUSDI, Current + 0);

//+------------------------------------------------------------------+
//| Variable End |
//+------------------------------------------------------------------+

//Check position
bool IsTrade = False;

for (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {
IsTrade = True;
if(OrderType() == OP_BUY) {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Buy) |
//+------------------------------------------------------------------+

if (CloseBuy1_1 > CloseBuy1_2 && CloseBuy2_1 < CloseBuy2_2) Order = SIGNAL_CLOSEBUY;
//+------------------------------------------------------------------+
//| Signal End(Exit Buy) |
//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if(Bid - OrderOpenPrice() > Point * TrailingStop) {
if(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
} else {
//Close

//+------------------------------------------------------------------+
//| Signal Begin(Exit Sell) |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Signal End(Exit Sell) |
//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
}
}
}

//+------------------------------------------------------------------+
//| Signal Begin(Entry) |
//+------------------------------------------------------------------+

if (Buy1_1 == Buy1_2 && Buy2_1 == Buy2_2) Order = SIGNAL_BUY;



//+------------------------------------------------------------------+
//| Signal End |
//+------------------------------------------------------------------+

//Buy
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("BUY order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
} else {
Print("Error opening BUY order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}

//Sell
if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}

if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("SELL order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
} else {
Print("Error opening SELL order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}

if (!EachTickMode) BarCount = Bars;

return(0);
}
//+------------------------------------------------------------------+
  #2 (permalink)  
Alt 14.12.13
Premium Mitglied
 
Registriert seit: Mar 2013
Beiträge: 332
feelfree befindet sich auf einem aufstrebenden Ast
Standard

Hallo Spyfire,

hast du das LiveTrading in den MT4-Optionen auch zugelassen (Smiley im Chart)?

Alle Fehler, die durch den EA auftreten findest du in den Tabs "Experten" und "Journal" deines Terminals.

Grüße
Dan

P.S.: Der EA selbst weiß ja nicht das er einen Fehler macht und wird sie dir als solche auch nicht in einem Logfile ausgeben können.
  #3 (permalink)  
Alt 15.12.13
Neues Mitglied
 
Registriert seit: Dec 2013
Beiträge: 4
Spyfire befindet sich auf einem aufstrebenden Ast
Standard

Hey,

andere EAs laufen ja auch, deshalb bin ich sicher das es nicht dran liegt.
Ja das Livetrading habe ich zugelassen und er Smile wird angezeigt( ) auch bei dem EA.

In dem Ordner D:\Program Files (x86)\SENSUS MT4 Client Terminal\experts\include
liegen Datein die die fehler beschreiben und wenn man diese auslesen lässt müsste man doch eine fehlerbeschreibung in dem Logfile speicher können.

Ich habe dazu einen Code gefunden nur leider verstehe ich ihn nicht...

[C++] // smokin // Error-Beschreibung #include <stderror.mqh> #include <stdlib.m - Pastebin.com
  #4 (permalink)  
Alt 15.12.13
Premium Mitglied
 
Registriert seit: Mar 2013
Beiträge: 332
feelfree befindet sich auf einem aufstrebenden Ast
Standard

Hallo Spyfire,

nur in Kürze damit du den Fehler vielleicht schneller findest:

Die Fehlercodes dieses EA findest du auch automatisch im Experts Tab deines MT4.
In der von dir genannten stderror findest du folgende Errorcodes und deren Bedeutung:
Error codes - MQL4 Documentation

Ich vermute allerdings dass dieser EA nicht funktioniert weil er prüft ob eine irgendeine Order im Account offen ist und nur aktiv wird wenn er 0 offene Orders findet.
Das würde auch erklären warum er im Backtest problemlos durchläuft und im Livebetrieb streikt.

Hier der fehlerhafte Codeblock:
Code:
for (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {
IsTrade = True;
und hier die korrekte Variante:
Code:
for (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol() 
&& OrderMagicNumber() == MagicNumber) {
IsTrade = True;
Aber auch diese korrigierte Variante funktioniert nur wenn du eine MagicNummer > 0 für diesen EA wählst.

Grüße
Dan
  #5 (permalink)  
Alt 15.12.13
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Was soll die MagicNumber ändern?
Es wird bereits nach dem WP-Symbol selektiert und ist eine Order mir dem entsprechenden WP offen, dann ist sie halt offen, da spielt die MN auch keine Rolle mehr und mehrere TF bzw. mehrere EAs gleichzeitig sollen doch nicht vorkommen, oder?

Ne, daran kann es nicht liegen.

traderdoc
  #6 (permalink)  
Alt 15.12.13
Premium Mitglied
 
Registriert seit: Mar 2013
Beiträge: 332
feelfree befindet sich auf einem aufstrebenden Ast
Standard

Wenn er schreibt das andere EA's laufen vermute ich dass diese auch zeitgleich laufen sollen.

Die MagicNumber 0 hat auch jede manuell geöffnete Position.
Wenn er vermeiden will das dieser EA auch manuelle Positionen verwaltet sollte er eine MagicNumber vergeben.
  #7 (permalink)  
Alt 15.12.13
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Da gehe ich natürlich voll mit Dir.
Aber dann muß er sich mal ganz konkret dazu äußern, ob nun noch ein anderer EA läuft und ob da irgendwo manuell geöffnete Trades rumschwirren.

traderdoc
  #8 (permalink)  
Alt 16.12.13
Neues Mitglied
 
Registriert seit: Dec 2013
Beiträge: 4
Spyfire befindet sich auf einem aufstrebenden Ast
Standard

Hey Leute,

erst einmal möchte ich mich für die schnelle Hilfe bedanken.

"Andere eas laufen", damit meinte ich das die Beispiel eas die schon im mt4 integriert sind funtionieren(warscheinlich nicht hilfreich das sie das auch sollten).
Das war etwas missverständlich ausgedrückt.
Es soll nur dieser ea laufen und deshalb kann ich die MagicNumer =0 lassen oder?
  #9 (permalink)  
Alt 16.12.13
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Wenn nur dieser eine EA laufen soll und auch keine manuellen Trades gesetzt werden, dann spielt die MagicNumber keine Rolle.
Sollte der Code unverändert so bleiben, dann hätte die MN sowieso keine Bedeutung, weil sie gar nicht abgefragt wird. Das Schreiben der MN in die Order ist nur Makulatur.

traderdoc
  #10 (permalink)  
Alt 16.12.13
Neues Mitglied
 
Registriert seit: Dec 2013
Beiträge: 4
Spyfire befindet sich auf einem aufstrebenden Ast
Standard

Hey der ea läuft jetzt.
Auf dem Demokonto war nicht genug Geld für den ea.
Der ea fragt die freie Margin ab und diesen wert habe ich runter gesetzt schon gings.
Ich habe aber noch eine andere Frage.
Ich bekomme des öfteren den Fehler angezigt.
Was bedeutet er und wie bekomme ich ihn weg ?

Thema geschlossen

Lesezeichen

Stichworte
log, logfile, logfile mql4, mql4, programmierung, programmierung metatrader


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