mql5言語の特徴、微妙なニュアンスとテクニック - ページ 112 1...105106107108109110111112113114115116117118119...247 新しいコメント fxsaber 2018.12.22 21:30 #1111 Alexey Navoykov: ところで、一般的なケースとして、関数の戻り値の型が絶対型である場合、この問題はMQLの手段では解決できないという結論に至りました。 ここでは存在しないdecltypeが必要です。ポインタは戻るが、構造体は......そうとは思えなかった。やはり、参考までにすべきですね。 Alexey Navoykov 2018.12.22 21:33 #1112 fxsaber:同じです。これで、関数に渡される引数が3つから2つになりました。 MacrosFunc(SelectHandle(Memory(A, false)), SelectHandle(Memory(A)) ? B : 0) fxsaber 2018.12.22 21:35 #1113 Alexey Navoykov:現在では、一般的に3つの引数が関数に渡されるのではなく、2つの引数が渡されます。 2は絶対に元の問題です。そして3は、その一般化です。 トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム エラー、バグ、質問 fxsaber さん 2018.12.21 22:15 NewHandle - は定数にすることができることを明確にしましょう。I.e. 有効な呼び出し time = MACROS(0, TimeCurrent()); // TimeCurrent из 0-хендла. time = MACROS(1, TimeCurrent()); // TimeCurrent из 1-хендла. MACROS(0, SymbolInfoTick(_Symbol, Tick)); // SymbolInfoTick из 0-хендла. #define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID) Price = MACROS(3, Bid); // Bid из 3-хендла. 例を見る限り、マクロに求められているものは明らかなようです。 Alexey Navoykov 2018.12.22 22:10 #1114 C++規格ではこの順番は定義されておらず、コンパイラに任されている。MQL開発者は、この順番が変更可能か、将来的に変更する予定があるかどうかを確認する必要があります。 したがって、これが一番いい方法だと思います。 template <typename T1, typename T2> T2 MacrosFunc( const T1 handle, const T2 Value ) { SelectHandle(Memory(handle, false)); return(Value); } #define MACROS(A, B) MacrosFunc(A, SelectHandle(Memory(A)) ? (B) : NULL) fxsaber 2018.12.22 23:06 #1115 Alexey Navoykov:C++規格ではこの順番は定義されておらず、コンパイラに任されている。MQL開発者は、この順番が変更可能か、将来的に変更する予定があるかどうかを確認する必要があります。 だから、こっちの方がいいんです。 はい、より信頼性が高くなりました。 Алексей Тарабанов 2018.12.22 23:57 #1116 編集部の皆様、お手上げです。 インタプリタがどのようにコードを解釈するかを理解せずに、インタプリタにコードを渡すこと...。王道ですね。 pavlick_ 2018.12.23 01:07 #1117 トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム バグ、バグ、質問 fxsaber さん 2018.12.21 10:23 どうしても分からないので、ヒントを求めてください。そのような時間の取得があります int GetHandle() { return(0); } bool SelectHandle( int ) { return(true); } int NewHandle = 0; int PrevHandle = GetHandle(); datetime time = SelectHandle(NewHandle) ? TimeCurrent() : 0; SelectHandle(PrevHandle); 同じことをするマクロの書き方 time = MACROS(NewHandle, TimeCurrent()); // Макрос 問題は、マクロ内でPrevHandleが作成されていないことです。なぜ私の解答の方が悪いのか理解できないので、ここにも貼り付けておきます。//handle_t MACROS_helper_PrevHandle; int MACROS_helper_PrevHandle; template <typename T> T macros_helper_fn(T t) {SelectHandle(MACROS_helper_PrevHandle); return t;} #define MACROS(NEW_HANDLE_, FN_) ((MACROS_helper_PrevHandle=GetHandle())*0 == 0 ? \ SelectHandle(NEW_HANDLE_) ? macros_helper_fn(FN_) : 0 : 0) 注目すべきは、トレンド演算子によるカンマ演算子の実装です(まあ、何も素晴らしいことはないのですが、初めて遭遇しました)。 明確ではありません。なぜ、テンプレートを通してハンドルタイプを引くのですか?ハンドルに種類があるのでしょうか、大したことではありません。また、一般にハンドルの型はtypedef/defineで指定することになります。 Алексей Тарабанов 2018.12.23 01:59 #1118 pavlick_:私の解答が悪いとは思えませんので、ここにも書いておきますね。 注目すべき点 - trend演算子によるカンマ演算子の実装(まあ、大したことはないのですが、初めて出会いました)。 なぜ、テンプレートを通してハンドルタイプを引く必要があるのか、明確ではありません。ハンドルに種類があるのでしょうか、大したことはありません。また、一般にハンドルの型はtypedef/defineで指定することになります。 全然ダメなんです。ハンドルネームとは? pavlick_ 2018.12.23 02:20 #1119 Алексей Тарабанов:全然ダメなんです。ハンドルネームとは?タスクの条件は、「ディスクリプタ(ハンドル)を介して変化する環境があり、1つのマクロで実装する必要がある」というものでした。 1.現在のハンドルを記憶する 2.環境を新しいハンドルに切り替える 3.環境から必要なパラメータを取得する 4.旧ハンドルへの環境切替 5.リターンパラメータ Алексей Тарабанов 2018.12.23 04:10 #1120 pavlick_:タスクの条件は、「ディスクリプタ(ハンドル)を介して変化する環境があり、1つのマクロで実装する必要がある」というものでした。 1.現在のハンドルを記憶する 2.環境を新しいハンドルに切り替える 3.環境から目的のパラメータを取得する 4.旧ハンドルに環境を変更する 5.リターンパラメータご返信ありがとうございました。 1...105106107108109110111112113114115116117118119...247 新しいコメント 理由: キャンセル 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ところで、一般的なケースとして、関数の戻り値の型が絶対型である場合、この問題はMQLの手段では解決できないという結論に至りました。 ここでは存在しないdecltypeが必要です。
ポインタは戻るが、構造体は......そうとは思えなかった。やはり、参考までにすべきですね。
同じです。
これで、関数に渡される引数が3つから2つになりました。
現在では、一般的に3つの引数が関数に渡されるのではなく、2つの引数が渡されます。
2は絶対に元の問題です。そして3は、その一般化です。
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
エラー、バグ、質問
fxsaber さん 2018.12.21 22:15
C++規格ではこの順番は定義されておらず、コンパイラに任されている。MQL開発者は、この順番が変更可能か、将来的に変更する予定があるかどうかを確認する必要があります。
したがって、これが一番いい方法だと思います。
C++規格ではこの順番は定義されておらず、コンパイラに任されている。MQL開発者は、この順番が変更可能か、将来的に変更する予定があるかどうかを確認する必要があります。
だから、こっちの方がいいんです。
はい、より信頼性が高くなりました。
編集部の皆様、お手上げです。
インタプリタがどのようにコードを解釈するかを理解せずに、インタプリタにコードを渡すこと...。王道ですね。
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
バグ、バグ、質問
fxsaber さん 2018.12.21 10:23
どうしても分からないので、ヒントを求めてください。そのような時間の取得があります
同じことをするマクロの書き方
問題は、マクロ内でPrevHandleが作成されていないことです。
なぜ私の解答の方が悪いのか理解できないので、ここにも貼り付けておきます。
注目すべきは、トレンド演算子によるカンマ演算子の実装です(まあ、何も素晴らしいことはないのですが、初めて遭遇しました)。
明確ではありません。なぜ、テンプレートを通してハンドルタイプを引くのですか?ハンドルに種類があるのでしょうか、大したことではありません。また、一般にハンドルの型はtypedef/defineで指定することになります。
私の解答が悪いとは思えませんので、ここにも書いておきますね。
注目すべき点 - trend演算子によるカンマ演算子の実装(まあ、大したことはないのですが、初めて出会いました)。
なぜ、テンプレートを通してハンドルタイプを引く必要があるのか、明確ではありません。ハンドルに種類があるのでしょうか、大したことはありません。また、一般にハンドルの型はtypedef/defineで指定することになります。
全然ダメなんです。ハンドルネームとは?
全然ダメなんです。ハンドルネームとは?
タスクの条件は、「ディスクリプタ(ハンドル)を介して変化する環境があり、1つのマクロで実装する必要がある」というものでした。
1.現在のハンドルを記憶する
2.環境を新しいハンドルに切り替える
3.環境から必要なパラメータを取得する
4.旧ハンドルへの環境切替
5.リターンパラメータ
タスクの条件は、「ディスクリプタ(ハンドル)を介して変化する環境があり、1つのマクロで実装する必要がある」というものでした。
1.現在のハンドルを記憶する
2.環境を新しいハンドルに切り替える
3.環境から目的のパラメータを取得する
4.旧ハンドルに環境を変更する
5.リターンパラメータ
ご返信ありがとうございました。