[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 289
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
He escrito lo que sucede si sólo se mueve la secuencia de comandos a una carpeta con los expertos. Funciona, pero no como debería. El script crea 8 órdenes pendientes pero si lo guardamos en la carpeta con Asesores Expertos, crea 8 órdenes pendientes después de cada tick. Lo necesito para hacer 8 nuevos pedidos sólo después de cerrar los antiguos.
¿Ha escrito sólo un "aplazamiento" en su guión? Entonces sólo procrastinará: entrarán tantos ticks como haga falta... oops... .........
Tienes que añadir un tercer chequeador-inhibidor en él...
Esto es lo que sucede si el script se mueve simplemente a la carpeta de expertos. Funciona, pero no como debería. El script crea 8 órdenes pendientes, pero si lo guardas en la carpeta de expertos, crea 8 órdenes pendientes después de cada tick. Lo necesito para hacer 8 nuevos pedidos sólo después de cerrar los antiguos.
He encontrado un error. En la biblioteca de esta función en la línea
debe borrar el cero en cada uno de los números 13, 14 y 15.Ahora correctamente
Funciones de la biblioteca Hello.
Нашел ошибку. В библиотеке для данной функции в строке
надо удалить по нулю в 13, 14 и 15 числе.
Теперь правильно
Funciones de la biblioteca Hello.
¿Ha escrito sólo un "aplazamiento" en su guión? Entonces sólo procrastinará: entrarán tantos ticks como haga falta... oops... .........
También hay que poner un comprobador de prohibiciones...
))))) No se puede resistir)))))
Muy bien, vayamos al grano. Estoy trabajando en la optimización del código de la segunda TF, he decidido traducir double en int[2] para escribir la estructura RateInfo en un solo bloque. He pensado en ello y he decidido describir todas las formas posibles, inclusolas irrealizables, para que alguien pueda estar prevenido contra los errores.
1. WinAPI (msdn). En general, no hay mucho en términos de funciones de conversión. Esto se debe a que la conversión hace un amplio uso de la traducción del tipo c, que es algo así como
en la penúltima líneaint i1 se convierte en char y en la última línea char s2 se convierte en int. Como resultado, todo este material se utiliza en las llamadas "funciones de conversión", que en realidad no están en ninguna dll de WinAPI, sino que se declaran en archivos de cabecera .h utilizando macros como
que en tiempo de compilación el preprocesador desenrolla en cadena como en el primer código. Y los archivos de cabecera .h no son dll y sólo se utilizan en el entorno de desarrollo (Studio, Borland, gcc, etc). Por lo tanto, no es ni bueno ni malo para MQL4. Sin embargo, siempre se puede comprobar si la función está declarada sólo en el archivo .h de cabecera o en funciones exportadas ocultas de alguna dll en System32.
2) WinAPI (CRT dll). Estos dlls se llaman msvcp*, msvcr*, msvcrt*, msvci*, msvcirt. Aquí la elección es más amplia: _atodbl, _atoi64, _atoldbl, _ftol, _i64toa, _itoa, _ltoa, _strtoi64, _strtoui64 _ui64toa, _ultoa, atof, atoi, atol, strtod, strtol, strtoul. Los símbolos del nombre tienen el siguiente significado:
Pero el esperado _dtoi64/_dtoui64 sigue sin aparecer. Por otro lado, utilizando las definiciones msvcrt*, msvci*, msvcirt.dll
sólo está disponible, incluso si se tuerce, como una operación de archivo (son operaciones de consola).
Usted puede buscar, además de msdn, eneste sitio, aquí está la barra de búsqueda del sitio. Una cadena de búsqueda msdn "práctica" similar está aquí. ¿En qué se diferencian? El msdn tiene una buena descripción de las funciones, pero algunas no están en absoluto (NativeAPI, por ejemplo). En cambio, en la alternativa aparece cualquier tabla de exportación de dlls del sistema, pero no hay descripción. Básicamente, un conjunto de tablas de exportación en el sitio web es más fácil que sacar las tablas de exportación de la dll usted mismo (IDA, PE Explorer, etc.).
3. inserciones en ensamblador (más exactamente, inserciones en código máquina). Lo explicaré en un momento, ya que la documentación oficial es muy imprecisa al respecto. Las inserciones C++ en MQL4
asm/_asm no es una función, sino una directiva de preprocesador, y no está definida en ninguna parte de system32/*.dll (ver búsqueda en el sitio). En otras palabras, no existe tal cosa.
Se puede escribir código máquina puro en MQL4 pero sólo en un caso: cuando según la definición WinAPI-función en msdn debe pasar un puntero a función/procedimiento comolpTimerFunc (ejemplo completo aquí en el foro), en msdn se declara como:
UINT_PTR SetTimer( HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc//<- );
olpfnWndProc (ejemploinacabado aquí en el foro, declaración msdn e intento de declaración de estructura mql4). No hay otra manera, MQL4 es un intérprete, la dirección de la función no existe, no hay nada que pasar, sólo si el código está escrito en código máquina. A continuación, se empaquetan en una matriz int y se pasan a la función por referencia.
Por lo tanto, las inserciones compiladas en ensamblador (es decir, el código máquina) no son aplicables a esta tarea, ya que tienen un alcance completamente diferente. Lo máximo que se puede conseguir es ejecutar dicha matriz int a través de la depuración en cmd a través de shell32.dll. Parece que la línea de comandos no se puede pasar allí, pero se puede escribir utilizando las teclas virtuales a través de keybd_event.
4. Escribiendo mi propia función para convertir double en int[2] en MQL4 puro sin inserciones. Pero he estimado el tamaño del código y su rendimiento, y he desistido. Ni siquiera he escrito el módulo en sí, pero creo que el algoritmo es el siguiente:
Se necesitaría mucho tiempo para ejecutarlo. Así que finalmente llegué a la solución más obvia y fácil
5. Uso de una dll autoescrita en C++. El código es el siguiente:
En el guión.
Int superior[0] se invierte porque lo pasamos por referencia. Lo conseguimos:
...ha funcionado, las líneas del volcado son idénticas. Carpeta adjunta, en ella en las bibliotecas está double.dll, en las muestras - source dll, en los scripts - script.
Noche: he vuelto a descargar el archivo y he manipulado un poco el código del script y del dll.
No entiendo qué he hecho mal. Por alguna razón la posición no se cierra como había planeado?
Este es el criterio para abrir una posición
Este es el criterio para cerrar una posición
y esto es lo que obtenemos:
¡No! ¡No puedes tocar funciones de la biblioteca estándar! Dima prohibido :-))
¿Por qué haces una payasada aquí? Si hay un error, hay que comunicarlo a servicedesk o hacer una copia propia del archivo.
No entiendo qué he hecho mal. Por alguna razón la posición no se cierra como había planeado?
Este es el criterio para abrir una posición
Este es el criterio para cerrar una posición
y esto es lo que obtenemos:
¿Y con qué frecuencia se comprueba el criterio de cierre? ¿Por casualidad no por el bar?
¿Y con qué frecuencia se comprueba el criterio de cierre? ¿Por casualidad no es por bares?
No entiendo bien el sentido de la pregunta. Modelo de comprobación del precio de apertura (método rápido en barras formadas)