2010年11月28日日曜日

MQL4、C++でEA開発!?

その存在を知ってからというもの、Javaでそのまま自動売買システムが構築できるというJForexが気になって仕方なかった。
MQL4は、C言語に似ているとはいえ全く同じではない。文の構造がC言語の構文と同じであったり、if文などのfor文などの命令文がC言語を踏襲しているから、とっつきやすいのは間違いない。だが、C言語のように構造化したコードを書くのは意外に難しい。
例えば構造体が使えないので明示的にデータ構造とアルゴリズムを分離することが難しい(というか、面倒である)。したがって、強く意識していないと、どんどん旧来のCOBOLやFORTRANのような手続き型言語的記述になってしまう。ちょっとした指標を追加表示するだけならこれでもいいだろうが、複雑な自動売買のプログラムを書き上げようとすると、プログラマの負担はかなり大きい。
本来、構造化プログラミングとか、オブジェクト指向プログラミングというものは、プログラムを書く人間の意識の問題なので、言語の仕様に関わらず、それらを意識して書く事は可能だ。事実、組み込み機器の開発現場では、マクロアセンブラを使って、オブジェクト指向プログラミングを行う人もいる。
しかし、本来、構造化プログラミングが可能なC言語と似ていながらそれができないMQL4と、構造化プログラミングを飛び越してバリバリのオブジェクト指向プログラミングが可能なJavaを比較すると、圧倒的にJavaで開発を進める方が有利である。
オブジェクト指向型の言語では、データ構造とアルゴリズムを明示的に分離する構造化の考え方を更に1歩進めて、オブジェクトを生成するためのクラスという概念が導入されている。クラスを使えば、データ構造と、そのデータ構造を扱うためのアルゴリズムを1つにパックして扱うことができる。そうすれば、プログラマは、1つのクラスを作っているときは、そのクラスにだけ集中できるし、データ構造を変えたときには、そのクラスの中のアルゴリズムを修正するだけで他に影響を与えなくて済む。
ただ、そのあたりはMetaTraderの開発元のMetaQuotesも黙って放置しているわけではなく、MQL5では構造体やクラスが使えるように拡張されている。しかし、MQL5を使うには、MetaTrader5を使うしかなく、これが使えるかどうかを決めるのは我々EAの開発側ではなく、FX業者である。
しかも、MQL5が機能拡張されたとはいえ、C++と同じになることはなく、また新たな言語の仕様を学習するのは面倒である。
したがって、JForexの優位性はますます高まるかと思っていたが、そもそも、そんな言語仕様に縛られる必要がないことを思い出した。MetaTraderは、dllを読み込むことができる。
C++だろうが、FORTRANだろうが、コンパイルしてWindowsのdll形式にしてしまえば、MQL4からdllの中の関数を呼び出すことができるのだ。
しかも、MinGWを使えば、我々のようなLinuxユーザでもWindows形式のdllをLinux上で開発可能なのである。更に、うまくすれば、Linux上のさまざまな機能と連携できるかもしれない。
こうなると、基本的にグラフィカルなインターフェースを基本に設計されているWindows向けのプログラムより、基本的にテキストベースでアクセス可能なLinux(UNIX)プログラムのほうが、連携しやすいかもしれない。
もちろん、JavaからもC++などで作られたネイティブプログラムやネイティブライブラリにアクセスすることは可能だが、その面では特に優劣の差はなく対等であるともいえる。
これからは、C++でEAを書くのが主流になるかもしれない。

0 件のコメント:

コメントを投稿