MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1646 1...163916401641164216431644164516461647164816491650165116521653...1953 新しいコメント Tretyakov Rostyslav 2021.10.04 16:45 #16451 EVGENII SHELIPOV #:Good day Makar !!!アドバイスに従い、void OnTick()関数にTrailingGroupOrder()関数を付けて、グループオーダーのトレールを修正するコマンドを送信できる場所を見つけたのですが、なんとグループオーダーのトレールが動き出しました。しかし、喜びは長くは続かなかった。よく見ると、minチケットのある注文だけトリルされている。一度に全部ではなく、最初の(最小の)注文の修正に問題がある可能性が非常に高いと推測されます。マカーは、グリッドのすべての注文を修正する方法をアドバイスしてください? 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 #:Makar これは、あなたが昨日送ってくれたバリエーションです。このバリエーションでは、注文が正しく閉じられていないのは非常に単純なことです。 私の修正は、クロージングには影響しません。 もうひとつ、TrailingGroupOrder()関数の "tr "は何に相当するのでしょうか? if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid - TrailingStopGroupOrder*Point, Digits), tp, 0)) Tretyakov Rostyslav 2021.10.04 17:09 #16456 EVGENII SHELIPOV #:Makar これは、あなたが昨日送ってくれたバリエーションです。このバリエーションでは、注文も間違って閉じられてしまうので、非常に簡単だったでしょう。 正しく閉じないってどういうこと? 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 こんにちは、私はグループ注文のトロールのためのコードを書いています。コードのロジックは以下の通りです。 2つ目以降の注文がオープンされた後、注文を修正するコマンドを取得します ModifyOrders()では、平均を計算し、次にtakeprofit計算を行い、takeprofitのみを除くすべての注文を修正します。 そして、Void OnTick()関数からTrailingGroupOrder()関数を呼び出し、Stop LossをTrailing Stopに変更します。 質問は、最小チケットのある1つの注文だけが修正されることです。これは正しくありません。グリッド内のすべての注文が修正され、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千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
Good day Makar !!!
アドバイスに従い、void OnTick()関数にTrailingGroupOrder()関数を付けて、グループオーダーのトレールを修正するコマンドを送信できる場所を見つけたのですが、なんとグループオーダーのトレールが動き出しました。しかし、喜びは長くは続かなかった。よく見ると、minチケットのある注文だけトリルされている。
一度に全部ではなく、最初の(最小の)注文の修正に問題がある可能性が非常に高いと推測されます。
マカーは、グリッドのすべての注文を修正する方法をアドバイスしてください?
TrailingGroupOrder()をvoid OnTick()関数のどこに置いたか教えてください。
赤くハイライトされた項目を削除する
黄色でハイライトされた部分を上に持ってくる
赤くハイライトされた項目を削除する
黄色でハイライトされた部分を上に持ってくる
Makarは、あなたが昨日送ってくれたバリアントです - それはそのバリアントで非常に単純であろう、注文も間違って閉じています。
Makar これは、あなたが昨日送ってくれたバリエーションです。このバリエーションでは、注文が正しく閉じられていないのは非常に単純なことです。
私の修正は、クロージングには影響しません。
もうひとつ、TrailingGroupOrder()関数の "tr "は何に相当するのでしょうか?
Makar これは、あなたが昨日送ってくれたバリエーションです。このバリエーションでは、注文も間違って閉じられてしまうので、非常に簡単だったでしょう。
正しく閉じない」とはどういう意味ですか?
トロールから全ての注文が一度にクローズされるわけではなく、最小チケットの注文のみなど、一つ一つクローズされます
トロールから全ての注文が一度にクローズされるわけではなく、最小チケットの注文のみなど、一つ一つクローズされます
こんにちは、私はグループ注文のトロールのためのコードを書いています。コードのロジックは以下の通りです。
2つ目以降の注文がオープンされた後、注文を修正するコマンドを取得します ModifyOrders()では、平均を計算し、次にtakeprofit計算を行い、takeprofitのみを除くすべての注文を修正します。
そして、Void OnTick()関数からTrailingGroupOrder()関数を呼び出し、Stop LossをTrailing Stopに変更します。
質問は、最小チケットのある1つの注文だけが修正されることです。これは正しくありません。グリッド内のすべての注文が修正され、TPまたはSLでクローズされるはずです。よろしくお願いします。よろしくお願いします。
こんにちは、私はグループ注文のトロールのためのコードを書いています。トロールのコードロジックは以下の通りです。
なぜこのような重複があるのか
このようにすることができます
また、どのようなパラメータがあるのかを示す