Errores, fallos, preguntas - página 367

 
Yedelkin:
Lo más probable es que el problema esté en otra cosa. Tengo exactamente la misma declaración de array en OnInit() funcionaba bien y sigue funcionando. Se ha omitido la letra latina m en el nombre del array ArrSybols. ¿Tal vez sea un problema de los programadores?

Puede que se pierda, pero ¿hay alguna diferencia?

¿Y si lo escribo en nativo (lo cual no está prohibido, según tengo entendido) debería colapsar todo el terminal?

El código funciona exactamente sin esa declaración de array, incluso si sólo se especifica la dimensionalidad todo funciona.

//Вот так работает
string ArrSybols[10];

La declaración original del array era así

//List of symbols for trade on the Championship 2010
string ArrSymbolsChampionship2010[10] = {"EURUSD","GBPUSD","USDJPY","USDCHF","USDCAD",
                                        "AUDUSD","EURJPY","EURCHF","GBPJPY","GBPCHF"};
 

La pregunta sigue siendo válida.

He logrado adjuntar el indicador en una ventana separada a OBJ_CHART, pero cuando se cambia el tamaño de la ventana del indicador, no es del todo agradable, porque si la altura de OBJ_CHART es de 500, entonces la altura de la ventana del indicador se estableció en un máximo de 493. Como resultado, te deja un top feo. ¿Cómo deshacerse de él?

Código:

   if(ObjectFind(0,"MW_chart")!=0)
     {
      ObjectCreate(0,"MW_chart",OBJ_CHART,0,time[0],close[0]);
      ObjectSetString(0,"MW_chart",OBJPROP_SYMBOL,_Symbol);
      ObjectSetInteger(0,"MW_chart",OBJPROP_PERIOD,_Period);
      ObjectSetInteger(0,"MW_chart",OBJPROP_CORNER,CORNER_LEFT_UPPER);
      ObjectSetInteger(0,"MW_chart",OBJPROP_XSIZE,1000);

      ObjectSetInteger(0,"MW_chart",OBJPROP_DATE_SCALE,false);
      ObjectSetInteger(0,"MW_chart",OBJPROP_PRICE_SCALE,false);
      ObjectSetInteger(0,"MW_chart",OBJPROP_SELECTABLE,1);
      ObjectSetInteger(0,"MW_chart",OBJPROP_CHART_SCALE,2);
      ObjectSetInteger(0,"MW_chart",OBJPROP_YSIZE,500);
     }
   int h=iCCI(Symbol(),Period(),14,PRICE_TYPICAL);
   long id=ObjectGetInteger(0,"MW_chart",OBJPROP_CHART_ID);
   ChartIndicatorAdd(id,1,h);
   ChartSetInteger(id,CHART_HEIGHT_IN_PIXELS,1,493);
 
Interesting:

Puede que se haya perdido, pero ¿hay alguna diferencia?

Por supuesto que sí. No tengo que explicártelo :) Si un array se define con un nombre, pero los elementos de este array se llaman con un nombre de array diferente, entonces... :)

Si todo funciona sin inicializar el array manualmente, deberías mirar el código, como tú mismo entiendes. Después de todo, la ausencia de una inicialización explícita de la matriz de cadenas no impide que el terminal cliente inicialice esta matriz por sí mismo.

Repito: dicha cadena funcionó y sigue funcionando "lo mejor posible".

 
Yedelkin:

Por supuesto que sí. No tengo que explicártelo :) Si se declara un array con un nombre, pero se accede a los elementos de este array con un nombre de array diferente, entonces ... :)

Si todo funciona sin inicializar el array manualmente, deberías mirar el código, como tú mismo entiendes. Después de todo, la ausencia de una inicialización explícita de la matriz de cadenas no impide que el terminal cliente inicialice esta matriz por sí mismo.

Repito: dicha cadena funcionó y sigue funcionando.

No, no, el problema no está en el nombre, es que el array se rellena con una enumeración durante la declaración.

Funciona bien con todos los tipos excepto con las cadenas. Con las cadenas realmente se bloquea cualquier programa (experto o script no importa).

Este es un error obvio que se escribe a servicedesk.

Así es como funciona:

// string a[2]={"a","b"};
long   b[2]={2,3};
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
  Print("Работает");   
  }
//+------------------------------------------------------------------+

pero si se descomenta la declaración de la matriz de cadenas, no funciona.

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
 
Renat:
Compruebe el número máximo de barras en la ventana en los ajustes
Cambiado de 100000 a 1000000. Ayudó, pero sólo después de reiniciar el terminal (la ayuda dice sobre el efecto de los cambios después de pulsar OK).
 

Renat, otro caramelo salvaje, ¿estás seguro de que has encontrado el error?


 
El problema del tráfico está resuelto, pero la cuestión es que aún no hemos liberado los componentes del servidor en liveupdate. Hasta ahora se han publicado las actualizaciones del terminal cliente y los servidores estarán en la próxima actualización. Todavía no se han probado.
 
Renat:
El problema del tráfico está resuelto, pero la cuestión es que aún no hemos liberado los componentes del servidor en liveupdate. Hasta ahora se han publicado las actualizaciones del terminal cliente y los servidores estarán en la próxima actualización. Todavía no se han probado.
Ya veo. Gracias por su respuesta. Por mi parte, también les mantendré informados.
 

La última compilación (430) al probar con el periodo Forward y Custom Max - se cuelga (parece ser en el momento de cambiar a la prueba Forward). Al principio le eché la culpa a mi Asesor Experto, pero luego comprobé el siguiente código:

input int a1;
input int a2;
input int a3;
int OnInit(){return(0);}
void OnDeinit(const int reason){}
void OnTick(){}
double OnTester() {
   return(rand());
}

He establecido los parámetros para optimizar de 1 a 1000, todos los ticks, USDCAD, M4 desde el 01.01.2011 hasta hoy (con Forward - cualquier período). Congela. Desactivé los agentes remotos - reinicié el terminal - también se cuelga. Eliminado el punto de adelanto - funciona. Si la culpa es de Custom Max, no lo he comprobado. Antes de esta construcción, todo funcionaba.

 

¿Qué significa?

2011.04.17 15:21:22 Falló el agente probador