Errores, fallos, preguntas - página 564

 
El trabajo en la nube utilizando el error.
¿Cuál es la causa de este problema? No se pueden utilizar los recursos de la nube.
 
Urain:

Explícate.


Hubo un anuncio preliminar de los cambios previstos . La lista definitiva de cambios de la próxima versión se publicará después de la publicación de la propia versión.
 
Rosh:
Ya se han anunciado los cambios previstos . La lista definitiva de cambios en la próxima compilación se publicará después del lanzamiento de la propia compilación.
Gracias.
 

He roído largo y tendido el código del indicador, hasta que me he desesperado por detectar errores. No lo escribí en "Dummies" porque sospecho que no son errores míos, sino errores en el trabajo de la terminal.

El propósito del indicador es colocar fractales en el marco temporal actual desde otro marco temporal y añadir nuevos a medida que aparecen las nuevas barras fractales. Por favor, no sugieran otros métodos de disposición de las flechas del fractal, no se trata de eso; las preguntas aquí son fundamentales, y están relacionadas con este código y, tal vez, con el funcionamiento incorrecto del terminal. Tomé un ejemplo de la Ayuda de iFractals que lógicamente fue acortado a la mitad (sólo a los fractales superiores) para facilitar la percepción y se tomó prestado un poco de código del Fractals.mq5 estándar. He tenido que ser muy meticuloso para evitar cualquier malentendido: he ligado casi todos los arrays posibles y he limpiado los arrays trabajados, liberando el handle del indicador llamado, lo que no ha dado ninguna diferencia notable en los resultados. Se observaron los siguientes problemas y peculiaridades en el funcionamiento:

  1. Cuando inicio el terminal por primera vez, abro una nueva ventana de gráfico y aplico un indicador recién compilado, todos los fractales se acumulan en la barra cero del final del historial (parece que sólo se coloca uno), en lugar de colocarse de acuerdo con la idea y la lógica del código. La colocación correcta sólo puede iniciarse saltando a otros marcos temporales (a veces ni siquiera la primera vez). Además, al eliminar el indicador del gráfico, cerrar la ventana del gráfico, volver a compilar, abrir una nueva ventana y aplicar el indicador, casi siempre conseguimos obtener la disposición fractal requerida inmediatamente. Para ver el efecto erróneo, hay que descargar completamente el terminal y repetir todos los pasos del paso 1. 1. ¿Quizás el problema radica en el tiempo de vida de la manija del indicador llamado y su comportamiento específico en el arranque inicial del indicador personalizado? En el caso de una disposición incorrecta de los fractales (cuando están todos "comprimidos" en la barra de cero), la salida de todos los elementos de exact_extremum en el bucle da resultados nulos, pero la salida de los valores adyacentes de TimeUpBuffer, en base a los cuales se calcula y rellena, siempre muestra fechas de tiempo consistentemente diferentes. De ahí la pregunta: ¿qué impide que se llene durante la creación inicial del indicador, si se llena correctamente con los valores correctos durante las siguientes veces?
  2. El mismo código que heredó el mismo problema, pero ahora el énfasis está en una característica completamente diferente. En este indicador, podemos abstenernos de vincular algunas matrices de cálculo intermedio como INDICATOR_CALCULATIONS a los búferes del indicador. Este es el código inicial del indicador. Todo parece estar bien, aparte de p. Me parece bien todo, excepto el punto 1.
  3. Pero para ser muy inteligentes, vamos a intentar seguir las mejores recomendaciones y vincular las matrices para los cálculos intermedios a los buffers de los indicadores:
    #property indicator_chart_window
    #property indicator_buffers 3
    #property indicator_plots   1
    
    [...]
    
    int OnInit()
      {
       [...]
       SetIndexBuffer(1,PreliminaryUpBuffer,INDICATOR_CALCULATIONS);
       SetIndexBuffer(2,exact_extremum,INDICATOR_CALCULATIONS);
       [...]
      }
    compilar y ejecutar. Como resultado obtendremos un mensaje de error en los registros de Terminal Expert Advisor: 2011.11.11 07:42:03 (AUDUSD,H1) Conjunto fuera de rango, línea:
                CopyHigh(_Symbol,PERIOD_M1,TimeUpBuffer[shift+1]-1,
                                           TimeUpBuffer[shift],
                                           exact_extremum);
    
    La colocación de fractales en algunos marcos temporales está ausente o es esporádica.
  4. Inicie una sesión de Ouija, haga pases de mano mágicos, obedezca a la escritura automática y reemplace:
    #property indicator_chart_window
    #property indicator_buffers 3
    #property indicator_plots   1
    para:
    #define NUMBER 1
    
    #property indicator_chart_window
    #property indicator_buffers NUMBER+2
    #property indicator_plots   NUMBER
    Sea o no correcto, ¡pero incomprensiblemente funciona!

Tengo una petición a los habitantes de noosphere y especialmente a los desarrolladores: ¿podrían explicar cada elemento y aconsejar cómo depurar el código del indicador (si no voy a cambiar su implementación).

Gracias y archivos adjuntos.

P.D.: En los nombres de los archivos había paréntesis, pero después de subirlos se han estropeado.

 

¿Cómo puedo determinar el beneficio actual de una operación mágica?

este código devuelve beneficios en operaciones cerradas y los necesito en operaciones abiertas

#include <Trade\Trade.mqh>
CTrade trade;
void OnTick()
  {
   double profit=0;
   if(PositionSelect(Symbol()))profit=PositionGetDouble(POSITION_PROFIT);
   if(profit==0) trade.PositionOpen(Symbol(),ORDER_TYPE_SELL,0.1,SymbolInfoDouble(Symbol(),SYMBOL_ASK),0,0,"");
   if(profit>1) trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,0.1,SymbolInfoDouble(Symbol(),SYMBOL_ASK),0,0,"");
   
   double ld_return=0;  
   HistorySelect(0,TimeTradeServer());
   for(int i=HistoryDealsTotal()-1;i>=0;i--) // По всем сделкам от конца к началу
     {
      ulong ticket=HistoryDealGetTicket(i); // Определение тикета сделки и ее выделение
      if(ticket!=0) 
      {
      if(HistoryDealGetInteger(ticket,DEAL_TYPE)<2)
      ld_return+=HistoryDealGetDouble(ticket,DEAL_PROFIT);
      }
     }     
   Comment(ld_return);   
  }
 

¿Cómo puedo saber por qué falla la inicialización?

Reinicio los errores antes del inicio de la inicialización con

ResetLastError();

Al final de la inicialización veo un error

Print("Ошибка " + IntegerToString(GetLastError()));

Acabo entrando en la pestaña de Asesores Expertos

2011.11.11 08:47:51 SimpleExpert (EURUSD,H1) Error 0

En la pestaña "Diario"

2011.11.11 08:47:51 Error en la inicialización de SimpleExpert (EURUSD,H1) por parte de los expertos

 
Konstantin83:

¿Cómo puedo saber por qué falla la inicialización?

Antes de iniciar la inicialización, reinicié los errores con la función

ResetLastError();

Al final me aparece un error

Print("Ошибка " + IntegerToString(GetLastError()));

Obtengo el siguiente resultado en la pestaña de Expertos

2011.11.11 08:47:51 SimpleExpert (EURUSD,H1) Error 0

En la pestaña "Diario"

2011.11.11 08:47:51 Error en la inicialización de SimpleExpert (EURUSD,H1) por parte de los expertos

¿Devuelve OnInit 0 o no 0?
 
stringo:
¿Devuelve OnInit 0 o no 0?

OnInit devuelve true, por alguna razón se me pasó.

Gracias, está bien.

 
ddd06:

¿Cómo puedo determinar el beneficio actual de una operación mágica?

Este código devuelve los beneficios en las operaciones cerradas, pero los necesito en las abiertas

Mira el artículo de Dmitry(Integer). Todo está óptimamente implementado allí. Artículo:Método óptimo de cálculo del volumen de posición acumulado por número mágico especificado.
 
Buenas tardes, empecé a escribir multivariante, llamo iMA, por alguna razón en el comercio real todo funciona bien, tan pronto como se ejecuta en el probador de un experto de error eliminado porque el indicador 'Moving Average' no puede cargar [4804], ¿cuál es el indicador en el indicador, no muy claro, no pude encontrar una respuesta plausible en Internet. Por favor, aconsejadme, os lo agradecería mucho.
Документация по MQL5: Технические индикаторы / iMA
Документация по MQL5: Технические индикаторы / iMA
  • www.mql5.com
Технические индикаторы / iMA - Документация по MQL5