実は、なぜタイマーが秒単位なのかが問題なのです。
正直、ネイティブタイマーを搭載すると聞いたとき、時間の原子単位がミリ秒ではなく秒になるとは思いませんでしたが......。
最近、使おうと思ったときに、(私にとっては)あまり嬉しい発見ではありません。
前提は非常にシンプルです -- タイマーは通常、同期(データの計算待ち)や観測に使われます(時限式のEAなら、イミフですが、もっと適切なものになるでしょう)。どちらも1秒はちょっと無理ですが、ぜひともミリ秒単位でタイマーを表示させたいところです。
今回もインデックスにあるSleep機能の代用として優秀で、また2つ目はやりすぎです。
この要望を無視しないでほしいです。必要であれば、サービスデスクに依頼 する。
テーマは自由です。いかがでしょうか?
あなたは私を信じて、取引端末の現在の実現とMQ秒のスレッドで動作するアルゴリズムが良い解決策であることができます。
さらに言えば、テスターの時間は分足チャートをベースに生成されているため(私の理解では)、時間軸を小さくするとうまくいきません。
追記
もちろん、開発者はより詳細な答えを与えることができますが、Expert Advisor とターミナルでスレッドを操作する現在のアルゴリズムでは、1 秒より短い時間間隔はまったく不可能か、単に EA の動作に一貫性がなくなることを理解するのに十分です。
このようなソリューションの結果を想像するには、例えばタイマーの処理に1分かかっている間に、そのタイマーが500ミリ秒ごとに呼び出されたらExpert Advisorに何が起こるか...を理解する必要があります。
Interesting:
特にテスターの時間は分足チャートに基づいて生成されているため(私の理解では)、より小さな時間スケールではうまくいきません。
...1秒より短い時間間隔は、まったく不可能であるか、エキスパートアドバイザの動作に一貫性がなくなるだけです。
どんなふうに?なぜできないのでしょうか?
このようなソリューションの結果を想像するには、例えば処理タイマーが1分かかるのに、Expert Advisorのタイマーが500ミリ秒ごとに呼び出されたらどうなるかを理解する必要があります...。
そして、どうなるのでしょうか?また、タイマーが1秒だとどのくらい怖いのでしょうか?
実は、なぜタイマーが秒単位なのかが問題なのです。
正直、ネイティブタイマーを搭載すると聞いたとき、時間の原子単位がミリ秒ではなく秒になるとは思いませんでしたが......。
最近、使おうと思ったときに、(私にとっては)あまり嬉しい発見ではありません。
前提は非常にシンプルです -- タイマーは通常、同期(データの計算待ち)や観測に使われます(時限式のEAなら、イミフですが、もっと適切なものになるでしょう)。どちらも1秒はちょっと無理ですが、ぜひともミリ秒単位でタイマーを表示させたいところです。
そしてまた、インデックスにあるSleep機能の代用になり、1秒が惜しいです。
開発者の皆さんには、この要望を聞き入れずにいてほしいですね。必要であれば、serviceskでリクエスト します。
このトピックは公開されています。いかがでしょうか?
秒単位のタイマーは、私たちの意識的な判断です。タイマーは主にExpert Advisorがティックなしで動作することを目的としています。
同期させたい場合は、複数のExpert Advisorを異なる商品で使用し、互いにカスタムメッセージを送信するようにします。
あるいは、例えば50ミリ秒のスリップでループする一種のwotchdogを書き、予想されるイベントが発生したときに、メインのExpert Advisorにメッセージを送信します。そうすることで、メッセージの配信が保証されます(もちろん、キューをオーバーフローさせない限り)。
秒単位のタイマーは、私たちの意識的な判断です。タイマーは、主にダニがいない状態で専門家が作業することを想定しています。
これはタイマーを使わずに、ついでに自分自身にイベントを送るという手間も省けます。では、なぜ機能を拡張しないのか?
同期させたい場合は、異なるツールで複数のEAを使用し、互いにカスタムメッセージを送信します。
同期には、データとの同期があります。例えば...内蔵のインジケーター。この同期をインジケーターで解決するにはどうしたらよいでしょうか。Expert Advisorについて聞いているわけではなく、すべてそちらで問題なく解決しています。しかし、インジケータでは、Sleepは スレッド全体の停止であり、残りのインジケータを意味します。そして、同期に関するトラブルが多いということです。
また、予想されるイベントが発生したときにメインのExpert Advisorにメッセージを送信する、50ミリ秒スリップのウォッチドッグループのようなものを書くことができます。メッセージは配信されることが保証されます(もちろん、キューをオーバーフローさせない限り)。
テスターと何か関係があるのでしょうか?
どんなふうに?なぜ、それができないのか?
そして、どうなるのでしょうか?また、タイマーが1秒だとどのくらい怖いのでしょうか?
原子時間の単位を知っている人は、おそらくOSやその他のソフトウェアでプロセスやスレッドがどのように構成されているか知っていると思うんです。
しかし、基本的なことを思い出してほしい(知らない人がいるかもしれないので) - システムで起こることはすべてプロセスとスレッドに分けられ、各プロセスは1つから数個のスレッドを持つことができる。大雑把に言うと、システムで動いている実行可能なファイルはすべて「プロセス(PROCESS)」である。各プロセスには優先順位があり、プロセス内の各スレッドには優先順位があります。
この優先順位に基づき、システムは各プロセス(または特定のプロセスのスレッド)にプロセッサ時間を割り当てます。
そのため、クライアント端末のアーキテクチャは、1つのチャートに1つのExpert Advisorと複数のインジケータしか起動できないようになっています(ご存知の通りです)。Expert Advisorは1つのスレッドを持っていますが、各インジケータはExpert Advisorから(完全に独立した)独自のスレッドを取得します。
もちろん、ティックの処理については疑問が残りますが、おそらく一般的なパターンに当てはまると思われます)。
この場合、各チャートごとにイベントの別スレッドが形成され、システムによって順次処理される。
そのため、直前のタイマー処理が終了するまで、タイマー処理を呼び出すことができません。あるいは、簡単に言えば、タイマーを処理すべきスレッドがビジー状態になるまで、OnTimer()の実行を許さないということです。
2番目のスレッドによるタイマー処理の開始が不可能であることを説明するために、次のような例を使うことができます(間抜けですが明確です)。
int OnInit() { //----------------------------------------------------------------------------// //Work variables //----------------------------------------------------------------------------// EventSetTimer(1); //----------------------------------------------------------------------------// return(0); //----------------------------------------------------------------------------// } void OnTimer() { //----------------------------------------------------------------------------// //Work variables //----------------------------------------------------------------------------// Print(TimeLocal()); Sleep(2000); //----------------------------------------------------------------------------// }
追記
ストラテジーテスターについて ですが、そこでの時間はどのように形成されるのでしょうか。
Interesting:
クライアント端末のアーキテクチャは、(ご存知のように)1つのチャートに1つのExpert Advisorと複数のインジケータしか起動できないようになっています。Expert Advisorは1つのスレッドを持っていますが、各インジケータはExpert Advisorから(完全に独立した)独自のスレッドを取得します。
いつから?スクリプトやExpert Advisorは、それぞれのスレッドで動作するため、全く問題はないと思います。
ご存知のようにインジケータはすべてONEスレッドで動作しており、どのインジケータでもタイマーを整理する作業が複雑になります。そして、時にはそれがとても気に入るのです。
下の例は、2番目のスレッドでタイマーを起動できないことを表しています(ぶっきらぼうですが説明用です)。
以下は、その動作例です。特に前の記事との関連で、あなたの思考のレベルが露骨に、明確に表れています。
もう二度と私の書き込みに一切返信しないでください、でないと自制が効かず、悪口を言ってBANされますよ。
ただ、もしよかったら気軽に書き込んでください、プログラミング関連の話題なら喜んでバカにしますよ、禁止なんてとんでもないです。
いつから?スクリプトもEAもそれぞれのスレッドで動くので、全く問題ないと思います。
そして、インジケータはすべてONEスレッドで動作していることを知らしめ、どのインジケータでもタイマーを整理する作業を複雑にしているのです。そして、時には本当にそうしたいと思うこともあります。
答えたくなかったが、どうしようもなかった。
スクリプトには興味がありませんが、Expert Advisorが別々のスレッドで実行されないと言ったのはどこでしょうか。ここで、私が逆のことを言ったところを指し示してください.
インジケータはあまり扱わないのでよくわかりません(きっとこの質問はフォーラムで議論され、何かあれば開発者が修正するのでしょう)。各インジケータのタイマーを指定できることは知っています(エキスパートには依存しない)。
指標について言うべきことはちゃんと分かっている。
TheXpert です。
例題はうまくいく。特に前の記事との関連で、あなたの思考のレベルが露骨に、明確に表れています。
そして、誰が動作することを疑うだろうか、タイマーは(なんと)初期化ブロックで指摘した宣言された1秒ではなく、2秒ごとに動いているのだ。
特に、タイマー呼び出しの問題はとにかく明白でしたが、Expert Advisorに入れました(わかりやすくするために、何事も絵にすると便利でわかりやすいと言われているので、そうしましょう)・・・。
あとは、OnTimeが1秒かかるとして、500ミリ秒ごとにOnTimerが呼ばれるのか(例ではそれぞれ1秒と2秒)、それを知るだけです。
TheXpert です。
もう二度と私の書き込みに返信しないでください!そうしないと自制が効かず、悪口を言ってBANされますよ。
しかし、もしよろしければ、お気軽に書き込みをお願いします!プログラミング関連の話題なら何でもOKです!地獄の解禁です。
だから、相手が間違っていることを教えたり、「あなたは間違っている、googleで調べてください」とだけ書くのはやめましょう。
私が理解する限り、フォーラム - 相互に有益な会話、あなたが唯一の開発者に質問を持っている場合は、servicedeskに行く。
私はMQL5のパフォーマンスについていくつかの実験を行いました。 教えてあげると、ほとんどのExpert AdvisorはOnTick関数を0.1秒未満で実行します。
TheXpertへ
なぜそんなに急ぐのですか?
しかし、タイマーを1秒未満にする意味がわからない。2つの電子が衝突したときをカウントしているのでしょうか?
もしそうなら、ループとSleep()を先に進めてください。
もう一枚...ひょっとして兄弟じゃないですか?
mrProF:
しかし、1秒未満のタイマーに意味があるとは思えません。
とはいえ、ないとは言い切れませんが。タスクは人それぞれです。
もしそうなら、ループとSleep()を先に進めてください。

- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
実は、なぜタイマーが秒単位なのかが問題なのです。
正直、ネイティブタイマーを搭載すると聞いたとき、時間の原子単位がミリ秒ではなく秒になるとは思いませんでしたが......。
最近、使おうと思ったときに、(私にとっては)あまり嬉しい発見ではありません。
前提は非常にシンプルです -- タイマーは通常、同期(データの計算待ち)や観測に使われます(時限式のEAなら、イミフですが、もっと適切でしょう)。どちらも、1秒はちょっと無理ですが、ぜひともミリ秒単位のタイマーを実現してほしいものです。
今回もインデックスにあるSleep機能の代わりになるもので、1秒は多すぎるくらいです。
開発者の方々には、ぜひこの要望を検討していただきたいと思います。必要であれば、サービスデスクに依頼 する。
このトピックを公開しました。いかがでしょうか?