Ejecutar más de un EA a la vez - página 2

 

Primero, asegúrese de que ha inicializado todas las variables con algunos valores por defecto significativos. Por ejemplo, usted está utilizando BuyTicket antes de que se inicialice, por lo que puede ser cualquier valor en la primera ejecución.

Extracto del archivo de referencia MQL4 (MQL4 Reference / Language Basics / Variables / Initialization of Variables):

If a variable is not initialized explicitly, the value stored in this variable can be any. Implicit initialization is not used.

Por lo tanto, en la siguiente parte añadir valores por defecto a las variables:

//Global Variables
int BuyTicket;
int SellTicket;
double InternalStopLoss;
double CalcDigits;
double CalcPoint;
bool MABuyFanning;
bool MASellFanning;
int SelectedOrder;
bool Closed;
int ErrorCode;
string ErrLog;
double BuyStopLoss;
double SellStopLoss;
bool NewBar;
double ThisBarOpen;
double SmallMA;
double MediumMA;
double LargeMA; 
 

Y sí, MQL4 tiene bugs y rarezas, pero la mayoría de los errores podrían evitarse simplemente leyendo lo básico en el manual de referencia.

Además, hay un artículo sobre errores comunes en los programas MQL4. Compruebe la parte superior del foro, usted encontrará el enlace.

 
drazen64:

Primero, asegúrese de que ha inicializado todas las variables con algunos valores por defecto significativos. Por ejemplo, usted está utilizando BuyTicket antes de que se inicialice, por lo que puede ser cualquier valor en la primera ejecución.

Extracto del archivo de referencia MQL4 (MQL4 Reference / Language Basics / Variables / Initialization of Variables):

Por lo tanto, en la siguiente parte añadir valores por defecto a las variables:



Eso es cierto, sin embargo, depende del uso. A veces sólo quieres declararlo porque sabes de dónde se tomará el valor, y a veces necesitas inicializarlo con algo ya que puede no funcionar correctamente si no se inicializa con valores específicos por defecto.
 
deysmacro:

Eso es cierto, sin embargo, depende del uso. A veces sólo quieres declararla porque sabes de dónde se tomará el valor, y a veces necesitas inicializarla con algo ya que puede no funcionar correctamente si no se inicializa con valores específicos por defecto.


No necesita inicializar las variables en el lugar de la definición, pero definitivamente debe inicializar las variables a algún valor antes de usarlas.

Si las usa antes de la inicialización, el valor es impredecible. También lo son sus errores. Antes de cualquier análisis más profundo del código, debería ocuparse de este problema.

Los compiladores modernos levantan errores si usted trata de usar variables no inicializadas. MQL4, por desgracia, no lo hace, por lo que el codificador debe estar seguro de que todo está correctamente inicializado.

 
Podrías señalarle 1 cosa que utiliza el var sin inicializaciones adecuadas.
 
deysmacro:
Podrías señalarle 1 cosa que utiliza el var sin inicializaciones adecuadas.


Lea la segunda frase en la primera línea de https://www.mql5.com/en/forum/151167/page2#954612

Podrías leer la respuesta antes de criticarla.

Por cierto, ¿cómo estás ayudando aquí? Los comentarios "inteligentes" no ayudan mucho.

 
for(Counter = 0; Counter <=OrdersTotal()-1; Counter++)
               {
               SelectedOrder = OrderSelect(Counter,SELECT_BY_POS);
               if(OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() && OrderType() == OP_BUY)
                  {
                 // while(IsTradeContextBusy()) Sleep(10);
                  Closed = OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_BID),Slippage,Red);
                  if(Closed == true) BuyTicket = 0;
                  else Alert("Symbol: ",Symbol()," Ticket: ",BuyTicket," unable to close buy order(s): buy ma convergence close routine");                  
                  }
            Counter--;               
                }
 

Yo si leí antes de publicar el mío. Es decir, muéstrale una cosa que tenga que ver con el var y que ese var no esté bien inicializado.


Jeje. GumRai lo supera. XD

 

Si te he entendido bien, ¿estás diciendo que el hecho de que utilice variables no inicializadas no es algo de lo que preocuparse sólo porque no señalé exactamente lo que podría ocurrir porque BuyTicket y algunas otras variables contienen algunos valores desconocidos cuando el programa se inicia?

Pues que así sea. Que use variables no inicializadas. ¿Qué podría salir mal?

 
He inicializado todas las variables como se sugiere, así como la eliminación de "==true" de los booleanos. También he eliminado todos los espacios en blanco del interior de las líneas de código. Lo he probado usando el depurador en dos símbolos diferentes - uno en el portátil y otro en el PC durante aproximadamente 2 horas y ambos funcionaron bien, vendiendo, comprando y cerrando en los momentos correctos sin ningún error. Sin embargo, luego añadí el EA a los otros 3 símbolos tanto en el PC como en el portátil, de modo que los 4 funcionaban en ambos terminales y todos empezaron a fallar en las entradas y salidas a partir de entonces. Al final de la prueba, en un terminal eliminé los EAs antes de cerrar las posiciones abiertas y en el otro terminal eliminé los EAs después de cerrar las posiciones abiertas. El terminal que todavía tenía posiciones abiertas tardó mucho tiempo en eliminar los EAs, pero el terminal sin posiciones abiertas eliminó los 4 EAs inmediatamente. El código revisado se publica por separado a continuación.