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: 3822
Beiträge: 36945
Benutzer: 6.067
Aktive Benutzer: 491
Links: 80
Wir begrüßen unseren neuesten Benutzer: POCJonah7
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 17 Stunden
- POCJonah7
vor einem Tag
- flowi88
vor einem Tag
- dealtycoon
vor einem Tag
- VicenteWuc
vor einem Tag
- sazaron

Onlineuser
'Wer ist online' anzeigen Benutzer: 2
Gäste: 49
Gesamt: 51
Team: 0
Team:  
Benutzer:  beabro60, traderdoc
Freunde anzeigen

Empfehlungen

Werbung

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #11 (permalink)  
Alt 23.08.11
Elite Mitglied
 
Registriert seit: Jan 2010
Beiträge: 275
Bohne befindet sich auf einem aufstrebenden Ast
Standard

Na das ging ja doch schneller als erwartet. Schau mal ob das funkelt. Bei mir schon. auf jedefall macht er wieder trades.
musste die kommentare runterzeduzieren damit er rein passt.
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);
}
  #12 (permalink)  
Alt 24.08.11
Neues Mitglied
 
Registriert seit: Mar 2011
Beiträge: 27
sunnyboy20 befindet sich auf einem aufstrebenden Ast
Standard

danke schon mal, konnte es mir leider noch nicht anschauen.
auf facebook gehen zur zeit ja wieder mal de viren rum unter anderem der bka trojaner....war nach arbeit nur bei freunden um denen den rechner zu retten
echt böse das ding für einen leihen, kannst nix mehr machen und das ding hat über 40 systemdateien infiziert um sicher zu stellen das er "immer" aktiv bleibt und man ihn nicht so leicht entfernen kann ;-) aber wie das halt so ist gibt es immer eine Lösung, unter XP sogar sehr leicht.
  #13 (permalink)  
Alt 26.08.11
Neues Mitglied
 
Registriert seit: Mar 2011
Beiträge: 27
sunnyboy20 befindet sich auf einem aufstrebenden Ast
Standard

so hab ihn heute getestet leider geht der breakeven noch nicht
der trailingstop geht nur noch bei long bei short´s geht er net mehr...
kann denn keiner den Ea mal so fixen das er funzelt ?
oder @Bohne
kannst du mal nen beispiel EA einfügen weil hast doch gesagt mit funtkionen und verschachteln und so.
weil bin ja noch ein noob auf dem gebiet und weiß halt net was du meinst dachte immer code ist gleich code ?????
  #14 (permalink)  
Alt 26.08.11
Elite Mitglied
 
Registriert seit: Jan 2010
Beiträge: 275
Bohne befindet sich auf einem aufstrebenden Ast
Standard

erlich gesagt fehlt mir die zeit dazu...
Also folgendes ungefähr so

in start()
{
double lot = Orderlots();
}

int Orderlots()
{
double lots = 0.1;
return (lots)
}

Das ist jetzt ein ganz einfach BSP.

Die stratfunktion()
Orderlots wird zuerst als Funktion aufgerufen
springt in int Orderfunktion() rein. In dieser funktion wird eine zusaätzlich Variable deklariert und zu gleich der wert 0.1 eingesetz.
Mit return gibst du den wert zurück...

Somit hast du jetzt im start in der Varibale 0.1 drinn.
es gibt bestimmt reichlich mehr imput im netz. Wo genau keine Ahnung
aber so in etwa.

das gute ist bei der funktion. Du kannst die funktionen immer wieder benutzen und leicht ändern. Alles ist sehr übersichtlicher.
Ein weitere Funktion von mit die nur die Buy order zählt.

int CountSellPositionsII() {
int l_count_0 = 0;
for (int l_pos_4 = 0; l_pos_4 < OrdersTotal(); l_pos_4++) {
OrderSelect(l_pos_4, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNummerII || OrderType() != OP_SELL) continue;
l_count_0++;
}
return (l_count_0);
}


// Rückgabe wert ist die gezählten short trades.


OrdersTotal() <-- ist wieder eine utnerfunktion
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 20:23 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.
-----------------------------------------------------------------------------------------------------------------------------