MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1944 1...193719381939194019411942194319441945194619471948194919501951...1953 新しいコメント Valeriy Yastremskiy 2022.04.08 10:47 #19431 makssub #:すべて同じ通貨ペア、例えばEurUsdの中にあるとします。どちらもBuyでオープンです。 一般的にこれらは、異なるペアで、同じもので異なるタスクである。1つの通貨ペアで同じロットの場合、2つの注文/ポジションには異なるオプションがあります:ノンクロスとクロス。その下にあるものの上は、注文までの距離によって損失または利益となる。一方が利益、他方が損失、上下の両方が利益または損失の場合。 お好みに合わせて設定してください。同じ数量であれば、同じ数量で決済し、違う数量であれば、利益の金額、損失の金額を計算し、利益と損失の比率を計算し、この比率に負けポジションのロット数を掛け、この部分を決済すればよいでしょう。 sashasonik 2022.04.08 14:15 #19432 Ivan Butko 新しいローソク 足が始まったときだけプログラムを動作させ、コードを実行した後、次のローソク足が始まるまでじっと待つ方法を教えていただけませんか? 機能 bool NewBar() { static datetime LastTime = 0; if(iTime(Symbol(), PERIOD_CURRENT, 0) != LastTime) { LastTime = iTime(Symbol(), PERIOD_CURRENT, 0); return (true); } else return (false); } Maksim Burov 2022.04.08 14:24 #19433 Valeriy Yastremskiy #:これらは、異なるペアで、同じものでも異なるタスクです。一方、同じロットで2つの注文・ポジションが交差していないオプションと交差しているオプションがある。交差していないものの間の価格は両方とも損失、交差しているものは注文の間だけ利益がある。その下にあるものの上は、注文までの距離によって損失または利益となる。一方が利益、他方が損失、上下の両方が利益または損失の場合。お好みに合わせて設定してください。同じ数量であれば、同じ数量で決済し、違う数量であれば、利益の金額、損失の金額を計算し、利益と損失の比率を計算し、この比率に負けポジションのロット数を掛け、この部分を決済すればよいでしょう。 その通り)まさに私が望んでいることです。 負けた部分を計算して決済すること。しばらくやって みたが、混乱して失敗 した。 Ivan Butko 2022.04.08 14:38 #19434 Valeriy Yastremskiy #: サシャソニック#: 機能ありがとうございました。 sashasonik 2022.04.08 16:23 #19435 makssub #:その通り)まさに私が望んでいることです。 負けた部分を計算し、決済する。 一通りやってみたが、混乱し、うまく いかなかった。 私の記憶が間違っていなければ、これらの機能は一方向、つまり買いか売りかのどちらかに重なります。要するに、改造が必要なのです。 //=========================================================================================================================================// // Функция расчета текущего состояния по открытым ордерам // //=========================================================================================================================================// //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double CurrentCondition(string OrdType, string inf) { int Pos = 0; double result = 0, Count = 0, AveragePrice = 0, profit = 0; double LastPriceBuy, LastPriceSell, ProfitBuy, ProfitSell, SumProfit; for(int cnt = 0; cnt < OrdersTotal(); cnt++) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && (OrderMagicNumber() == MagicNumber || MagicCheck())) { if(OrderType() == OP_SELL || OrderType() == OP_BUY) { if(inf == "Lpos") { profit = OrderProfit() ; Pos = OrderTicket() ; if(profit > 0 && profit > Lprofit) { Lprofit1 = Lprofit ; Lpos1 = Lpos ; Lprofit = profit ; //макс значение Lpos = Pos ; } if(profit < 0 && profit < Cprofit) { Cprofit = profit ; //мин значение Cpos = Pos ; } } SumProfit += OrderProfit() + OrderSwap() + OrderCommission() ; if(inf == "CurrentDrawdown") result = MathMax((AccountBalance() + AccountCredit() - AccountEquity()) / (AccountBalance() + AccountCredit()) * 100, 0); if(inf == "CurrentUrov" && AccountMargin() > 0) result = AccountEquity() / AccountMargin() * 100 ; if(inf == "TotalOrd") result++ ; if(OrdType == "Buy") { if(OrderType() == OP_BUY) { if(inf == "TotalBuy") result++ ; if(inf == "LastLotBuy") result = OrderLots() ; if(inf == "SumLotBuy") result += OrderLots() ; AveragePrice += OrderOpenPrice() * OrderLots() ; Count += OrderLots() ; LastPriceBuy = OrderOpenPrice() ; ProfitBuy += OrderProfit() + OrderSwap() + OrderCommission() ; if(AveragePrice > 0 && Count > 0) { if(inf == "CalculateAveragePriceBuy") return(NormalizeDouble(AveragePrice / Count, Digits)); } else return(0); } } if(OrdType == "Sell") { if(OrderType() == OP_SELL) { if(inf == "TotalSell") result++ ; if(inf == "LastLotSell") result = OrderLots() ; if(inf == "SumLotSell") result += OrderLots() ; AveragePrice += OrderOpenPrice() * OrderLots() ; Count += OrderLots() ; LastPriceSell = OrderOpenPrice() ; ProfitSell += OrderProfit() + OrderSwap() + OrderCommission(); if(AveragePrice > 0 && Count > 0) { if(inf == "CalculateAveragePriceSell") return(NormalizeDouble(AveragePrice / Count, Digits)); } else return(0); } } } } } } if(inf == "Lpos") return(Lpos) ; //Ордер с наибольшим профитом if(inf == "Cpos") return(Cpos) ; //Ордер с наименьшим профитом if(inf == "LastPriceBuy") return(NormalizeDouble(LastPriceBuy, Digits)) ; if(inf == "LastPriceSell") return(NormalizeDouble(LastPriceSell, Digits)) ; if(inf == "ProfitBuy") return(NormalizeDouble(ProfitBuy, 2)) ; if(inf == "ProfitSell") return(NormalizeDouble(ProfitSell, 2)) ; if(inf == "SumProfit") return(NormalizeDouble(SumProfit, 2)) ; return(result) ; } //=========================================================================================================================================// // Перекрытие ордеров // //=========================================================================================================================================// //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void CheckOverlapping() { Lpos = 0; Cpos = 0; Lprofit = 0; Cprofit = 0; Lpos = CurrentCondition("", "Lpos"); Cpos = CurrentCondition("", "Cpos"); if(totalord >= LeadingOrder) { if(Lprofit > 0 && Lprofit1 <= 0 && Cprofit < 0) { if(Lprofit + Cprofit > 0 && (Lprofit + Cprofit) * 100 / Lprofit > ProfitPersent) { Lpos1 = 0; CloseSelectOrder(); } } else if(Lprofit > 0 && Lprofit1 > 0 && totalord > LeadingOrder && Cprofit < 0) { if(Lprofit + Lprofit1 + Cprofit > 0 && (Lprofit + Lprofit1 + Cprofit) * 100 / (Lprofit + Lprofit1) > SecondProfitPersent) CloseSelectOrder(); } } } //=========================================================================================================================================// // Перекрытие ордеров // //=========================================================================================================================================// //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int CloseSelectOrder() { if(Info) Print("Функция перекрытия ордеров."); int error = 0; int error1 = 0; int error2 = 0; int Result = 0; int Slippage = 2 * MarketInfo(Symbol(), MODE_SPREAD); // ---------------------- последний ----------------------- while(error1 == 0) { RefreshRates(); int i = OrderSelect(Lpos, SELECT_BY_TICKET, MODE_TRADES); if(i != 1) { Print("Ошибка! Невозможно выбрать ордер с наибольшим профитом. Выполнение перекрытия отменено."); return (0); } if(OrderSymbol() == Symbol() && (OrderMagicNumber() == MagicNumber || MagicCheck())) { if(OrderType() == OP_BUY) { error1 = (OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), Slippage, Blue)); if(error1 == 1) { if(Info) Print("Лидирующий ордер закрыт успешно."); Sleep(500); } else { Print("Ошибка закрытия лидирующего ордера, повторяем операцию. "); } } // ----------------------------------------------------- if(OrderType() == OP_SELL) { error1 = (OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), Slippage, Red)); if(error1 == 1) { if(Info) Print("Лидирующий ордер закрыт успешно"); Sleep(500); } else { Print("Ошибка закрытия лидирующего ордера, повторяем операцию. "); } } } } // ---------------------- пред последний ----------------------- if(Lpos1 != 0) { while(error2 == 0) { RefreshRates(); i = OrderSelect(Lpos1, SELECT_BY_TICKET, MODE_TRADES); if(i != 1) { Print("Ошибка! Невозможно выбрать пред ордер с наибольшим профитом. Выполнение перекрытия отменено."); return (0); } if(OrderSymbol() == Symbol() && (OrderMagicNumber() == MagicNumber || MagicCheck())) { if(OrderType() == OP_BUY) { error2 = (OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), Slippage, Blue)); if(error2 == 1) { if(Info) Print("Пред Лидирующий ордер закрыт успешно."); Sleep(500); } else { Print("Ошибка закрытия пред лидирующего ордера, повторяем операцию. "); } } // ----------------------------------------------------- if(OrderType() == OP_SELL) { error2 = (OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), Slippage, Red)); if(error2 == 1) { if(Info) Print("Пред Лидирующий ордер закрыт успешно"); Sleep(500); } else { Print("Ошибка закрытия Пред лидирующего ордера, повторяем операцию. "); } } } } } // ----------- выбранный (обычно с наименьшим профитом ) ----------- while(error == 0) { RefreshRates(); i = OrderSelect(Cpos, SELECT_BY_TICKET, MODE_TRADES); if(i != 1) { Print("Ошибка! Невозможно выбрать ордер с наименьшим профитом. Выполнение перекрытия отменено."); return (0); } if(OrderSymbol() == Symbol() && (OrderMagicNumber() == MagicNumber || MagicCheck())) { if(OrderType() == OP_BUY) { error = (OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), Slippage, Blue)); if(error == 1) { if(Info) Print("Перекрываемый ордер закрыт успешно."); Sleep(500); } else { Print("Ошибка закрытия перекрываемого ордера, повторяем операцию. "); } } // -------------------------------------------------- if(OrderType() == OP_SELL) { error = (OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), Slippage, Red)); if(error == 1) { if(Info) Print("Перекрываемый ордер закрыт успешно."); Sleep(500); } else { Print("Ошибка закрытия перекрываемого ордера, повторяем операцию. "); } } } } Result = 1; return (Result); } Valeriy Yastremskiy 2022.04.08 17:28 #19436 makssub #:その通り)まさに私が望んでいることです。 負けた部分を計算し、決済する。しばらく 試したが、混乱し、うまく いかなかった。 ベールはどうしたんだ?コードが必要です。私はそのような問題はありませんし、率直に言って、そのようなお金の管理方法は賢明でないと思います。 Aleksandr Kononov 2022.04.10 07:36 #19437 MT5で1つのウィンドウに同じインテントを持つ2つの同じインディケータをロードする方法を教えてください。起動するたびに変更するINDICATOR_SHORTNAMEを試しましたが、効果がありません。もしかして、別の方法があるのでは? Alexey Viktorov 2022.04.10 08:16 #19438 Aleksandr Kononov #: MT5で同じインテントを持つ2つのインディケータを1つのウィンドウにロードする方法を教えてください。INDICATOR_SHORTNAMEを試したのですが、起動するたびに変更したほうがいいのでしょうか?もしかして、別の方法があるのでは? また無価値なインプットを手に入れて変えてください。 Maksim Burov 2022.04.10 08:43 #19439 Valeriy Yastremskiy #:なぜベールが必要なのか、何が問題なのか?コードが必要です。私はこのような問題を持っていないだけで、率直に言って、このアプローチはマネーマネージャーとして賢明であるとは思わない。 こんにちは。ベールについて読みました。足し算、引き算ができない マネーマネジメントについては、何も言えない。 試していない。 最新版を添付します。 Order1(2) the selected order's profit Order1(3) the selected order's lot double FirstProfit(int a = 1) { double profit = 0, proflot = 0, OneProfLot = 0, result = 1, profit_1 = 0; OneProfLot = NormalizeDouble(Lots*Order1(2)/Order1(3),2); profit = NormalizeDouble(Lots*Order1(2)/Order1(3),2); proflot = Order1(3); while (profit >= Order1(2) && profit <= OneProfLot) { profit -= OneProfLot; if (profit !=0 && NormalizeDouble(profit + CalculateProfitHistory(),2) > NormalizeDouble(ProfitLot, Digits)*Lots*100) profit_1 = profit; proflot = NormalizeDouble(proflot*profit/Order1(2),2); } } } if(a==1) {result = (double)profit_1;} else if(a==2) {result = (double)proflot;} return(result); } Aleksandr Kononov 2022.04.10 09:12 #19440 Alexey Viktorov #:また無価値なインプットを手に入れて変えてください。 手動で操作しない場合はどうでしょうか?mt4では、インジケータが1つずつ上に設定されているのですが、なぜかわかりません。mt5でも同じように、一般的には何に依存するのか理解したいです。 1...193719381939194019411942194319441945194619471948194919501951...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
すべて同じ通貨ペア、例えばEurUsdの中にあるとします。どちらもBuyでオープンです。
一般的にこれらは、異なるペアで、同じもので異なるタスクである。1つの通貨ペアで同じロットの場合、2つの注文/ポジションには異なるオプションがあります:ノンクロスとクロス。その下にあるものの上は、注文までの距離によって損失または利益となる。一方が利益、他方が損失、上下の両方が利益または損失の場合。
お好みに合わせて設定してください。同じ数量であれば、同じ数量で決済し、違う数量であれば、利益の金額、損失の金額を計算し、利益と損失の比率を計算し、この比率に負けポジションのロット数を掛け、この部分を決済すればよいでしょう。
機能
これらは、異なるペアで、同じものでも異なるタスクです。一方、同じロットで2つの注文・ポジションが交差していないオプションと交差しているオプションがある。交差していないものの間の価格は両方とも損失、交差しているものは注文の間だけ利益がある。その下にあるものの上は、注文までの距離によって損失または利益となる。一方が利益、他方が損失、上下の両方が利益または損失の場合。
お好みに合わせて設定してください。同じ数量であれば、同じ数量で決済し、違う数量であれば、利益の金額、損失の金額を計算し、利益と損失の比率を計算し、この比率に負けポジションのロット数を掛け、この部分を決済すればよいでしょう。
その通り)まさに私が望んでいることです。
負けた部分を計算して決済すること。
しばらくやって みたが、混乱して失敗 した。
機能
その通り)まさに私が望んでいることです。
負けた部分を計算し、決済する。
一通りやってみたが、混乱し、うまく いかなかった。
私の記憶が間違っていなければ、これらの機能は一方向、つまり買いか売りかのどちらかに重なります。要するに、改造が必要なのです。
その通り)まさに私が望んでいることです。
負けた部分を計算し、決済する。
しばらく 試したが、混乱し、うまく いかなかった。
ベールはどうしたんだ?コードが必要です。私はそのような問題はありませんし、率直に言って、そのようなお金の管理方法は賢明でないと思います。
MT5で同じインテントを持つ2つのインディケータを1つのウィンドウにロードする方法を教えてください。INDICATOR_SHORTNAMEを試したのですが、起動するたびに変更したほうがいいのでしょうか?もしかして、別の方法があるのでは?
また無価値なインプットを手に入れて変えてください。
なぜベールが必要なのか、何が問題なのか?コードが必要です。私はこのような問題を持っていないだけで、率直に言って、このアプローチはマネーマネージャーとして賢明であるとは思わない。
こんにちは。ベールについて読みました。足し算、引き算ができない
マネーマネジメントについては、何も言えない。 試していない。
最新版を添付します。
Order1(2) the selected order's profit
Order1(3) the selected order's lot
また無価値なインプットを手に入れて変えてください。
手動で操作しない場合はどうでしょうか?mt4では、インジケータが1つずつ上に設定されているのですが、なぜかわかりません。mt5でも同じように、一般的には何に依存するのか理解したいです。