#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;
}
При исследовании и изучении закономерностей важную роль играет визуальное отображение с помощью графиков. В популярных среди научного сообщества языках программирования, таких как R и Python, для визуализации предназначена специальная функция plot. С её помощью можно рисовать линии, точечные распределения и гистограммы для наглядного представления закономерностей. В MQL5 вы можете делать всё то же самое с помощью класса CGraphics.
CGrafic::Destroy() - 不起作用!
CGrafic::Destroy() - 不起作用!
你是如何发现的?症状是什么?
你是如何识别它的?症状是什么?
好了,代码附在后面供大家回放 :)
而在图片上,你可以看到在Destroy()之后的图形被加入了
带前缀的
_exists但播放的代码附在后面 :)
而在图片上,你可以看到在Destroy()之后的图形被加入了
带前缀的
我的问题是关于CGrafic::Destroy()。它起作用了--我用调试器检查了它......。也许你的代码出了问题?
好吧,这个问题是专门针对CGrafic::Destroy() 的。它起作用了--我在调试器中检查了它......。也许你的代码出了问题?
进入Destroy()的主体并不意味着它(程序)工作正常。
在实际 销毁一个对象后,我们无法向其添加新的图形,而它们却被添加了!这就是为什么我们要把它作为一个对象。
进入Destroy()过程的主体,根本不意味着它(该过程)的工作是正确的。
在一个物体的实际销毁后,我们无法向它添加新的图形,而它们确实是这样做的!
关于击球,我同意。但尽管如此...好吧,首先,voidCGrafic::Destroy()。也就是说,这个方法并不欠我们什么。其次,也许应该由程序员来增加检查?你不能为所有任务配置SB...
关于击球,我同意。但尽管如此...好吧,首先,voidCGrafic::Destroy()。也就是说,这个方法并不欠我们什么。其次,也许应该由程序员来增加检查?你不能为所有任务配置SB。
此外,我还改变了Destroy的方法。
而且它还能增加图表!
我使用CGraphic 绘制图形并输出文本。如果EA的一个实例正在运行,一切都很正常。如果我在不同的图表上运行同一个EA,我得到的印象是输出总是在当前屏幕上的图表上。而不是在创建方法中指定的图表上。下面是EA的代码,以证明这个问题。
如果专家顾问1工作,一切都很好
但如果你在另一个图表中打开第二个EA,第一个图表就开始同时接收第一个EA和第二个EA的信息。
这意味着它开始闪烁,因为几个专家顾问在同一个图表上工作。然而,在启动功能中,每个专家顾问都会收到它所启动的图表的标识。然后我就接到了 "创建 "的电话。
请帮助我了解问题出在哪里?
我使用CGraphic 绘制图形并输出文本。如果EA的一个实例正在运行,一切都很好。如果我在不同的图表上运行同一个EA,我得到的印象是输出总是在当前屏幕上的图表上。而不是在创建方法中指定的图表上。下面是EA的代码,以证明这个问题。
如果专家顾问1工作,一切都很好
但如果你在另一个图表中打开第二个EA,第一个图表就开始同时接收第一个EA和第二个EA的信息。
这意味着它开始闪烁,因为几个专家顾问在同一个图表上工作。然而,在启动功能中,每个专家顾问都会收到它所启动的图表的ID。然后我就接到了 "创建 "的电话。
请帮助我了解问题是什么?
在对象的名称中,是否需要添加ChartId?我不记得它是否被添加到函数内部。