Errores, fallos, preguntas - página 2932
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
Error en la descripción:
Estructura de una transacción comercial (MqlTradeTransaction)
Este campo se llama: time_type
Estoy tratando de permitir al usuario seleccionar ambos plazos y su número desde el menú de la ventana de configuración del indicador:
y quiero que los períodos seleccionados vayan directamente a PArray. Pero del ejemplo anterior resulta que asigno al array los valores preestablecidos en el programa y no los valores introducidos por un usuario. Además, el compilador genera advertencias:
Cuando intento sustituir la última línea por
el compilador genera un error por completo:
Además, NO_PERIOD=0 significaPERIOD_CURRENTE, y eso no lo necesito, necesito algo como false o EMPTY_VALUE, pero no encajan en absoluto.
¿Cómo lo arreglo?
Casi lo he arreglado.
Dígame, ¿qué métodos de lucha existen para atrapar y corregir el error "array out of range"?
ArrayResize() hacer antes de escribir un elemento del array, contar e introducir allí el número de elementos que debe haber en el array, o utilizar un array dinámico que en sí mismo engorda. Simplemente te sales del array, por ejemplo especificas un tamaño de 100 elementos, pero como el primer elemento es #0 algunos se confunden, si escribes los números en fila te caben del 0 al 99. No soy un programador profesional si acaso(pero puedo), lo primero que me vino a la cabeza, funciona)))
Haga ArrayResize() antes de escribir un elemento del array, cuente e introduzca allí el número de elementos que debe haber en el array, o utilice un array dinámico que crezca por sí mismo.
En realidad, es dinámico de todos modos. De la ayuda:"La función sólo puede aplicarse a matrices dinámicas. Tenga en cuenta que las matrices dinámicas asignadas como búferes indicadores por la función SetIndexBuffer() no deben cambiar de tamaño. En el caso de los búferes indicadores, todas las operaciones de redimensionamiento son realizadas por el subsistema de ejecución del terminal. "Pero no es un tampón indicador, así que hay que pensar con las manos y la cabeza...
En realidad, ya es dinámico. De la ayuda:"La función sólo puede aplicarse a matrices dinámicas. Hay que tener en cuenta que las matrices dinámicas asignadas como búferes indicadores por la función SetIndexBuffer() no pueden cambiar de tamaño. En el caso de los búferes indicadores, todas las operaciones de redimensionamiento son realizadas por el subsistema de ejecución del terminal. "Pero no es un tampón indicador, así que tendrás que pensar con las manos y la cabeza...
El problema de la captura de tales errores sólo se resuelve mediante el uso de "capas", como una clase de matriz personalizada que intercepta el direccionamiento.
Cuando se ejecuta el EA cuando el algotrading está deshabilitado y luego se habilita el algotrading:
Según el código de error, la prohibición de comercio permanece, aunque la propiedad TERMINAL_TRADE_ALLOWED es verdadera
El resultado debería ser el siguiente:
Obviamente, siempre debe ser ArraySize(Arr)=1. Esto es en el caso de una copia exitosa. Pero, ¿en qué casos puede fallar la copia del bar? Cuando se produce elerror "array out of range", el terminal apunta a Arr[0].
Después de todo, el error se ha detectado, cita de la ayuda:
4401
No se ha encontrado el historial solicitado.
Lo imprimí en el cuaderno de bitácora - lo tengo:
¿Qué hago ahora con él, a dónde voy? ¿Soy una mala mano o...? Al fin y al cabo, sólo estoy copiando una barra de 0 a 1. ¿Cómo puede no serlo (la historia)? Sobre todo porque el error no siempre aparece. ¿O es necesario comprobar y cargar el historial de antemano?