|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
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 |
|
|||
Füge am Ende des Codes einfach das hier ein
Zitat:
|
|
|||
Ach und
NormalizeDouble(SellStop,4) oder wie auch immer. Du musst hier angeben welche Präzision du haben willst. s.l. Racki |
|
|||
danke erstmal werde es gleich nochmal testen
|
|
|||
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 |
|
|||
Re: Hilfe bei BreakEven...
Hallo sunnyboy20,
ich kann blicken. Schicken Sie mir den Code. |
|
|||
@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. |
|
|||
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); } }} |
|
|||
musste etwas beschneiden wegen der Länge also nur die leeren Zeilen entfernt
|
|
|||
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 |
Lesezeichen |
Stichworte |
breakeven, metatrader programmierung, mql4 |
|
|