Einzelnen Beitrag anzeigen
  #11 (permalink)  
Alt 23.08.11
Bohne Bohne ist offline
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);
}