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); } //+------------------------------------------------------------------+ |
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. |
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 |
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 ++) { Code:
for (int i = 0; i < Total; i ++) { Grüße Dan |
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 |
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. |
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 |
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? |
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 |
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 ? http://img5.fotos-hochladen.net/uplo...uz8xbdw1ce.jpg |
Alle Zeitangaben in WEZ +2. Es ist jetzt 21:21 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