Una pregunta para los expertos en MQL - página 13

 

¿Por qué no funciona el código del bucle?

while(!IsStopped())

{

código

Dormir(50);

}

Pero por garrapatas funciona bien

 
seka-s79:

¿Por qué no funciona el código del bucle?

Por qué la gallina no cruza corriendo la carretera
 

¡А! ¡Lo tengo! ¡¡¡Gracias!!!

 

Problema con Symbol() MT4:

2 funciones para ilustrar:

string   SymbolOK()
{

   string   value;
   string   argument = "ANYTHING";

   if(false)
   {
      value = argument;
   }

   return(value);

}

string   SymbolPROBLEM()
{

   string   value;
   string   argument = Symbol();

   if(false)
   {
      value = argument;
   }

   return(value);

}

La ejecución de la primera da como resultado una cadena vacía:

int start()
{
   Comment(SymbolOK());
   return(0);
}

Pero la segunda función da salida a una cadena ID "EURUSD" (bueno, depende del gráfico, pero da salida, aunque según la lógica de la función debería ser una cadena vacía):

int start()
{
   Comment(SymbolPROBLEM());
   return(0);
}

Ayúdame a entender qué es lo que está mal? Gracias

 
anton.veksler:

Problema con Symbol() MT4:

2 funciones para ilustrar:

La ejecución de la primera da como resultado una cadena vacía:

Pero la segunda función da salida a una cadena ID "EURUSD" (bueno, depende del gráfico, pero da salida, aunque según la lógica de la función debería ser una cadena vacía):

Ayúdame a entender qué es lo que está mal? Gracias

Su if(false) nunca funcionará, por lo que el valor no cambiará de ninguna manera, y lo más probable es que sea una cadena vacía. Aunque no sé cómo se inician los valores de las variables de cadena. Tal vez no se inician en absoluto, a continuación, en su versión de cualquier cosa puede ser la salida.
 
Sepulca:
Su if(false) nunca funcionará, por lo que el valor no cambiará de ninguna manera, y lo más probable es que sea una cadena vacía. Aunque no sé cómo se inician los valores de las variables de cadena. Tal vez no se inician en absoluto, a continuación, en su versión de cualquier cosa puede ser la salida.

"...Si no se establece un valor inicial explícito, una variable numérica se inicializa a cero (0) y una variable de cadena se inicializa a una cadena vacía....".
 
zoritch:
"...Si no se establece un valor inicial explícito, una variable numérica se inicializa a cero (0) y una variable de cadena se inicializa a la cadena vacía...."



Ahí lo tienes, incluso lo has encontrado en la documentación también... Pero en general una d...n... pregunta. No hay que molestarse, no es tan difícil escribir en su lugar:

string   value;

algo así:

string   value="ЭтоСтрокаПокаЕёЕщёНиктоНеТрогал";
 
Sepulca:



Ahí lo tienes, incluso lo has encontrado en la documentación... Pero, en general, es una pregunta tonta. No es muy difícil escribir en su lugar:

algo así:


Gracias por responder. Sobre la documentación, sé que sin una inicialización explícita, la variable cadena será una cadena vacía, pero esta función devuelve un código de carácter de la herramienta. Es decir, nunca entraremos en una condición (falsa intencionadamente), por lo que como valor se convierte en Symbol() en esta versión (este ejemplo de la función es exagerado), es decir, con la inicialización implícita la variable cadena no es una cadena vacía (y realmente contaba con ello), pero algo no está claro, o más bien el mecanismo de inicialización implícita de la cadena no está claro. "Rellenar" la declaración de la variable no es difícil, es sólo el comportamiento del sistema fuera de la documentación que es de alguna manera confuso. Y lo más importante, esto sucede cuando se utiliza Symbol().


string   SymbolPROBLEM()
{

   string   value;
   string   argument = Symbol();

   if(false)
   {
      value = argument;
   }

   return(value);

}
 

¡Buenas tardes a todos!

He escrito un asesor experto en arbitraje. La señal de entrada se genera - si la divergencia actual de las líneas de precio del indicador DELTA_MA supera el valor DELTA establecido en los parámetros:

//жжжжжжжжжжжжжжжжжжжжжжж Ищем возможность войти в рынок жжжжжжжжжжжжжжжжжжжжжжжж
// Задаем ценовые линии МА на 1-м баре
  MA_1=   (iMA(Symbol_1,Period(),per2,0,ma_method,Price,1)-
           iMA(Symbol_1,Period(),per1,0,ma_method,Price,1)) ;  
  MA_2= (iMA(Symbol_2,Period(),per2,0,ma_method,Price,1)-
         iMA(Symbol_2,Period(),per1,0,ma_method,Price,1))   ;                 
 ДЕЛЬТА_MA  =   MathAbs(MA_1 - MA_2 ) ; //- разность ценовых линий на 1 баре        
//------------------------------------------------ 

if (ДЕЛЬТА_MA > ДЕЛЬТА && MA_1 > MA_2)//если линии разошлись больше заданного значения
       //(первыя выше второй), то продаем 1-й инструмент и покупаем/продаем второй 
      TradeDOWN=true;       else TradeDOWN=false;

¡El EA funciona bien y correctamente! Los problemas comenzaron cuando quise insertar un filtro que permite entrar sólo si se cumple la primera condición - la convergencia de las líneas de precios al mismo tiempo:

extern double       ДЕЛЬТА = 350;

extern string  ____F____  = "=== FILTER ===";
 extern bool     FILTER_= true; //Арбитр. вход реализуется только при схождении линий
El algoritmo para tal condición se implementa como sigue
Razón de la queja: