MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1878 1...187118721873187418751876187718781879188018811882188318841885...1953 新しいコメント Mihail Matkovskij 2022.01.22 17:11 #18771 Mihail Matkovskij #:ENUM_TIMEFRAMESでは、最小値と最大値は既知 である。そのため、明示的に設定することができる。他のenumでは、おおよその値の範囲を知っていれば十分である。i_max_enum には,2桁または3桁の任意の数値(50,100,255)を指定することができる。 また、実験的に enum の最小値と最大値を取得することができます。それらを書き出し、StringToEnumで指定することで、最適な速度が得られます。 int nEnum; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ template <typename T> bool enumFindMinMax(const T _enum, int &__min, int &__max, int _minEnum, int _maxEnum) { T enum_; int min, max; min = INT_MAX; max = INT_MIN; nEnum = 0; for(int i = _minEnum; i <= _maxEnum && !IsStopped(); i++) { enum_ = (T)i; if(StringFind(EnumToString(enum_), "::", 0) >= 0) continue; if (i < min) min = i; if (i > max) max = i; nEnum++; } if (min != INT_MAX && max != INT_MIN) { __min = min; __max = max; return true; } return false; } template <typename T> bool enumFindMinMax(const T _enum, int &__min, int &__max) { return enumFindMinMax(_enum, __min, __max, INT_MIN, INT_MAX); } //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { int min, max; if (enumFindMinMax((ENUM_ACCOUNT_INFO_DOUBLE)0, min, max, -500, 500)) printf("enumFindMinMax ENUM_ACCOUNT_INFO_DOUBLE min: %d, max: %d, Count: %d", min, max, nEnum); else Print("enumFindMinMax Error!"); } スクリプトの結果。 enumFindMinMax ENUM_ACCOUNT_INFO_DOUBLE min: 37, max: 52, Count: 14 ENUM_ACCOUNT_INFO_DOUBLEを開いて見て ください。定数の数はCount(14)である。このように、アプリケーションの開始時に、必要なenumをすべて扱い、その最小値と最大値を書き、それに対応するStringToEnumを使うことで、最高のスピードで 処理することができるのです。 追伸:INT_MINとINT_MAXを使ったenumFindMinMaxの2番目のバリエーションは、本当にとても遅いです。最初はやってみたんです。その後、enumFindMinMaxが 終了するのを待つのに疲れ、-500から500までの値を設定しました。 if (enumFindMinMax((ENUM_ACCOUNT_INFO_DOUBLE)0, min, max, -500, 500)) したがって、intの範囲を全部使う必要は全くないという結論に達しました。 ファイル: EnumMinMaxGet.mq5 4 kb akskarabey 2022.01.23 00:26 #18772 端末の挙動がおかしいのですが。 あるチャートでExpert Advisorが動作しており、ある瞬間に別のチャートを開き、新しいチャートにある寺院を設定する、というような状況です。後者のテンプレートは、新しいチャートで2つ目のEAを起動するために定義されています。 週の半ばはすべてうまくいくのですが、マーケットが閉じている週末は、新しいチャートで新しいテンプレが開始されますが(チャートの外観を変更するとわかります)、そこでは2番目のEAが開始されないのです。2つ目のExpert Advisorを「押す」唯一の方法は、任意のチャート、任意のスクリプト、完全に空のものであっても、手動で起動することです。その後、2つ目のExpert Advisorが新しいチャートで作業を開始します。 最初の Expert Advisor で ChartOpen とChartApplyTemplate 関数を使用し、CChart クラスを使用してこのコードを書きましたが、いつも同じ結果になり、市場が閉じている場合、新しいチャートの 2 番目の Expert Advisor は、ターミナルを手動で「押す」まで起動しません。 このような状況に直面したことがある方はいらっしゃいますか?どう対処するか、どう "掘る "か。 Vitaly Muzichenko 2022.01.23 01:07 #18773 akskarabey ChartApplyTemplate 関数を使用し、CChart クラスを使用してこのコードを書きましたが、いつも同じ結果になり、市場が閉じている場合、新しいチャートの 2 番目の Expert Advisor は、ターミナルを手動で「押す」まで起動しません。 このような状況に直面したことがある方はいらっしゃいますか?どう対処するか、どんな方法で「掘る」のか? どうして起動しないとわかるの? 追伸 このように試してみてください。 int OnInit() { .... .... ChartRedraw(); return(INIT_SUCCEEDED); } x572intraday 2022.01.23 01:31 #18774 Mihail Matkovskij #:enumの定数をEnumToStringで変換し、目的の定数と比較することで、ブルートフォース関数(#18697と 同じ原理)で見つけることができます。あとは結果を返すだけです。 何も思い浮かばないので、例(せめてキーライン)を教えてください。また、膨大な価値観のリストから、左利き用をすべてふるいにかけるか、それとも有用なものだけを探すか?今のところ、左利きのものが入っていないので、ふるいにかけることはないと思うのですが......。が、その発想がつかめない。 Mihail Matkovskij 2022.01.23 01:42 #18775 x572intraday #:思いつかないので、例(せめてキーライン)を教えてください。また、左側の値の中から正しいものをふるいにかけて、あるいは有用なものだけを集めた巨大な値のリストになるのでしょうか。今のところ、左利きのものが入っていないので、ふるいにかけることはないと思うのですが......。が、その発想がつかめない。 可能なすべてのenumの値を調べるのを避けるために(本当に長いので)、以下の準備をする必要があります#18771(キャッシュのようなもの)。そして、この関数#18763の 助けを借りて、必要なすべての列挙型の範囲を知っている列挙型に簡単に変換することができます。あるいは、比較的小さな範囲のenumを検索することもできます#18768. template<typename T> bool StringToEnum(const string i_str, T &o_val, int i_min_enum, int i_max_enum) { for(int i = i_min_enum; i <= i_max_enum && !IsStopped(); i++) { o_val = (T)i; if(i_str == EnumToString(o_val)) return(true); } o_val = WRONG_VALUE; return(false); } template<typename T> bool StringToEnum(const string i_str, T &o_val) { return StringToEnum(i_str, o_val, INT_MIN, INT_MAX); } // медленный вариант akskarabey 2022.01.23 02:53 #18776 Vitaly Muzichenko #:起動してないって、どうやって判断したんだ?追伸このように試してみてください。 OnInitセクションの2番目のエキスパートがログに結論を出し、ログメッセージはありません。ログには、Expert Advisorの起動に関する端末からのメッセージも含まれていません。また、右上のチャートにExpert Advisorの名前が表示されない。 Valeriy Yastremskiy 2022.01.23 14:18 #18777 12345678902003 #: また、そのためにどのような機能が使われているのでしょうか。MqlRates?また、ObjectGetを使う場合、そこでオブジェクトのプロパティを指定する必要があります。OBJPROP_PRICEを取る場合、現在のバーまでの価格をどのようにフェッチさせればよいのでしょうか? GetはGet。また、オブジェクトの名前や種類、名前からバー上の価格や時間を取得する機能があり、オブジェクトの特定のプロパティを取得することができます。小節番号ではなく、ゼロからのオフセットが使用されます。 Alekseu Fedotov 2022.01.23 16:41 #18778 Valeriy Yastremskiy #:GetはGet。また、オブジェクトの名前や種類、名前からバー上の価格や時間を取得する機能があり、オブジェクトの特定のプロパティを取得することができます。小節番号ではなく、ゼロからのオフセットが使用されます。 これは、ObjectGetValueByTime()関数を使用して行うことができます。 例 double p = ObjectGetValueByTime( 0,"имя объекта...",Time[0]); Halina Okopna-Pecuch 2022.01.24 08:33 #18779 TerminalMQL4 の Indicators フォルダにはインジケータがありますが、MQL4 自身にはそのリストにインジケータがなく、そこからインジケータをチャートにドラッグします。これらのインジケータをターミナルリストに表示させ、MQL4 ターミナルのチャートで使用できるようにするにはどうすればよいですか?スクリーンショットの右側はMQL4 ターミナルで 利用できるインジケーターで、左側はMQL44Indicators フォルダーにある同じターミナルのインジケーターです (例として)。 ファイル: Screenshot_68.png 66 kb Andrei Sokolov 2022.01.24 09:23 #18780 Halina Okopna-Pecuch #: TerminalMQL4 Indicatorsフォルダーにあるインジケーターのリストにはインジケーターが含まれていますが、ターミナルMQL4では、これらのインジケーターがチャートにドラッグされるそのリストには含まれていないのです。これらのインジケータをターミナルリストに表示させ、MQL4 ターミナルのチャートで使用できるようにするにはどうすればよいですか?スクリーンショットの右側はMQL4 ターミナルで 利用可能なインジケーター、左側はMQL44Indicators フォルダーにある同じターミナルのインジケーターです (例として)。 これらは、おそらく指標にはならない。 1...187118721873187418751876187718781879188018811882188318841885...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ENUM_TIMEFRAMESでは、最小値と最大値は既知 である。そのため、明示的に設定することができる。
他のenumでは、おおよその値の範囲を知っていれば十分である。i_max_enum には,2桁または3桁の任意の数値(50,100,255)を指定することができる。
また、実験的に enum の最小値と最大値を取得することができます。それらを書き出し、StringToEnumで指定することで、最適な速度が得られます。
スクリプトの結果。
ENUM_ACCOUNT_INFO_DOUBLEを開いて見て ください。定数の数はCount(14)である。このように、アプリケーションの開始時に、必要なenumをすべて扱い、その最小値と最大値を書き、それに対応するStringToEnumを使うことで、最高のスピードで 処理することができるのです。
追伸:INT_MINとINT_MAXを使ったenumFindMinMaxの2番目のバリエーションは、本当にとても遅いです。最初はやってみたんです。その後、enumFindMinMaxが 終了するのを待つのに疲れ、-500から500までの値を設定しました。
したがって、intの範囲を全部使う必要は全くないという結論に達しました。
端末の挙動がおかしいのですが。
あるチャートでExpert Advisorが動作しており、ある瞬間に別のチャートを開き、新しいチャートにある寺院を設定する、というような状況です。後者のテンプレートは、新しいチャートで2つ目のEAを起動するために定義されています。
週の半ばはすべてうまくいくのですが、マーケットが閉じている週末は、新しいチャートで新しいテンプレが開始されますが(チャートの外観を変更するとわかります)、そこでは2番目のEAが開始されないのです。2つ目のExpert Advisorを「押す」唯一の方法は、任意のチャート、任意のスクリプト、完全に空のものであっても、手動で起動することです。その後、2つ目のExpert Advisorが新しいチャートで作業を開始します。
最初の Expert Advisor で ChartOpen とChartApplyTemplate 関数を使用し、CChart クラスを使用してこのコードを書きましたが、いつも同じ結果になり、市場が閉じている場合、新しいチャートの 2 番目の Expert Advisor は、ターミナルを手動で「押す」まで起動しません。
このような状況に直面したことがある方はいらっしゃいますか?どう対処するか、どう "掘る "か。
このような状況に直面したことがある方はいらっしゃいますか?どう対処するか、どんな方法で「掘る」のか?
どうして起動しないとわかるの?
追伸
このように試してみてください。
enumの定数をEnumToStringで変換し、目的の定数と比較することで、ブルートフォース関数(#18697と 同じ原理)で見つけることができます。あとは結果を返すだけです。
何も思い浮かばないので、例(せめてキーライン)を教えてください。また、膨大な価値観のリストから、左利き用をすべてふるいにかけるか、それとも有用なものだけを探すか?今のところ、左利きのものが入っていないので、ふるいにかけることはないと思うのですが......。が、その発想がつかめない。
思いつかないので、例(せめてキーライン)を教えてください。また、左側の値の中から正しいものをふるいにかけて、あるいは有用なものだけを集めた巨大な値のリストになるのでしょうか。今のところ、左利きのものが入っていないので、ふるいにかけることはないと思うのですが......。が、その発想がつかめない。
可能なすべてのenumの値を調べるのを避けるために(本当に長いので)、以下の準備をする必要があります#18771(キャッシュのようなもの)。そして、この関数#18763の 助けを借りて、必要なすべての列挙型の範囲を知っている列挙型に簡単に変換することができます。あるいは、比較的小さな範囲のenumを検索することもできます#18768.
起動してないって、どうやって判断したんだ?
追伸
このように試してみてください。
OnInitセクションの2番目のエキスパートがログに結論を出し、ログメッセージはありません。ログには、Expert Advisorの起動に関する端末からのメッセージも含まれていません。また、右上のチャートにExpert Advisorの名前が表示されない。
また、そのためにどのような機能が使われているのでしょうか。MqlRates?また、ObjectGetを使う場合、そこでオブジェクトのプロパティを指定する必要があります。OBJPROP_PRICEを取る場合、現在のバーまでの価格をどのようにフェッチさせればよいのでしょうか?
GetはGet。また、オブジェクトの名前や種類、名前からバー上の価格や時間を取得する機能があり、オブジェクトの特定のプロパティを取得することができます。小節番号ではなく、ゼロからのオフセットが使用されます。
GetはGet。また、オブジェクトの名前や種類、名前からバー上の価格や時間を取得する機能があり、オブジェクトの特定のプロパティを取得することができます。小節番号ではなく、ゼロからのオフセットが使用されます。
これは、ObjectGetValueByTime()関数を使用して行うことができます。
例
TerminalMQL4 Indicatorsフォルダーにあるインジケーターのリストにはインジケーターが含まれていますが、ターミナルMQL4では、これらのインジケーターがチャートにドラッグされるそのリストには含まれていないのです。これらのインジケータをターミナルリストに表示させ、MQL4 ターミナルのチャートで使用できるようにするにはどうすればよいですか?スクリーンショットの右側はMQL4 ターミナルで 利用可能なインジケーター、左側はMQL44Indicators フォルダーにある同じターミナルのインジケーターです (例として)。
これらは、おそらく指標にはならない。