新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1566 1...155915601561156215631564156515661567156815691570157115721573...1953 新评论 [删除] 2021.08.03 14:35 #15651 Mikhail Tkachev:如果你有一个三行的EA,那么你当然不需要OOP)。但是,如果我不得不用一只胳膊和三条腿创造哥布林,然后用一条腿和三条胳膊--那么,是的,这就是OOP会真正帮助我的地方。虽然...我也不知道。把它放在这里有什么意义呢? 而且,你有多少条 "线 "一点也不重要。;) Tretyakov Rostyslav 2021.08.03 14:37 #15652 Mikhail Tkachev:只有int或double? 如果该变量是一个类的对象,怎么办? 如果事先不知道这些对象的数量[在执行OnInit()之前]呢? 如果构造函数的参数事先是未知的[在OnInit()之前]呢? 你给了一个很好的链接和关于类的声明的例子。 在任何情况下,全局的都在OnInit()之前声明;其他的在每次需要的时候声明 Mikhail Tkachev 2021.08.03 14:45 #15653 MakarFX:在任何情况下,全局的都在OnInit()之前声明,其他的则在每次需要时声明。 这在理论上是清楚的。 在实践中,经过: NB_M1 "的声明隐藏了全局变量->OnInit()的每一行。 见之前的'NB_M1'声明 专家的工作就像NB_M1是全局的(并且正确地初始化了),尽管它被一个局部声明所隐藏并且在OnInit()中被初始化为局部。 按照想法,它根本就不应该工作。 Tretyakov Rostyslav 2021.08.03 15:03 #15654 Mikhail Tkachev:在理论上,这是有道理的。 在实践中,经过:NB_M1 "的声明隐藏了全局变量->OnInit()的每一行。见之前的'NB_M1'声明专家的工作就像NB_M1是全局的(并且正确初始化),尽管它被OnInit()中的局部声明所隐藏。按照想法,它根本就不应该工作。 什么是NB_M1?也许它已经在库中声明了?而且根本不需要任何代码,就像聋子与盲人一样) Mikhail Tkachev 2021.08.03 15:04 #15655 Сергей Таболин: 而且,你有多少 "弦 "并不重要。;) 当你有一两百行代码时,因为你想从这个开始,然后忘了这个是干什么用的,再加上这个,那么自然(?) Mikhail Tkachev 2021.08.03 15:21 #15656 MakarFX: 什么是NB_M1?也许它已经在库中声明了?而完全没有代码,就像聋子和瞎子) NB_M1是一个CIsNewBar类的对象,用来定义每个字符的新条的开始。不,它没有在库中声明。 第一个帖子中的代码:https://www.mql5.com/ru/forum/160683/page1547#comment_23712294 Tretyakov Rostyslav 2021.08.03 15:34 #15657 Mikhail Tkachev:NB_M1是一个CIsNewBar类的对象,用来定义每个字符的新条的开始。不,它没有在库中声明。 第一个帖子中的代码:https://www.mql5.com/ru/forum/160683/page1547#comment_23712294 因此,NB_M1是在类中声明的,可以在那里访问 我们可以看一下这个类的代码吗? Mikhail Tkachev 2021.08.03 16:14 #15658 NB_M1是该类的一个对象。如何把它放在里面? //+------------------------------------------------------------------+ //| IsNewBar.mqh | //| Copyright © 2011, Nikolay Kositsin | //| Khabarovsk, farria@mail.redcom.ru | //+------------------------------------------------------------------+ #property copyright "2011, Nikolay Kositsin" #property link "farria@mail.redcom.ru" #property version "1.00" //+------------------------------------------------------------------+ //| Алгоритм определения момента появления нового бара | //| Для каждого таймфрейма каждого символа нужно создавать объект | //+------------------------------------------------------------------+ #include <Object.mqh> class CIsNewBar:public CObject // Сделан наследником класса для возможности работы с классом CArrayObj (из библиотеки) // class CIsNewBar // Первоначальная редакция { //---- public: //---- функция определения момента появления нового бара bool IsNewBar() { //---- получим время появления текущего бара datetime TNew=datetime(SeriesInfoInteger(m_Symbol,m_TimeFrame,SERIES_LASTBAR_DATE)); if(TNew!=m_TOld && TNew) // проверка на появление нового бара { m_TOld=TNew; return(true); // появился новый бар! } //---- return(false); // новых баров пока нет! }; //---- конструктор класса CIsNewBar(const string &pSymbol, const ENUM_TIMEFRAMES pTimeFrame){ m_Symbol=pSymbol; m_TimeFrame=pTimeFrame; m_TOld=-1;}; protected: datetime m_TOld; // Время хранится ENUM_TIMEFRAMES m_TimeFrame; // для каждого таймфрейма string m_Symbol; // каждого символа //---- }; //+------------------------------------------------------------------+ Tretyakov Rostyslav 2021.08.03 16:17 #15659 Mikhail Tkachev: NB_M1是该类的一个对象。如何把它放在里面? NB_M1这个变量是用来做什么的? Tretyakov Rostyslav 2021.08.03 16:34 #15660 Mikhail Tkachev: NB_M1是该类的一个对象。如何把它放在里面? 我认为应该是这样的 bool NB_M1; int OnInit() { } void OnTick() { NB_M1=new CIsNewBar(_Symbol,PERIOD_M1); // Эта строка потом будет в цикле для разных символов if (NB_M1) // (1) Если появился новый бар M1 {....} ...... } 1...155915601561156215631564156515661567156815691570157115721573...1953 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
如果你有一个三行的EA,那么你当然不需要OOP)。
但是,如果我不得不用一只胳膊和三条腿创造哥布林,然后用一条腿和三条胳膊--那么,是的,这就是OOP会真正帮助我的地方。虽然...我也不知道。
把它放在这里有什么意义呢?
而且,你有多少条 "线 "一点也不重要。;)只有int或double?
如果该变量是一个类的对象,怎么办?
如果事先不知道这些对象的数量[在执行OnInit()之前]呢?
如果构造函数的参数事先是未知的[在OnInit()之前]呢?
你给了一个很好的链接和关于类的声明的例子。
在任何情况下,全局的都在OnInit()之前声明;其他的在每次需要的时候声明
在任何情况下,全局的都在OnInit()之前声明,其他的则在每次需要时声明。
这在理论上是清楚的。
在实践中,经过:
NB_M1 "的声明隐藏了全局变量->OnInit()的每一行。
见之前的'NB_M1'声明
专家的工作就像NB_M1是全局的(并且正确地初始化了),尽管它被一个局部声明所隐藏并且在OnInit()中被初始化为局部。
按照想法,它根本就不应该工作。
在理论上,这是有道理的。
在实践中,经过:
NB_M1 "的声明隐藏了全局变量->OnInit()的每一行。
见之前的'NB_M1'声明
专家的工作就像NB_M1是全局的(并且正确初始化),尽管它被OnInit()中的局部声明所隐藏。
按照想法,它根本就不应该工作。
而且,你有多少 "弦 "并不重要。;)当你有一两百行代码时,因为你想从这个开始,然后忘了这个是干什么用的,再加上这个,那么自然(?)
什么是NB_M1?也许它已经在库中声明了?而完全没有代码,就像聋子和瞎子)
NB_M1是一个CIsNewBar类的对象,用来定义每个字符的新条的开始。不,它没有在库中声明。
第一个帖子中的代码:https://www.mql5.com/ru/forum/160683/page1547#comment_23712294
NB_M1是一个CIsNewBar类的对象,用来定义每个字符的新条的开始。不,它没有在库中声明。
第一个帖子中的代码:https://www.mql5.com/ru/forum/160683/page1547#comment_23712294
因此,NB_M1是在类中声明的,可以在那里访问
我们可以看一下这个类的代码吗?
NB_M1是该类的一个对象。如何把它放在里面?
NB_M1是该类的一个对象。如何把它放在里面?
我认为应该是这样的