Un EA que no para de abrir ordenes

Comparte y comenta tus estrategias de trading.

Un EA que no para de abrir ordenes

Notapor Estrada » 25 Oct 2010, 13:47

Estoy testando un EA, pero asi de pronto me viene con un problema: abre y cierra continuamente ordenes. Debe estar indicado para scalp, o no entiendo nada... (o ambas cosas, que suele suceder). Lo malo es que las cierra siempre a favor del broker... igual la hizo uno, ja ja ja

Es un sencillisimo EA de media movil.
Se agradeceria una somera explicacion acerca de que hace cada codigo. Varios ya se de que van y como cambiar sus parametros, pero por ejemplo ese que pararia el abrir tantas ordenes seguidas no se donde esta ni como corregirlo o adaptarlo a mi gusto

El EA deberia abrir UNA UNICA operacion tan pronto como la vela abriera, segun la grafica en el que estemos, por encima o por debajo del SMA, y cerrarla cuando hubiera otro cruce. Y no abrir nueva operacion solo por que hace algunas velas que hubo un cruce: Solo con el primer cruce debe abrir.
En realidad me interesa el codigo que controla cuantas operaciones debe abrir y cuando debe abrirlas, y cuando debe cerrarlas y por qué.

el codigo fuente es este:

Código: Seleccionar todo
//+------------------------------------------------------------------+
//| This MQL is generated by Expert Advisor Builder                  |
//|                                                                  |
//|                                                                  |
//|  In no event will author be liable for any damages whatsoever.   |
//|                      Use at your own risk.                       |
//|                                                                  |
//|                Please do not remove this header.                 |
//+------------------------------------------------------------------+
#property copyright "Expert Advisor Builder"
#property link      "SMA13"

extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = False;
extern double Lots = 0.1;
extern int Slippage = 3;                       
extern bool StopLossMode = True;
extern int StopLoss = 0;
extern bool TakeProfitMode = True;
extern int TakeProfit = 0;
extern bool TrailingStopMode = True;
extern int TrailingStop = 0;

#define SIGNAL_NONE 0
#define SIGNAL_BUY   1
#define SIGNAL_SELL  2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4

int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| 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 = iLow(NULL, 0, Current + 0);
      double Buy1_2 = iMA(NULL, 0, 13, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
      double Sell1_1 = iHigh(NULL, 0, Current + 0);
      double Sell1_2 = iMA(NULL, 0, 13, 0, MODE_SMA, PRICE_CLOSE, Current + 0);

   //+------------------------------------------------------------------+
   //| 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;
            }
            //Trailing stop
            if(TrailingStopMode && 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;
            }
            //Trailing stop
            if(TrailingStopMode && 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) Order = SIGNAL_BUY;
      if (Sell1_1 < Sell1_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 (StopLossMode) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
         if (TakeProfitMode) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

         Ticket = OrderSend(Symbol(), OP_BUY, Lots, 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 (StopLossMode) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
         if (TakeProfitMode) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;

         Ticket = OrderSend(Symbol(), OP_SELL, Lots, 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);
}
//+------------------------------------------------------------------+
Última edición por Estrada el 30 Dic 2010, 13:43, editado 3 veces en total
Aviso Legal: Lo que a mi me ha funcionado no necesariamente le funcionara a usted. No debe invertir dinero que no pueda permitirse perder. Lo acabará perdiendo, de hecho.
Estrada
 
Mensajes: 468
Registrado: 06 Feb 2009, 14:28
Ubicación: España
Karma: 0

Re: Problemas con un EA

Notapor Livetrader » 26 Oct 2010, 13:03

A mi me pasa lo mismo con los EA, me abren y cierran posiciones sin parar, cuando solo tienen que abrir una a una hora determinada. No entiendo lo que ocurre. ¿Alguien sabe como solucionar esto?
Livetrader
 
Mensajes: 81
Registrado: 13 Oct 2010, 12:01
Karma: 0

Re: Un EA que no para de abrir ordenes ¿cómo se arregla?

Notapor Trader2010 » 27 Oct 2010, 15:38

Hola estrada, pues parece que ese EA lo hicieron con forex building strategy, por lo que parece y pues ese constructor de expertos aun falta optimizarlo, si lo que deseas es un expertos que funcione con simples cruces, podes ver esta pagina
http://www.programandoforex.com/primer- ... etatrader/
adicional hay un post acerca de herramientas , para que mires si de pronto esta el experto que necesitas.
o en ultimas dices que experto deseas y seguramente alguno podra colaborarte con eso.
Trader2010
 
Mensajes: 317
Registrado: 17 Sep 2009, 15:26
Karma: 0

Re: Un EA que no para de abrir ordenes ¿cómo se arregla?

Notapor Estrada » 27 Oct 2010, 21:51

Trader2010 escribió:Hola estrada, pues parece que ese EA lo hicieron con forex building strategy, por lo que parece y pues ese constructor de expertos aun falta optimizarlo, si lo que deseas es un expertos que funcione con simples cruces, podes ver esta pagina
http://www.programandoforex.com/primer- ... etatrader/
adicional hay un post acerca de herramientas , para que mires si de pronto esta el experto que necesitas.
o en ultimas dices que experto deseas y seguramente alguno podra colaborarte con eso.

Gracias por el dato. Echare una mirada a esa pagina.
Aviso Legal: Lo que a mi me ha funcionado no necesariamente le funcionara a usted. No debe invertir dinero que no pueda permitirse perder. Lo acabará perdiendo, de hecho.
Estrada
 
Mensajes: 468
Registrado: 06 Feb 2009, 14:28
Ubicación: España
Karma: 0


Volver a Estrategias de Trading

¿Quién está conectado?

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

cron