[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 80

 
drknn:
¿Quizás el valor allí termina con un cero y este último cero simplemente se descarta en el proceso de normalización? ¿Descartado porque la entrada 0,1 equivale a 0,10 y el cero es mejor descartarlo?

Es poco probable, a mano miré el valor de la línea en el punto de la última barra, no había ningún cero... y en algunos casos el valor se convirtió exactamente en el cuarto dígito, a veces en el tercero. ya que el dígito final era >5
 
drknn:


No funciona( devuelve un valor correcto a la cadena, pero la variable está llena de mierda, 3 dígitos o 4.

¿hay alguna forma de obtener este valor correctamente a partir de la cadena?

 
NameLess:


No funciona(( la cadena devuelve un valor correcto pero la variable está llena de mierda, 3 dígitos o 4.

¿Es posible obtener este valor de la cadena correctamente?


Puedes hacer un dll-case y redondear en él. Tuve que hacer algo así para descartar simplemente la parte fraccionaria de un número. Lo que no está claro aquí: ¿el código indicador está diseñado para cinco dígitos? Esta pregunta probablemente sólo pueda ser respondida por un desarrollador. O simplemente haz tu propio indicador.
 
drknn:

Puedes hacer un dll y redondo en él. Tuve que hacer esto para descartar simplemente la parte fraccionaria de un número. Lo que no está claro aquí: ¿el código indicador está diseñado para cinco dígitos? Esta pregunta probablemente sólo pueda ser respondida por un desarrollador. O simplemente haz tu propio indicador.

He comprobado iMA y parece estar bien. Para ser honesto, no sé qué lo causa.
 
NameLess:

He visto iMA y parece estar bien. para ser honesto no entiendo por qué sucede. pero lo hace. no tengo idea de qué hacer con las dlls, ¿podría al menos enviarme un enlace para leer?


No tengo ni idea de dónde conseguir el enlace para leer el contenido del dll-case. O intenta poner un valor en MQL4 y hacer una función que tome sólo X caracteres de la cadena. Por ejemplo, precio = 1,25254130 - este valor fue introducido en la cadena. La función debe recorrer los primeros 7 caracteres y devolver exactamente esos, es decir, 1,2525254. Simplemente hacemos un bucle con este valor en una nueva cadena, cadena por cadena, como una cuenta. Luego, conviértela en un doble y devuélvela desde la subrutina.

Sobre la dll - mira algo así en este foro https://www.mql5.com/ru/forum/124088

 
drknn:


Esto ya es un problema: se necesita al menos un conocimiento superficial de un lenguaje de programación. O intenta tomar el valor de la cadena y hacer una función que saque sólo x caracteres de la cadena. Por ejemplo, precio = 1,25254130 - este valor fue introducido en la cadena. La función debería recorrer los 7 primeros caracteres y devolver exactamente esos, es decir, 1,2525254. Simplemente hacemos un bucle con este valor en una nueva cadena, cadena por cadena, como una cuenta. Luego, conviértela en un doble y devuélvela desde la subrutina.

Sobre la dll - ver algo así en este foro https://www.mql5.com/ru/forum/124088


Lo sé, no en profundidad, pero no en cualquier lenguaje en absoluto)))) sí el método es familiar. gracias por el consejo. sólo que nunca he tratado con dlls, ya que nunca he hecho la programación profesionalmente.

Para ser sincero estoy confundido, porque el problema no es para nada lógico, no puedo sacar un valor del indicador, o mejor dicho puedo, pero solo a una cadena.

 

Por favor, indique cómo permitir una única ejecución de una condición en un EA (por ejemplo, la apertura de una orden), en lugar de repetirla con cada tick. En este caso, al cerrar una posición, el EA no debería abrir una nueva. He intentado imaginarlo, pero no funciona como se pretende.

extern bool    BUY         = true;
extern int     Magic       = 0;
extern double  Lot         = 0.1;
extern int     takeprofit  = 0;
extern int     stoploss    = 0;
extern int     slippage    = 3; 
double SL,TP;
int init(){
    return(0);
  }
int start()
{
   if (BUY)
   {
      if (takeprofit!=0) TP  = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
      if (stoploss!=0)   SL  = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0;     
      OPENORDER ("Buy");
   }

return(0);
}
void OPENORDER(string ord)
{
int error;
 while (true)
 { error=true;
 if (ord=="Buy") error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,"",Magic,0){BUY = false;}
}
return;
}
Se lo agradezco de antemano.


 
nemo811:

Por favor, indique cómo permitir una única ejecución de una condición en un EA (por ejemplo, la apertura de una orden), en lugar de repetirla con cada tick. En este caso, al cerrar una posición, el EA no debería abrir una nueva. He intentado imaginarlo, pero no funciona como se pretende.

Se lo agradezco de antemano.



Resolví este problema poniendo una bandera en la condición antes de cualquier acción (apertura en este caso); dentro de la condición, después de abrir una orden, la bandera cambia su valor y, respectivamente, en el siguiente tick el programa no entrará en esta condición con la apertura de la orden. Si el proceso está automatizado, entonces puedes poner una función que borre todas las banderas cuando no haya posiciones abiertas, de lo contrario el EA sólo abrirá la orden una vez y se desvanecerá, porque la bandera no cambiará su valor
 
NameLess:

Resolví este problema colocando una bandera en la condición antes de cualquier acción (en este caso, la apertura), dentro de la condición después de abrir una orden la bandera cambia el valor y, respectivamente, en el siguiente tick el programa no entrará en esta condición con la apertura de una orden. Si el proceso está automatizado, entonces usted puede utilizar una función que borraría todas las banderas en el momento de la ausencia de posiciones abiertas, de lo contrario el EA sólo abrirá la orden una vez y luego se desvanecerá, porque la bandera no cambiará el valor

Por favor, dame un ejemplo. Estoy aprendiendo y aún no me he enfrentado a la tarea de poner una bandera. )
 
nemo811:

Por favor, dame un ejemplo. Estoy aprendiendo, y aún no me he enfrentado a la tarea de configurar una bandera. )

Yo no soy un profesional, sólo te cuento cómo resolví el problema. No es un código pequeño y te llevará más tiempo resolverlo que sacar la idea desde cero)))
Razón de la queja: