Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1228

 
Vladimir Karputov:

Esto ya es correcto entonces:

y si no se cierra, mira en el archivo de registro. Podría haber un millón de razones: redirección, prohibición de comercio, ausencia de precios, proximidad de niveles de parada...

Gracias. Entonces es así) :


void CloseSellPositions()
  {
   for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of current positions
	{
          if(m_position.SelectByIndex(i))     // selects the position by index for further access to its properties
            {
             if(m_position.PositionType()==POSITION_TYPE_SELL)
                m_trade.PositionClose(m_position.Ticket()); // close a position by the specified symbol
            }
	}


  }

Sólo he añadido paréntesis. Para que los novatos no se confundan.

 

Hola. A menudo utilizo una cadena como esta en un programa para escribir registros en archivos separados:

StringConcatenate(M,"Начинаем проверять время работы модулей. i=",i); Log.write(M,__FILE__,__LINE__);

¿Puede decirme cómo acortar esta línea? De hecho, aquí sólo se cambia la propia cadena de salida y el nombre de la variable a la que salgo.

Intenté usar definir

#define  LOG(LogPerem,StrMes) StringConcatenate(M,StrMes,""); LogPerem.write(M,__FILE__,__LINE__);

pero si lo llamo así, ya no funcionará:

LOG(Log,"i=",i);
 
pivomoe:

Hola. A menudo utilizo una cadena como esta en un programa para escribir registros en archivos separados:

¿Puede decirme cómo acortar esta línea? De hecho, aquí sólo se cambia la propia cadena de salida y el nombre de la variable a la que salgo.

Intenté usar definir

pero llamarlo así ya no funcionará:

¿Conoce el preprocesador?

Su

LOG("i=",i);
se desarrolla en
StringConcatenate(M,i,""); "i=".write(M,__FILE__,__LINE__);;

y eso es lo que se alimenta al compilador.

Ni siquiera es gracioso. Receta uno: leer doku, preferiblemente no local, lo local ya implica cierta comprensión de la terminología.

Pruebe esto, puede que le ayude: https://metanit.com/cpp/c/3.1.php

С | Препроцессор
  • metanit.com
Препроцессор является обязательным компонентом компилятора языка Си. Препроцессор обрабатывает исходный текст программы до ее непосредственной компиляции. Результатом работы препроцессора является полный текст программы, который передается на компиляцию в исполняемый файл. Для управления препроцессором применяются директивы, каждая из которых...
 
Vladimir Simakov:

Ni siquiera es gracioso. Sólo hay una receta: fumarse los muelles, preferiblemente no los locales, porque los locales ya implican cierta comprensión de la terminología.

Pruebe esto, por si le sirve de ayuda: https://metanit.com/cpp/c/3.1.php

¿Qué quieres decir con "de repente"? ¿Te ha servido de algo? ¿Puedes acortar mi línea con define?


He cambiado una línea de código en mi pregunta

LOG("i=",i);

a .

LOG(Log,"i=",i);
 
pivomoe:

Hola. A menudo utilizo una cadena como ésta en un programa para escribir registros en archivos separados:

¿Puede decirme cómo acortar esta línea? De hecho, aquí sólo se cambia la propia cadena de salida y el nombre de la variable a la que salgo.

Intenté usar definir

pero si lo llamo así ya no funcionará:

Resolví mi problema utilizando hojas de funciones como ésta:

template<typename T1,typename T2,typename T3,typename T4,typename T5,typename T6,typename T7,typename T8,typename T9,typename T10>
void Write(T1 var1,T2 var2,T3 var3,T4 var4,T5 var5,T6 var6,T7 var7,T8 var8,T9 var9,T10 var10,string ffile,int line)
  {
   string Str;
   StringConcatenate(Str,var1,var2,var3,var4,var5,var6,var7,var8,var9,var10);
   write(Str,ffile,line);
  }; 

Ahora llamo a lo siguiente en mi programa

   Log.Write("Test1",__FILE__,__LINE__);  
 
pivomoe:

¿A qué te refieres con "de repente"? ¿Le ha funcionado? ¿Puede acortar mi línea usando define?


He cambiado una línea de código en mi pregunta

a

Puedo. LOG("Texto"); Di un ejemplo de cómo se implementa esto - búsquelo en algún lugar del foro.
 

Buenas tardes, el problema es el siguiente: tengo un EA que llama a un indicador personalizado para mostrar los datos, todo funciona bien en el probador de estrategias, pero en el modo de operación real cuando inicio el EA, el indicador no se muestra. En el registro escribir indicador personalizado cargado con éxito, parece susurrar, envía mensajes de texto, pero en el gráfico en la lista de indicadores también no lo es. Al mismo tiempo, si lo arrastro al gráfico recoge los datos y todo se muestra con normalidad. El indicador se encuentra en la carpeta Indicadores, en la función iCustom(NULL,0, "Nombre del indicador",Count). También he probado a añadir el #recurso "\\NIndicadores nombre.ex5", iCustom(NULL,0,"::Indicadores nombre.ex5",Count) pero no hay diferencia. ¿Cuál es la razón?

 

¿Existe un ajuste para eliminar los valores actuales de los topes de los indicadores?


 
Los comentarios no relacionados con este tema han sido trasladados a "Preguntas de los principiantes de MQL4 MT4 MetaTrader 4".
 

Estimados profesionales, ¿podrían aconsejar si es posible obtener los valores del RSI para un marco temporal de una semana en el código del asesor, pero para calcular los valores de la semana, que no comienza el lunes, sino por ejemplo desde el miércoles (es decir, la semana desde el miércoles hasta el próximo miércoles). Que yo sepa no se puede hacer con iRSI?

Hasta ahora sólo veo una forma de escribir el código para el cálculo por mí mismo. ¿Existe una solución más sencilla o una solución ya hecha?