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千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
何も変わっていない。
すべてを変える...
何も変わっていない。
それとも...
別の機能を提供した...何も追加する必要はありません。
それとも動かすか...。
ハイライトされた項目を削除することができます
ハイライトされた部分を削除することができます
マカー......その理由を教えてください
マカー......その理由を教えてください
ハイライトされた部分を削除することができます。
写真を送りますが、書き直す必要はありません。この問題に直面したことのある方の経験を教えてください。
オーダーグリッドに古い平均価格があり、最小/最大オーダーがクローズされた場合、新しい最大オーダーがオープンしてもオーダーは修正されません。
もし価格が古い平均価格まで行き、オーダーグリッドがその価格で閉じたら、損失を得ることになります。一箇所だけ、もう一回修正を加えることになりました
以下は修正機能です。
問題は、ログのエラーがどの程度致命的であるかということです
スリッページサイズは、チケットが一致する限り、どの方向からの注文でも削除することができます。
売値、買値は関係ない
売値、買値は関係ない
如何に
問題は、ログブックのミスがどれだけ重大なものであるかです
クリティカルではないが、説明はある・・・。