新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1792 1...178517861787178817891790179117921793179417951796179717981799...1953 新评论 Tretyakov Rostyslav 2021.12.06 09:24 #17911 Alexey Viktorov #:不,马卡,它看起来是这样的。ObjectFind()函数返回主窗口的编号。而这个数字是0。另一方面,0 == false,因此,如果该函数返回0,它仍然返回false。当然,我不会使用这个方法,因为如果该函数返回-1,即一个错误,我们可能会认为该对象的位置不在主窗口。除此之外,你永远不知道会有什么修复措施...... 所以不要争论,不要研究如何做......ObjectFind()函数并不返回主窗口的编号。它将返回找到该对象的窗口数(0、1、2...),如果该对象不存在,则返回-1。我想知道"-1 "是假的还是真的。bool类型 用于 存储布尔值 true 或 false ,其数字表示分别为1或0 。 Alexey Viktorov 2021.12.06 09:29 #17912 MakarFX #:ObjectFind()函数并不返回主窗口的编号。它是发现对象的窗口数(0,1,2...),如果没有对象则为-1。 我说的是对象位于主窗口的特定情况。不要争论,不要学习如何做... Alexey Viktorov 2021.12.06 09:30 #17913 MakarFX #:我想知道"-1 "是假的还是真的?bool类型 旨在存储布尔值 true 或 false ,其数字表示分别为1或0 。 假的只有0,其他都是真的 Tretyakov Rostyslav 2021.12.06 09:36 #17914 Alexey Viktorov #:假的只有0,其他都是真的"-1 " 也是真的? 已经检查过了。真的只有 "0 "是假的 Nerd Trader 2021.12.06 09:53 #17915 Alexey Viktorov #:不,马卡,它看起来是这样的。ObjectFind()函数返回主窗口的编号。而这个数字是0。另一方面,0 == false,因此,如果该函数返回0,它仍然返回false。当然,我不会使用这个方法,因为如果该函数返回-1,即一个错误,我们可能会认为该对象的位置不在主窗口。除此之外,你永远不知道会有什么修复措施...... 所以不要争论,不要学习如何做...... 我知道你不应该这样做,但为了美观,我不得不这样做(==0在每个条件下看起来都很难看)。而且我只需要主窗口中的对象。 Tretyakov Rostyslav 2021.12.06 10:05 #17916 Nerd Trader #:我知道我不应该这样做,但为了美观,我不得不这样做(==0在每个条件下都看起来很丑)。而且我只需要主窗口中的对象。 然后做以下工作 if(ObjectFind("Buy Stop") || ObjectFind("not allowed")) 如果没有对象,你会得到"-1",也就是真。 Nerd Trader 2021.12.06 10:19 #17917 用选项==0进行了重做。 问题:黄线和灰线("Stop Sell "和 "not allowed")在图表上按下按钮 时不断产生并闪烁。而且ObjectCreate()经常返回true而不是false,也就是说,它创建时就像在另一个窗口中一样,这可以解释闪烁的原因......但该窗口只是主窗口,绿线("买入止损")和红线("止损")都没有出现异常。 。 void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { datetime static dt = 0; double static price = 0; int static window = 0; string static line_name; if(id==CHARTEVENT_OBJECT_CLICK){ ... //Нажатие на SO в зависимоти от расположения панели создаёт линию if(sparam=="Button Stop Order"){ if(panel_position == 1 || panel_position == 2){ line_name = "Buy Stop"; CreateLine(line_name, clrGreen); } if(panel_position == 3 || panel_position == 4){ line_name = "Sell Stop"; CreateLine(line_name, clrYellow); } } //Нажатие на линию удаляет её и создаёт красную if(sparam=="Buy Stop" || sparam=="Sell Stop"){ ObjectDelete(line_name); line_name = "Stop Loss"; CreateLine(line_name, clrRed); } //Нажатие на красной линии удаляет её и отжимает кнопку if(sparam=="Stop Loss"){ ObjectDelete(line_name); button_name = "Button Stop Order"; ms=GetMicrosecondCount(); } } //Если кнопка SO нажата, то линия будет следовать за курсором if(ObjectGetInteger(0,"Button Stop Order",OBJPROP_STATE)){ int x = (int)lparam; int y = (int)dparam; //Переведём координаты X, Y в дату и время if(ChartXYToTimePrice(0,x,y,window,dt,price)){ //Линия меняет цвет с зелёного на желтый if(price < Bid){ if(ObjectFind("Buy Stop") == window || ObjectFind("not allowed") == window){ ObjectDelete(line_name); line_name = "Sell Stop"; CreateLine(line_name, clrYellow); } } //Линия меняет цвет с желтого на зелёный if(price > Ask){ if(ObjectFind("Sell Stop") == window || ObjectFind("not allowed") == window){ ObjectDelete(line_name); line_name = "Buy Stop"; CreateLine(line_name, clrGreen); } } //Линия меняет цвет на серый если в зоне спреда if(price > Bid && price < Ask){ if(ObjectFind("Buy Stop") == window || ObjectFind("Sell Stop") == window){ ObjectDelete(line_name); line_name = "not allowed"; CreateLine(line_name, clrGray); } } //Прикрепляем линию к курсору if(id == CHARTEVENT_MOUSE_MOVE) if(ObjectMove(0,line_name,0,0,price)) ChartRedraw(0); } }else if(ObjectFind(line_name) == window) Print(ObjectDelete(line_name)); //Если нажать Esc то удалится линия и кнопка отожмется if(id == CHARTEVENT_KEYDOWN && lparam == 27){ button_name = "Button Stop Order"; ms=GetMicrosecondCount(); } } //---------------------------------------------------------------------- void CreateLine(const string name, const color clr) { Print(ObjectCreate(0, name, OBJ_HLINE, 0,0,0)); ObjectSetInteger(0, name, OBJPROP_COLOR, clr); ObjectSetInteger(0, name, OBJPROP_STYLE, 3); } Nerd Trader 2021.12.06 10:26 #17918 MakarFX #:然后做以下工作如果没有对象,你会得到"-1",即真。 我已经试过了,我只需要改变对象的名称(反转),就可以使例外情况生效。但这种方式根本不会产生任何线条。 if(ObjectFind("Sell Stop") || ObjectFind("Stop Loss")){ ObjectDelete(line_name); line_name = "Sell Stop"; CreateLine(line_name, clrYellow); } Tretyakov Rostyslav 2021.12.06 10:33 #17919 Nerd Trader #:我已经试过了,只是你必须改变对象的名称。但这根本不会产生任何线条。 它对我有用,对你也有用,只是价格是 "0"。 Nerd Trader 2021.12.06 10:38 #17920 MakarFX #: 我已经创建了它,你也是,只是价格是 "0"。 是的,确实是8块,但在图表上看不到,价格为0的事实并不重要,线条仍然紧贴光标(跟随它)。 1...178517861787178817891790179117921793179417951796179717981799...1953 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
不,马卡,它看起来是这样的。
ObjectFind()函数返回主窗口的编号。而这个数字是0。另一方面,0 == false,因此,如果该函数返回0,它仍然返回false。当然,我不会使用这个方法,因为如果该函数返回-1,即一个错误,我们可能会认为该对象的位置不在主窗口。除此之外,你永远不知道会有什么修复措施......
所以不要争论,不要研究如何做......
ObjectFind()函数并不返回主窗口的编号。它将返回找到该对象的窗口数(0、1、2...),如果该对象不存在,则返回-1。
我想知道"-1 "是假的还是真的。
bool类型 用于 存储布尔值 true 或 false ,其数字表示分别为1或0 。ObjectFind()函数并不返回主窗口的编号。它是发现对象的窗口数(0,1,2...),如果没有对象则为-1。
我说的是对象位于主窗口的特定情况。不要争论,不要学习如何做...
MakarFX #:
我想知道"-1 "是假的还是真的?
bool类型 旨在存储布尔值 true 或 false ,其数字表示分别为1或0 。假的只有0,其他都是真的
假的只有0,其他都是真的
不,马卡,它看起来是这样的。
ObjectFind()函数返回主窗口的编号。而这个数字是0。另一方面,0 == false,因此,如果该函数返回0,它仍然返回false。当然,我不会使用这个方法,因为如果该函数返回-1,即一个错误,我们可能会认为该对象的位置不在主窗口。除此之外,你永远不知道会有什么修复措施......
所以不要争论,不要学习如何做......
我知道你不应该这样做,但为了美观,我不得不这样做(==0在每个条件下看起来都很难看)。而且我只需要主窗口中的对象。
我知道我不应该这样做,但为了美观,我不得不这样做(==0在每个条件下都看起来很丑)。而且我只需要主窗口中的对象。
然后做以下工作
如果没有对象,你会得到"-1",也就是真。
问题:黄线和灰线("Stop Sell "和 "not allowed")在图表上按下按钮 时不断产生并闪烁。而且ObjectCreate()经常返回true而不是false,也就是说,它创建时就像在另一个窗口中一样,这可以解释闪烁的原因......但该窗口只是主窗口,绿线("买入止损")和红线("止损")都没有出现异常。
。
然后做以下工作
如果没有对象,你会得到"-1",即真。
我已经试过了,我只需要改变对象的名称(反转),就可以使例外情况生效。但这种方式根本不会产生任何线条。
我已经试过了,只是你必须改变对象的名称。但这根本不会产生任何线条。
我已经创建了它,你也是,只是价格是 "0"。