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: 43262
Benutzer: 7.221
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: Thomas75
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 29 Minuten
- Thomas75
vor 13 Stunden
- JosephTK
vor 2 Tagen
- Hopfen&Mal...
vor 3 Tagen
- frankmicha...
vor einer Woche
- DFeck

Onlineuser
'Wer ist online' anzeigen Benutzer: 1
Gäste: 444
Gesamt: 445
Team: 0
Team:  
Benutzer:  Thomas75
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 19.08.11
Neues Mitglied
 
Registriert seit: Mar 2011
Beiträge: 27
sunnyboy20 befindet sich auf einem aufstrebenden Ast
Standard Hilfe bei BreakEven...

Hallo,
brauche Hilfe bei dem BreakEven, irgendwie will er den Ea nicht mehr compilen
seit ich den BreakEven eingefügt habe obwohl der BreakEvenCode meiner Meinung nach richtig ist aber ich scheine irgendwas in der ProgrammStruktur verhauen zu haben.
Bitte wie gesagt um Hilfe
Danke
Angehängte Dateien
Dateityp: mq4 MyExpertAdvisor.mq4 (10,1 KB, 8x aufgerufen)
  #2 (permalink)  
Alt 20.08.11
Mitglied
 
Registriert seit: Apr 2011
Ort: Osnabrück
Beiträge: 103
Racki befindet sich auf einem aufstrebenden Ast
Standard

Füge am Ende des Codes einfach das hier ein
Zitat:
}
}
Damit wird start() und deine For-Schleife geschlossen.
  #3 (permalink)  
Alt 20.08.11
Mitglied
 
Registriert seit: Apr 2011
Ort: Osnabrück
Beiträge: 103
Racki befindet sich auf einem aufstrebenden Ast
Standard

Ach und
NormalizeDouble(SellStop,4) oder wie auch immer.
Du musst hier angeben welche Präzision du haben willst.

s.l.
Racki
  #4 (permalink)  
Alt 22.08.11
Neues Mitglied
 
Registriert seit: Mar 2011
Beiträge: 27
sunnyboy20 befindet sich auf einem aufstrebenden Ast
Standard

danke erstmal werde es gleich nochmal testen
  #5 (permalink)  
Alt 22.08.11
Neues Mitglied
 
Registriert seit: Mar 2011
Beiträge: 27
sunnyboy20 befindet sich auf einem aufstrebenden Ast
Standard

so ich habe das jetzt so gemacht und auch noch rum probiert aber es funktioniert nicht er bringt zwar keine einzige fehlermeldung mehr auch nicht beim backtesten aber jetzt öffnet er keinen einzigen Trade mehr ????????
und ich steige nicht dahinter woran es liegt
bitte somit erneut um hilfe
  #6 (permalink)  
Alt 22.08.11
Mitglied
 
Registriert seit: Jun 2011
Ort: Minsk, Weißrussland
Beiträge: 87
Bobs befindet sich auf einem aufstrebenden Ast
Standard Re: Hilfe bei BreakEven...

Hallo sunnyboy20,
ich kann blicken. Schicken Sie mir den Code.
  #7 (permalink)  
Alt 22.08.11
Elite Mitglied
 
Registriert seit: Jan 2010
Beiträge: 275
Bohne befindet sich auf einem aufstrebenden Ast
Standard

@sunny
lege doch einfach mal den quellcode hier rein. So können wir alles direkt reinschauen. Will den nicht noch hier runter laden. Dann können wir das ja mit Beschreibung mal vervollständigen.
  #8 (permalink)  
Alt 22.08.11
Neues Mitglied
 
Registriert seit: Mar 2011
Beiträge: 27
sunnyboy20 befindet sich auf einem aufstrebenden Ast
Standard

so hier der Code
Code:
#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 = 336699;
extern bool SignalMail = False;
extern bool EachTickMode = False;
extern double Lots = 0.1;
extern double MaximumRisk= 1;
extern int Slippage = 1;
extern bool UseStopLoss = True;
extern int StopLoss = 30;
extern bool UseTakeProfit = True;
extern int TakeProfit = 50;
extern bool UseTrailingStop = True;
extern int TrailingStop = 50;
extern int BreakEven = 30;
int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
double LotsOptimized()
   {
   double lot=Lots;
//---- select lot size
   lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
//---- return lot size
   if(lot<0.1) lot=0.1;
   if(lot>50.0) lot=50.0;
   return(lot);
   }
//+------------------------------------------------------------------+
//| 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 Buy1_1 = iMA(NULL, 5, 4, 0, MODE_EMA, PRICE_CLOSE,0);
double Buy1_2 = iMA(NULL, 5, 4, 0, MODE_EMA, PRICE_CLOSE,1);
double Buy1_3 = iMA(NULL, 5, 9, 0, MODE_EMA, PRICE_CLOSE,0);
double Buy2_1 = iMA(NULL, 15, 14, 0, MODE_EMA, PRICE_CLOSE,0);
double Buy2_2 = iMA(NULL, 15, 14, 0, MODE_EMA, PRICE_CLOSE,1);

   
   //+------------------------------------------------------------------+
   //| 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)
            //+------------------------------------------------------------------+
            //+------------------------------------------------------------------+
            //| 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;
            }
            //Breakeven
            if(BreakEven > 0 && OrderStopLoss() > OrderOpenPrice()) {                 
               if ( OrderOpenPrice()-Ask>Point*BreakEven ) 
               {
               double BuyStop = OrderOpenPrice();
               if(OrderStopLoss() > BuyStop)
               OrderModify(OrderTicket(),OrderOpenPrice(),
   		                  NormalizeDouble(BuyStop,5),
   		                  OrderTakeProfit(),0,Red);	    
               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;
            //Breakeven
            if(BreakEven > 0 && OrderStopLoss() > OrderOpenPrice()) {                 
               if ( OrderOpenPrice()-Ask>Point*BreakEven ) 
               {
               double SellStop = OrderOpenPrice();
               if(OrderStopLoss() > SellStop)
               OrderModify(OrderTicket(),OrderOpenPrice(),
   		                  NormalizeDouble(SellStop,4),
   		                  OrderTakeProfit(),0,Red);	    
               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 && Buy1_2 > Buy1_3 
       && Buy2_1 > Buy2_2)
       Order = SIGNAL_BUY;
   if (Buy1_1 < Buy1_2 && Buy1_2 < Buy1_3 
       && Buy2_1 < Buy2_2)
       Order = SIGNAL_SELL;
   //+------------------------------------------------------------------+
   //| 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, LotsOptimized(), 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, LotsOptimized(), 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);
}
}}
  #9 (permalink)  
Alt 22.08.11
Neues Mitglied
 
Registriert seit: Mar 2011
Beiträge: 27
sunnyboy20 befindet sich auf einem aufstrebenden Ast
Standard

musste etwas beschneiden wegen der Länge also nur die leeren Zeilen entfernt
  #10 (permalink)  
Alt 23.08.11
Elite Mitglied
 
Registriert seit: Jan 2010
Beiträge: 275
Bohne befindet sich auf einem aufstrebenden Ast
Standard

als am Breakeven passt hier nicht.

Wie due siehst "Blaues Kästchen" hast du eine IF anweisung. DEine Breakeven Funtkion steuert auch zugleich den Trailingstop. Glaub nicht das es so gewollt ist.
DAs mi dem Builder ist für den Expert Builder ist für den Anfang gut, danach wird schwierig. Weil der leider iohne funktionen arbeitet. Gerade die funktionen machen es alles ein wenig übersichtlicher und du verschachtelst dich nicht.
--> Schätze mal du hast da eine Klammer vergessen.

Ok gehen wir mal weiter auf Punkt 1 im BILD.

if ( OrderOpenPrice()-Ask>Point*BreakEven )
{
double SellStop = OrderOpenPrice();
if(OrderStopLoss() > SellStop)
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(SellStop,4), OrderTakeProfit(),0,Red);
continue;
}

das geht einfacher, du willst doch nur den Orderopenprice drinne haben somit

if ( OrderOpenPrice()-Ask>Point*BreakEven )
{
// WEg --> double SellStop = OrderOpenPrice();
if(OrderStopLoss() > SellStop){ OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(),0,Red);
continue;
}

Dann brauchst du es auch nicht auf 4 stellen runterreduzieren. So wenig wie nur möglich.

Nimme einfach die letzte version die geklappt hat und verusuchs nochmal, der @Racki schaut ja auch noch drauf. Und mit der 2 klammer am ende könnte er recht habe.
wenn da oben schon was fehlt....
Hoffe du kommst ein wenig weiter
Angehängte Grafiken
Dateityp: jpg 23.08.jpg (19,9 KB, 10x aufgerufen)
Thema geschlossen

Lesezeichen

Stichworte
breakeven, 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 12:00 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.
-----------------------------------------------------------------------------------------------------------------------------