記事"MetaTrader 5とMATLABの連携"についてのディスカッション

 

新しい記事 MetaTrader 5とMATLABの連携 はパブリッシュされました:

本稿はMetaTrader 5とMatLab数学的パッケージの連携について詳しく述べていきます。それは、データ変換のメカニズム、デスクトップMatLabとの連携のためのユニバーサルライブラリの開発手順をさします。またMatLab環境で生成されるDLLの使用についても述べていきます。本稿は C++ 言語とMQL5をご存じの経験者を対象としています。

図1 ライブラリ アルゴリズムのブロック図

作者: Andrey Emelyanov

 

あなたの指示に注意深く従いましたが、Matlab 2007bで動作させることができません。MT5ターミナルで、あなたの構築済みの例を使用しようとすると、次のようなエラーが出続けます。

2010.08.29 10:33:30 TestMLEngine (EURUSD,H1) Cannot open 'C:∕UsersQuantFX∕AppData∕Roaming∕MetaQuotes∕Terminal∕216E2BD2BB8CE60176A41ADF6AC1C76D∕MQL5∕LibMlEngine.dll' (126)

2010.08.29 10:33:47 TestDllMatlab (EURUSD,H1) Cannot open 'C:⊖Users⊖QuantFX⊖AppData⊖Roaming⊖MetaQuotes⊖Terminal⊖216E2BD2BB8CE60176A41ADF6AC1C76D⊖MQL5⊖LibrariesnnSMA.dll' (126)

という記事で紹介されているプロジェクトは取得できているので、どう考えればいいのかよくわかりません:A DLL for MQL5 in 10 Minutes"https://www.mql5.com/en/articles/18 で紹介されているプロジェクトは 問題なく動作して います。

2010.08.29 10:44:16 MQL5DLL_Test (EURUSD,H1) Access violation write to 0x00000000 in 'C:¥Users¥QuantFX¥AppData¥Roaming¥MetaQuotes¥Terminal¥216E2BD2BB8CE60176A41ADF6AC1C76D¥MQL5¥Libraries¥MQL5DLLSamples.dll'

2010.08.29 10:44:16 MQL5DLL_Test (EURUSD,H1) Replace:素早い茶色の猫は怠け者の犬を飛び越える

2010.08.29 10:44:16 MQL5DLL_Test (EURUSD,H1) Array:0 1 2 3 4 5 6 7 8 9
2010.08.29 10:44:16 MQL5DLL_Test (EURUSD,H1) Time 297 msec, int: -752584127 double: 17247836076609

この記事を読んでから、ずっと困っていたので、教えていただけると助かります。よろしくお願いします。

How to Exchange Data: A DLL for MQL5 in 10 Minutes
  • 2010.01.27
  • MetaQuotes Software Corp.
  • www.mql5.com
Now not so many developers remember how to write a simple DLL, and what are special features of different system binding. Using several examples, I will try to show the entire process of the simple DLL's creation in 10 minutes, as well as to discuss some technical details of our binding implementation. I will show the step-by-step process of DLL creation in Visual Studio with examples of exchanging different types of variables (numbers, arrays, strings, etc.). Besides I will explain how to protect your client terminal from crashes in custom DLLs.
 

私はVisual Studioの経験が浅く、メタトレーダープログラミングの初心者です。 そのため、エラーばかりで大変でした。 しかし、長い目で見れば、どのバージョンのmatlabとVisual Studioでも非常に簡単です。メタトレーダーとMatlabの接続に初めて挑戦する人は、Matlabエンジンやメタトレーダーの外部ライブラリを扱ったことがない場合、以下の方法で理解を深めることをお勧めします。http://www.mathworks.com/support/solutions/en/data/1-78077S/index.html?product=ML&solution=1-78077S これをコンパイルし、DLLファイルが見つからないなどの問題があれば、依存関係ウォーカー(http://www.dependencywalker.com/ to determine what missing files need to be placed in your C:\Windows\System 32 folder in order to get the version of matlab engine you are using to work. It might be good to note that you may end up having to put alot files in your system 32 folder,or know the right places to link them at in your project.ほとんどのDLLはmatlabroot\win(32または64)フォルダにありますが、必要な最初の数個のDLLファイルを入れたら、もう一度プロジェクトをビルドしてみてください。dependency walkerが提案することをすべて行う必要はないとわかるかもしれません。プロジェクトがコンパイルされ実行されれば、ほぼ完了です... 2.How to Exchange Dataの 記事で提案されているプロジェクトをビルドします:A DLL for MQL5 in 10 Minutes https://www.mql5.com/en/articles/18 . もしそのプロジェクトが動くようになったら、上のプロジェクトを作成するときに、この2つを組み合わせていることを思い出してください。h "がDLLUnit.cppの最初の#includeヘッダであることを確認し、ビルドする直前にプリコンパイルヘッダをオフにしてください。 上記のファイルをそのまま使用すると、簡単に修正できる警告が出るかもしれませんが、プロジェクトは何の問題もなく動作するはずです。しかし、もしこのプロジェクトを別のバージョンのmatlabでビルドしたり、ビジュアル・スタジオを使ったりする必要があった場合、これらのことをすることで数時間の時間を節約できるかもしれません。

ありがとうございました。

 

間違っていなければ、表1のMatlab行列の型が間違っています。uの 文字が欠けているのだ.例えば,0から65535までの範囲はint 16 型ではなくuint16 型が担当する.などなど...

クラス

値の範囲

変換関数

符号付き8ビット整数

-27 から27-1

int8

符号付き16ビット整数

-215 から215-1

int16

符号付き32ビット整数

-231 から231-1

int32

符号付き64ビット整数

-263263-1

int64

符号なし8ビット整数

0から28-1

uint8

符号なし16ビット整数

0~216-1

uint16

符号なし32ビット整数

0~232-1まで

uint32

符号なし64ビット整数

0~264-1

uint64

 

素晴らしい記事をありがとう!

しかし、問題が発生しました。どなたか遭遇したことがあるかもしれません。

Expert Advisorを閉じるときに、MT5が完全にハングアップしてしまいます。MSVisual Studio2010+ Matlab r2011aを使っています。

何が原因だと思われますか?よろしくお願いします!

 

こんにちは。 記事通りに全て行ったのですが、TestMlEngineスクリプトを実行するとエラーが出ました:

2011年12月17日15:55:23 TestMLEngine(EURUSD,H1) Cannot open 'C: \UsersH_F_M\AppData\Roaming\MetaQuotes\Terminal\DEA4AAFB996D79821EC8BDBADDC3C\MQL5LibMlEngine.dll' (126)

で、すぐに

2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxGetSizeOfName' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxGetLogical' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxGetInt' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxGetDouble' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxInputLogical' in 'LibMlEngine.
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxInputInt' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxInputDouble' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxInputChar' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxOpen' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxClose' in 'LibMlEngine.dll'

フォーラムのどこかで、これはdllの欠落が原因であることを知りました。depends.exeの助けを借りて、欠落しているものを見つけ、それを同じフォルダに放り込みました。 今は表示されています:

2011年12月17日15:57:59 TestMLEngine (EURUSD,H1) Cannot open 'C: \UsersH_F_M\AppData\Roaming\MetaQuotes\Terminal\DEA4AAFB99C996D79821EC8BDBADDC3C\MQL5LibLibMlEngine.dll' (127).

とリストが続きます。何が問題なのか教えてください。もう1週間も悩んでいるんです。

はい、Win7 + Matlab R2011a + VS201です。


 
H_F_M:

こんにちは。 記事通りに全て行ったのですが、TestMlEngineスクリプトを実行するとエラーが出ました:

2011年12月17日15:55:23 TestMLEngine (EURUSD,H1) Cannot open 'C: \UsersH_F_M\AppData\Roaming\MetaQuotes\Terminal\DEA4AAFB996D79821EC8BDBADDC3C\MQL5LibMlEngine.dll' (126)

で、すぐに

2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxGetSizeOfName' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxGetLogical' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxGetInt' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxGetDouble' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxInputLogical' in 'LibMlEngine.
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxInputInt' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxInputDouble' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxInputChar' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxOpen' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxClose' in 'LibMlEngine.dll'

フォーラムのどこかで、これはdllの欠落によるものだと知りました。depends.exeの助けを借りて、欠落しているものを見つけ、それを同じフォルダに放り込みました。 今は表示されています:

2011年12月17日15:57:59 TestMLEngine (EURUSD,H1) Cannot open 'C: \UsersH_F_M\AppData\Roaming\MetaQuotes\Terminal\DEA4AAFB99C996D79821EC8BDBADDC3C\MQL5Libraries

とリストが続きます。何が問題なのか教えてください。もう1週間も悩んでいるんです。

はい、Win7 + Matlab R2011a + VS201です。

Matlabをインストールした時、システムパスが「C:˶Program FilesMATLABR2011bin」しかなかったんです。C:¥Program FilesMATLAB¥R2011b¥bin¥win32 を追加した。MatlabディレクトリのDllが見えるようになり、Matlab Engineが起動した。その前にdllが見えないと書いた。

 

Borland C++ Builder 6はインストールされているのですが、なぜか<MATLAB>exextern}/libwin32フォルダに "Borland "カタログが見つかりません。したがって、libeng.libとlibmx.libもプロジェクトに 接続できません。Farで "implib libeng libeng.libeng.dll "コマンドを実行すると以下のようになる:

)

Borlandのフォルダもありませんでしたし、今もありません。どなたか、この問題に対処する方法を教えてください。あるいは、少なくともこの2つのファイルを投げてくれますか?)

 

一般的に、私は何かを理解していないので、助けてください...。

実験のためにVMwareをインストールし、XPと7の2つのシステムをインストールしました。

そして、Matlab R2011bをインストールし、MCRをインストールし、MT5の最新ビルドをインストールした。記事に添付されたアーカイブから、アーカイブの指示に書かれているように、すべてのファイルをフォルダに分散させた。mq5ファイルをex5にコンパイルした(つまり、アーカイブ内の既存のex5ファイルを削除し、新しくコンパイルしたものをその場所に置いた)。MT5を起動し、Matlabを起動し(起動しないようにしましたが、結果は同じです)、ターミナルでTestMlEngineをクリックすると、次のように表示されます:

TestMLEngine (EURUSD,H1) 13:44:58 Cannot open 'C:◆UsersUserAppData ◆Roaming◆MetaQuotes◆Terminal◆DEA4AAFB996D79821EC8BDBADDC3C◆MQL5◆Libraries◆LibMlEngine.dll' (126)
TestMLEngine (EURUSD,H1) 13:44:58 Cannot find 'mlxClose' in 'LibMlEngine.dll'
TestMLEngine (EURUSD,H1) 13:44:58 Cannot find 'mlxOpen' in 'LibMlEngine.dll'
TestMLEngine (EURUSD,H1) 13:44:58 Cannot find 'mlxInputChar' in 'LibMlEngine.dll'
TestMLEngine (EURUSD,H1) 13:44:58 Cannot find 'mlxInputDouble' in 'LibMlEngine.dll'
TestMLEngine (EURUSD,H1) 13:44:58 Cannot find 'mlxInputInt' in 'LibMlEngine.dll'
TestMLEngine (EURUSD,H1) 13:44:58 Cannot find 'mlxInputLogical' in 'LibMlEngine.dll'
TestMLEngine (EURUSD,H1) 13:44:58 Cannot find 'mlxGetDouble' in 'LibMlEngine.dll'
TestMLEngine (EURUSD,H1) 13:44:58 Cannot find 'mlxGetInt' in 'LibMlEngine.dll'
TestMLEngine (EURUSD,H1) 13:44:58 Cannot find 'mlxGetLogical' in 'LibMlEngine.
TestMLEngine (EURUSD,H1) 13:44:58 'LibMlEngine.dll' で 'mlxGetSizeOfName' が見つかりません。

どうすればいいのかわかりません。できることはすべて試しました。MQL5用のDLLライブラリを書いて 10分でデータを交換する方法」()の記事のDLLを試して みました。(https://www.mql5.com/ru/articles/18)- 問題なく動作します。

どなたか他の方法を教えてください。私は何を間違えているのでしょうか?


Как за 10 минут написать DLL библиотеку для MQL5 и обмениваться данными?
Как за 10 минут написать DLL библиотеку для MQL5 и обмениваться данными?
  • 2010.01.27
  • MetaQuotes Software Corp.
  • www.mql5.com
Так уж сложилось, что сейчас мало кто из разработчиков помнит, как написать простую DLL библиотеку и в чем особенности связывания разнородных систем. Я постараюсь за 10 минут на примерах продемонстрировать весь процесс создания простых DLL библиотек и раскрою некоторые технические детали нашей реализации связывания. Покажу пошаговый процесс создания DLL библиотеки в Visual Studio с примерами передачи разных типов переменных (числа, массивы, строки и т.д.) и защиту клиентского терминала от падений в пользовательских DLL.
 
neuro_robot:

Matlabをインストールしたとき、Systemのパスが「C:C:˶Program FilesMATLAB˶R2011b˶bin」しかなかった。C:⇄Program FilesMATLAB⇄R2011b⇄bin⇄win32」を追加した。MatlabディレクトリのDllが見えるようになり、Matlab Engineが起動した。その前にdllが見えないと書いた。

Path環境変数のことなら、そこに「C:˶Program FilesMATLAB🏠R2011bbin🏠win32」を追加してみたけど、状況は変わらず:-(
 
H_F_M:
Pathの環境変数のことなら、"C:¥Program Files¥MATLAB¥R2011b¥bin¥win32" を追加したんですが、状況は変わりませんでした :-(
それ以外にも、いくつかのDLLライブラリが見つからない。depends.exeで、起動に何が足りないか調べてみよう。