Sidus - EA





//+------------------------------------------------------------------+
//|                                                        Sidus.mq4 |
//|                                  Copyright © 2006, GwadaTradeBoy |
//|                                            racooni_1975@yahoo.fr |
//|                                                                  |
//+------------------------------------------------------------------+
//| * Conditions d'entrée :                                          |
//| Le signal réel de la prise de position est quand les deux bords  |
//| du  tunnel rouge se croisent!!                                   |
//|                                                                  |
//|   - Buy : WMA5 passe au-dessus de WMA8 vers le haut, et ils      |
//|           passent au-dessus du tunnel rouge (EMA18 et EMA28)     |
//|   - Sell : WMA5 plonge sous WMA8, et ils plongent sous le tunnel |
//|            rouge (EMA18 et EMA28)                                |
//|                                                                  |
//| * Conditions de sortie :                                         |
//| Fermez toujours votre position quand les bords du tunnel rouge   |
//| se croisent ou quand ils deviennent si étroits qu'ils se         |
//| confondent!                                                      |
//|                                                                  |
//|   - Buy : WMA5 plonge sous WMA8, et le prix a atteint un sommet  |
//|   - Sell : WMA5 passe au-dessus de WMA8, et le prix a atteint un |
//|            bas                                                   |
//|                                                                  |
//| * Recomandations :                                               |
//| Quand lors d'un trade WMA5 et WMA8 croisent le tunnel rouge      |
//| Prête l'attention! Tant que les bords du tunnel rouge ne se      |
//| croisent pas, il n'y a aucun problème, mais souvent c'est un     |
//| signe que ça arrive!                                             |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, GwadaTradeBoy"
#property link      "racooni_1975@yahoo.fr"

//----Section #property
#property indicator_buffers 6
#property indicator_color1 Red
#property indicator_color2 Red
#property indicator_color3 Aqua
#property indicator_color4 Yellow
#property indicator_color5 Green
#property indicator_color6 Red

//---- Indicateurs
double         EMA18, EMA28, WMA5, WMA8, tuncross;
double         EMA18Current, EMA18Previous, EMA28Current, EMA28Previous;
double         WMA5Current, WMA5Previous, WMA8Current, WMA8Previous;
extern double  digit=0;
int            nShift,limit,i,j;

//---- buffers
double ExtMapBuffer1[];    //EMA18
double ExtMapBuffer2[];    //EMA28
double ExtMapBuffer3[];    //WMA5
double ExtMapBuffer4[];    //WMA8
double ExtMapBuffer5[];    //Fleche Haut
double ExtMapBuffer6[];    //Fleche Bas

//---- Money Management
extern bool    MoneyManagement   = true;
extern double  Lots              = 0.1;
extern double  MaximumRisk       = 0.02;
extern double  DecreaseFactor    = 3;
bool           AcountIsMini      = false;
double         lot;
int            orders=0, losses=0;

//---- Prise de position
extern int     MagicEA           = 221206;
extern string  NameEA            = "Sidus.mq4";
extern double  TakeProfit        = 100;
extern double  StopLoss          = 15;
extern double  TrailingStop      = 15;
extern int     Slippage          = 3;
extern color   clOpenBuy         = Blue;
extern color   clCloseBuy        = Aqua;
extern color   clOpenSell        = Red;
extern color   clCloseSell       = Violet;
extern color   clModiBuy         = Blue;
extern color   clModiSell        = Red;
int            spread, total, prevticket;
bool           isBuying = false, isSelling = false, isBuyClosing = false, isSellClosing = false;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
   {
//---- indicators
//---- Styles et couleur des Lignes
      SetIndexStyle(0,DRAW_LINE);
      SetIndexBuffer(0,ExtMapBuffer1);
      SetIndexStyle(1,DRAW_LINE);
      SetIndexBuffer(1,ExtMapBuffer2);
      SetIndexStyle(2,DRAW_LINE);
      SetIndexBuffer(2,ExtMapBuffer3);
      SetIndexStyle(3,DRAW_LINE);
      SetIndexBuffer(3,ExtMapBuffer4);
      SetIndexStyle(3,DRAW_LINE);
//---- Styles et couleur des Fleches      
      SetIndexStyle(4, DRAW_ARROW, 0, 2);    // Fleche vers le haut
      SetIndexArrow(4, 233);
      SetIndexBuffer(4, ExtMapBuffer5);
      SetIndexStyle(5, DRAW_ARROW, 0, 2);    // Fleche vers le bas
      SetIndexArrow(5, 234);
      SetIndexBuffer(5, ExtMapBuffer6);
//----       
      switch(Period())
         {
            case     1: nShift = 1;   break;
            case     5: nShift = 3;   break;
            case    15: nShift = 5;   break;
            case    30: nShift = 10;  break;
            case    60: nShift = 15;  break;
            case   240: nShift = 20;  break;
            case  1440: nShift = 80;  break;
            case 10080: nShift = 100; break;
            case 43200: nShift = 200; break;
         }
//---- Expert Advisor
      spread = MarketInfo(Symbol(),MODE_SPREAD);
//----
      return(0);
   }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
   {
//----
   
//----
      return(0);
   }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Calculs preliminaires de l'expert                                |
//+------------------------------------------------------------------+   
//********** Calcul de la taille optimale du lot **********//
double LotsOptimized()
   {
      if (AcountIsMini)
         lot = 0.01;
      else
         lot=Lots;
      orders=HistoryTotal();     // Historique des ordres
      losses=0;                  // Nombre de trade perdants consécutif
/* Selection de la taille du lot */
      lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000,1);
/* Calcul du nombre de perte consecutive */
      if(DecreaseFactor>0)
         {
            for(int i=orders-1;i>=0;i--)
               {
                  if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==False) 
                     { 
                        Print("Erreur dans l historique!"); 
                        break; 
                     }
                  if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) 
                     continue;
         //----
                  if(OrderProfit()>0) 
                     break;
                  if(OrderProfit()<0) 
                     losses++;
               }
            if(losses>1) 
               lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
         }
/* Retour de la taille du lot */
      if (AcountIsMini)
         if(lot<0.01) 
            lot=0.01;
      else
         if(lot<0.1) 
            lot=0.1;
      return(lot);
   }

//********** Calcul du volume de position ouverte **********//
/*int CalculateCurrentOrders(string symbol)
   {
      int buys=0,sells=0;
//----
      for(int i=0;i<OrdersTotal();i++)
         {
            if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) 
               break;
            if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicEA)
               {
                  if(OrderType()==OP_BUY)  
                     buys++;
                  if(OrderType()==OP_SELL) 
                     sells++;
               }
         }
//---- Retour du volume
      if(buys>0) 
         return(buys);
      else       
         return(-sells);
   }
*/ 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
   {
      int    counted_bars=IndicatorCounted();
//----
      if(counted_bars<0) 
         return(-1);
      if(counted_bars>0) 
         counted_bars--;
      limit=Bars-counted_bars;
   
      for(i=0; i<limit; i++)
         {
            EMA18Current=iMA(NULL,0,18,0,MODE_EMA,PRICE_CLOSE,i);
            EMA18Previous=iMA(NULL,0,18,0,MODE_EMA,PRICE_CLOSE,i+1);
            ExtMapBuffer1[i]=EMA18Current;
            EMA28Current=iMA(NULL,0,28,0,MODE_EMA,PRICE_CLOSE,i);
            EMA28Previous=iMA(NULL,0,28,0,MODE_EMA,PRICE_CLOSE,i+1);
            ExtMapBuffer2[i]=EMA28Current;
            WMA5Current=iMA(NULL,0,5,0,MODE_LWMA,PRICE_CLOSE,i);
            WMA5Previous=iMA(NULL,0,5,0,MODE_LWMA,PRICE_CLOSE,i+1);
            ExtMapBuffer3[i]=WMA5Current;
            WMA8Current=iMA(NULL,0,8,0,MODE_LWMA,PRICE_CLOSE,i);
            WMA8Previous=iMA(NULL,0,8,0,MODE_LWMA,PRICE_CLOSE,i+1);
            ExtMapBuffer4[i]=WMA8Current;
                                                                                    
//---- Dessin des fleches et entré en trade
//---- Buy
            if((WMA8Current > EMA28Current+ digit*Point) && ( WMA8Previous <= EMA28Current))  // Croisement WMA8  up bord supérieur du tunnel
               {
                  ExtMapBuffer5[i] = Low[i] - nShift*Point;
//---- Cloture des positions Sell
//---- Calculs des positions ouvertes
                  total = OrdersTotal();
//----
                  for(i = 0; i < total; i++) 
                     {
                        if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        
                           break;
//---- Tri par paire et par Numero d'EA
                        if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicEA) 
                           {
                              prevticket = OrderTicket();
                              if(OrderType()==OP_SELL)
                                 OrderClose(prevticket, OrderLots(), Bid, 0, clCloseSell);
                           }
                     }         
//---- Ouverture de position Buy
                  OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,Slippage,15,0,NameEA,MagicEA,0,clOpenBuy);
                  return(0);
               }
//---- Sell
            if((EMA28Current > WMA8Current+ digit*Point) && ( WMA8Previous >= EMA28Current))  // Croisement WMA8  down bord inférieur du tunnel
               {
                  ExtMapBuffer6[i] = High[i] + nShift*Point;
//---- Cloture des positions Buy
//---- Calculs des positions ouvertes
                  total = OrdersTotal();
//----
                  for(i = 0; i < total; i++) 
                     {
                        if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        
                           break;
//---- Tri par paire et par Numero d'EA
                        if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicEA) 
                           {
                              prevticket = OrderTicket();
                              if(OrderType()==OP_BUY)
                                 OrderClose(prevticket, OrderLots(), Ask, 0, clCloseBuy);
                           }
                     }                  
//---- Ouverture de position Sell
                  OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,Slippage,15,0,NameEA,MagicEA,0,clOpenSell);
                  return(0);
               }
//---- Trailing Stop                        
//---- Calculs des positions ouvertes
            total = OrdersTotal();
//----
            for(i = 0; i < total; i++) 
               {
                  if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        
                     break;
//---- Tri par paire et par Numero d'EA
                  if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicEA) 
                     {
                        int prevticket = OrderTicket();
//---- Buy
                        if(OrderType()==OP_BUY)
                           {
// check for trailing stop
                              if(TrailingStop>0)  
                                 {                 
                                    if(Bid-OrderOpenPrice()>Point*TrailingStop)
                                       {
                                          if(OrderStopLoss()<Bid-Point*TrailingStop)
                                             {
                                                OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
                                                return(0);
                                             }
                                       }
                                 }
                           }
//---- Sell           
                        if(OrderType()==OP_SELL)
                           {
// check for trailing stop
                              if(TrailingStop>0)  
                                 {                 
                                    if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
                                       {
                                          if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                                             {
                                                OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
                                                return(0);
                                             }
                                       }
                                 }
                           }
//----
                     }     
               }
         }               
//----
      return(0);
   }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:

Series array that contains the lowest prices of each bar
Series array that contains the highest prices of each bar


Indicator Curves created:

Implements a curve of type DRAW_LINE

Implements a curve of type DRAW_ARROW

Indicators Used:

Moving average indicator


Custom Indicators Used:

Order Management characteristics:
Checks for the total of open orders
It Closes Orders by itself
It automatically opens orders when conditions are reached
It can change open orders parameters, due to possible stepping strategy

Other Features:

BackTest : EURUSD on H1

From 2009-08-01 to 2009-10-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-04-01 to 2010-04-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-05-01 to 2010-05-31 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-06-01 to 2010-06-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : GBPUSD on H1

From 2010-01-01 to 2010-02-27 Profit Factor:0.00 Total Net Profit:0.00

BackTest : USDCAD on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : USDJPY on H1

From 2009-11-01 to 2009-11-30 Profit Factor:0.00 Total Net Profit:0.00

Request Backtest for Sidus - EA


From : (yyyy/mm/dd) To: (yyyy/mm/dd)

Pair: Period: