新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1032

 

是否可以复制一个Ccanvas对象


我用Ccanvas创建了一个对象,在这个过程中必须创建重复的对象。有时10-20个,有时100-200个。

有一次,该对象肯定是被画出来的。有什么办法可以复制它吗?

 
Sergey Likho:

是否可以复制一个Ccanvas对象?


我用Ccanvas创建了一个对象,在这个过程中必须创建重复的对象。有时10-20个,有时100-200个。

有一次,该对象肯定是被画出来的。有什么办法可以复制它吗?

CCanvas *canv = new CCanvas
但这并不是在重复现有的。它正在创建一个新的和一个指向它的指针。
 
Artyom Trishkin:
CCanvas *canv = new CCanvad

我指的是一个图形对象。

   CCanvas obj;
   obj.CreateBitmapLabel(0,1,name,x,y,x_size,y_size,COLOR_FORMAT_ARGB_NORMALIZE);
   obj.FillRectangle(0,0,x_size,y_size,ColorToARGB(Color,Alpha));
   obj.Update(false);


Как сделать 10 копий с измененными координатами?
 
Sergey Likho:

我指的是一个图形对象。

我给你看了。如果你事先不知道需要创建多少个对象,那么只能通过新建。
如果这个数字是已知的,那么
obj1, obj2, obj3,...,objN
 
Igor Makanu:

我可能错了,但你的链接将是作者的线程,但你必须翻阅整个线程,伊戈尔似乎已经发布了稍微原始的代码,然后有时重写需要改进的地方,尽管我再次可能是错误的 - 我翻阅这个线程大约5-6年前,我不记得了

你没有弄错。最近翻阅了作者的整个主题。我花了大约2-3天时间。在作者的主题中,鉴于写作的遥远性,他的一些特点已经不再有意义(或者在我看来是这样).阅读绝对的一切和高度的主题和不相关的小。而且正如你所注意到的,他确实有错误,在2-3页,甚至更多页之后才冒出来,这时有人决定使用他的功能,发现了错误,要么纠正它,只是说有一个错误,要么只是指出来。因此,即使是10页之后,同样的功能也可能再次出现,要么被纠正,要么被改进(时间已经过去,他想改进)。

因此,如果有人只拉出最重要和最相关的话题,你只能说谢谢,并节省大量的时间。

 
如何将一个函数的指针(指写一个以一个函数的指针为参数的函数)作为参数传递?我以前在mql4中做过,但我丢失了一份这个例子所在的文件的副本。
 
Seric29:
如何将一个函数的指针(该函数以一个指向该函数的指针为参数)作为参数传递?我以前用mql4做过,但我失去了一个例子文件的副本。

MQL曾经支持过函数指针吗?我不这么认为。一个解决方案是将函数包裹在一个类中,并将指针传递给对象。

 
Sergey Popov:

大家好!

我想在我的EA中写一个函数,禁止在交易开始后的前2个小时进行交易。

但我面临的事实是,iTime(Symbol(),1440, 0)不能正确返回当天蜡烛的开盘时间

更具体地说:2019年12月26日,市场在06:00:00开盘,但iTime确定为00:00:00。

如何准确计算出当天的开馆时间?

SymbolInfoSessionTrade将帮助我找出交易时间。我不知道它是否反映了圣诞节和其他节日的变化。

 
Aleksey Mavrin:

MQL曾经支持过函数指针吗?我不这么认为。一个解决方案是将该函数包裹在一个类中,并传递一个指向对象的指针。

它确实如此。这是用typedif指定器读取帮助完成的,但方案与c++不同。我发现一个论坛上有人记录了这个代码,但我没有保存文件,并重新启动了系统,当然文件被删除了。但帮助显示了一个简单的例子,而我有一个我正在问的例子。

 
Aleksey Mavrin:

MQL曾经支持过函数指针吗?我不这么认为。一个解决方案是将函数包裹在一个类中,并将指针传递给对象。

你可以,用代码来重现。

#property copyright "Copyright 2019, IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict
typedef void(*TFuncvoidPTR)(void);
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   TFuncvoidPTR f_ptr[3];
   f_ptr[0] = f_1;
   f_ptr[1] = f_2;
   f_ptr[2] = f_3;
   for(int i=0;i<ArraySize(f_ptr);i++)
   {
      printf("Вызываю фунцию № %i ",i);
      f_ptr[i]();
   }

}
//+------------------------------------------------------------------+
void f_1() {Print("Это вызов функции : ",__FUNCTION__);}
void f_2() {Print("Это вызов функции : ",__FUNCTION__);}
void f_3() {Print("Это вызов функции : ",__FUNCTION__);}

2019.12.30 18:30:55.518 Script tst EURUSD,H1: removed

2019.12.30 18:30:55.511 tst EURUSD,H1: uninit reason 0

2019.12.30 18:30:55.511 tst EURUSD,H1: This isfunction call: f_3

2019.12.30 18:30:55.511 tst EURUSD,H1: 正在调用2号函数

2019.12.30 18:30:55.511 tst EURUSD,H1: 这是在调用函数:f_2

2019.12.30 18:30:55.511 tst EURUSD,H1:调用函数#1

2019.12.30 18:30:55.511 tst EURUSD,H1: 这是在调用函数:f_1

2019.12.30 18:30:55.511 tst EURUSD,H1: Calling fuction no.

2019.12.30 18:30:55.511 tst EURUSD,H1: 已初始化

2019.12.30 18:30:55.496 Script tst EURUSD,H1: loaded successfully

原因: