新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1626 1...161916201621162216231624162516261627162816291630163116321633...1953 新评论 Tretyakov Rostyslav 2021.09.26 09:56 #16251 EVGENII SHELIPOV #: 什么都没有改变。 改变一切... //+----------------------------------------------------------------------------+ void ClosseMinMaxOrders() { int slipp = MarketInfo(_Symbol,MODE_SPREAD)*2; int minTicket=GetOrderTicket(0); int maxTicket=GetOrderTicket(1); for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderClose(maxTicket, OrderLots(), Bid, slipp)&&OrderClose(minTicket, OrderLots(), Bid, slipp)) Print("Максимальный и минимальный ордера на покупку успешно закрыты!"); else Print("Не удалось закрыть максимальный и минимальный ордера на покупку!",GetLastError()); } } } //+----------------------------------------------------------------------------+ //| Калькуляция профита максимального и минимального ордера в сетке | //+----------------------------------------------------------------------------+ double CalculiteProfit() { double minProfit = 0, maxProfit = 0; for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(OrderTicket() == GetOrderTicket(0)) minProfit = OrderProfit(); if(OrderTicket() == GetOrderTicket(1)) maxProfit = OrderProfit(); } } } return(minProfit+maxProfit); } //+----------------------------------------------------------------------------+ //| Номер тикета | //| 0-минимального ордера в сетке | //| 1-максимального ордера в сетке | //+----------------------------------------------------------------------------+ int GetOrderTicket(int tick=-1) { int min_ticket = INT_MAX; int max_ticket = 0; int result=-1; { for (int cnt = OrdersTotal() - 1; cnt >= 0; cnt--) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if (OrderType() == OP_BUY || OrderType() == OP_SELL) { if(OrderTicket() < min_ticket) min_ticket = OrderTicket(); if(OrderTicket() > max_ticket) max_ticket = OrderTicket(); } } } } } if(tick==0) {result=min_ticket;} else if(tick==1) {result=max_ticket;} else {result=-1;} return(result); } //+----------------------------------------------------------------------------+ Tretyakov Rostyslav 2021.09.26 10:21 #16252 EVGENII SHELIPOV #: 什么都没有改变。 或者是这样... //--- global parameters bool closeAll=false; //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- if(CalculiteProfit() > ProfitMinMaxOrders && Drawdown > DrawdownClosingMinMaxOrders) closeAll=true; ClosseMinMaxOrders() } //+----------------------------------------------------------------------------+ void ClosseMinMaxOrders() { if(closeAll==true) { int slipp = MarketInfo(_Symbol,MODE_SPREAD)*2; int minTicket=GetOrderTicket(0); int maxTicket=GetOrderTicket(1); for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderClose(maxTicket, OrderLots(), Bid, slipp)&&OrderClose(minTicket, OrderLots(), Bid, slipp)) Print("Максимальный и минимальный ордера на покупку успешно закрыты!"); else Print("Не удалось закрыть максимальный и минимальный ордера на покупку!",GetLastError()); } } closeAll=false; } } //+----------------------------------------------------------------------------+ //| Калькуляция профита максимального и минимального ордера в сетке | //+----------------------------------------------------------------------------+ double CalculiteProfit() { double minProfit = 0, maxProfit = 0; for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(OrderTicket() == GetOrderTicket(0)) minProfit = OrderProfit(); if(OrderTicket() == GetOrderTicket(1)) maxProfit = OrderProfit(); } } } return(minProfit+maxProfit); } //+----------------------------------------------------------------------------+ //| Номер тикета | //| 0-минимального ордера в сетке | //| 1-максимального ордера в сетке | //+----------------------------------------------------------------------------+ int GetOrderTicket(int tick=-1) { int min_ticket = INT_MAX; int max_ticket = 0; int result=-1; { for (int cnt = OrdersTotal() - 1; cnt >= 0; cnt--) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if (OrderType() == OP_BUY || OrderType() == OP_SELL) { if(OrderTicket() < min_ticket) { min_ticket = OrderTicket(); } if(OrderTicket() > max_ticket) { max_ticket = OrderTicket(); } } } } } } if(tick==0) {result=min_ticket;} else if(tick==1) {result=max_ticket;} else {result=-1;} return(result); } //+----------------------------------------------------------------------------+ EVGENII SHELIPOV 2021.09.26 10:53 #16253 MakarFX #:我给了你另一个功能......不需要添加任何东西或者你可以移动它... //+----------------------------------------------------------------------------+ //| Закрытие минимального и максимального ордеров | //+----------------------------------------------------------------------------+ void ClosseMinMaxOrders() { int slipp = (int) MarketInfo(_Symbol,MODE_SPREAD)*2; for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if (OrderType() == OP_BUY) { if (CalculiteProfit() > 0 && Drawdown > DrawdownClosingMinMaxOrders) (OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Bid, slipp) && OrderClose(GetTicketMaxOrder(), FindLastLots(), Bid, slipp)); // Print("Максимальный и минимальный ордера на покупку успешно закрыты!"); else Print("Не удалось закрыть максимальный и минимальный ордера на покупку!",GetLastError()); } if (OrderType() == OP_SELL) { if (CalculiteProfit() > 0 && Drawdown > DrawdownClosingMinMaxOrders) (OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Ask, slipp) && OrderClose(GetTicketMaxOrder(), FindLastLots(), Ask, slipp)); // Print("Максимальный и минимальный ордера на продажу успешно закрыты!"); else Print("Не удалось закрыть максимальный и минимальный ордера на продажу!",GetLastError()); } } } } } Tretyakov Rostyslav 2021.09.26 11:18 #16254 EVGENII SHELIPOV #: 你可以删除突出显示的项目 //+----------------------------------------------------------------------------+ //| Закрытие минимального и максимального ордеров | //+----------------------------------------------------------------------------+ void ClosseMinMaxOrders() { int slipp = (int) MarketInfo(_Symbol,MODE_SPREAD)*2; for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if (OrderType() == OP_BUY) { if (CalculiteProfit() > 0 && Drawdown > DrawdownClosingMinMaxOrders) (OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Bid, slipp) && OrderClose(GetTicketMaxOrder(), FindLastLots(), Bid, slipp)); // Print("Максимальный и минимальный ордера на покупку успешно закрыты!"); else Print("Не удалось закрыть максимальный и минимальный ордера на покупку!",GetLastError()); } if (OrderType() == OP_SELL) { if (CalculiteProfit() > 0 && Drawdown > DrawdownClosingMinMaxOrders) (OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Ask, slipp) && OrderClose(GetTicketMaxOrder(), FindLastLots(), Ask, slipp)); // Print("Максимальный и минимальный ордера на продажу успешно закрыты!"); else Print("Не удалось закрыть максимальный и минимальный ордера на продажу!",GetLastError()); } } } } } EVGENII SHELIPOV 2021.09.26 11:33 #16255 MakarFX #:可以删除突出显示的内容 马卡尔,你能解释一下为什么吗? Tretyakov Rostyslav 2021.09.26 11:39 #16256 EVGENII SHELIPOV #:马卡尔,你能解释一下为什么吗?"滑动 "大小允许你从任何方向删除订单......只要票据相匹配 EVGENII SHELIPOV 2021.09.26 12:06 #16257 MakarFX #:你可以删除突出显示的文本。 我将把图片发给你,但我不需要重写,我想知道你是否有这方面的经验。 如果订单网格中有一个旧的平均价格,并且最小/最大订单被关闭,那么如果有一个新的最大订单打开,订单不会被修改。 if (CountTrade() < MaxOrders) { int order_type = FindLastOrderType(); if (order_type == OP_BUY) { price = FindLastOrderPrice(OP_BUY); if(Ask<= price - Step()*Point) { lastlot = NormalizeDouble(GetMinLotOrder()*MathPow( MultiplierParameter, OrdersTotal()), 2); ticket = OrderSend(Symbol(), OP_BUY, lastlot, Ask, slip, 0, 0, "Групповой ордер", Magic, 0, Blue); if (ticket < 1) Print ("Ошибка ордера на покупку"); ModifyOrders(OP_BUY); } } if (order_type == OP_SELL) { price = FindLastOrderPrice(OP_SELL); if(Bid>= price + Step()*Point) { lastlot = NormalizeDouble(GetMinLotOrder()*MathPow( MultiplierParameter, OrdersTotal()), 2); ticket = OrderSend(Symbol(), OP_SELL, lastlot, Bid, slip, 0, 0, "Групповой ордер", Magic, 0, Red); if (ticket < 1) Print ("Ошибка ордера на продажу!"); ModifyOrders(OP_SELL); } 如果价格上升到旧的平均价格,而订单格子在它那里关闭,我们将得到一个损失。我不得不在一个地方再增加一个修改 //+----------------------------------------------------------------------------+ //| Закрытие минимального и максимального ордеров | //+----------------------------------------------------------------------------+ void ClosseMinMaxOrders() { int slipp = (int) MarketInfo(_Symbol,MODE_SPREAD)*2; for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if (OrderType() == OP_BUY) { if (CalculiteProfit() > 0 && Drawdown > DrawdownClosingMinMaxOrders) (OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Bid, slipp) && OrderClose(GetTicketMaxOrder(), FindLastLots(), Bid, slipp)); // Print("Максимальный и минимальный ордера на покупку успешно закрыты!"); else Print("Не удалось закрыть максимальный и минимальный ордера на покупку!",GetLastError()); ModifyOrders(OP_BUY); } if (OrderType() == OP_SELL) { if (CalculiteProfit() > 0 && Drawdown > DrawdownClosingMinMaxOrders) (OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Ask, slipp) && OrderClose(GetTicketMaxOrder(), FindLastLots(), Ask, slipp)); // Print("Максимальный и минимальный ордера на продажу успешно закрыты!"); else Print("Не удалось закрыть максимальный и минимальный ордера на продажу!",GetLastError()); ModifyOrders(OP_SELL); } } } } } 这里是修改功能 //+----------------------------------------------------------------------------+ //| Модификация групповых ордеров | //+----------------------------------------------------------------------------+ void ModifyOrders(int otype) { double avg_price, order_lots = 0; price = 0; for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype) { price += OrderOpenPrice() * OrderLots(); order_lots += OrderLots() ; } } } avg_price = NormalizeDouble(price / order_lots, Digits); { ObjectDelete(0, "AveragePriceLine"); ObjectCreate(0,"AveragePriceLine" ,OBJ_HLINE, 0, 0, avg_price); ObjectSet("AveragePriceLine",OBJPROP_COLOR, Magenta); } if (otype == OP_BUY) tp = NormalizeDouble (avg_price + TakeProfitGroupOrder*Point, Digits); if (otype == OP_SELL) tp = NormalizeDouble (avg_price - TakeProfitGroupOrder*Point, Digits); for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype) { if(OrderModify(OrderTicket(), OrderOpenPrice(), 0, tp, 0)) Print("Ордера успешно модифицированы!"); else Print("Ошибка модификации ордеров!"); } } } } 问题是,日志中的错误有多严重? EVGENII SHELIPOV 2021.09.26 12:09 #16258 MakarFX #: "滑动 "大小允许你从任何方向删除订单......只要票据相匹配 卖价或买价并不重要 Tretyakov Rostyslav 2021.09.26 12:25 #16259 EVGENII SHELIPOV #:卖价或买价并不重要 无所谓 Tretyakov Rostyslav 2021.09.26 12:27 #16260 EVGENII SHELIPOV #:问题是日志中的错误有多严重 不是关键,但有一个解释... 1...161916201621162216231624162516261627162816291630163116321633...1953 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
什么都没有改变。
改变一切...
什么都没有改变。
或者是这样...
我给了你另一个功能......不需要添加任何东西
或者你可以移动它...
你可以删除突出显示的项目
可以删除突出显示的内容
马卡尔,你能解释一下为什么吗?
马卡尔,你能解释一下为什么吗?
你可以删除突出显示的文本。
我将把图片发给你,但我不需要重写,我想知道你是否有这方面的经验。
如果订单网格中有一个旧的平均价格,并且最小/最大订单被关闭,那么如果有一个新的最大订单打开,订单不会被修改。
如果价格上升到旧的平均价格,而订单格子在它那里关闭,我们将得到一个损失。我不得不在一个地方再增加一个修改
这里是修改功能
问题是,日志中的错误有多严重?
"滑动 "大小允许你从任何方向删除订单......只要票据相匹配
卖价或买价并不重要
卖价或买价并不重要
无所谓
问题是日志中的错误有多严重
不是关键,但有一个解释...