学習ロジック - ページ 10 1...3456789101112131415 新しいコメント Sceptic Philozoff 2010.06.28 19:05 #91 おそらく、パラメータなしであれば、このようなものでしょう。 bool IsActiveType() { int type = OrderType(); return (type == OP_BUY || type == OP_SELL); } bool IsAnySellType() { int type = OrderType(); return (type == OP_SELL || type == OP_SELLLIMIT || type == OP_SELLSTOP); } { if (IsActiveType()) { //... } if (IsAnySellType()) { //... } } Prival 2010.06.28 19:11 #92 //+----------------------------------------------------------------------------+ //| Возвращает количество позиций. | //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ int NumberOfPositions(string sy="", int op=-1, int mn=-1) { int i, k=OrdersTotal(), kp=0; if (StringLen(sy)==1 && StringGetChar(sy, 0)==48) sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) kp++; } } } } } return(kp); } 削除済み 2010.06.28 19:24 #93 Mathemat: おそらく、パラメータなしであれば、このようなものでしょう。 bool IsActiveType(int type = -1) { if (type < 0) type = OrderType(); return (type == OP_BUY || type == OP_SELL); } Sceptic Philozoff 2010.06.28 19:29 #94 これはパラメータ付きですが、指定する必要はありません。 削除済み 2010.06.28 19:34 #95 呼び出しからパラメータを取り除くという意味です。そして、機能説明から削除することができない。 削除済み 2010.06.28 19:44 #96 どうです、既存のオーダープロパティ 機能の命名体系に統合されたものでしょう。 bool OrderIsActiveType(int type = -1) { if (type < 0) type = OrderType(); return (type == OP_BUY || type == OP_SELL); } if (OrderIsActiveType()) { //... } if (OrderIsAnySellType()) { //... } TheXpert 2010.06.28 19:57 #97 当たり前じゃないから、自分には通用しない。 そしてなぜか本質的には同じなのですが、パラメータをつけると明確になるので、デフォルトにする意味がないのがイミフです。 _______ もう、やりすぎなんですよ。再設計、議論などのために実際のコードを与えましょう。 削除済み 2010.06.28 20:08 #98 しかし、私はコードの山からそれを取り出したのです。 bool SafelyCloseOrder(int orderticket, string operation = "") { bool closed = false; LastError = 0; string ordercomment = ""; for(int attempt = 0; attempt <= 10 && !closed; attempt++) if (OrderSelect(orderticket, SELECT_BY_TICKET, MODE_TRADES)) if (WaitForConnection(6, operation)) { ordercomment = OrderComment(); if (OrderType() == OP_BUY) closed = OrderClose(orderticket, OrderLots(), NormalizeDouble(MarketInfo(OrderSymbol(), MODE_BID), MarketInfo(OrderSymbol(), MODE_DIGITS)), Set_slippage, Blue); else closed = OrderClose(orderticket, OrderLots(), NormalizeDouble(MarketInfo(OrderSymbol(), MODE_ASK), MarketInfo(OrderSymbol(), MODE_DIGITS)), Set_slippage, Red); LastError = LastError(); if (LastError != 0) Print(WindowExpertName() + " " + operation + " " + ErrorDescription(LastError)); if (!closed) { Sleep(3000 + attempt * 1000); RefreshRates(); } } if (closed) { Alert(WindowExpertName() + " " + operation + " Ордер " + orderticket + " " + ordercomment + " закрыт!"); PlaySound("Case.wav"); Sleep(555); } else { Alert(WindowExpertName() + " " + operation + " Не закрывается ордер " + orderticket + " " + ordercomment + "!"); PlaySound("NT_Ball_BAMMM!.WAV"); Sleep(555); } return(closed); } Evgeniy Logunov 2010.06.28 20:11 #99 これはどうでしょう? // основные битовые маски #define ORD_SELL 1 #define ORD_BUY 2 #define ORD_MARKET 4 #define ORD_LIMIT 8 #define ORD_STOP 16 #define ORD_INVALID 32 // комбинированные битовые маски #define ORD_MARKET_SELL 5 // ORD_SELL | ORD_MARKET #define ORD_MARKET_BUY 6 // ORD_BUY | ORD_MARKET #define ORD_LIMIT_SELL 9 // ORD_SELL | ORD_LIMIT #define ORD_LIMIT_BUY 10 // ORD_BUY | ORD_LIMIT #define ORD_STOP_SELL 17 // ORD_SELL | ORD_STOP #define ORD_STOP_BUY 18 // ORD_BUY | ORD_STOP #define ORD_PENDING 24 // ORD_STOP | ORD_LIMIT // получение битовой маски для текущего ордера int OrderTypeBitmask() { int orderType = OrderType(); int bitmask = ORD_INVALID; switch (orderType) { case OP_SELL: bitmask = ORD_MARKET_SELL; break; case OP_BUY: bitmask = ORD_MARKET_BUY; break; case OP_SELLLIMIT: bitmask = ORD_LIMIT_SELL; break; case OP_BUYLIMIT: bitmask = ORD_LIMIT_BUY; break; case OP_SELLSTOP: bitmask = ORD_STOP_SELL; break; case OP_BUYSTOP: bitmask = ORD_STOP_BUY; break; } return (bitmask); } // проверка по маске bool CheckMask(int value, int mask) { return ((value & mask) != 0); } // пример: for (int i = OrdersTotal() - 1; i >= 0; i--) { // выбор ордера, отбрасывание по символу, magic'у и т.п. if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; if (OrderSymbol() != Symbol) continue; ... // обработка ордера int ordType = OrderTypeBitmask(); bool removeOrder = false; if ((signal == SIG_BUY) && CheckMask(ordType, ORD_SELL)) removeOrder = true; else if ((signal == SIG_SELL) && CheckMask(ordType, ORD_BUY)) removeOrder = true; if (!removeOrder) continue; if (CheckMask(ordType, ORD_MARKET)) RemoveMarketOrder(); else if (CheckMask(ordType, ORD_PENDING)) RemovePendingOrder(); } keekkenen 2010.06.28 20:28 #100 Mathemat: おそらく、パラメータなしであれば、このようなものでしょう。 bool IsActiveType() { int type = OrderType(); return (type == OP_BUY || type == OP_SELL); } これは、orderselectがfalseを返す可能性があり、IsActiveType()が0、つまりOP_BUYを返すため、使用するのは不正解です...。 1...3456789101112131415 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
おそらく、パラメータなしであれば、このようなものでしょう。
おそらく、パラメータなしであれば、このようなものでしょう。
どうです、既存のオーダープロパティ 機能の命名体系に統合されたものでしょう。
当たり前じゃないから、自分には通用しない。
そしてなぜか本質的には同じなのですが、パラメータをつけると明確になるので、デフォルトにする意味がないのがイミフです。
_______
もう、やりすぎなんですよ。再設計、議論などのために実際のコードを与えましょう。しかし、私はコードの山からそれを取り出したのです。
これはどうでしょう?
おそらく、パラメータなしであれば、このようなものでしょう。