Eh bien, la question portait spécifiquement surCGrafic::Destroy(). Cela fonctionne - je l'ai vérifié dans le débogueur... Peut-être y a-t-il un problème dans votre code ?
Entrer dans le corps de la procédure Destroy() ne signifie pas qu'elle (la procédure) fonctionne correctement.
Après la destructioneffective d'un objet, nous ne pouvions pas y ajouter de nouveaux graphes, et ils sont ajoutés !
Entrer dans le corps de la procédure Destroy() ne signifie pas du tout qu'elle (la procédure) fonctionne correctement.
Après la destruction effective d'un objet, nous ne pouvions pas y ajouter de nouveaux graphiques, et c'est pourtant le cas !
Pour les coups, je suis d'accord. Mais néanmoins... Eh bien, tout d'abord,voidCGrafic::Destroy(). C'est-à-dire que la méthode ne nous doit rien. Et deuxièmement, c'est peut-être au programmeur d'ajouter des contrôles ? Vous ne pouvez pas configurer SB pour toutes les tâches...
Pour les coups, je suis d'accord. Mais néanmoins... Eh bien, tout d'abord,voidCGrafic::Destroy(). C'est-à-dire que la méthode ne nous doit rien. Et deuxièmement, c'est peut-être au programmeur d'ajouter des contrôles ? Vous ne pouvez pas configurer SB pour toutes les tâches.
Je trace les graphiques et j'affiche le texte en utilisant CGraphic. Si une seule instance de l'EA est en cours d'exécution, tout va bien. Si j'exécute le même EA sur différents graphiques, j'ai l'impression que la sortie se fait toujours sur le graphique qui est actuellement à l'écran. Et non sur le graphique qui est spécifié dans la méthode Create. Voici le code de l'EA pour démontrer le problème :
#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 l'Expert Advisor 1 fonctionne, tout va bien
Mais si vous ouvrez le second EA dans un autre graphique, le premier graphique commence à recevoir des informations du premier EA et du second en même temps.
Cela signifie qu'il commence à clignoter, car plusieurs conseillers experts travaillent sur un seul et même graphique. Cependant, dans la fonction Init, chaque Expert Advisor reçoit l'Id du graphique dans lequel il a été lancé. Puis je reçois un appel pour créer.
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);
}
Veuillez m'aider à comprendre quel est le problème ?
При исследовании и изучении закономерностей важную роль играет визуальное отображение с помощью графиков. В популярных среди научного сообщества языках программирования, таких как R и Python, для визуализации предназначена специальная функция plot. С её помощью можно рисовать линии, точечные распределения и гистограммы для наглядного представления закономерностей. В MQL5 вы можете делать всё то же самое с помощью класса CGraphics.
Je trace les graphiques et j'affiche le texte en utilisant CGraphic. Si une seule instance de l'EA est en cours d'exécution, tout va bien. Si j'exécute le même EA sur différents graphiques, j'ai l'impression que la sortie se fait toujours sur le graphique qui est actuellement à l'écran. Et non sur le graphique qui est spécifié dans la méthode Create. Voici le code de l'EA pour démontrer le problème :
Si l'Expert Advisor 1 fonctionne, tout va bien
Mais si vous ouvrez le second EA dans un autre graphique, le premier graphique commence à recevoir des informations du premier EA et du second en même temps.
Cela signifie qu'il commence à clignoter, car plusieurs conseillers experts travaillent sur un seul et même graphique. Cependant, dans la fonction Init, chaque Expert Advisor reçoit l'Id du graphique dans lequel il a été lancé. Puis je reçois un appel pour créer.
Veuillez m'aider à comprendre quel est le problème ?
Dans le nom de l'objet, il ne faut pas ajouter ChartId ? Je ne me souviens pas si elle est ajoutée à l'intérieur de la fonction.
CGrafic::Destroy() - Ne fonctionne pas !
CGrafic::Destroy() - Ne fonctionne pas !
Comment l'avez-vous détecté ? Quels sont les symptômes ?
Comment l'avez-vous identifié ? Quels sont les symptômes ?
Eh bien, le code est joint pour la lecture :)
Et sur l'image vous pouvez voir qu'après Destroy() les graphiques sont ajoutés
avec préfixe
_existsMais le code pour la lecture est joint :)
Et sur l'image vous pouvez voir qu'après Destroy() des graphiques sont ajoutés
avec préfixe
Ma question portait surCGrafic::Destroy(). Cela fonctionne - je l'ai vérifié avec le débogueur... Peut-être y a-t-il un problème dans votre code ?
Eh bien, la question portait spécifiquement surCGrafic::Destroy(). Cela fonctionne - je l'ai vérifié dans le débogueur... Peut-être y a-t-il un problème dans votre code ?
Entrer dans le corps de la procédure Destroy() ne signifie pas qu'elle (la procédure) fonctionne correctement.
Après la destructioneffective d'un objet, nous ne pouvions pas y ajouter de nouveaux graphes, et ils sont ajoutés !
Entrer dans le corps de la procédure Destroy() ne signifie pas du tout qu'elle (la procédure) fonctionne correctement.
Après la destruction effective d'un objet, nous ne pouvions pas y ajouter de nouveaux graphiques, et c'est pourtant le cas !
Pour les coups, je suis d'accord. Mais néanmoins... Eh bien, tout d'abord,voidCGrafic::Destroy(). C'est-à-dire que la méthode ne nous doit rien. Et deuxièmement, c'est peut-être au programmeur d'ajouter des contrôles ? Vous ne pouvez pas configurer SB pour toutes les tâches...
Pour les coups, je suis d'accord. Mais néanmoins... Eh bien, tout d'abord,voidCGrafic::Destroy(). C'est-à-dire que la méthode ne nous doit rien. Et deuxièmement, c'est peut-être au programmeur d'ajouter des contrôles ? Vous ne pouvez pas configurer SB pour toutes les tâches.
De plus, j'ai modifié la méthode Destroy.
Et ça ajoute encore des graphiques !
Je trace les graphiques et j'affiche le texte en utilisant CGraphic. Si une seule instance de l'EA est en cours d'exécution, tout va bien. Si j'exécute le même EA sur différents graphiques, j'ai l'impression que la sortie se fait toujours sur le graphique qui est actuellement à l'écran. Et non sur le graphique qui est spécifié dans la méthode Create. Voici le code de l'EA pour démontrer le problème :
Si l'Expert Advisor 1 fonctionne, tout va bien
Mais si vous ouvrez le second EA dans un autre graphique, le premier graphique commence à recevoir des informations du premier EA et du second en même temps.
Cela signifie qu'il commence à clignoter, car plusieurs conseillers experts travaillent sur un seul et même graphique. Cependant, dans la fonction Init, chaque Expert Advisor reçoit l'Id du graphique dans lequel il a été lancé. Puis je reçois un appel pour créer.
Veuillez m'aider à comprendre quel est le problème ?
Je trace les graphiques et j'affiche le texte en utilisant CGraphic. Si une seule instance de l'EA est en cours d'exécution, tout va bien. Si j'exécute le même EA sur différents graphiques, j'ai l'impression que la sortie se fait toujours sur le graphique qui est actuellement à l'écran. Et non sur le graphique qui est spécifié dans la méthode Create. Voici le code de l'EA pour démontrer le problème :
Si l'Expert Advisor 1 fonctionne, tout va bien
Mais si vous ouvrez le second EA dans un autre graphique, le premier graphique commence à recevoir des informations du premier EA et du second en même temps.
Cela signifie qu'il commence à clignoter, car plusieurs conseillers experts travaillent sur un seul et même graphique. Cependant, dans la fonction Init, chaque Expert Advisor reçoit l'Id du graphique dans lequel il a été lancé. Puis je reçois un appel pour créer.
Veuillez m'aider à comprendre quel est le problème ?
Dans le nom de l'objet, il ne faut pas ajouter ChartId ? Je ne me souviens pas si elle est ajoutée à l'intérieur de la fonction.