MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1671 1...166416651666166716681669167016711672167316741675167616771678...1953 新しいコメント Nerd Trader 2021.10.13 09:37 #16701 MakarFX #:foo2がtrueを返した場合、ここでエラーを探します。 conditionとretornの間にxがあり、trueの時はわかるのですが、onTickの時は常にfalseになっています。 Nerd Trader 2021.10.13 09:45 #16702 bool BESet(double sl = 0, color arrow_color = 0, string order_type = ""){ bool order = OrderModify( OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, arrow_color ); if(!order) { ResetLastError(); Print("!Ошибка ",order_type,". Причина: ", GetLastError()); return false; } else { return true; } } bool BEActivate(){ double unrealized_profit = 0; color arrow_color = 0; string order_type = ""; double sl = 0; bool is_be = false; // если объявить true, то в OnTick всегда будет возвращаться true if(OrdersTotal() >= 1){ for(int i = OrdersTotal() -1; i >= 0; i--){ if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) continue; if(OrderType() == OP_BUY){ if(OrderStopLoss() > OrderOpenPrice()) continue; unrealized_profit = NormalizeDouble(MathAbs(OrderOpenPrice() - Ask)/Point, 0); if(unrealized_profit >= save_zone && Ask > OrderOpenPrice()){ is_be = BESet(NormalizeDouble(OrderOpenPrice()+breakeven*Point,Digits), clrGreenYellow, "Бай"); Print("BE ",is_be); } } if(OrderType() == OP_SELL){ ... ... } } } return is_be; } void OnTick() { last_time = iTime(NULL, 0, 0); bool is_be = BEActivate(); if(last_time > bar.time_open){ bar.Initialize(); Pr int("is_be ",is_be); //Всегда FALSE ... } 不要なコードを削除しました。 Tretyakov Rostyslav 2021.10.13 09:54 #16703 Nerd Trader #:不要なコードを削除しました。 last_time = iTime(NULL, 0, 0); bool is_be = BEActivate(); if(last_time > bar.time_open){ bar.Initialize(); Pr int("is_be ",is_be); //Всегда FALSE 常に偽 Tretyakov Rostyslav 2021.10.13 10:01 #16704 Nerd Trader #:不要なコードを削除しました。 下に移動する void OnTick() { bool is_be = BEActivate(); if(last_time > bar.time_open){ bar.Initialize(); Print("is_be ",is_be); //Всегда FALSE ... last_time = iTime(NULL, 0, 0); } Nerd Trader 2021.10.13 10:20 #16705 MakarFX #:下へ移動 これがどう関係するのかわかりませんが、BEActivate()で100回以上trueが出たうち、onTick()のtrueは3回しか出ませんでした :)) Tretyakov Rostyslav 2021.10.13 10:26 #16706 Nerd Trader #: どういう関係があるのかわかりませんが、BEActivate()の100回以上のtrueのうち、onTick()のtrueは3回しか出てきません :))) そしてまた質問ですが...。 クラスをなくしたくないですか? Nerd Trader 2021.10.13 10:30 #16707 MakarFX #:そしてまた質問ですが...。クラスをなくしたくないですか? こんな悪ふざけで、自分のカッペを追い出そうというのだから Mikhail Toptunov 2021.10.13 10:42 #16708 MakarFX #: これは OnCalculateを 使用せずに行うことができますOnCalculate()関数が呼び出されるのは、カスタムインジケータのみ です OnCalculate()が表示するデータが欲しいのですが。 もしかしたら、誰かがクラスを使った実装を持っているかもしれませんね Tretyakov Rostyslav 2021.10.13 10:58 #16709 Mikhail Toptunov #:OnCalculate()が表示 するデータが欲しいのですが。 もしかしたら、誰かがクラスを使った実装を持っているかもしれません とはどういう意味でしょうか? законопослушный гражданин 2021.10.13 11:39 #16710 こんにちは、あなたは私が問題を解決するのを助けることができます。 1つ以上のトレードを開けないようにしてほしい。EAのロジックは、前の注文が決済されるまで、次の注文は開かないというものですが、このような長いローソク足で一連の案件が開くことがあります。このような状況を防ぐために、コードに何を追加すればよいかアドバイスをお願いします。 コードスニペット: //+-----------------------------------------------------------------------------------------------+ //| Функция проверки открытых оредров | //+-----------------------------------------------------------------------------------------------+ bool bCheckOrders() { // Переберем в цикле ордера, для проверки открытых ордеров данным советником for(int i = 0; i <= OrdersTotal(); i++) if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) return(false); return(true); } //+-----------------------------------------------------------------------------------------------+ //| Функция поиска сигнала на покупку | //+-----------------------------------------------------------------------------------------------+ bool bSignalBuy() { if(dMA > Open[1] && dMA < Close[1]) //Open[1] и Close[1]- цены открытия и закрытия каждого бара текущего графика. return(true); return(false); } //+-----------------------------------------------------------------------------------------------+ //| Функция поиска сигнала на продажу | //+-----------------------------------------------------------------------------------------------+ bool bSignalSell() { if(dMA < Open[1] && dMA > Close[1]) return(true); return(false); } //+-----------------------------------------------------------------------------------------------+ //| Функция открытия ордера на покупку | //+-----------------------------------------------------------------------------------------------+ void vOrderOpenBuy() { // Тикет ордера int iOTi = 0; iOTi = OrderSend(Symbol(), OP_BUY, LOT(), Ask, Slippage, 0, 0, "", Magic, 0, clrNONE); // Проверим открылся ли ордер if(iOTi > 0) // Есди да, то выставим уровни убытка и прибыли vOrderModify(iOTi); else // Если нет, то получим ошибку vError(GetLastError()); } //+-----------------------------------------------------------------------------------------------+ //| Функция открытия ордера на продажу | //+-----------------------------------------------------------------------------------------------+ void vOrderOpenSell() { // Тикет ордера int iOTi = 0; iOTi = OrderSend(Symbol(), OP_SELL, LOT(), Bid, Slippage, 0, 0, "", Magic, 0, clrNONE); // Проверим открылся ли ордер if(iOTi > 0) // Есди да, то выставим уровни убытка и прибыли vOrderModify(iOTi); else // Если нет, то получим ошибку vError(GetLastError()); } //+-----------------------------------------------------------------------------------------------+ //| Функция модификации ордера | //+-----------------------------------------------------------------------------------------------+ void vOrderModify(int iOTi) { int iOTy = -1; // Тип ордера double dOOP = 0; // Цена открытия ордера double dOSL = 0; // Стоп Лосс int iMag = 0; // Идентификатор советника double dSL = 0; // Уровень убытка double dTP = 0; // Уровень прибыли // Выберем по тикету открытый ордер, получим некоторые значения if(OrderSelect(iOTi, SELECT_BY_TICKET, MODE_TRADES)) { iOTy = OrderType(); dOOP = OrderOpenPrice(); dOSL = OrderStopLoss(); iMag = OrderMagicNumber(); } // Если ордер открыл данный советник, то входим в условие if(OrderSymbol() == Symbol() && OrderMagicNumber() == iMag) { // Если Стоп Лосс текущего ордера равен нулю, то модифицируем ордер if(dOSL == 0) { if(iOTy == OP_BUY) { dSL = NormalizeDouble(dOOP - StopLoss * Point, Digits); dTP = NormalizeDouble(dOOP + TakeProfit * Point, Digits); bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0, clrNONE); } if(iOTy == OP_SELL) { dSL = NormalizeDouble(dOOP + StopLoss * Point, Digits); dTP = NormalizeDouble(dOOP - TakeProfit * Point, Digits); bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0, clrNONE); } } } } 1...166416651666166716681669167016711672167316741675167616771678...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
foo2がtrueを返した場合、ここでエラーを探します。
不要なコードを削除しました。
不要なコードを削除しました。
常に偽
不要なコードを削除しました。
下に移動する
下へ移動
どういう関係があるのかわかりませんが、BEActivate()の100回以上のtrueのうち、onTick()のtrueは3回しか出てきません :)))
そしてまた質問ですが...。
クラスをなくしたくないですか?
そしてまた質問ですが...。
クラスをなくしたくないですか?
これは OnCalculateを 使用せずに行うことができます
OnCalculate()関数が呼び出されるのは、カスタムインジケータのみ ですOnCalculate()が表示するデータが欲しいのですが。
もしかしたら、誰かがクラスを使った実装を持っているかもしれませんねOnCalculate()が表示 するデータが欲しいのですが。
もしかしたら、誰かがクラスを使った実装を持っているかもしれませんとはどういう意味でしょうか?
こんにちは、あなたは私が問題を解決するのを助けることができます。
1つ以上のトレードを開けないようにしてほしい。EAのロジックは、前の注文が決済されるまで、次の注文は開かないというものですが、このような長いローソク足で一連の案件が開くことがあります。このような状況を防ぐために、コードに何を追加すればよいかアドバイスをお願いします。
コードスニペット: