[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 254
![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Amigos, antes en el editor cuando pasabas por encima de una palabra reservada y pulsabas f1 se abría una ventana en la parte inferior con una descripción de la función, ahora no tengo esto. ¿Cuál podría ser el problema?
¿Quién puede decirme cómo hacer que el resultado sea siempre positivo? (Lotes de compra - Lotes de venta)= -0,25, pero debe ser siempre positivo?
Lo hago así: if (profitbuy+profitsell > SymbProf_magBUY_magSELL* MathAbs((OrdersTotalMagicBuyLots(MagicBuy)-OrdersTotalMagicSellLots(MagicSell))/Lots)()
¿qué hay entre paréntesis?
if (profitbuy+profitsell > SymbProf_magBUY_magSELL* MathAbs((OrdersTotalMagicBuyLots(MagicBuy)-OrdersTotalMagicSellLots(MagicSell))/Lots)(??????))
¿Dónde ???? qué?
Abro una posición con un volumen = 0,05. Necesito un código - ¿cómo reducir el volumen de la posición en 0,01 cuando una pérdida alcanza 100 pips para 5 dígitos?
Gracias.
Cuantos EAs he escrito, todos ellos comprueban las condiciones del mercado (nivelación del stop, spread, etc.) cuando se opera con órdenes pendientes. He mirado cómo se escriben los gridders, pero no he visto que ninguno compruebe el valor de la misma nivelación de parada antes de enviar cualquier orden. ¿Cuál es la razón?
En el foro hay muchos metarrelatos sobre el probador y por qué sus resultados difieren de los de la vida real. Mira en la sección de artículos, este tema se ha tocado más de una vez.
Gracias.
Encontré una alternativa.
Significa que en la DLL la cadena se pasa exactamente como char*, pero no como MqlStr. Perono significa que en el programa ex4 la cadena no se almacene como MqlString. En general, la transferencia de parámetros de ex4 a dll (según los desarrolladores) es un proceso bastante complejo, acompañado de todo tipo de comprobaciones y transformaciones de parámetros.
¿Has leído la Referencia MQL4? MQL4-string es lo mismo que c-string con terminador nulo.
La estructura está diseñada únicamente para organizar matrices de cadenas. Es puramente una invención de los Metaquotes para facilitar la creación de matrices de cadenas.
StrStrA de la biblioteca shlwapi.dll. Prueba:
Registro:
El mecanismo es el siguiente. Shlwapi.dll en /system32. StrStrA es un análogo WinAPI deStringSubstr. MQL4 es un lenguaje sin tipos, por lo que si ponemos un int en la salida, en lugar de una cadena, obtendremos un puntero a la misma, no una cadena. StrStrA busca la primera aparición de una subcadena en la cadena (distingue entre mayúsculas y minúsculas, pero como nuestras cadenas son iguales, no nos importa), y como nuestras cadenas son iguales, devuelve un puntero al primer carácter de la cadena, es decir, a la propia cadena.
Permítanme explicar para aquellos que van a utilizar este código. No hay ningún formato de cadena en la WinAPI. En su lugar, sólo existe el formato lpsz (un puntero al primer elemento de una matriz de caracteres que termina en 0x00, también conocido como /0). Es un puntero a una dirección de memoria. Dado que nuestras celdas de memoria son de 32 bits (es decir, 4 bytes) y que int también tiene un tamaño de 4 bytes, todo encaja perfectamente.
Conclusión: puedes empaquetar fácilmente cadenas en arrays int, emulando así estructuras (y no hay estructuras ni clases en MQL4) para pasarlas más adelante a la dll, si se necesita una estructura o clase. La dll autoescrita para la traducción de tipos de datos (es decir, construcciones como "int(const char*)" (traducción de tipo C) o similares en C++) no puede utilizarse ahora.