新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1671 1...166416651666166716681669167016711672167316741675167616771678...1953 新评论 Nerd Trader 2021.10.13 09:37 #16701 MakarFX #:如果foo2返回真,则在这里寻找一个错误 我在条件和retorn之间有x,我可以看到它是真的时候,但在OnTick中它总是假的。 Nerd Trader 2021.10.13 09:45 #16702 bool BESet(double sl = 0, color arrow_color = 0, string order_type = ""){ bool order = OrderModify( OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, arrow_color ); if(!order) { ResetLastError(); Print("!Ошибка ",order_type,". Причина: ", GetLastError()); return false; } else { return true; } } bool BEActivate(){ double unrealized_profit = 0; color arrow_color = 0; string order_type = ""; double sl = 0; bool is_be = false; // если объявить true, то в OnTick всегда будет возвращаться true if(OrdersTotal() >= 1){ for(int i = OrdersTotal() -1; i >= 0; i--){ if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) continue; if(OrderType() == OP_BUY){ if(OrderStopLoss() > OrderOpenPrice()) continue; unrealized_profit = NormalizeDouble(MathAbs(OrderOpenPrice() - Ask)/Point, 0); if(unrealized_profit >= save_zone && Ask > OrderOpenPrice()){ is_be = BESet(NormalizeDouble(OrderOpenPrice()+breakeven*Point,Digits), clrGreenYellow, "Бай"); Print("BE ",is_be); } } if(OrderType() == OP_SELL){ ... ... } } } return is_be; } void OnTick() { last_time = iTime(NULL, 0, 0); bool is_be = BEActivate(); if(last_time > bar.time_open){ bar.Initialize(); Pr int("is_be ",is_be); //Всегда FALSE ... } 删除了不必要的代码。 Tretyakov Rostyslav 2021.10.13 09:54 #16703 Nerd Trader #:删除了不必要的代码。 last_time = iTime(NULL, 0, 0); bool is_be = BEActivate(); if(last_time > bar.time_open){ bar.Initialize(); Pr int("is_be ",is_be); //Всегда FALSE 总是假的 Tretyakov Rostyslav 2021.10.13 10:01 #16704 Nerd Trader #:删除了不必要的代码。 下移 void OnTick() { bool is_be = BEActivate(); if(last_time > bar.time_open){ bar.Initialize(); Print("is_be ",is_be); //Всегда FALSE ... last_time = iTime(NULL, 0, 0); } Nerd Trader 2021.10.13 10:20 #16705 MakarFX #:下移 我不知道这有什么关系,但在BEActivate()的一百多次真中,onTick()真只出现了三次:)) Tretyakov Rostyslav 2021.10.13 10:26 #16706 Nerd Trader #: 我不知道这有什么关系,但在BEActivate()中的一百多个true中,onTick()true只出现了三次:)) 再说一个问题... 难道你不想摆脱班级吗? Nerd Trader 2021.10.13 10:30 #16707 MakarFX #:再说一个问题...难道你不想摆脱班级吗? 我就要用这些诡计摆脱我自己的杜鹃了 Mikhail Toptunov 2021.10.13 10:42 #16708 MakarFX #: 这可以不通过 OnCalculate 来完成OnCalculate()函数只在自定义指标中调用 我需要OnCalculate()显示的数据。 也许有人通过类来实现! Tretyakov Rostyslav 2021.10.13 10:58 #16709 Mikhail Toptunov #:我需要OnCalculate()显示的 数据。 也许有人通过类来实现! 这是什么意思? законопослушный гражданин 2021.10.13 11:39 #16710 下午好,你能帮我解决一个问题吗?在M15蜡烛图上,有几笔交易连续打开。 我希望打开的交易不超过一个。EA背后的逻辑是,在前一个订单关闭之前,下一个订单不会打开,但有时一系列的交易会在这样一个长蜡烛图上打开。请建议在代码中添加什么来防止这种情况? 代码片段: //+-----------------------------------------------------------------------------------------------+ //| Функция проверки открытых оредров | //+-----------------------------------------------------------------------------------------------+ bool bCheckOrders() { // Переберем в цикле ордера, для проверки открытых ордеров данным советником for(int i = 0; i <= OrdersTotal(); i++) if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) return(false); return(true); } //+-----------------------------------------------------------------------------------------------+ //| Функция поиска сигнала на покупку | //+-----------------------------------------------------------------------------------------------+ bool bSignalBuy() { if(dMA > Open[1] && dMA < Close[1]) //Open[1] и Close[1]- цены открытия и закрытия каждого бара текущего графика. return(true); return(false); } //+-----------------------------------------------------------------------------------------------+ //| Функция поиска сигнала на продажу | //+-----------------------------------------------------------------------------------------------+ bool bSignalSell() { if(dMA < Open[1] && dMA > Close[1]) return(true); return(false); } //+-----------------------------------------------------------------------------------------------+ //| Функция открытия ордера на покупку | //+-----------------------------------------------------------------------------------------------+ void vOrderOpenBuy() { // Тикет ордера int iOTi = 0; iOTi = OrderSend(Symbol(), OP_BUY, LOT(), Ask, Slippage, 0, 0, "", Magic, 0, clrNONE); // Проверим открылся ли ордер if(iOTi > 0) // Есди да, то выставим уровни убытка и прибыли vOrderModify(iOTi); else // Если нет, то получим ошибку vError(GetLastError()); } //+-----------------------------------------------------------------------------------------------+ //| Функция открытия ордера на продажу | //+-----------------------------------------------------------------------------------------------+ void vOrderOpenSell() { // Тикет ордера int iOTi = 0; iOTi = OrderSend(Symbol(), OP_SELL, LOT(), Bid, Slippage, 0, 0, "", Magic, 0, clrNONE); // Проверим открылся ли ордер if(iOTi > 0) // Есди да, то выставим уровни убытка и прибыли vOrderModify(iOTi); else // Если нет, то получим ошибку vError(GetLastError()); } //+-----------------------------------------------------------------------------------------------+ //| Функция модификации ордера | //+-----------------------------------------------------------------------------------------------+ void vOrderModify(int iOTi) { int iOTy = -1; // Тип ордера double dOOP = 0; // Цена открытия ордера double dOSL = 0; // Стоп Лосс int iMag = 0; // Идентификатор советника double dSL = 0; // Уровень убытка double dTP = 0; // Уровень прибыли // Выберем по тикету открытый ордер, получим некоторые значения if(OrderSelect(iOTi, SELECT_BY_TICKET, MODE_TRADES)) { iOTy = OrderType(); dOOP = OrderOpenPrice(); dOSL = OrderStopLoss(); iMag = OrderMagicNumber(); } // Если ордер открыл данный советник, то входим в условие if(OrderSymbol() == Symbol() && OrderMagicNumber() == iMag) { // Если Стоп Лосс текущего ордера равен нулю, то модифицируем ордер if(dOSL == 0) { if(iOTy == OP_BUY) { dSL = NormalizeDouble(dOOP - StopLoss * Point, Digits); dTP = NormalizeDouble(dOOP + TakeProfit * Point, Digits); bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0, clrNONE); } if(iOTy == OP_SELL) { dSL = NormalizeDouble(dOOP + StopLoss * Point, Digits); dTP = NormalizeDouble(dOOP - TakeProfit * Point, Digits); bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0, clrNONE); } } } } 1...166416651666166716681669167016711672167316741675167616771678...1953 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
如果foo2返回真,则在这里寻找一个错误
删除了不必要的代码。
删除了不必要的代码。
总是假的
删除了不必要的代码。
下移
下移
我不知道这有什么关系,但在BEActivate()中的一百多个true中,onTick()true只出现了三次:))
再说一个问题...
难道你不想摆脱班级吗?
再说一个问题...
难道你不想摆脱班级吗?
这可以不通过 OnCalculate 来完成
OnCalculate()函数只在自定义指标中调用我需要OnCalculate()显示的数据。
也许有人通过类来实现!我需要OnCalculate()显示的 数据。
也许有人通过类来实现!这是什么意思?
下午好,你能帮我解决一个问题吗?在M15蜡烛图上,有几笔交易连续打开。
我希望打开的交易不超过一个。EA背后的逻辑是,在前一个订单关闭之前,下一个订单不会打开,但有时一系列的交易会在这样一个长蜡烛图上打开。请建议在代码中添加什么来防止这种情况?
代码片段: