Entrar no corpo do procedimento Destroy() não significa de forma alguma que ele (o procedimento) esteja funcionando corretamente.
Após a destruição real de um objeto, não foi possível acrescentar novos gráficos a ele, e eles sim!
Sobre o acerto, eu concordo. Mas, no entanto... Bem, primeiro,CGraficvazio::Destroy(). Ou seja, o método não nos deve nada. E em segundo lugar, talvez caiba ao programador acrescentar cheques? Você não pode configurar a SB para todas as tarefas...
Sobre o acerto, eu concordo. Mas, no entanto... Bem, antes de mais nada,CGraficvazio::Destroy(). Ou seja, o método não nos deve nada. E em segundo lugar, talvez caiba ao programador acrescentar cheques? Você não pode configurar a SB para todas as tarefas.
Eu traço os gráficos e produzo o texto usando o CGraphic. Se uma instância da EA estiver funcionando, tudo está bem. Se eu executar a mesma EA em gráficos diferentes, tenho a impressão de que a saída está sempre no gráfico que está atualmente na tela. E não na tabela que está especificada no método Criar. Aqui está o código da EA para demonstrar o 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;
}
Se o Expert Advisor 1 funcionar, tudo está bem
Mas se você abrir a segunda EA em outro gráfico, o primeiro gráfico começa a receber informações da primeira EA e o segundo ao mesmo tempo.
Isso significa que ela começa a cintilar, porque vários Expert Advisors trabalham em um mesmo gráfico. No entanto, na função Init, cada consultor especializado recebe a identificação do gráfico em que foi lançado. Depois recebo uma chamada para Criar.
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);
}
При исследовании и изучении закономерностей важную роль играет визуальное отображение с помощью графиков. В популярных среди научного сообщества языках программирования, таких как R и Python, для визуализации предназначена специальная функция plot. С её помощью можно рисовать линии, точечные распределения и гистограммы для наглядного представления закономерностей. В MQL5 вы можете делать всё то же самое с помощью класса CGraphics.
Eu traço os gráficos e produzo o texto usando o CGraphic. Se uma instância da EA estiver funcionando, tudo está bem. Se eu executar a mesma EA em gráficos diferentes, tenho a impressão de que a saída está sempre no gráfico que está atualmente na tela. E não na tabela que está especificada no método Criar. Aqui está o código da EA para demonstrar o problema:
Se o Expert Advisor 1 funcionar, tudo está bem
Mas se você abrir a segunda EA em outro gráfico, o primeiro gráfico começa a receber informações da primeira EA e o segundo ao mesmo tempo.
Isso significa que ela começa a cintilar, porque vários Expert Advisors trabalham em um mesmo gráfico. No entanto, na função Init, cada consultor especializado recebe a identificação do gráfico em que foi lançado. Depois recebo uma chamada para Criar.
Por favor, ajude-me a entender qual é o problema?
Em nome do objeto, não é necessário adicionar ChartId? Não me lembro se ele é adicionado dentro da função.
CGrafic::Destroy() - Não funciona!
CGrafic::Destroy() - Não funciona!
Como você o detectou? Quais são os sintomas?
Como você o identificou? Quais são os sintomas?
Bem, o código é anexado para reprodução :)
E na foto você pode ver que depois de Destroy() são adicionados os gráficos
com prefixo
_existsMas o código para reprodução está anexado :)
E na foto você pode ver que depois de Destroy() são adicionados os gráficos
com prefixo
Bem, minha pergunta era sobreCGrafic::Destroy(). Funciona - eu verifiquei com o depurador. Talvez algo esteja errado em seu código?
Bem, a pergunta era especificamente sobreCGrafic::Destroy(). Funciona - eu verifiquei no depurador. Talvez algo esteja errado em seu código?
Entrar no corpo do procedimento Destroy() não significa que ele (o procedimento) funcione corretamente.
Após a destruiçãoreal de um objeto, não foi possível adicionar novos gráficos a ele, e eles são adicionados!
Entrar no corpo do procedimento Destroy() não significa de forma alguma que ele (o procedimento) esteja funcionando corretamente.
Após a destruição real de um objeto, não foi possível acrescentar novos gráficos a ele, e eles sim!
Sobre o acerto, eu concordo. Mas, no entanto... Bem, primeiro,CGraficvazio::Destroy(). Ou seja, o método não nos deve nada. E em segundo lugar, talvez caiba ao programador acrescentar cheques? Você não pode configurar a SB para todas as tarefas...
Sobre o acerto, eu concordo. Mas, no entanto... Bem, antes de mais nada,CGraficvazio::Destroy(). Ou seja, o método não nos deve nada. E em segundo lugar, talvez caiba ao programador acrescentar cheques? Você não pode configurar a SB para todas as tarefas.
Além disso, eu alterei o método Destroy.
E ainda acrescenta gráficos!
Eu traço os gráficos e produzo o texto usando o CGraphic. Se uma instância da EA estiver funcionando, tudo está bem. Se eu executar a mesma EA em gráficos diferentes, tenho a impressão de que a saída está sempre no gráfico que está atualmente na tela. E não na tabela que está especificada no método Criar. Aqui está o código da EA para demonstrar o problema:
Se o Expert Advisor 1 funcionar, tudo está bem
Mas se você abrir a segunda EA em outro gráfico, o primeiro gráfico começa a receber informações da primeira EA e o segundo ao mesmo tempo.
Isso significa que ela começa a cintilar, porque vários Expert Advisors trabalham em um mesmo gráfico. No entanto, na função Init, cada consultor especializado recebe a identificação do gráfico em que foi lançado. Depois recebo uma chamada para Criar.
Por favor, ajude-me a entender qual é o problema.
Eu traço os gráficos e produzo o texto usando o CGraphic. Se uma instância da EA estiver funcionando, tudo está bem. Se eu executar a mesma EA em gráficos diferentes, tenho a impressão de que a saída está sempre no gráfico que está atualmente na tela. E não na tabela que está especificada no método Criar. Aqui está o código da EA para demonstrar o problema:
Se o Expert Advisor 1 funcionar, tudo está bem
Mas se você abrir a segunda EA em outro gráfico, o primeiro gráfico começa a receber informações da primeira EA e o segundo ao mesmo tempo.
Isso significa que ela começa a cintilar, porque vários Expert Advisors trabalham em um mesmo gráfico. No entanto, na função Init, cada consultor especializado recebe a identificação do gráfico em que foi lançado. Depois recebo uma chamada para Criar.
Por favor, ajude-me a entender qual é o problema?
Em nome do objeto, não é necessário adicionar ChartId? Não me lembro se ele é adicionado dentro da função.