Entrar en el cuerpo del procedimiento Destroy() no significa en absoluto que éste (el procedimiento) esté funcionando correctamente.
Después de la destrucción real de un objeto, no podíamos añadirle nuevos gráficos, ¡y lo hacen!
Sobre los golpes, estoy de acuerdo. Pero sin embargo... Bueno, en primer lugar,voidCGrafic::Destroy(). Es decir, el método no nos debe nada. Y en segundo lugar, ¿quizás sea el programador quien deba añadir comprobaciones? No se puede configurar SB para todas las tareas...
Sobre los golpes, estoy de acuerdo. Pero sin embargo... Bueno, en primer lugar,voidCGrafic::Destroy(). Es decir, el método no nos debe nada. Y en segundo lugar, ¿quizás sea el programador quien deba añadir comprobaciones? No se puede configurar SB para todas las tareas.
Trazo los gráficos y la salida del texto utilizando CGraphic. Si ejecuto una instancia del EA, todo va bien. Si ejecuto el mismo EA en diferentes gráficos, me da la impresión de que la salida siempre es en el gráfico que está actualmente en la pantalla. Y no en el gráfico que se especifica en el método Create. Aquí está el código del EA para demostrar el problema:
#include <Graphics\Graphic.mqh>
CGraphic Graphic; // Для вывода графика.long ChartId;
intOnInit()
{
ChartId= ID_Grafika_S_Expertom(); // Узнаем Id графика на котором запущен советник.
Graphic.Create(ChartId,"CPrecieIdealnayFast ", 0, 10, 30, 500, 500);
Print("OnInit ",Symbol()," ChartId=",ChartId);
EventSetMillisecondTimer(1000);
return(INIT_SUCCEEDED);
}
voidOnTimer()
{
string Str;
StringConcatenate(Str,ChartId," ",Symbol()," ",TimeLocal());
Graphic.FontSet("Arial",20);
Graphic.TextAdd(20,30, Str, ColorToARGB(clrRed), TA_LEFT|TA_TOP);
Graphic.Update();
Graphic.Redraw(true);
}
voidOnDeinit( constint Reanson )
{
Graphic.Destroy();
}
long ID_Grafika_S_Expertom()
{
string MaskaNameExpert= MQLInfoString(MQL_PROGRAM_NAME);
int SekyndNaGrafikeSTekygemExpertom= PeriodSeconds();
string SimvolExpert= Symbol();
//--- 1. Настраиваемся на первый график. Если не получилось возращаем советник не найден. //--- В цикле.//--- 2. Получаем Имя эксперта.//--- --- 2.1 Если не удалось получить имя эксперта смотрим следующий график.//--- --- --- 2.2 Если не удалось получить слеюущий график выходим из цикла.//--- 3.A Если на графике есть эксперт И в его названии есть маска: Запоминаем Id и выходим из цикла.//--- 3.B Если Нет эксперта или НЕ нашли смотрим следующий график. //--- --- 3.B.A Если не удалось получить слеюущий график выходим из цикла. //--- --- 3.B.B Если Удалось получить слеюущий график ищем в начало цикла. long ID_Chart= -1;
string NameExpert="";
long IskomoeIdChart= -1;
int LimitChatr= 1000; // Наверняка ведь не 1000 графиков.int i=0; // Cчетчик графиков//--- 1. Настраиваемся на первый график. Если не получилось возращаем советник не найден.
ID_Chart= ChartFirst();
if( ID_Chart < 0 ) return -1;
string Simvol;
int KolichestvoSekynd;
while( i < LimitChatr )
{
//--- 2. Получаем Имя эксперта.
NameExpert= ChartGetString( ID_Chart, CHART_EXPERT_NAME );
Simvol= ChartSymbol(ID_Chart);
KolichestvoSekynd= PeriodSeconds( ChartPeriod(ID_Chart) );
// Print("На графике ",ChartSymbol(ID_Chart)," Period=",ChartPeriod(ID_Chart)," Расположен советник (",NameExpert,")");//--- 3.A Если на графике есть эксперт И в его названии есть маска: Запоминаем Id и выходим из цикла. if( NameExpert != "" &&
StringFind(NameExpert,MaskaNameExpert) > -1 &&
Simvol == SimvolExpert &&
KolichestvoSekynd == SekyndNaGrafikeSTekygemExpertom )
{
// Print("НАШЛИ На графике ",ChartSymbol(ID_Chart)," Period=",ChartPeriod(ID_Chart)," Расположен советник (",NameExpert,")");
IskomoeIdChart= ID_Chart; break;
}
//--- 3.B Если Нет эксперта или НЕ нашли смотрим следующий график. else
{
// Print("Не удалось найти маску (",MaskaNameExpert," в названии эксперта (",NameExpert,") ",ChartSymbol(ID_Chart)," Period=",ChartPeriod(ID_Chart)," ID=",ID_Chart);
ID_Chart= ChartNext(ID_Chart);
i++;
//--- --- 3.B.A Если не удалось получить слеюущий график выходим из цикла. if( ID_Chart < 0 ) {/*Print("Закончились графики.");*/break;}
//--- --- 3.B.B Если Удалось получить слеюущий график ищем в начало цикла. else {/* Print("Получили новое Id графика ",ChartSymbol(ID_Chart)," Period=",ChartPeriod(ID_Chart)," ID=",ID_Chart);*/continue;}
}
}
return IskomoeIdChart;
}
Si el Asesor Experto 1 funciona, todo está bien
Pero si abre el segundo EA en otro gráfico, el primer gráfico comienza a recibir información del primer EA y del segundo al mismo tiempo.
Significa que empieza a parpadear, porque varios Asesores Expertos trabajan en un mismo gráfico. Sin embargo, en la función Init, cada Asesor Experto recibe el Id del gráfico en el que ha sido lanzado. Entonces recibo una llamada para crear.
intOnInit()
{
ChartId= ID_Grafika_S_Expertom(); // Узнаем Id графика на котором запущен советник.
Graphic.Create(ChartId,"CPrecieIdealnayFast ", 0, 10, 30, 500, 500);
Print("OnInit ",Symbol()," ChartId=",ChartId);
EventSetMillisecondTimer(1000);
return(INIT_SUCCEEDED);
}
Por favor, ayúdenme a entender cuál es el problema.
При исследовании и изучении закономерностей важную роль играет визуальное отображение с помощью графиков. В популярных среди научного сообщества языках программирования, таких как R и Python, для визуализации предназначена специальная функция plot. С её помощью можно рисовать линии, точечные распределения и гистограммы для наглядного представления закономерностей. В MQL5 вы можете делать всё то же самое с помощью класса CGraphics.
Trazo los gráficos y la salida del texto utilizando CGraphic. Si una instancia del EA se está ejecutando, todo está bien. Si ejecuto el mismo EA en diferentes gráficos, me da la impresión de que la salida siempre es en el gráfico que está actualmente en la pantalla. Y no en el gráfico que se especifica en el método Create. Aquí está el código del EA para demostrar el problema:
Si el Asesor Experto 1 funciona, todo está bien
Pero si abre el segundo EA en otro gráfico, el primer gráfico comienza a recibir información del primer EA y del segundo al mismo tiempo.
Significa que empieza a parpadear, porque varios Asesores Expertos trabajan en un mismo gráfico. Sin embargo, en la función Init, cada Asesor Experto recibe el Id del gráfico en el que ha sido lanzado. Entonces recibo una llamada para crear.
Por favor, ayúdenme a entender cuál es el problema.
En el nombre del objeto, ¿no es necesario añadir ChartId? No recuerdo si se añade dentro de la función.
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
CGrafic::Destroy() - ¡No funciona!
CGrafic::Destroy() - ¡No funciona!
¿Cómo lo has detectado? ¿Cuáles son los síntomas?
¿Cómo lo ha identificado? ¿Cuáles son los síntomas?
Bueno, el código se adjunta para la reproducción :)
Y en la imagen se puede ver que después de Destroy() se añaden los gráficos
con el prefijo
_existsPero el código se adjunta para la reproducción :)
Y en la imagen se puede ver que después de Destroy() se añaden los gráficos
con el prefijo
Bueno, mi pregunta era sobreCGrafic::Destroy(). Funciona - Lo he comprobado con el depurador... ¿Tal vez algo está mal en su código?
Bueno, la pregunta era específicamente sobreCGrafic::Destroy(). Funciona - Lo he comprobado en el depurador... ¿Tal vez algo está mal en su código?
Entrar en el cuerpo de Destroy() no significa que éste (el procedimiento) funcione correctamente.
Después de la destrucciónreal de un objeto no podemos añadir nuevos gráficos a él, ¡y se añaden!
Entrar en el cuerpo del procedimiento Destroy() no significa en absoluto que éste (el procedimiento) esté funcionando correctamente.
Después de la destrucción real de un objeto, no podíamos añadirle nuevos gráficos, ¡y lo hacen!
Sobre los golpes, estoy de acuerdo. Pero sin embargo... Bueno, en primer lugar,voidCGrafic::Destroy(). Es decir, el método no nos debe nada. Y en segundo lugar, ¿quizás sea el programador quien deba añadir comprobaciones? No se puede configurar SB para todas las tareas...
Sobre los golpes, estoy de acuerdo. Pero sin embargo... Bueno, en primer lugar,voidCGrafic::Destroy(). Es decir, el método no nos debe nada. Y en segundo lugar, ¿quizás sea el programador quien deba añadir comprobaciones? No se puede configurar SB para todas las tareas.
Además, he modificado el método de destrucción.
¡Y sigue añadiendo gráficos!
Trazo los gráficos y la salida del texto utilizando CGraphic. Si ejecuto una instancia del EA, todo va bien. Si ejecuto el mismo EA en diferentes gráficos, me da la impresión de que la salida siempre es en el gráfico que está actualmente en la pantalla. Y no en el gráfico que se especifica en el método Create. Aquí está el código del EA para demostrar el problema:
Si el Asesor Experto 1 funciona, todo está bien
Pero si abre el segundo EA en otro gráfico, el primer gráfico comienza a recibir información del primer EA y del segundo al mismo tiempo.
Significa que empieza a parpadear, porque varios Asesores Expertos trabajan en un mismo gráfico. Sin embargo, en la función Init, cada Asesor Experto recibe el Id del gráfico en el que ha sido lanzado. Entonces recibo una llamada para crear.
Por favor, ayúdenme a entender cuál es el problema.
Trazo los gráficos y la salida del texto utilizando CGraphic. Si una instancia del EA se está ejecutando, todo está bien. Si ejecuto el mismo EA en diferentes gráficos, me da la impresión de que la salida siempre es en el gráfico que está actualmente en la pantalla. Y no en el gráfico que se especifica en el método Create. Aquí está el código del EA para demostrar el problema:
Si el Asesor Experto 1 funciona, todo está bien
Pero si abre el segundo EA en otro gráfico, el primer gráfico comienza a recibir información del primer EA y del segundo al mismo tiempo.
Significa que empieza a parpadear, porque varios Asesores Expertos trabajan en un mismo gráfico. Sin embargo, en la función Init, cada Asesor Experto recibe el Id del gráfico en el que ha sido lanzado. Entonces recibo una llamada para crear.
Por favor, ayúdenme a entender cuál es el problema.
En el nombre del objeto, ¿no es necesario añadir ChartId? No recuerdo si se añade dentro de la función.