初学者的问题 MQL5 MT5 MetaTrader 5 - 页 142 1...135136137138139140141142143144145146147148149...1503 新评论 Sergey Pavlov 2013.10.03 02:58 #1411 forexman77:但是,我不仅在Alert中 需要变量 "st",而且在计算中也需要,而且在编译时出现了 "由于类型转换可能导致数据丢失 "的警告。我想这是因为它变成了一个10位数,而int的最大值是2 147 483 647,我目前有1 380 758 400。也许用长的有意义,可能专家顾问在这部分会消耗大量的资源?你不明白类型转换的 原理吗?就是这么简单。int st=(int)tp[0]; Гребенев Вячеслав 2013.10.03 17:09 #1412 我想在画布上画画。要在OnInit、OnTimer、OnTick和onChartEvent中重新绘制画布上的图片。我在全局变量 中声明CCanvas画布,并在任何地方调用画布.方法。但编译器抱怨未解决的静态变量'CCanvas::m_default_colors'(这与颜色有什么关系?)代码是这样的#include <Canvas/Canvas.mqh>。CCanvas帆布。int OnInit(){ //CCanvas canvas;如果我在这里声明,它就会画出来,但我如何在OnTick中重画它呢?canvas.CreateBitmapLabel("ProbeGraph", 0, 0, width ,heigth, COLOR_FORMAT_ARGB_RAW); canvas.Circle(Xcentr,Ycentr,Rmin,ColorToARGB(clrBlue, 115)); canvas.Update()。}空白的OnTick(){ canvas.Circle(Xcentr,Ycentr,Rmin,ColorToARGB(clrBlue, 115)); canvas.Update()。} 我如何与编译器交涉?是否有一个在专家中使用画布的例子? Документация по MQL5: Основы языка / Переменные / Глобальные переменные www.mql5.com Основы языка / Переменные / Глобальные переменные - Документация по MQL5 Questions from Beginners MQL5 研究CCanvas类如何绘制透明的图形对象 基于画布的指标:为通道填充透明度 Sergey Pavlov 2013.10.03 17:22 #1413 Virty:我想在专家顾问的画布上画画。我想在OnInit、OnTimer、OnTick和onChartEvent中重新绘制画布上的图像。我在全局变量 中声明CCanvas画布,并在任何地方调用画布.方法。但编译器抱怨说,未解决的全局声明... 你如何与编译器进行协商?是否有一个在EA中使用画布的例子?好吧,你不是一个初学者!正确发布代码! Гребенев Вячеслав 2013.10.03 18:10 #1414 DC2008:好吧,你不是一个初学者!正确发布代码!代码就在这里。但要挖掘出更多的东西,那就更难了。而且这也没有用。未解决的静态变量'CCanvas::m_default_colors'错误 ProbeGraph.mq5 21 9还有一堆关于高度和宽度变量重叠的担保书。据我所知,编译器不想在全局变量中调用CCanvas类的构造函数,而是想在OnInit时调用构造函数。然后如何在OnInit之外引用一个类的实例,我不明白。还有,以前,Draw函数的主体在onInit里面,但Draw本身不在。一切正常,但在OnInit里面。我在这里已经开始扭曲了,试图把类的一个实例的引用传递到Draw函数中,因为全局变量不起作用。一般来说,代码正在编写,问题在于创建CCanvas类的全局实例。//+------------------------------------------------------------------+ //| ProbeGraph.mq5 | //| Copyright 2013, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2013, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" #include <Canvas\Canvas.mqh> int heigth=500; int width=500; int Xcentr=round(width/2); int Ycentr=round(width/2); int Rmin=25; int Rmax=round(heigth/2-1); #define ArrayS 100000 double arrayopen[ArrayS]; CCanvas canvas; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //CCanvas canvas; canvas.CreateBitmapLabel("ProbeGraph",0,0,width,heigth,COLOR_FORMAT_ARGB_RAW); //Draw(canvas); //--- create timer EventSetTimer(60); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- destroy timer EventKillTimer(); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- //canvas.Update(); } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer() { //--- } //+------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { //--- } //+------------------------------------------------------------------+ int ChartVisibleBars(const long chart_ID=0) { //--- подготовим переменную для получения значения свойства long result=-1; //--- сбросим значение ошибки ResetLastError(); //--- получим значение свойства if(!ChartGetInteger(chart_ID,CHART_VISIBLE_BARS,0,result)) { //--- выведем сообщение об ошибке в журнал "Эксперты" Print(__FUNCTION__+", Error Code = ",GetLastError()); } //--- вернем значение свойства графика return((int)result); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void Draw(CCanvas *canvas) { ArrayInitialize(arrayopen,0); double r; double A, Amin=0, Amax=2*3.1415; int x,y, xprev=0, yprev=0; //canvas.Erase(ColorToARGB(clrRed, 115)); canvas.Circle(Xcentr,Ycentr,Rmin,ColorToARGB(clrBlue, 115)); canvas.Circle(Xcentr,Ycentr,Rmax,ColorToARGB(clrBlue, 115)); int Nbars=CopyOpen(Symbol(),Period(),TimeCurrent(),ChartVisibleBars(0),arrayopen); Print("Nbars=",Nbars); double KursMin=1000000,KursMax=0; for(int i=0; i<Nbars; i++) { if(KursMin>arrayopen[i]) KursMin=arrayopen[i]; if(KursMax<arrayopen[i]) KursMax=arrayopen[i]; }; Print("KursMin=",KursMin); Print("KurMax=",KursMax); for(int i=0; i<Nbars; i++) { if((KursMax-KursMin)>0) r=Rmin+(Rmax-Rmin)*(arrayopen[i]-KursMin)/(KursMax-KursMin); if(Nbars>0) A=Amin+(Amax-Amin)*i/(Nbars); x=round(Xcentr-r*MathSin(A)); y=round(Ycentr+r*MathCos(A)); canvas.PixelSetAA(x,y,ColorToARGB(clrGreen,155)); if(xprev>0 && yprev>0) canvas.Line(xprev,yprev,x,y,ColorToARGB(clrBlue,155)); xprev=x; yprev=y; }; canvas.Update(); } //+------------------------------------------------------------------+ Документация по MQL5: Основы языка / Типы данных / Структуры и классы www.mql5.com Основы языка / Типы данных / Структуры и классы - Документация по MQL5 Sergey Pavlov 2013.10.03 18:21 #1415 有一件事我不能理解:如果编译器发誓,为什么错误不被纠正?А? Гребенев Вячеслав 2013.10.03 18:32 #1416 DC2008:有一件事我不能理解:如果编译器发誓,为什么错误不被纠正?А? 我不知道如何修复它,所以我才问。 Vladimir Karputov 2013.10.03 18:38 #1417 //+------------------------------------------------------------------+ //| ProbeGraph.mq5 | //| Copyright 2013, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2013, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" #include <Canvas\Canvas.mqh> int heigth=500; int width_1=500; int Xcentr=int(round(width_1/2)); int Ycentr=int(round(width_1/2)); int Rmin=25; int Rmax=int(round(heigth/2-1)); #define ArrayS 100000 double arrayopen[ArrayS]; CCanvas *canvas; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //CCanvas canvas; canvas=new CCanvas; //--- проверка указателя перед его использованием if(CheckPointer(canvas)==POINTER_INVALID) { Print(__FUNCTION__," переменная 'canvas' не инициализирована!"); return(INIT_SUCCEEDED); } canvas.CreateBitmapLabel("ProbeGraph",0,0,width_1,heigth,COLOR_FORMAT_ARGB_RAW); Draw(); //--- create timer EventSetTimer(60); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- destroy timer EventKillTimer(); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- //canvas.Update(); } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer() { //--- } //+------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { //--- } //+------------------------------------------------------------------+ int ChartVisibleBars(const long chart_ID=0) { //--- подготовим переменную для получения значения свойства long result=-1; //--- сбросим значение ошибки ResetLastError(); //--- получим значение свойства if(!ChartGetInteger(chart_ID,CHART_VISIBLE_BARS,0,result)) { //--- выведем сообщение об ошибке в журнал "Эксперты" Print(__FUNCTION__+", Error Code = ",GetLastError()); } //--- вернем значение свойства графика return((int)result); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void Draw() { ArrayInitialize(arrayopen,0); double r=0; double A=0, Amin=0, Amax=2*3.1415; int x,y,xprev=0,yprev=0; //canvas.Erase(ColorToARGB(clrRed, 115)); canvas.Circle(Xcentr,Ycentr,Rmin,ColorToARGB(clrBlue, 115)); canvas.Circle(Xcentr,Ycentr,Rmax,ColorToARGB(clrBlue, 115)); int Nbars=CopyOpen(Symbol(),Period(),TimeCurrent(),ChartVisibleBars(0),arrayopen); Print("Nbars=",Nbars); double KursMin=1000000,KursMax=0; for(int i=0; i<Nbars; i++) { if(KursMin>arrayopen[i]) KursMin=arrayopen[i]; if(KursMax<arrayopen[i]) KursMax=arrayopen[i]; }; Print("KursMin=",KursMin); Print("KurMax=",KursMax); for(int i=0; i<Nbars; i++) { if((KursMax-KursMin)>0) r=Rmin+(Rmax-Rmin)*(arrayopen[i]-KursMin)/(KursMax-KursMin); if(Nbars>0) A=Amin+(Amax-Amin)*i/(Nbars); x=int(round(Xcentr-r*MathSin(A))); y=int(round(Ycentr+r*MathCos(A))); canvas.PixelSetAA(x,y,ColorToARGB(clrGreen,155)); if(xprev>0 && yprev>0) canvas.Line(xprev,yprev,x,y,ColorToARGB(clrBlue,155)); xprev=x; yprev=y; }; canvas.Update(); } //+------------------------------------------------------------------+ Гребенев Вячеслав 2013.10.03 18:51 #1418 barabashkakvn: 完整地复制了建议的代码。该错误与未解决的静态变量'CCanvas::m_default_colors'相同 prob1.mq5 21 9 Vladimir Karputov 2013.10.03 18:55 #1419 Virty: 完全复制了建议的代码。该错误与未解决的静态变量'CCanvas::m_default_colors' prob1.mq5 21 9相同。我没有任何错误。该建筑是最新的。 Vladimir Karputov 2013.10.03 18:59 #1420 Virty: 完整地复制了建议的代码。该错误与未解决的静态变量'CCanvas::m_default_colors' prob1.mq5 21 9相同。 所以错误是在你的文件prob1.mq5中。 1...135136137138139140141142143144145146147148149...1503 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
但是,我不仅在Alert中 需要变量 "st",而且在计算中也需要,而且在编译时出现了 "由于类型转换可能导致数据丢失 "的警告。
我想这是因为它变成了一个10位数,而int的最大值是2 147 483 647,我目前有1 380 758 400。也许用长的有意义,可能专家顾问在这部分会消耗大量的资源?
你不明白类型转换的 原理吗?就是这么简单。
我想在画布上画画。要在OnInit、OnTimer、OnTick和onChartEvent中重新绘制画布上的图片。我在全局变量 中声明CCanvas画布,并在任何地方调用画布.方法。但编译器抱怨未解决的静态变量'CCanvas::m_default_colors'(这与颜色有什么关系?)
代码是这样的
#include <Canvas/Canvas.mqh>。
CCanvas帆布。
int OnInit()
{
//CCanvas canvas;如果我在这里声明,它就会画出来,但我如何在OnTick中重画它呢?
canvas.CreateBitmapLabel("ProbeGraph", 0, 0, width ,heigth, COLOR_FORMAT_ARGB_RAW);
canvas.Circle(Xcentr,Ycentr,Rmin,ColorToARGB(clrBlue, 115)); canvas.Update()。
}
空白的OnTick()
我如何与编译器交涉?是否有一个在专家中使用画布的例子?{
canvas.Circle(Xcentr,Ycentr,Rmin,ColorToARGB(clrBlue, 115)); canvas.Update()。
}
我想在专家顾问的画布上画画。我想在OnInit、OnTimer、OnTick和onChartEvent中重新绘制画布上的图像。我在全局变量 中声明CCanvas画布,并在任何地方调用画布.方法。但编译器抱怨说,未解决的全局声明
...
你如何与编译器进行协商?是否有一个在EA中使用画布的例子?好吧,你不是一个初学者!正确发布代码!
好吧,你不是一个初学者!正确发布代码!
代码就在这里。但要挖掘出更多的东西,那就更难了。而且这也没有用。未解决的静态变量'CCanvas::m_default_colors'错误 ProbeGraph.mq5 21 9
还有一堆关于高度和宽度变量重叠的担保书。据我所知,编译器不想在全局变量中调用CCanvas类的构造函数,而是想在OnInit时调用构造函数。然后如何在OnInit之外引用一个类的实例,我不明白。
还有,以前,Draw函数的主体在onInit里面,但Draw本身不在。一切正常,但在OnInit里面。我在这里已经开始扭曲了,试图把类的一个实例的引用传递到Draw函数中,因为全局变量不起作用。
一般来说,代码正在编写,问题在于创建CCanvas类的全局实例。
有一件事我不能理解:如果编译器发誓,为什么错误不被纠正?А?
有一件事我不能理解:如果编译器发誓,为什么错误不被纠正?А?
完全复制了建议的代码。该错误与未解决的静态变量'CCanvas::m_default_colors' prob1.mq5 21 9相同。
我没有任何错误。该建筑是最新的。
完整地复制了建议的代码。该错误与未解决的静态变量'CCanvas::m_default_colors' prob1.mq5 21 9相同。