新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1646 1...163916401641164216431644164516461647164816491650165116521653...1953 新评论 Tretyakov Rostyslav 2021.10.04 16:45 #16451 EVGENII SHELIPOV #:日安,马卡!!!。根据你的建议,我在无效的OnTick()函数中找到了一个地方,我可以附加TrailingGroupOrder()函数来发送命令,以修改组单的线索,哦,我的上帝,组单的线索已经开始工作了。然而,我的喜悦并没有持续多久。仔细一看,我看到只有有最小票数的订单才会被践踏。我很可能认为,问题出在只修改第一个(最小)订单,而不是一次性全部修改。Makar建议如何使网格中的所有订单一次修改???? 告诉我你在哪里把TrailingGroupOrder()放在void OnTick()函数中? EVGENII SHELIPOV 2021.10.04 16:51 #16452 MakarFX #: 告诉我你在哪里把TrailingGroupOrder()放在void OnTick()函数中? void OnTick() { double JAW = iAlligator(Symbol(),TimeframesIndicators,13,8,5,8,5,3,MODE_SMMA,PRICE_MEDIAN,MODE_GATORJAW,0); double TEETH = iAlligator(Symbol(),TimeframesIndicators,13,8,5,8,5,3,MODE_SMMA,PRICE_MEDIAN,MODE_GATORTEETH,0); double LIPS = iAlligator(Symbol(),TimeframesIndicators,13,8,5,8,5,3,MODE_SMMA,PRICE_MEDIAN,MODE_GATORLIPS,0); double DI_PLUSCurrent=iADX(Symbol(),TimeframesIndicators,14, PRICE_CLOSE,MODE_PLUSDI,0); double DI_MINUSCurrent=iADX(Symbol(),TimeframesIndicators,14, PRICE_CLOSE,MODE_MINUSDI,0); double MacdCurrent=iMACD(Symbol(),TimeframesIndicators,12,26,9, PRICE_CLOSE,MODE_MAIN,0); double MacdPrevious=iMACD(Symbol(),TimeframesIndicators,12,26,9, PRICE_CLOSE,MODE_MAIN,2 ); double ATR = iATR(Symbol(), TimeframesVolatility, BarCount, 0); { if (CountTrade() == 0) { if((UseHour==1&&Hour()>=StartTime&&Hour()<=StopTime)||UseHour==0) if(LIPS>TEETH&& TEETH>JAW&&DI_PLUSCurrent>18&&DI_PLUSCurrent>DI_MINUSCurrent&&MacdCurrent>MacdPrevious) { FirstLots = Lots(); tp = NormalizeDouble(Ask + TakeProfitFirstOrder*Point, Digits); ticket = OrderSend(Symbol(), OP_BUY, FirstLots, Ask, slip, 0, tp, "1-ый ордер", Magic, 0, Blue); } if((UseHour==1&&Hour()>=StartTime&&Hour()<=StopTime)||UseHour==0) if(LIPS<TEETH&& TEETH<JAW&&DI_MINUSCurrent>18&&DI_MINUSCurrent>DI_PLUSCurrent&&MacdCurrent<MacdPrevious) { FirstLots = Lots(); tp = NormalizeDouble(Bid - TakeProfitFirstOrder*Point, Digits); ticket = OrderSend(Symbol(), OP_SELL, FirstLots, Bid, slip, 0, tp, "1-ый ордер", Magic, 0, Red); } } if (CountTrade() == 1) Trailing(); } 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); } } } if(CountTrade()>1) { TrailingGroupOrder(); } double op = CalculiteProfit(); if (op > FindLastLots() && Drawdown > DrawdownClosingMinMaxOrders) { ClosseMinMaxOrders(); } Comment("Всего открыто ордеров : " + DoubleToStr(OrdersHistoryTotal(), 0)+ "\n" + "Максимальное количество : " + DoubleToStr(MaxOrders, 0)+ "\n" + "Количество открытых ордеров: " + DoubleToStr(OrdersTotal(), 0)+ "\n" + "Осталось ордеров: " + DoubleToStr((MaxOrders - OrdersTotal()), 0)+ "\n" + "Баланс средств счета: " + DoubleToStr(AccountBalance(), 0)+ "\n" + "Свободные средства: " + DoubleToStr(AccountFreeMargin(), 0)+ "\n" + "Относительная текущая просадка: " + DoubleToStr(((AccountBalance() - AccountFreeMargin())/AccountBalance())*100, 2)+ "\n" + "Относительная максимальная просадка: " + DoubleToStr(GetMaxDrawdown(), 2)+ "\n" + "Текущая прибыль/убыток: " + DoubleToStr(AccountProfit(), 2)+ "\n" + "Абсолютная максимальная прибыль: " + DoubleToStr(GetMaxProfit(), 2)+ "\n" + "Абсолютный максимальный убыток (просадка): " + DoubleToStr(GetMaxLoss(), 2)+ "\n" + "Плечо: " + DoubleToStr(AccountLeverage(), 0)+ "\n" + "Своп: " + DoubleToStr(OrderSwap(), 2)+ "\n" + "Коммссия: " + DoubleToStr(OrderCommission(), 2)+ "\n" + "Шаг: " + DoubleToStr(Step(), 0)+ "\n" + "Минимальный тикет ордера: " + DoubleToStr(GetTicketMinOrder(), 0)+ "\n" + "Максимальный тикет ордера: " + DoubleToStr(GetTicketMaxOrder(), 0)+ "\n" + "Профит минимальный ордера: " + DoubleToStr(GetProfitMinOrder(), 2)+ "\n" + "Профит максимального ордера: " + DoubleToStr(GetProfitMaxOrder(), 2)+ "\n" + "Профит суммарный: " + DoubleToStr(CalculiteProfit(),2)); } Tretyakov Rostyslav 2021.10.04 16:59 #16453 EVGENII SHELIPOV #: 删除红色突出显示的项目 void OnTick() { double JAW = iAlligator(Symbol(),TimeframesIndicators,13,8,5,8,5,3,MODE_SMMA,PRICE_MEDIAN,MODE_GATORJAW,0); double TEETH = iAlligator(Symbol(),TimeframesIndicators,13,8,5,8,5,3,MODE_SMMA,PRICE_MEDIAN,MODE_GATORTEETH,0); double LIPS = iAlligator(Symbol(),TimeframesIndicators,13,8,5,8,5,3,MODE_SMMA,PRICE_MEDIAN,MODE_GATORLIPS,0); double DI_PLUSCurrent=iADX(Symbol(),TimeframesIndicators,14, PRICE_CLOSE,MODE_PLUSDI,0); double DI_MINUSCurrent=iADX(Symbol(),TimeframesIndicators,14, PRICE_CLOSE,MODE_MINUSDI,0); double MacdCurrent=iMACD(Symbol(),TimeframesIndicators,12,26,9, PRICE_CLOSE,MODE_MAIN,0); double MacdPrevious=iMACD(Symbol(),TimeframesIndicators,12,26,9, PRICE_CLOSE,MODE_MAIN,2 ); double ATR = iATR(Symbol(), TimeframesVolatility, BarCount, 0); { if (CountTrade() == 0) { if((UseHour==1&&Hour()>=StartTime&&Hour()<=StopTime)||UseHour==0) if(LIPS>TEETH&& TEETH>JAW&&DI_PLUSCurrent>18&&DI_PLUSCurrent>DI_MINUSCurrent&&MacdCurrent>MacdPrevious) { FirstLots = Lots(); tp = NormalizeDouble(Ask + TakeProfitFirstOrder*Point, Digits); ticket = OrderSend(Symbol(), OP_BUY, FirstLots, Ask, slip, 0, tp, "1-ый ордер", Magic, 0, Blue); } if((UseHour==1&&Hour()>=StartTime&&Hour()<=StopTime)||UseHour==0) if(LIPS<TEETH&& TEETH<JAW&&DI_MINUSCurrent>18&&DI_MINUSCurrent>DI_PLUSCurrent&&MacdCurrent<MacdPrevious) { FirstLots = Lots(); tp = NormalizeDouble(Bid - TakeProfitFirstOrder*Point, Digits); ticket = OrderSend(Symbol(), OP_SELL, FirstLots, Bid, slip, 0, tp, "1-ый ордер", Magic, 0, Red); } } if (CountTrade() == 1) Trailing(); } 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); } } } if(CountTrade()>1) { TrailingGroupOrder(); } double op = CalculiteProfit(); if (op > FindLastLots() && Drawdown > DrawdownClosingMinMaxOrders) { ClosseMinMaxOrders(); } Comment("Всего открыто ордеров : " + DoubleToStr(OrdersHistoryTotal(), 0)+ "\n" + "Максимальное количество : " + DoubleToStr(MaxOrders, 0)+ "\n" + "Количество открытых ордеров: " + DoubleToStr(OrdersTotal(), 0)+ "\n" + "Осталось ордеров: " + DoubleToStr((MaxOrders - OrdersTotal()), 0)+ "\n" + "Баланс средств счета: " + DoubleToStr(AccountBalance(), 0)+ "\n" + "Свободные средства: " + DoubleToStr(AccountFreeMargin(), 0)+ "\n" + "Относительная текущая просадка: " + DoubleToStr(((AccountBalance() - AccountFreeMargin())/AccountBalance())*100, 2)+ "\n" + "Относительная максимальная просадка: " + DoubleToStr(GetMaxDrawdown(), 2)+ "\n" + "Текущая прибыль/убыток: " + DoubleToStr(AccountProfit(), 2)+ "\n" + "Абсолютная максимальная прибыль: " + DoubleToStr(GetMaxProfit(), 2)+ "\n" + "Абсолютный максимальный убыток (просадка): " + DoubleToStr(GetMaxLoss(), 2)+ "\n" + "Плечо: " + DoubleToStr(AccountLeverage(), 0)+ "\n" + "Своп: " + DoubleToStr(OrderSwap(), 2)+ "\n" + "Коммссия: " + DoubleToStr(OrderCommission(), 2)+ "\n" + "Шаг: " + DoubleToStr(Step(), 0)+ "\n" + "Минимальный тикет ордера: " + DoubleToStr(GetTicketMinOrder(), 0)+ "\n" + "Максимальный тикет ордера: " + DoubleToStr(GetTicketMaxOrder(), 0)+ "\n" + "Профит минимальный ордера: " + DoubleToStr(GetProfitMinOrder(), 2)+ "\n" + "Профит максимального ордера: " + DoubleToStr(GetProfitMaxOrder(), 2)+ "\n" + "Профит суммарный: " + DoubleToStr(CalculiteProfit(),2)); } 突出显示为黄色,将其移至顶部 void OnTick() { if (CountTrade() == 1) Trailing(); if (CountTrade() > 1 ) TrailingGroupOrder(); double JAW = iAlligator(Symbol(),TimeframesIndicators,13,8,5,8,5,3,MODE_SMMA,PRICE_MEDIAN,MODE_GATORJAW,0); EVGENII SHELIPOV 2021.10.04 17:05 #16454 MakarFX #:删除红色突出显示的项目突出显示为黄色,把它拿出来 Makar是你昨天发给我的变体--在该变体中,订单的关闭也是非常简单的,是错误的。 Tretyakov Rostyslav 2021.10.04 17:08 #16455 EVGENII SHELIPOV #:马卡尔,这是你昨天发给我的变体--在该变体中,订单不能正确关闭,这本来是非常简单的事情。 我的更正并不影响成交。 还有一件事--TrailingGroupOrder()函数中的 "tr "等于什么? if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid - TrailingStopGroupOrder*Point, Digits), tp, 0)) Tretyakov Rostyslav 2021.10.04 17:09 #16456 EVGENII SHELIPOV #:马卡尔,这是你昨天发给我的变体--在该变体中,订单也被错误地关闭,这将是非常简单的。 你说它们不能正确关闭是什么意思? EVGENII SHELIPOV 2021.10.04 17:38 #16457 MakarFX #: 你说的 "不能正确关闭 "是什么意思? 并非所有的订单都会从拖网中一次性关闭,而是只关闭具有最小票数的订单,然后再逐一关闭。 Tretyakov Rostyslav 2021.10.04 18:47 #16458 EVGENII SHELIPOV #:并非所有的订单都会从拖网中一次性关闭,而是只关闭具有最小票数的订单,然后再逐一关闭。 我明天会检查的 EVGENII SHELIPOV 2021.10.05 15:42 #16459 大家好,我正在编写群组订单的拖放代码。代码逻辑如下。 在第二个和随后的订单被打开后,我们得到一个修改订单的命令ModifyOrders(),在这里我们计算平均数,然后计算takeprofit,并修改所有订单,但只修改takeprofit。 然后我们从void OnTick()函数中调用TrailingGroupOrder()函数,其中止损被修改为移动止损。 问题是只有一个有最低票的订单被修改;这是不正确的;网格中的所有订单都应该被修改,并在TP或SL关闭。请帮助我理解这一点。预先感谢你。 //+----------------------------------------------------------------------------+ //| Модификация групповых ордеров | //+----------------------------------------------------------------------------+ void ModifyOrders(int otype) { for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype) { if(otype == OP_BUY) tp = NormalizeDouble(GetAveragePrice() + TakeProfitGroupOrder*Point, Digits); if(otype == OP_SELL) tp = NormalizeDouble(GetAveragePrice() - TakeProfitGroupOrder*Point, Digits); if((otype == OP_BUY || otype == OP_SELL) && (Drawdown > DrawdownClosingTakeprofitZero)) tp = NormalizeDouble(GetAveragePrice(), 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("Ошибка модификации ордеров!"); } } } } //+----------------------------------------------------------------------------+ //| Трейлинг стоп групповых ордеров | //+----------------------------------------------------------------------------+ void TrailingGroupOrder() { 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 && Bid - GetAveragePrice() > TrailingStopGroupOrder*Point) { if(Bid - GetAveragePrice() > TrailingStopGroupOrder*Point || OrderStopLoss() == 0) { if(OrderStopLoss() < Bid - (TrailingStep + TrailingStopGroupOrder)*Point || OrderStopLoss() == 0) { if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid - TrailingStopGroupOrder*Point, Digits), tp, 0)) Print("Ошибка модификации групповых ордеров на покупку!"); } } } if(OrderType() == OP_SELL && GetAveragePrice() - Ask > TrailingStopGroupOrder*Point) { if(GetAveragePrice() - Ask > TrailingStopGroupOrder*Point || OrderStopLoss() == 0) { if(OrderStopLoss() > Ask + (TrailingStep + TrailingStopGroupOrder)*Point || OrderStopLoss() == 0) { if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask + TrailingStopGroupOrder*Point, Digits), tp, 0)) Print("Ошибка модификации групповых ордеров на продажу!"); } } } } } } } Tretyakov Rostyslav 2021.10.05 16:02 #16460 EVGENII SHELIPOV #:大家好,我正在编写群组订单的拖放代码。拖网的代码逻辑如下。 为什么会出现这种重复? if(OrderType() == OP_BUY && Bid - GetAveragePrice() > TrailingStopGroupOrder*Point) { if(Bid - GetAveragePrice() > TrailingStopGroupOrder*Point || OrderStopLoss() == 0) { if(OrderStopLoss() < Bid - (TrailingStep + TrailingStopGroupOrder)*Point || OrderStopLoss() == 0) { 你可以这样做 if(OrderType() == OP_BUY && Bid - GetAveragePrice() > TrailingStopGroupOrder*Point) { if(OrderStopLoss() < Bid - (TrailingStep + TrailingStopGroupOrder)*Point || OrderStopLoss() == 0) { 同时显示哪些参数 TrailingStep TakeProfitGroupOrder TrailingStopGroupOrder 1...163916401641164216431644164516461647164816491650165116521653...1953 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
日安,马卡!!!。
根据你的建议,我在无效的OnTick()函数中找到了一个地方,我可以附加TrailingGroupOrder()函数来发送命令,以修改组单的线索,哦,我的上帝,组单的线索已经开始工作了。然而,我的喜悦并没有持续多久。仔细一看,我看到只有有最小票数的订单才会被践踏。
我很可能认为,问题出在只修改第一个(最小)订单,而不是一次性全部修改。
Makar建议如何使网格中的所有订单一次修改????
告诉我你在哪里把TrailingGroupOrder()放在void OnTick()函数中?
删除红色突出显示的项目
突出显示为黄色,将其移至顶部
删除红色突出显示的项目
突出显示为黄色,把它拿出来
Makar是你昨天发给我的变体--在该变体中,订单的关闭也是非常简单的,是错误的。
马卡尔,这是你昨天发给我的变体--在该变体中,订单不能正确关闭,这本来是非常简单的事情。
我的更正并不影响成交。
还有一件事--TrailingGroupOrder()函数中的 "tr "等于什么?
马卡尔,这是你昨天发给我的变体--在该变体中,订单也被错误地关闭,这将是非常简单的。
你说的 "不能正确关闭 "是什么意思?
并非所有的订单都会从拖网中一次性关闭,而是只关闭具有最小票数的订单,然后再逐一关闭。
并非所有的订单都会从拖网中一次性关闭,而是只关闭具有最小票数的订单,然后再逐一关闭。
大家好,我正在编写群组订单的拖放代码。代码逻辑如下。
在第二个和随后的订单被打开后,我们得到一个修改订单的命令ModifyOrders(),在这里我们计算平均数,然后计算takeprofit,并修改所有订单,但只修改takeprofit。
然后我们从void OnTick()函数中调用TrailingGroupOrder()函数,其中止损被修改为移动止损。
问题是只有一个有最低票的订单被修改;这是不正确的;网格中的所有订单都应该被修改,并在TP或SL关闭。请帮助我理解这一点。预先感谢你。
大家好,我正在编写群组订单的拖放代码。拖网的代码逻辑如下。
为什么会出现这种重复?
你可以这样做
同时显示哪些参数