こんにちは
わたしは為替のバックテストと検証に、ForexTester 2(以下FT2)という有料のソフトウェアを使っていて、
実際のトレードはMetaTrader 4(以下MT4)を使っています。
これらのソフトウェアは、プログラムの知識があれば、テクニカル分析に用いることのできるインジケーターや、自動売買用のプログラム(EA; Expert Advisor)を自作することができます。
MT4の場合は、本体インストール時にコンパイラも同時にインストールされ、プログラミング言語といっても習得が容易なオリジナル言語MQL4でより容易にプログラムすることができ、ソースコードが公開されていることも多いのですが、FT2の場合はC++またはPascalを使って、これらのdllを作る必要があります。
普段Mac使いなこともあって、数年ぶりにこれらの開発環境を整えるときに躓いたことがあったので、備忘録として手順を書き留めようと思います。
ちなみに、言語はPascalでもC++でもどちらでも良いと思います。C++は後で別に記事にするつもりです。プログラミング初学者で、どちらの言語も触れたことがない方であればPascalの方が私は楽だと思います。
ただし、DLLファイルの容量がC++でビルドした方が小さくなります。気になる方はC++が良いかもしれません。
Contents
環境
- Windows 10 64 bit
 - Lazarus 1.6 RC1
 - ForexTester 2 v2.9.6
 
コンパイラのインストール
今回、コンパイラにはLazarusを使おうと思います。
http://sourceforge.net/projects/lazarus/files/
上のリンクから、自分のマシンに合うものをインストールしてきてください。
今回はWindows 10 64bit上でビルドを行いますので、 Lazarus Windows 64 bits / Lazarus 1.6RC1 にある lazarus-1.6RC1-fpc-3.0.0-win64.exe を使います。
また、FT2は32bit用のdllしか読み込めませんので、クロスビルド用の lazarus-1.6RC1-fpc-3.0.0-cross-i386-win32-win64.exe も必要になります。
これらを順番にインストールしてください。
注意として、インストール先のディレクトリパスに日本語やスペースが含まれているとビルドできないことがありますので、大人しくデフォルトのCドライブ直下に入れるのがお勧めです。
プログラムの準備
今回は環境構築を目指すので、インジケーターはFT2同梱のサンプルを用います。
FT2のインストールディレクトリ下のExamples/Indicators/Delphiにある、拡張子がpasのファイル2つと、IndicatorsSrcというディレクトリに入っているサンプルの中から一つファイルを選びます。
今回はRSIを使ってみることにします。
- Examples/Indicators/Delphi/IndicatorInterfaceUnit.pas
 - Examples/Indicators/Delphi/TechnicalFunctions.pas
 - Examples/Indicators/Delphi/IndicatorsSrc/RSI.dpr
 
上の3つのファイルを、適当な場所にディレクトリを作ってコピーしてきてください。
今回はMyRSIというディレクトリを、Examples/Indicators/Delphiの中に作りました。
オリジナルのRSIと区別するために、RSI.dprをMyRSI.dprにリネームします。
- MyRSI/IndicatorInterfaceUnit.pas
 - MyRSI/TechnicalFunctions.pas
 - MyRSI/MyRSI. deeper
 
プロジェクトの作成
次にインストールしておいたコンパイラのLazarusを起動します。
何かファイルが開かれている場合は、 File->Close All で閉じます。
File->Open を選んで、MyRSI.dprを選択して開きます。このとき、ファイルが表示されない場合は右下の拡張子フィルタを All files (*.*) に変更してください。
Program detected というダイアログは Yes をクリックします。
既存のプロジェクトを保存するか問われるダイアログでは、必要なければNoを選択します。
Create a new projectダイアログでは、プロジェクトの種類を選択します。今回はDLLですので、Libraryを選択してOKをクリックします。
コンパイルオプションの設定
Project->Project Options … を開きます。
Compiler OptionsのConfig and Targetを開いて、Target Platformを次の通り変更します。これは、Win32用のDLLを出力する設定です。
- Target platform
- Target OS (-T): Win32
 - Target CPU family (-P): i386
 - Target processor (-Cp): 386/486 (-Cp80386)
 
 
Parsingを開いて、Syntax modeを Delphi (-Mdelphi) に変更します。
Compilation and Linkinを開いて、LinkingのLink smart (-XX) をチェックします。
Debuggingを開いて、次の2点を変更します。
- Info for GDB
- Display line numbers in run-time error backtraces (-gl): チェックを外す
 
 - Other debugging info
- Strip symbols from executable (-Xs): チェックする
 
 
すべて終わったら、右下のOKで閉じます。
LCLライブラリを追加
Project->Project Inspector … を開きます。
左上の Add >> ボタンを押して、 New Requirement をクリックします。
Add to Projectウィンドウの Package Name に LCL を入力して、 Create New Requirement を押します。
Project Inspector の Required Packages に LCL が表示されていればOKです。
ソースコードの編集
今回はRSIのソースをビルドしていますので、特に変更を加えなくともビルドは可能です。
ただし、FT2はデフォルトでRSIのインジケーターが入っていますので、取り込んだときに同名のインジケーターが2つ表示されややこしいので、インジケーター名だけを変更することにします。
Source Editorウィンドウを開いて、24行目の IndicatorShortName 関数の引数を MyRSI に変更して保存します。
ビルドして使ってみる
いよいよコンパイルです。祈りながらRun->Buildをクリックしましょう。
成功すれば次のようなメッセージが表示されます。
もし Error: ppc386.exe can't be executed~ というエラーになった場合は、クロスコンパイル用の追加バイナリがインストールされていないので、エントリの最初の方を見直してインストールしてきてください。
ビルドが成功すれば、MyRSIのディレクトリの中に MyRSI.dll が作られているので、これをFT2のファイル->インストール->インジケーターをインストールから読み込めばFT2で使えるようになります。
FT2で読み込むときにエラーが発生した場合は、Lazarusで設定した Target Platform 周りを再度確認してみてください。例えば、64bitでコンパイルされたDLLは読み込みに失敗します。
FT2で読み込んだインジケーターは、デフォルトのインジケーターと同じように使うことができます。
チャートを右クリックしてインジケーターの追加を選択すると、一番下にインストールしたインジケーターが表示されているので表示してみましょう。
お疲れ様でした。この手順を踏むと、MT4のインジケーターやEA製作がとても楽で素晴らしい機能に思えてきます。
でも、折角FT2を持っているのであれば、MT4で実戦に入る前に同じインジケーターを使ってFT2で練習を重ねておきましょう。
是非挑戦してみてください。
所感
ここまで書きながら実際作っていたのですが、今回はFT2に移植したいMT4のソースがC++だったので、PascalよりもC++でビルドし直すことに決めました。
C++でFT2のインジケーターを作るための環境構築は次のエントリで書こうと思います。














