Discusión sobre el artículo "Interfaces gráficas X: Gestión ampliada de las listas y tablas. Optimización de código (build 7)" - página 3
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
Tol, me doy cuenta de que este no es el tema adecuado, pero desde la última actualización....
En general: me di cuenta hace tiempo, pero estaba esperando a que saliera esta actualización (por si se arreglaba, pero no...).
Si hay una ventana con un gráfico (CStandartChart), y hay una ventana situada encima del subgráfico, entonces, si se pierde la conexión con el servidor, y luego se restablece, el objeto-gráfico queda más alto que las otras ventanas.
Sería necesario redibujar la ventana superior de alguna manera. Está claro que puedes seguir esto en tu CPrograma, pero me parece que la librería debería hacer estas cosas.
(Se ralentiza mucho, pero esto es probablemente debido a la grabación en tiempo real).
...
Si hay una ventana con un gráfico (CStandartChart), y hay una ventana situada en la parte superior del sub-gráfico, entonces si la conexión con el servidor se pierde y luego se restablece, el objeto gráfico pasa a estar más arriba que las otras ventanas.
Sería necesario redibujar la ventana situada más arriba de alguna manera. Está claro que puedes seguir esto en tu CPrograma, pero me parece que la librería debería hacer estas cosas.
(Se ralentiza mucho, pero eso es probablemente debido a la grabación en tiempo real).
Ok, gracias por el mensaje. Todavía no he probado con desconectar/reconectar. Veré lo que puedo hacer.
¿Por qué van tan mal los frenos? ¿Con qué programa se graba? Es muy lento. Parece como si el procesador estuviera cargado al 100%? He probado a grabar con Fast Stone Capture y a usar activamente la GUI de la aplicación MQL. Todo es normal, nada se ralentiza así.
Vale, gracias por el mensaje. Todavía no he probado con desconectar/reconectar. Veré lo que puedo hacer.
¿A qué se debe la ralentización? ¿Con qué programa se está grabando? Es muy lento. Parece como si el procesador estuviera cargado al 100%. He probado a grabar con Fast Stone Capture y a utilizar activamente la GUI de la aplicación MQL. Todo va bien, nada se ralentiza así.
Artyom Trishkin:
...
Pero, por cierto, también estoy ralentizando sin grabación en tiempo real.
Hay un montón de objetos.
Y el temporizador tiene que escanear muchos símbolos para los niveles de cruce de precios, que son diferentes para cada símbolo, y la lista de símbolos es dinámica, y también necesita ser monitoreado por los cambios.
...¿Con qué frecuencia se realizan estas comprobaciones?
Temporizador:
//| Temporizador|
//+------------------------------------------------------------------+
void CProgram::OnTimerEvent(void)
{
CWndEvents::OnTimerEvent();
//---
static int count=0;
if(count<500)
{
count+=TIMER_STEP_MSC;
return;
}
//--- Poner a cero el contador
count=0;
//--- Capta el cambio en la Vigilancia del Mercado
if(IsChangeSymbolListInMW()) {
UpdateAllDataAndTables();
}
//--- Captar la aparición de nuevas barras
bool need_update=false;
for(int i=0; i<ArraySize(m_array_new_bar); i++) {
if(m_array_new_bar[i].isNewBar()>0) {
string sy=m_array_new_bar[i].GetSymbol();
ENUM_TIMEFRAMES timeframe=m_array_new_bar[i].GetPeriod();
Print("Nuevo Bar".,sy," en ",GetNameTF(timeframe));
if(timeframe==PERIOD_D1) {
for(int j=0; j<ArraySize(m_array_symbols_new_sig_d1); j++) delete m_array_symbols_new_sig_d1[j].symbol_tick;
ZeroMemory(m_array_symbols_new_sig_d1);
}
if(timeframe==PERIOD_W1) {
for(int j=0; j<ArraySize(m_array_symbols_new_sig_w1); j++) delete m_array_symbols_new_sig_w1[j].symbol_tick;
ZeroMemory(m_array_symbols_new_sig_w1);
}
if(timeframe==PERIOD_MN1) {
for(int j=0; j<ArraySize(m_array_symbols_new_sig_mn); j++) delete m_array_symbols_new_sig_mn[j].symbol_tick;
ZeroMemory(m_array_symbols_new_sig_mn);
}
need_update=true;
}
}
if(need_update) {
UpdateAllDataAndTables();
}
//--- Cambio de los textos de valor en la ventana principal
short row=(short)m_table_base_symbol_list.SelectedItem();
ChangeTextData(row);
//--- Buscando criterios de notificación D1, W1, MN1
GetNotify(m_sorted_struct_symbols_d1,m_array_symbols_new_sig_d1,PERIOD_D1);
GetNotify(m_sorted_struct_symbols_w1,m_array_symbols_new_sig_w1,PERIOD_W1);
GetNotify(m_sorted_struct_symbols_mn,m_array_symbols_new_sig_mn,PERIOD_MN1);
//--- Redibujar el gráfico
m_chart.Redraw();
}
//+------------------------------------------------------------------+
Temporizador:
¿Es necesario hacer este tipo de comprobación de condiciones exactamente en el temporizador?
Si es en el temporizador, ¿por qué tan a menudo?
Puedes intentar reducir el paso y establecer un intervalo diferente para cada grupo de condiciones. He añadido la clase CTimeCounter para este propósito. Lea el artículo de nuevo para entender cómo usar esto. Sección: Aplicación para el test de ítems
¿Es necesario comprobar las condiciones de este tipo en el temporizador?
Si es en el temporizador, ¿por qué tan a menudo?
Puedes intentar reducir el paso y establecer un intervalo diferente para cada grupo de condiciones. Para ello he añadido la clase CTimeCounter. Lea el artículo de nuevo para entender cómo usar esto. Sección: aplicación de prueba de elementos
Sí, ya estoy pensando en esto.
La comprobación de una nueva barra se puede hacer con menos frecuencia, por supuesto - no es crítico. Pero la comprobación de los precios que cruzan los niveles en algunos símbolos (su lista cambia dinámicamente, respectivamente, y las instancias de la clase de trabajo con los ticks son dinámicamente añadidos / eliminados) debe hacerse con la suficiente frecuencia para ser capaz de determinar los hechos de cruces en el tiempo.
Cuando leí que ahora es posible tener un intervalo diferente para diferentes eventos, inmediatamente pensé en tal necesidad.
... Pero la comprobación de cruce por precios de niveles en algunos símbolos (su lista cambia dinámicamente, respectivamente, y las instancias de la clase de trabajo con ticks se añaden/eliminan dinámicamente) debe hacerse con la suficiente frecuencia para poder determinar los hechos de cruces a tiempo.
Así que, si trabajas con ticks, es mejor hacer estas comprobaciones en OnTick(). ¿Por qué hay que cincelar el temporizador cada 16 ms?
Es multidivisa. ¿Qué OnTick()?
A través de eventos, entonces. Pero no a través de un temporizador con esa frecuencia. En general, los frenos están de tu lado, no del lado de la librería o de la grabación de vídeo. No tengo más preguntas.