ForexTester2 のインジケータを作る方法。

先日紹介した、ロブ・ブッカーさんの本によると、Forex Tester(フォレックステスター)の開発者は、MetaTraderの開発にも携わっていたと書かれています。どうりで、MT4 とForex Tester2 の画面が似ているわけですね。
Forex Tester2 は、MT4 と比べると、かゆいところに手が届く仕様になっている点も多いのですが、 MT4 に慣れきっている私にはまだ優劣つけ難いです。4時間足チャートと5分足チャートを両方開いて、休日にチャートを平日同様に動かして裁量トレードの練習をしたい人は、ForexTester 2 を使うしかないと思いますが、そうでなければ、MT4 のストラテジテスタで十分な気がします..。^^;



そんな ForexTester2 でも、MT4 同様にインジケータを作るコトができます。同様…というほど簡単ではないのですけど、将来、自作してみたい人向けにメモを残しておきます。



(1)コンパイラの導入
http://sourceforge.net/projects/lazarus/files/ から、lazarus-0.9.28.2-fpc-2.2.4-win32.exe をダウンロードして、インストールします。海外のヘタレなフリーウェアをインストールする時の鉄則は、
・インストール先はデフォルト(C:\lazarus)のまま変更しない。
・インストール先フォルダのパスに日本語や半角スペースを含めない。
という暗黙の掟がありますので、それに従って C:\lazarus に入れるのが吉です。


(2)ソースコードの準備
C:\ForexTester2\Examples\Indicators\Delphi\IndicatorsSrc
以下からお好みのインジケータのコード1つと、(例えば、BollingerBands.dpr)
C:\ForexTester2\Examples\Indicators\Delphi
から、
IndicatorInterfaceUnit.pas
TechnicalFunctions.pas
を1つのフォルダ内にコピーしておきます。


(3)プロジェクトファイルの作成
コンパイラの Lazarus を起動します。
起動後にファイルが開かれている場合は、File->Close all editor files を選んで全て閉じます。
File -> Open から、BollingerBands.dpr を選びます。

新しいプロジェクトを作りますか?と聞かれたらYes を選びます。

現在開いているプロジェクトを保存しますか?と聞かれたら No を選びます。

Create a new project ダイアログがでたら、 Library を選んでOK します。


(4)コンパイルオプションの設定
Project -> Compile options を開きます。
Parsing タブで、Syntax mode を Delphi にします。

Code タブで、Target OS を Win32 にします。

Linking タブで、
・Display Line Numbers in Run-time Error Backtraces のチェックを外します。
・Strip Symbols From Executable のチェックを入れます。
・Link Smart のチェックを入れます。

これでOKして閉じます。



(5)追加ライブラリの設定
Project -> Project Inspector を開きます。

+(プラス)ボタンを押し、New Requirement タブの Package Name で LCL を選びます。

OKすると、LCLが追加されます。

LCLの追加を忘れると

BollingerBands.dpr(1,1) Fatal: Can't find unit graphics used by BollingerBands

のエラーが起きます。


(6)ソースコードの修正
2009.12.26時点では、必ず1箇所の修正が必要で、

上図の uses の部分に Interfaces, を加えて下図のようにしてください。

この修正をしないと

BollingerBands.dpr(110,1) Error: Undefined symbol: WSRegisterCustomImageList
BollingerBands.dpr(110,1) Error: Undefined symbol: WSRegisterMenuItem
BollingerBands.dpr(110,1) Error: Undefined symbol: WSRegisterMenu
BollingerBands.dpr(110,1) Error: Undefined symbol: WSRegisterMainMenu
BollingerBands.dpr(110,1) Error: Undefined symbol: WSRegisterPopupMenu
BollingerBands.dpr(110,1) Error: Undefined symbol: WSRegisterDragImageList
BollingerBands.dpr(110,1) Error: Undefined symbol: WSRegisterControl
BollingerBands.dpr(110,1) Error: Undefined symbol: WSRegisterWinControl
BollingerBands.dpr(110,1) Error: Undefined symbol: WSRegisterGraphicControl
BollingerBands.dpr(110,1) Error: Undefined symbol: WSRegisterCustomControl
BollingerBands.dpr(110,1) Error: Undefined symbol: WSRegisterScrollingWinControl
BollingerBands.dpr(110,1) Error: Undefined symbol: WSRegisterScrollBox
BollingerBands.dpr(110,1) Error: Undefined symbol: WSRegisterCustomFrame
BollingerBands.dpr(110,1) Error: Undefined symbol: WSRegisterCustomForm
BollingerBands.dpr(110,1) Error: Undefined symbol: WSRegisterHintWindow
BollingerBands.dpr(110,1) Fatal: There were 15 errors compiling module, stopping

というエラーが発生します。




(7)コンパイルする。
Run -> Build を実行します。成功すれば、以下のメッセージが出ます。


出来上がったDLLを C:\ForexTester2\Indicators にコピーしてForexTester2を再起動すれば利用可能になります。
機能の異なるDLLを作った場合は、DLLの名前を変えれば違うインジケータとして認識されるようです。


実際に作ってみたのが、SMA基準のBollingerBands(下図、赤)で、EMA基準の青緑とは微妙に違っています。

SMA基準のBollingerBandsが欲しい人はこちらからダウンロードしてください。


Delphiコンパイルするには・・・


Delphi 2007 以前の古い Delphi をお持ちの人は、おそらく、何の苦労もなくコンパイルできると思います。
Delhhi 2009,2010 を使いたい人は、ここを参考に、PChar -> PAnsiChar , String -> AnsiString の書き換えをすればOKです。書き換えをしないと、"Bollinger Bands" というインジケータの名前が "B" だけになって動作しません。






まとめ


mq4ファイルを開いて、コンパイルボタンを押すだけでインジケータが出来上がる MetaTrader って素晴らしい!
そう思いません?笑



追記

http://blog.livedoor.jp/ahaha_fxtrader/ こちらのブログでは、ForexTester2でのストラテジ作成&テストをされているようです。かなり参考になると思うので読んでみてください。