EMAs Cross .. Incrementar Lotes x Operacion

Espacio para compartir y debatir sobre Asesores Expertos de MetaTrader

EMAs Cross .. Incrementar Lotes x Operacion

Notapor tRekU » 27 Jun 2011, 20:22

Hola..

Acabo de migrar una cuenta de ForexYard, de su plataforma FXTrad, al MetaTrader 4.. y todo es nuevo para mi...

Os cuento una duda a ver si me podeis echar un cable...

Antes tenia una estrategia automatica corriendo muy sencillita... Una EMA CROSS de 2 EMAs. Cuando se cerraba una operacion con perdidas, la siguiente operacion sumaba 1 lote mas... es decir si la primera operacion de un lote cerraba con perdidas, la siguiente operacion la abria de 2, si cerraba con perdidas, de 3 ... etc... y cuando cerraba una operacion con beneficios, volvia a empezar a comprar 1 lote.

Partiendo de la base de una estrategia de EMAs CROSS que he encontrado y parece que funciona. Necesitaria que me hecheis un cable a implementar las otras funciones que os he explicado.

De antemano gracias....

Sorry por el toston, pero no tengo ni papa de programacion... y lo poco que hago es con copy pastes... tardando una eternidad..!!

Código: Seleccionar todo
//+------------------------------------------------------------------+
//|                                                     EMA_6_12.mq4 |
//|                                                      Coders Guru |
//|                                         http://www.forex-tsd.com |
//+------------------------------------------------------------------+
#property copyright "Coders Guru"
#property link      "http://www.forex-tsd.com"
//---- Includes
#include <stdlib.mqh>
//---- Trades limits
extern double    TrailingStop=1000;
extern double    TakeProfit=10000; //any big number
extern double    Lots=0.01;
extern int       Slippage=5;
//--- External options
extern int       CurrentBar=1;
extern bool      UseClose=true;
//--- Indicators settings
extern int       MaMode=1; /* MODE_SMA 0   MODE_EMA 1  MODE_SMMA 2 MODE_LWMA 3 */
extern int       ShortEma=1;
extern int       LongEma=158;
//--- Global variables
int      MagicNumber=123430;
string   ExpertComment="EMA_6_12";
bool     LimitPairs=false;
bool     LimitFrame=false;
int      TimeFrame=60;
string   LP[]={"EURUSD"}; // add/remove the paris you want to limit.
bool     Optimize=false;
int      NumberOfTries=5;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool isNewSymbol(string current_symbol)
  {
   //loop through all the opened order and compare the symbols
   int total =OrdersTotal();
   for(int cnt=0;cnt < total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      string selected_symbol=OrderSymbol();
      if (current_symbol==selected_symbol && OrderMagicNumber()==MagicNumber)
         return(False);
     }
   return(True);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Crossed()
  {
   double EmaLongPrevious=iMA(NULL,0,LongEma,0,MaMode, PRICE_CLOSE, CurrentBar+1);
   double EmaLongCurrent=iMA(NULL,0,LongEma,0,MaMode, PRICE_CLOSE, CurrentBar);
   double EmaShortPrevious=iMA(NULL,0,ShortEma,0,MaMode, PRICE_CLOSE, CurrentBar+1);
   double EmaShortCurrent=iMA(NULL,0,ShortEma,0,MaMode, PRICE_CLOSE, CurrentBar);
//----
   if (EmaShortPrevious<EmaLongPrevious && EmaShortCurrent>EmaLongCurrent)    return(1); //up trend
   if (EmaShortPrevious>EmaLongPrevious && EmaShortCurrent<EmaLongCurrent)    return(2); //down trend
//----
   return(0); //elsewhere
  }
//+------------------------------------------------------------------+
int start()
  {
   int cnt, ticket, total,n;
   double trend ;
   if(Bars<100) {Print("bars less than 100"); return(0);}
   if(LimitFrame)
     {
      if(Period()!=TimeFrame) {Print("This EA is not working with this TimeFrame!"); return(0);}
     }
   if(LimitPairs)
     {
      if(AllowedPair(Symbol())==false) {Print("This EA is not working with this Currency!"); return(0);}
     }
//--- Trading conditions
   bool BuyCondition=false , SellCondition=false , CloseBuyCondition=false , CloseSellCondition=false;

   if (Crossed()==1 )
      BuyCondition=true;
   if (Crossed ()== 2 )
      SellCondition=true;
   if (Crossed ()== 2)
      CloseBuyCondition=true;
   if (Crossed ()== 1)
      CloseSellCondition=true;
   total =OrdersTotal();
   if(total < 1 || isNewSymbol(Symbol()))
     {
      if(BuyCondition) //<-- BUY condition
        {
         ticket=OpenOrder(OP_BUY); //<-- Open BUY order
         CheckError(ticket,"BUY");
         return(0);
        }
      if(SellCondition) //<-- SELL condition
        {
         ticket=OpenOrder(OP_SELL); //<-- Open SELL order
         CheckError(ticket,"SELL");
         return(0);
        }
      return(0);
     }
   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
        {
         if(OrderType()==OP_BUY)   //<-- Long position is opened
           {
            if(UseClose)
              {
               if(CloseBuyCondition) //<-- Close the order and exit!
                 {
                  CloseOrder(OrderType()); return(0);
                 }
              }
            TrailOrder(OrderType()); return(0); //<-- Trailling the order
           }
         if(OrderType()==OP_SELL) //<-- Go to short position
           {
            if(UseClose)
              {
               if(CloseSellCondition) //<-- Close the order and exit!
                 {
                  CloseOrder(OP_SELL); return(0);
                 }
              }
            TrailOrder(OrderType()); return(0); //<-- Trailling the order
           }
        }
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+
int OpenOrder(int type)
  {
   int ticket=0;
   int err=0;
   int c=0;
   if(type==OP_BUY)
     {
      for(c=0;c < NumberOfTries;c++)
        {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,Ask+TakeProfit*Point,ExpertComment,MagicNumber,0,Green);
         err=GetLastError();
         if(err==0)
           {
            break;
           }
         else
           {
            if(err==4 || err==137 ||err==146 || err==136) //Busy errors
              {
               Sleep(5000);
               continue;
              }
            else //normal error
              {
               break;
              }
           }
        }
     }
   if(type==OP_SELL)
     {
      for(c=0;c < NumberOfTries;c++)
        {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,Bid-TakeProfit*Point,ExpertComment,MagicNumber,0,Red);
         err=GetLastError();
         if(err==0)
           {
            break;
           }
         else
           {
            if(err==4 || err==137 ||err==146 || err==136) //Busy errors
              {
               Sleep(5000);
               continue;
              }
            else //normal error
              {
               break;
              }
           }
        }
     }
   return(ticket);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool CloseOrder(int type)
  {
   if(OrderMagicNumber()==MagicNumber)
     {
      if(type==OP_BUY)
         return(OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet));
      if(type==OP_SELL)
         return(OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Violet));
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void TrailOrder(int type)
  {
   if(TrailingStop>0)
     {
      if(OrderMagicNumber()==MagicNumber)
        {
         if(type==OP_BUY)
           {
            if(Bid-OrderOpenPrice()>Point*TrailingStop)
              {
               if(OrderStopLoss()<Bid-Point*TrailingStop)
                 {
                  OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
                 }
              }
           }
         if(type==OP_SELL)
           {
            if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
              {
               if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                 {
                  OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CheckError(int ticket, string Type)
  {
   if(ticket>0)
     {
      if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print(Type + " order opened : ",OrderOpenPrice());
     }
   else Print("Error opening " + Type + " order : ", ErrorDescription(GetLastError()));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool AllowedPair(string pair)
  {
   bool result=false;
   for(int n=0;n < ArraySize(LP); n++)
     {
      if(Symbol()==LP[n])
        {
         result=true;
        }
     }
   return(result);
  }
//+------------------------------------------------------------------+
tRekU
 
Mensajes: 22
Registrado: 03 May 2011, 16:50
Karma: 0

Volver a Expert Advisors

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron