異なる端末で動作する2つのEA間のデータ交換 - ページ 2 12345678 新しいコメント kombat 2009.04.28 21:27 #11 EAがティック単位でイベントを処理するので、その方向で落ち着きました。 一方を書き、もう一方をティックから読み取るという違いは、理論的には次のティックで......。 Andres 2009.05.13 22:34 #12 ふと思いついたのですが、レジストリでデータをやり取り するのはどうでしょう?キーの作成、キーの削除、そのためのAPIはすべて揃っているようです。どの程度遅いのかはわかりませんが、アプリケーションからアクセスされる部分は常にRAMに置くことができるようです。 誰かの頭に浮かんだことはないだろうか。同一マシン上の端末にのみ有効です。 この方向で掘っていきます :-)。 Иван 2009.05.14 20:59 #13 Andres писал(а)>> ふと思いついたのですが、レジストリでデータをやり取りするのはどうでしょう?キーの作成、キーの削除、そのためのAPIはすべて揃っているようです。どの程度遅いのかはわかりませんが、アプリケーションからアクセスされる部分は常にRAMに置くことができるようです。 誰かの頭に浮かんだことはないだろうか。同一マシン上の端末にのみ有効です。 この方向で掘っていきます :-)。 レジストリと連携するためのAPIのリンクを教えてください。 今のところ、ディスク上のファイルを介した情報交換を基本としたバリエーションを考えています。もちろん、どちらの端末も同じパソコンで動作します。 いくつかテストしてみましたが、端末間で1秒以内にデータをやり取りできるスピードは十分すぎるほどで、両口座(BUY口座とSELL口座)を管理するには十分な速度だと思われます。 とはいえ、最近は仕事が忙しく、2週間ほどこの問題を扱っていませんでしたが。 以前、プログラマー仲間に聞いたことがありますが、レジストリをいじって解決するのはダメだと忠告されましたが。ハードディスクでのファイル共有を利用するよう強く勧められた。 今はそこで止まっています。暇が出来たら、このバリアントをファイルで実現しようと思っています。 BabyBear 2009.05.14 21:42 #14 http://yandex.ru/yandsearch?text=CreateFileMapping&stpar2=%2Fh0%2Ftm123%2Fs1&stpar4=%2Fs1 便利なのは、DLLの中に共有メモリへの参照があることです。 このアドレスは、構造体のアドレスとして使用することができます。) Ilnur Iksanov 2009.05.15 03:15 #15 solandr >> : レジストリと連携するAPIのリンクを教えてください。 レジストリからの読み込みの 例。 Andres 2009.05.15 14:40 #16 すでに小さなライブラリを書き、私のEAではレジストリを通じて情報を変更しています。実際には、RAMを通して変更され、ディスクへの読み書きを行っていません。MSDNには、レジストリに数百Kb以上のデータを突っ込まない方が良いと書かれています。 ライブラリは、すべてのキーとパラメータが一時的なレジストリ領域に作成され、永久的なレジストリに書き込まれないように設定されています。再起動後、これらのキーは消えています。 ひとつだけ、このライブラリは255文字以下の文字列パラメータでのみ動作します(MQLの制限)。でも、これで十分なんです。一般に、レジストリのパラメータは文字列だけでなく、さまざまなタイプを使用できますが、今のところ他のタイプは必要ないと私は考えています。今はレジストリを介して2つのEAを交換していますが、もっと増えるかもしれません:-)。また、Win APIでは、ネットワークレジストリへの接続が可能なのも良い点です。同じネットワーク内の異なるコンピュータで動作するEA間で情報を交換する必要がある場合、この方向に目を向けることができます。私見では、迅速かつシンプルで信頼性が高く、DLLやファイルも不要です。文字列を入れると、文字列が出る。 #include "RegLib.mqh" int hKey; int init() { // инициализируем дефайны InitRegDefines(); // создаём тестовый ключ hKey = CreateKey( HKEY_CURRENT_USER, "!MT4TestKey" ); // создаём поля по умолчанию SetStringValue( hKey, "Bid", "0.0" ); SetStringValue( hKey, "Ask", "0.0" ); return( 0 ); } int start() { // записываем цены в реестр SetStringValue( hKey, "Bid", DoubleToStr( Bid, Digits ) ); SetStringValue( hKey, "Ask", DoubleToStr( Ask, Digits ) ); // получаем цены в виде строк из реестра string BidStr = GetStringValue( hKey, "Bid" ); string AskStr = GetStringValue( hKey, "Ask" ); // выводим цены из реестра Print( "Bid = ", BidStr, " ", "Ask = ", AskStr ); } int deinit() { // закрываем ключ CloseKey( hKey ); return( 0 ); } ファイル: reglib.zip 4 kb Dmitry Fedoseev 2009.05.15 14:55 #17 Andres писал(а)>> ふと思いついたのですが、レジストリでデータをやり取りするのはどうでしょう?キーの作成、キーの削除、そのためのAPIはすべて揃っているようです。どの程度遅いのかはわかりませんが、アプリケーションからアクセスされる部分は常にRAMに置くことができるようです。 誰かの頭に浮かんだことはないだろうか。同一マシン上の端末にのみ有効です。 この方向で掘っていきます :-)。 また、電球で釘を打ってみるのもよいでしょう。人によっては効果があります。 Виктор 2009.05.15 15:01 #18 Integer >> : また、電球で釘を打ってみるのもよいでしょう。できる人もいる。 でも、美しいと思いませんか?また、OSの変数を利用してみるのもよいでしょう。 Dmitry Fedoseev 2009.05.16 06:54 #19 granit77 писал(а)>> でも、美しいと思いませんか?また、OSの変数を利用してみるのもよいでしょう。 また、システム時刻の設定も試してみてください。 BabyBear 2009.05.16 07:07 #20 :)))))))))))))) 12345678 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
EAがティック単位でイベントを処理するので、その方向で落ち着きました。
一方を書き、もう一方をティックから読み取るという違いは、理論的には次のティックで......。
ふと思いついたのですが、レジストリでデータをやり取り するのはどうでしょう?キーの作成、キーの削除、そのためのAPIはすべて揃っているようです。どの程度遅いのかはわかりませんが、アプリケーションからアクセスされる部分は常にRAMに置くことができるようです。
誰かの頭に浮かんだことはないだろうか。同一マシン上の端末にのみ有効です。
この方向で掘っていきます :-)。
ふと思いついたのですが、レジストリでデータをやり取りするのはどうでしょう?キーの作成、キーの削除、そのためのAPIはすべて揃っているようです。どの程度遅いのかはわかりませんが、アプリケーションからアクセスされる部分は常にRAMに置くことができるようです。
誰かの頭に浮かんだことはないだろうか。同一マシン上の端末にのみ有効です。
この方向で掘っていきます :-)。
レジストリと連携するためのAPIのリンクを教えてください。
今のところ、ディスク上のファイルを介した情報交換を基本としたバリエーションを考えています。もちろん、どちらの端末も同じパソコンで動作します。
いくつかテストしてみましたが、端末間で1秒以内にデータをやり取りできるスピードは十分すぎるほどで、両口座(BUY口座とSELL口座)を管理するには十分な速度だと思われます。
とはいえ、最近は仕事が忙しく、2週間ほどこの問題を扱っていませんでしたが。
以前、プログラマー仲間に聞いたことがありますが、レジストリをいじって解決するのはダメだと忠告されましたが。ハードディスクでのファイル共有を利用するよう強く勧められた。
今はそこで止まっています。暇が出来たら、このバリアントをファイルで実現しようと思っています。
http://yandex.ru/yandsearch?text=CreateFileMapping&stpar2=%2Fh0%2Ftm123%2Fs1&stpar4=%2Fs1
便利なのは、DLLの中に共有メモリへの参照があることです。
このアドレスは、構造体のアドレスとして使用することができます。)
レジストリと連携するAPIのリンクを教えてください。
レジストリからの読み込みの 例。
すでに小さなライブラリを書き、私のEAではレジストリを通じて情報を変更しています。実際には、RAMを通して変更され、ディスクへの読み書きを行っていません。MSDNには、レジストリに数百Kb以上のデータを突っ込まない方が良いと書かれています。
ライブラリは、すべてのキーとパラメータが一時的なレジストリ領域に作成され、永久的なレジストリに書き込まれないように設定されています。再起動後、これらのキーは消えています。
ひとつだけ、このライブラリは255文字以下の文字列パラメータでのみ動作します(MQLの制限)。でも、これで十分なんです。一般に、レジストリのパラメータは文字列だけでなく、さまざまなタイプを使用できますが、今のところ他のタイプは必要ないと私は考えています。今はレジストリを介して2つのEAを交換していますが、もっと増えるかもしれません:-)。また、Win APIでは、ネットワークレジストリへの接続が可能なのも良い点です。同じネットワーク内の異なるコンピュータで動作するEA間で情報を交換する必要がある場合、この方向に目を向けることができます。私見では、迅速かつシンプルで信頼性が高く、DLLやファイルも不要です。文字列を入れると、文字列が出る。
ふと思いついたのですが、レジストリでデータをやり取りするのはどうでしょう?キーの作成、キーの削除、そのためのAPIはすべて揃っているようです。どの程度遅いのかはわかりませんが、アプリケーションからアクセスされる部分は常にRAMに置くことができるようです。
誰かの頭に浮かんだことはないだろうか。同一マシン上の端末にのみ有効です。
この方向で掘っていきます :-)。
また、電球で釘を打ってみるのもよいでしょう。人によっては効果があります。
また、電球で釘を打ってみるのもよいでしょう。できる人もいる。
でも、美しいと思いませんか?また、OSの変数を利用してみるのもよいでしょう。
でも、美しいと思いませんか?また、OSの変数を利用してみるのもよいでしょう。
また、システム時刻の設定も試してみてください。