どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 123 1...116117118119120121122123124125126127128129130...1178 新しいコメント Artyom Trishkin 2013.09.06 07:12 #1221 nick_travel: ごきげんよう。 Expert Advisorが動作しない、または取引できない理由を教えてください。 もしかして、食べたいのかな?給料待ちとか...。 Artyom Trishkin 2013.09.06 07:26 #1222 hoz: そう、ちなみにこの配置は、実装ではよりインテリジェントです。冒頭の関連機能は、より多くのスペースを占めるようになりました。こんな感じになりました。最適化するものがないんですね。つまり、スタートダッシュがまったくないほうが、よっぽど便利なんです。そして、すべては純粋に機能によって呼び出されます。そして前回は、スタートが主要機能の肥大化と追加機能のやりすぎがいろいろとあることが判明して......。 また、グローバルに宣言された配列名を関数内で使用する場合、なぜ配列を参照渡しするのでしょうか?そういう風にした方がいいのかもしれませんね。 void FindOrders(int &massive[]) { int oType; ArrayInitialize(massive, 0); for (int i=OrdersTotal() - 1; i>=0; i--) { if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; if (OrderSymbol() != Symbol()) continue; if (OrderMagicNumber() != i_magic) continue; oType = OrderType(); massive[oType] = massive[oType] + 1; } } そして、少しずつ減らしていくことができます。 void FindOrders(int &massive[]) { ArrayInitialize(massive, 0); for (int i=OrdersTotal() - 1; i>=0; i--) { if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; if (OrderSymbol() != Symbol()) continue; if (OrderMagicNumber() != i_magic) continue; massive[OrderType()] = massive[OrderType()] + 1; } } また、スタートからの呼び出しやメッセージの表示についてはどうでしょうか。何かを台無しにしたような気がします。pr()関数を見ることができないので、何も提案することができません。 テスターの注文 数を簡易アルゴリズムで確認しました。 FindOrders(mn0, OrdersMassive); Comment ("\n"+"Всего ордеров = "+OrdersTotal()+ "\n"+"Количество "+GetNameOP(0)+" = "+OrdersMassive[0]+ "\n"+"Количество "+GetNameOP(1)+" = "+OrdersMassive[1]+ "\n"+"Количество "+GetNameOP(2)+" = "+OrdersMassive[2]+ "\n"+"Количество "+GetNameOP(3)+" = "+OrdersMassive[3]+ "\n"+"Количество "+GetNameOP(4)+" = "+OrdersMassive[4]+ "\n"+"Количество "+GetNameOP(5)+" = "+OrdersMassive[5] ); 出力全体を、配列からデータを読み込んで人間らしく表示する関数で包むことができます。 Viktar Dzemikhau 2013.09.06 08:39 #1223 nick_travel: ごきげんよう。 EAが動作しない、または取引しない理由を説明し、助けてください。 なぜなら、ここだからです。 まんざらでもない テレパシーと まんざらでもない とビジョナリー! [Deleted] 2013.09.06 09:58 #1224 そうなんですか!? つまり、設定とか必要なものがあるのでしょうか? Viktar Dzemikhau 2013.09.06 10:26 #1225 artmedia70: グローバルに宣言された配列名を関数内で使用する場合、なぜ参照で配列を渡すのですか?そうあるべきなのかもしれません。 void FindOrders(int &massive[]) { int oType; ArrayInitialize(massive, 0); for (int i=OrdersTotal() - 1; i>=0; i--) { if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; if (OrderSymbol() != Symbol()) continue; if (OrderMagicNumber() != i_magic) continue; oType = OrderType(); massive[oType] = massive[oType] + 1; } } 実は、そうなんです、意味があるんです。でも、ここでも参照渡しなんですね:))前回、パラメータがグローバルに宣言されていなかった時以降、持っていました。 そして、pr 機能についても。これです。 //+-------------------------------------------------------------------------------------+ //| Распринтовка на экран | //+-------------------------------------------------------------------------------------+ void pr (string txt) { string info []; ArrayResize(info, 20); string h, m, s, cm; int i; h = DoubleToStr(Hour(), 0); if (StringLen(h) < 2) h = "0" + h; m = DoubleToStr(Minute(), 0); if (StringLen(m) < 2) m = "0" + m; s = DoubleToStr(Seconds(), 0); if (StringLen(s) < 2) s = "0" + s; txt = h + ":" + m + ":" + s + " - " + txt; for (i=20-1; i>=1; i--) info[i] = info[i-1]; info[0] = txt; for (i=20-1; i>=0; i--) if (info[i] != "") { cm = info[i]; ObjectCreate ("txtw"+i, OBJ_LABEL, 0, 0, 0); ObjectSet ("txtw"+i, OBJPROP_CORNER, 1); ObjectSet ("txtw"+i, OBJPROP_XDISTANCE, 10); ObjectSet ("txtw"+i, OBJPROP_YDISTANCE, 30+15*i); ObjectSetText("txtw"+i, cm, 10, "Times New Roman", Green); } } Viktar Dzemikhau 2013.09.06 10:31 #1226 nick_travel: そうなんですか!? つまり、設定とか必要なものがあるのでしょうか? というか、ここにテレパスはいないと思うし、いたとしても、そんな芸当で興味を持たせようとするだけでも......。推測し、助ける... Boris 2013.09.06 10:42 #1227 hoz: テレパスはほとんどいないし、いたとしても、そういう技に興味を持たせるようにしたほうが......。推測し、助ける... そして、市場への間違った参入を許さない非常に優れたシステムかもしれませんね欲しいなー。 Viktar Dzemikhau 2013.09.06 12:19 #1228 必要なポジションのクローズが止まっている状態が続いているのですが。要は、こういうことです。 1.ポジションの閉鎖を追跡している。 2.持ち帰りで最後のポジションがクローズすると同時に...。...すべてのオープンポジションとペンディングポジションを一度にクローズする必要があります。すべてロットごとに、つまり大きなロットを一度に、そして小さなロットを順に並べて閉じています。これは、あくまでもオーダーの経験を積むためのものです。 実装は以下の通りです。 tick毎にstart() で。 for (int ord=OrdersTotal()-1; ord>=0; ord--) { if (!OrderSelect(ord,SELECT_BY_POS)) continue; if (OrderMagicNumber() != i_magic) continue; if (OrderSymbol() != Symbol()) continue; if (OrderType() == 6) continue; g_ticket = OrderTicket(); g_type = OrderType(); // Блок модификации ордеров if (i_sl != 0 || i_tp != 0) { if (OrderStopLoss() == 0 && OrderTakeProfit() == 0) { OrdersModifyer(g_ticket); } } // Закрытие всех ордеров, если последний ордер закрыт if (isCloseByTakeLastOpenPos(2)) { // if (g_type < 2) { ClosePosBySortLots(); } //else if (g_type > 1) { DeletePendingOrders(g_ticket); } } } 保留中の注文は必要に応じて削除されるので、成行注文を閉じることに関心があります。以下はその内容です。 //+-------------------------------------------------------------------------------------+ //| Получаем состояние последней позиции (Открыта или закрыта) | //+-------------------------------------------------------------------------------------+ bool isCloseByTakeLastOpenPos(int delta) { datetime lastOrderCloseTime = -1, // Время закрытия последнего открытого ордера lastOOTHist = -1; // Время открытия последнего открытого ордера из истории int j = -1; pr ("Запустилась функция isCloseByTakeLastOpenPos"); for (int i=OrdersHistoryTotal()-1; i>=0; i--) { if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue; if (OrderMagicNumber() != i_magic) continue; if (OrderSymbol() != Symbol()) continue; if (OrderType() > 1) continue; // Все удалённые отложки нас не интересуют.. if (lastOrderCloseTime < OrderCloseTime()) // Находим время закрытия.. { lastOrderCloseTime = OrderCloseTime(); // ..последней закрытой позиции в истории j = i; pr ("j = " + j + " " + TimeToStr(TimeCurrent())); } } if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) { if (OrderProfit() + OrderCommission() + OrderSwap() <= 0) return (false); // pr ("OTP() = " + OrderTakeProfit() + "; OCP() " + OrderClosePrice() + " " + TimeToStr(TimeCurrent())); // pr ("OOP() = " + OrderOpenPrice() + "; OCP() " + OrderClosePrice() + " " + TimeToStr(TimeCurrent())); if (MathAbs(OrderTakeProfit() - OrderClosePrice()) > delta * pt) return (false); else { lastOOTHist = OrderOpenTime(); Comment("\n", "FUNC isCloseByTakeLastOpenPos: ", "\n", "j = ", j, "\n", "lastOOTHist = ", TimeToStr(lastOOTHist, TIME_SECONDS)); } } else { Comment("\n", "FUNC isCloseByTakeLastOpenPos: ", "\n", "j = ", j, "\n", "не удалось выбрать ордер в истории"); return(false); } for(int h=OrdersTotal()-1; h>=0; h--) { if (OrderSelect(h, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber() != i_magic) continue; if (OrderSymbol() != Symbol()) continue; if (OrderType() > 1) continue; if (lastOOTHist < OrderOpenTime()) return(false); // Выбранная рыночная позиция открыта позже закрытой по тейку } else {Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать рыночный ордер");return(false);} } return (true); } //+-------------------------------------------------------------------------------------+ //| Закрытие ордеров, отсортированных по размеру лотов | //+-------------------------------------------------------------------------------------+ void ClosePosBySortLots() { double a[][2]; int p = 0; for (int i=OrdersTotal()-1; i>=0; i--) { if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; if (OrderMagicNumber() != i_magic) continue; if (OrderSymbol() != Symbol()) continue; if (OrderType() < 2) { p++; ArrayResize(a, p); a[p-1][0] = OrderLots(); a[p-1][1] = OrderTicket(); } } pr ("ClosePosBySortLots(): " + "p = " + p); if (p > 0) { ArraySort(a, WHOLE_ARRAY, 0, MODE_DESCEND); for(i=0; i<p; i++) { if (OrderSelect(a[i][1], SELECT_BY_TICKET, MODE_TRADES)) { if (OrderCloseTime() == 0) ClosePosBySelect(); } } } } //+-------------------------------------------------------------------------------------+ //| Закрытие одного, предварительно выбранного ордера | //+-------------------------------------------------------------------------------------+ void ClosePosBySelect() { bool fc; color clClose, clCloseBuy = Blue, clCloseSell = Red; double ll, pa, pb, pp; int err, it, NumberOfTry = 3; if (OrderType() == OP_BUY || OrderType() == OP_SELL) { for (it=1; it<=NumberOfTry; it++) { while (!IsTradeAllowed()) Sleep(5000); RefreshRates(); pa = MarketInfo(OrderSymbol(), MODE_ASK); pb = MarketInfo(OrderSymbol(), MODE_BID); if (OrderType() == OP_BUY) { pp = pb; clClose = clCloseBuy; } else { pp = pa; clClose = clCloseSell; } ll = OrderLots(); fc = OrderClose(OrderTicket(), ll, pp, 30, clClose); if (fc) { break; } else { err = GetLastError(); } } } else Print("Некорректная торговая операция. Close "); } なぜか一部の注文が締め切られない。私はいくつかのセグメントを見たときに印刷すると、私は何も理解していない。以下はその一例です。 コメントではlastOOTHist = 01:30:00と 表示されていますが、実際には正しくありません。結果ウィンドウでlastOOTHistを確認すると、次のようになります。 閉店時間が違うのですが...。 ここで何が問題なのか? Artyom Trishkin 2013.09.06 13:13 #1229 hoz: 実は、そうなんです、意味があるんです。こちらにもリンクしていますね・・・:))前回、パラメータがグローバルでなかったときのことが残っていました。 私は、ここの配列は参照渡しであるべきだと主張しました。そうでなければ、この関数は1つのハードコードされた配列だけで動作するように運命づけられています。グローバルに定義していても Ivan Katsko 2013.09.06 18:30 #1230 週明けに必要で申し訳ないのですが、お願いします。 どなたか、差出人がわかっているメールボックスのメッセージを読んだ経験のある方はいらっしゃいますか? 1...116117118119120121122123124125126127128129130...1178 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ごきげんよう。
Expert Advisorが動作しない、または取引できない理由を教えてください。
そう、ちなみにこの配置は、実装ではよりインテリジェントです。冒頭の関連機能は、より多くのスペースを占めるようになりました。こんな感じになりました。
最適化するものがないんですね。
つまり、スタートダッシュがまったくないほうが、よっぽど便利なんです。そして、すべては純粋に機能によって呼び出されます。そして前回は、スタートが主要機能の肥大化と追加機能のやりすぎがいろいろとあることが判明して......。
また、グローバルに宣言された配列名を関数内で使用する場合、なぜ配列を参照渡しするのでしょうか?そういう風にした方がいいのかもしれませんね。
そして、少しずつ減らしていくことができます。
また、スタートからの呼び出しやメッセージの表示についてはどうでしょうか。何かを台無しにしたような気がします。pr()関数を見ることができないので、何も提案することができません。
テスターの注文 数を簡易アルゴリズムで確認しました。
出力全体を、配列からデータを読み込んで人間らしく表示する関数で包むことができます。
ごきげんよう。
EAが動作しない、または取引しない理由を説明し、助けてください。
なぜなら、ここだからです。 まんざらでもない テレパシーと まんざらでもない とビジョナリー!
そうなんですか!?
つまり、設定とか必要なものがあるのでしょうか?
グローバルに宣言された配列名を関数内で使用する場合、なぜ参照で配列を渡すのですか?そうあるべきなのかもしれません。
実は、そうなんです、意味があるんです。でも、ここでも参照渡しなんですね:))前回、パラメータがグローバルに宣言されていなかった時以降、持っていました。
そして、pr 機能についても。これです。
そうなんですか!?
つまり、設定とか必要なものがあるのでしょうか?
というか、ここにテレパスはいないと思うし、いたとしても、そんな芸当で興味を持たせようとするだけでも......。推測し、助ける...
テレパスはほとんどいないし、いたとしても、そういう技に興味を持たせるようにしたほうが......。推測し、助ける...
必要なポジションのクローズが止まっている状態が続いているのですが。要は、こういうことです。
1.ポジションの閉鎖を追跡している。
2.持ち帰りで最後のポジションがクローズすると同時に...。...すべてのオープンポジションとペンディングポジションを一度にクローズする必要があります。すべてロットごとに、つまり大きなロットを一度に、そして小さなロットを順に並べて閉じています。これは、あくまでもオーダーの経験を積むためのものです。
実装は以下の通りです。
tick毎にstart() で。
for (int ord=OrdersTotal()-1; ord>=0; ord--) { if (!OrderSelect(ord,SELECT_BY_POS)) continue; if (OrderMagicNumber() != i_magic) continue; if (OrderSymbol() != Symbol()) continue; if (OrderType() == 6) continue; g_ticket = OrderTicket(); g_type = OrderType(); // Блок модификации ордеров if (i_sl != 0 || i_tp != 0) { if (OrderStopLoss() == 0 && OrderTakeProfit() == 0) { OrdersModifyer(g_ticket); } } // Закрытие всех ордеров, если последний ордер закрыт if (isCloseByTakeLastOpenPos(2)) { // if (g_type < 2) { ClosePosBySortLots(); } //else if (g_type > 1) { DeletePendingOrders(g_ticket); } } }保留中の注文は必要に応じて削除されるので、成行注文を閉じることに関心があります。以下はその内容です。
なぜか一部の注文が締め切られない。私はいくつかのセグメントを見たときに印刷すると、私は何も理解していない。以下はその一例です。
コメントではlastOOTHist = 01:30:00と 表示されていますが、実際には正しくありません。結果ウィンドウでlastOOTHistを確認すると、次のようになります。
閉店時間が違うのですが...。
ここで何が問題なのか?
実は、そうなんです、意味があるんです。こちらにもリンクしていますね・・・:))前回、パラメータがグローバルでなかったときのことが残っていました。
週明けに必要で申し訳ないのですが、お願いします。
どなたか、差出人がわかっているメールボックスのメッセージを読んだ経験のある方はいらっしゃいますか?