エニュメレーションを一貫して行うにはどうしたらいいですか? - ページ 5 12345678 新しいコメント fxsaber 2016.08.28 10:49 #41 Sergei Vladimirov: なぜ、そんなことをするのだろう? MIXのTickSizeは25、Digitsは0です。25の倍数でない整数の価格を正規化すると、OrderSend エラーが発生します。 Dmitry Fedoseev 2016.08.28 11:05 #42 fxsaber: MIXのTickSizeは25、Digitsは0です。25の倍数でない整数の価格を正規化すると、OrderSendエラーが発生します。 ちょうど今、隣のスレッドでコンピュータを浴槽に沈めることを助言し、その後、すべてがさらに不信感を抱くだろう。 fxsaber 2016.08.28 11:12 #43 Dmitry Fedoseev: ちょうど今、隣のスレッドでコンピュータを浴槽に沈めることを助言している、その後、すべてがさらに信用されなくなる。 残念なことに、あなたはボキャブラリー豊富な方です。私は何も作らないが、批判する権利はある。 Sergei Vladimirov 2016.08.28 14:09 #44 fxsaber: MIXのTickSizeは25、Digitsは0です。25の倍数でない整数の価格を正規化すると、OrderSendエラーが発生します。 まあ、その理屈だと、0.25ステップの正規化でも誤差が出ますね。正規化の目的は、価格をあるエキゾチックな価格ステップに合わせることではなく、浮動小数点数を所定の精度に丸める ことである。エラーが発生することはありません。 fxsaber 2016.08.30 16:55 #45 Sergei Vladimirov: まあ、その理屈だと、0.25ステップの場合でも、正規化すると誤差が生じますね。正規化の目的は、価格をあるエキゾチックな価格ステップに合わせることではなく、浮動小数点数を所定の精度に丸める ことである。エラーにつながらない。 正規化は、もともとたった一つのこと(ヘルプにも書いてあります)のために導入されたもので、取引機能です。 Alexey Volchanskiy 2016.08.30 21:59 #46 Vladimir Batrudinov:入力が必要な関数は2つでしょう。1 - enumの要素数を返す、2 - 要素を番号で返す...。enumでは、例えば以下のように、要素に任意の値を割り当てることができる。enumは配列ではありません。enum crazy { e1 = 100500, e2 = -200, e3 = -100500, e4 = 0 }; //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer() { int z10 = e2; int z1 = e4; } C#などの言語ではenum名を指定する必要がありますが、C++やそれ故にMQL4/5ではenumを自由に扱うことができます。念のため、このくだらないものはMQL5でもC++でもコンパイルできます。 Alexey Navoykov 2016.08.30 23:42 #47 Alexey Volchanskiy:enumでは、以下のように、要素に任意の値を割り当てることができます。enum は配列ではありません。 だから何って、宣言順に要素を突き詰めていくことだったんです。 Alexey Volchanskiy 2016.08.30 23:57 #48 Alexey Navoykov: だからなんだ、その要素を申告順に見ていくってことだったんだ。 あ、そうか、質問を読み間違えたんだ、と価値観で思いました。 pavlick_ 2016.08.31 19:13 #49 プログラマーへの注意点#define ENUM_QQ \ ENUM_QQ_HELPER(el_1, 3) \ ENUM_QQ_HELPER(el_2, 9) \ ENUM_QQ_HELPER(el_3, 38) \ ENUM_QQ_HELPER(el_4, 1) enum Enum_qq { #define ENUM_QQ_HELPER(el, val) el = val, ENUM_QQ #undef ENUM_QQ_HELPER }; void get_enumqq_array(int &ar[]) { int temp[] = { #define ENUM_QQ_HELPER(el, val) el, ENUM_QQ #undef ENUM_QQ_HELPER }; ArrayResize(ar, ArraySize(temp)); for(int i = 0; i < ArraySize(temp); ++i) ar[i] = temp[i]; } void OnStart() { int q[]; get_enumqq_array(q); for(int i = 0; i < ArraySize(q); ++i) Alert(q[i]); } これで、列挙を編集する必要がある場合、一度に一箇所で編集する必要があります。新しい要素を追加する必要があります。例えば、element_new = 56の場合、次のように追加します。 ENUM_QQ_HELPER(element_new , 56)そして、わざわざget_enumqq_array()を編集する必要はないでしょう。その手法は「Xマクロ https://en.wikipedia.org/wiki/X_Macro 」と呼ばれています。開発者が望めば、このように標準的な列挙を簡単に変更することができる。すぐにはわからないかもしれないが、列挙するとこのようになった。enum Enum_qq { el_1 = 3 el_2 = 9 el_3 = 38 el_4 = 1 }; Maxim Kuznetsov 2016.08.31 19:47 #50 Vasiliy Sokolov:仮に列挙があるとしよう。この列挙の可能な値を一つずつ、例えばループの中で取得するにはどうしたらよいでしょうか。すなわち、tf1++はPERIOD_M1, PERIOD_M2, PERIOD_M5...を順次返す必要があります。これは言語ツールではできないことだと思います。 しかし、もしENUM_MYENUMがあれば、(ENUM_MYENUM)INT_MAXはその列挙型の最大値を与えるはずである。そうでなければ、これは型変換のバグです。それは、型変換演算子がまさにこの型の値を返さなければ ならないからに他ならない。文脈上必ずしも有効ではないが、型としては有効である。 12345678 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
なぜ、そんなことをするのだろう?
MIXのTickSizeは25、Digitsは0です。25の倍数でない整数の価格を正規化すると、OrderSendエラーが発生します。
ちょうど今、隣のスレッドでコンピュータを浴槽に沈めることを助言している、その後、すべてがさらに信用されなくなる。
MIXのTickSizeは25、Digitsは0です。25の倍数でない整数の価格を正規化すると、OrderSendエラーが発生します。
まあ、その理屈だと、0.25ステップの場合でも、正規化すると誤差が生じますね。正規化の目的は、価格をあるエキゾチックな価格ステップに合わせることではなく、浮動小数点数を所定の精度に丸める ことである。エラーにつながらない。
入力が必要な関数は2つでしょう。1 - enumの要素数を返す、2 - 要素を番号で返す...。
enumでは、例えば以下のように、要素に任意の値を割り当てることができる。enumは配列ではありません。
C#などの言語ではenum名を指定する必要がありますが、C++やそれ故にMQL4/5ではenumを自由に扱うことができます。念のため、このくだらないものはMQL5でもC++でもコンパイルできます。
enumでは、以下のように、要素に任意の値を割り当てることができます。enum は配列ではありません。
だからなんだ、その要素を申告順に見ていくってことだったんだ。
プログラマーへの注意点
これで、列挙を編集する必要がある場合、一度に一箇所で編集する必要があります。新しい要素を追加する必要があります。例えば、element_new = 56の場合、次のように追加します。
ENUM_QQ_HELPER(element_new , 56)
そして、わざわざget_enumqq_array()を編集する必要はないでしょう。その手法は「Xマクロ https://en.wikipedia.org/wiki/X_Macro 」と呼ばれています。開発者が望めば、このように標準的な列挙を簡単に変更することができる。
すぐにはわからないかもしれないが、列挙するとこのようになった。
仮に列挙があるとしよう。この列挙の可能な値を一つずつ、例えばループの中で取得するにはどうしたらよいでしょうか。
すなわち、tf1++はPERIOD_M1, PERIOD_M2, PERIOD_M5...を順次返す必要があります。これは言語ツールではできないことだと思います。