エキスパート: 相場モニタリング(メモリマップファイル) - ページ 2 12 新しいコメント Alexey Klenov 2013.03.26 12:57 #11 sergeev:1) サーバーだけがメモリーを変更する権利を持っている。2)-Pipeを見て ください。そこでは、データ到着の「イベント」は自明なものとして実装されています。3)そう、サーバーを書くかMSDNからコピーする必要があるが、MQL5では既製のクライアントを直接使うことができる。4)残念ながら、ポーリングの周期性でこの問題を解決することはできません。 Sleep(1)はメモリで動作しているときでもノイズを発生させるべきではありません。 関数のタイミングをチェックする必要があります。もしかしたら、どこかに余分なパスやロードがあるかもしれません。1 - サーバーだけ(あなたの仕事から私が書いた)2 - 興味深い、私はデータ4(8)バイト、すなわち全サイクルを転送するために "できるだけタイムリーに "タスクを持っている(非常に頻繁に実行する必要があります)だけ見ていきます。3 - 私は記事との類推によって、私は自分自身を作ると思うが、今のところ問題さえテスト例が動作しません。4 - はい、私はコードを最適化し、いくつかのことを書き直した、それはより良いようです。 Alexey Klenov 2013.03.31 22:24 #12 あなたのdllをmt4に追加してみました。2013.04.01 00:03:49 _tradeBuySell_mt4 GBPCHF,H1: -unknow err(0) h=0 2013.04.01 00:03:49 _tradeBuySell_mt4 GBPCHF,H1: function 'MemOpen' call from dll 'MemMap32.dll' critical error c0000005 at 666013E6. コードは以下の通りです。 #include <stdlib.mqh> #define modeOpen 0 // オープンフラグ #define modeCreate 1 // 作成フラグ #import "MemMap32.dll" int MemOpen(string path,int size,int mode,int &err); // メモリ内でファイルをオープン/作成し、ハンドルを取得する。 void MemClose(int hmem); // メモリ内のファイルを閉じる int MemGrows(int hmem,string path,int newsize,int &err); // メモリ内のファイルサイズを増やす int MemWrite(int hmem,int &v[], int pos, int sz, int &err); // int(4) ベクトル v を指定された位置 pos, size sz からメモリに書き込む。 int MemRead(int hmem, int &v[], int pos, int sz, int &err); // 指定された位置posからベクトルvをサイズszで読み込む #import int hmem,err; // string file; // メモリ内のファイル名 int init() { file="Local\\123"; // メモリ内のファイル名 hmem=MemOpen(file,-1,modeOpen,err); // 既存のファイルを開く if(hmem>0) // 開かれた場合 { Print("open OK h="+hmem); } else if(err==-2) // 開かれていない場合 { Print("-err("+err+") memfile not found."); } else { Print("-unknow err("+err+") h="+hmem); return(0); } Print("OK ("+err+") h="+hmem); return(0); } --- 2013.03.31 23:32 #13 ドライバーを右に 回す Alexey Klenov 2013.04.01 12:50 #14 sergeev:ドライバーを正しく 回すリンク先の例では、MemMap.dllを使用しています。そこにはありません。MEmMap32.dllです。mt5では動作しますが、mt4ではファイルが見つかりません。errは配列であるべきでした。 Alexey Klenov 2013.08.27 06:15 #15 これを回避する方法を教えてください。OK 1 01:10:31 tradeBuySell 'D:\MT5******\MQL5\Libraries\MemMap32.dll' is not 64-bit version JF 1 01:10:37 tradeBuySell (GBPUSD,H1) Cannot load 'D:\******\MQL5\Libraries\MemMap32.dll'ターミナルmt5のx64バージョンはサーバーに自動的にインストールされます。私のラップトップにはWin7x64がありますが、通常の32ビット版のターミナルがあり、x64にアップデートしようとしません。 12 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
1) サーバーだけがメモリーを変更する権利を持っている。
2)-Pipeを見て ください。そこでは、データ到着の「イベント」は自明なものとして実装されています。
3)そう、サーバーを書くかMSDNからコピーする必要があるが、MQL5では既製のクライアントを直接使うことができる。
4)残念ながら、ポーリングの周期性でこの問題を解決することはできません。 Sleep(1)はメモリで動作しているときでもノイズを発生させるべきではありません。 関数のタイミングをチェックする必要があります。もしかしたら、どこかに余分なパスやロードがあるかもしれません。
1 - サーバーだけ(あなたの仕事から私が書いた)
2 - 興味深い、私はデータ4(8)バイト、すなわち全サイクルを転送するために "できるだけタイムリーに "タスクを持っている(非常に頻繁に実行する必要があります)だけ見ていきます。
3 - 私は記事との類推によって、私は自分自身を作ると思うが、今のところ問題さえテスト例が動作しません。
4 - はい、私はコードを最適化し、いくつかのことを書き直した、それはより良いようです。
あなたのdllをmt4に追加してみました。
コードは以下の通りです。ドライバーを右に 回す
ドライバーを正しく 回す
リンク先の例では、MemMap.dllを使用しています。
そこにはありません。MEmMap32.dllです。
mt5では動作しますが、mt4ではファイルが見つかりません。
errは配列であるべきでした。
ターミナルmt5のx64バージョンはサーバーに自動的にインストールされます。
私のラップトップにはWin7x64がありますが、通常の32ビット版のターミナルがあり、x64にアップデートしようとしません。