Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Hilfe bei BreakEven... (http://www.expert-advisor.com/forum/showthread.php?t=1538)

sunnyboy20 19.08.11 16:19

Hilfe bei BreakEven...
 
Liste der Anhänge anzeigen (Anzahl: 1)
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

Racki 20.08.11 18:14

Füge am Ende des Codes einfach das hier ein
Zitat:

}
}
Damit wird start() und deine For-Schleife geschlossen.

Racki 20.08.11 18:17

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

s.l.
Racki

sunnyboy20 22.08.11 12:47

danke erstmal werde es gleich nochmal testen

sunnyboy20 22.08.11 13:21

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 :(

Bobs 22.08.11 20:13

Re: Hilfe bei BreakEven...
 
Hallo sunnyboy20,
ich kann blicken. Schicken Sie mir den Code.

Bohne 22.08.11 20:41

@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.

sunnyboy20 22.08.11 21:10

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);
}
}}


sunnyboy20 22.08.11 21:11

musste etwas beschneiden wegen der Länge also nur die leeren Zeilen entfernt

Bohne 23.08.11 13:48

Liste der Anhänge anzeigen (Anzahl: 1)
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


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:55 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