本記事はこの記事の導入のみの要約です。
とりあえず導入だけ読んでこれ使おうと思ったので載せておきます。
導入
データベースの使用はメタトレーダーの可能性を広げてくれます。MQLとMySQLの連携について、CodeBaseではいくつかのソリューションが示されています。
例えば、MySQL wrapper – library for MetaTrader 4は多くのプログラマが開発を始める元になったプロジェクトです。私見ですが、このソリューションの問題点はデータベースからデータを読むのに使用する特殊な配列のアロケーションにあります。
MySQL logger 1 – EA for MetaTrader 4は特殊用途に最適化されており、libmysql.dllのラッパを使用していません。そのため、これはBuild 600以降では動作しません。なぜならchar型がwchar_tに入れ替わり、TMYSQL構造体のポインタの代わりにint型を使用していることがメモリリークにつながるからです。(確保されたメモリの管理、開放がされない)
EAX_Mysql – MySQL library – library for MetaTrader 5は良い実装です。作者が使用を制限しているのが難点です。
MQLでデータベースを使いたい人には2つの手段があります。自分で開発して1つ1つ理解を深めていくか、サードパーティのソリューションを使用してその使用法を修得するかです。
私は複雑なEAを作るにあたりデータベースを使わなければならなくなり、既存のプロジェクトを検索して膨大なソリューションから学び、結局EAを「プロフェッショナル」レベルにするのにこれらの実装は役立たないことに気づきました。
さらに言えば、おかしなソリューションもありました。例えば、DML/DDLがlibmysql.dllで行われているのにSELECTはHTTPリクエストでPHPから行われているといったのものです。
多くのソリューションはデータを挿入したりオブジェクトを作るのは問題ありませんでしたが、データの取得に問題があるものが多くありました。
データ取得に配列を使用するのは非現実的で不便です。開発、デバッグ、サポートの間にクエリは変化しうるものであり、それに伴い配列の正しいメモリ管理もしなければならなくなります。これは避けたいところです。
以下で議論するMQL⇔MySQLインターフェースはOracle PL/SQLなどで用いられる典型的手法、カーソルの仕組みにもとづいています。このインターフェースはプログラミングとメンテナンスを簡単にする目的で開発され、最小コンポーネントで住むようになっています。標準ライブラリであるlibmysql.dllのラッパとインターフェース関数のセットをmqhファイルで実装しています。
コメント