[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
print関数でTerminalに文字列を出力することができます。
C:\ForexTester2\LOGS\ForexTester.log にも同じ内容が記録されます。
Init関数、Calculate関数が呼ばれるタイミング、
Calculate関数の引数indexの値、
HOURバッファの初期値、
ロウソク足増加時のバッファの変化について確認しました。
library HourDisp; uses SysUtils, Interfaces, DateUtils, graphics, IndicatorInterfaceUnit, TechnicalFunctions; var HOUR: TIndexBuffer; procedure Init; stdcall; begin print('initinit'); IndicatorShortName('Hour'); SetOutputWindow(ow_SeparateWindow); SetFixedMinMaxValues(-1, 24); SetEmptyValue(100); AddLevel(13, psDashDot, 1, clYellow); AddLevel(20, psDot, 1, clBlue); HOUR := CreateIndexBuffer; IndicatorBuffers(1); SetIndexBuffer(0, HOUR); end; procedure Calculate(index: integer); stdcall; begin if HOUR[index] < 24 then exit; HOUR[index] := HourOf(Time(index)); print('index='+IntToStr(index)+ ' | HOUR[2]='+FloatToStr(HOUR[2])+ ' | HOUR[1]='+FloatToStr(HOUR[1])+ ' | HOUR[0]='+FloatToStr(HOUR[0])); end; exports Init, Calculate; end.
実行した結果です。
最初にInit関数を実行しています。
バッファの初期値が100となっているので
SetEmptyValue関数で設定した値がバッファの初期値のようです。
Calculate関数の引数を9から0にデクリメントしながら10回実行しています。
右端がHOUR[0]になるようです。
ローソク足が1本増えると元々のHOUR[0]の値がHOUR[1]にコピーされています。
左端がHOUR[10]となって右端がHOUR[0]となっています。
勝手にシフトされているようです。
if HOUR[index] < 24 then exit;
この処理で設定済みのバッファは上書きしないようにしています。
Calculate関数が毎分実行されて
Logが多くなるのを防いでいます。
間違えているかもしれませんが前回のコードの説明を少しします。
DateUtils は時間を扱う関数を使用するので記述しています。
HOUR というグローバルのバッファに表示する値(0-23)をいれます。
Init関数はインディケーター読み出し時に実行されます。
何故か Forex Testerを起動した時にも呼ばれています。
ow_SeparateWindow でオシレーターウィンドウに表示しします。
ちなみにow_ChartWindowでチャートウィンドウに表示します。
SetFixedMinMaxValues で上限と下限を指定します。
時刻をバッファに設定しています。
CreateIndexBufferでバッファオブジェクトを作成します。
IndicatorBuffers でインディケーターの数を指定します。
SetIndexBuffer でインディケーターとバッファを結び付けます。
Calculate関数はローソク足完成時とローソク足が変化した時に実行されます。
前回の0時の線が表示されなかったのは
SetEmptyValue関数を実行していなかったのでSetEmptyValue(0)となっていたからです。
この関数で設定した値とバッファの値が等しい時は線を表示しない仕様のようです。
SetEmptyValue(24) とした結果です。0時も表示できました。
SetEmptyValue(6)で以下のようになります。
SetEmptyValueは1度実行するだけなのでInitに追加しました。
その1 その3
まずは簡単なインディケーターから作成してみます。
オシレーターウィンドウにロウソク足の完成した時刻を表示させてみます。
コードは以下です。
library HourDisp; uses Interfaces, DateUtils, graphics, IndicatorInterfaceUnit, TechnicalFunctions; var HOUR: TIndexBuffer; procedure Init; stdcall; begin IndicatorShortName('Hour'); SetOutputWindow(ow_SeparateWindow); SetFixedMinMaxValues(-1, 24); HOUR := CreateIndexBuffer; IndicatorBuffers(1); SetIndexBuffer(0, HOUR); end; procedure Calculate(index: integer); stdcall; begin HOUR[index] := HourOf(Time(index)); end; exports Init, Calculate; end.
Forex Testerを起動してインディケーターを追加すると
勝手に線の種類と色を選択できるようになっていました。親切設計です。
15分足で表示してみました。4本毎に1ずつ増えています。でも0時の時に線が表示されていません。
その2 その3
ライブラリのサイズが大きかったので小さくできないかいじってみました。
前回作成した MovingAverage.dll は11825KB でした。
もともと入っている MovingAverage.dll は97kBです。
コンパイラオプションを変更してみました。
11825KBが1468KBになりました。
97KBと比べると大きすぎますが仕方ないこととあきらめます。
最初から入っているコードを実際にコンパイルしてみましょう。
コードの準備
今回はMoving Averageをコンパイルしてみます。
C:\ForexTester2\Examples\Indicators\Delphi の中にコンパイル用のファイルが入っているので新規フォルダにコピーします。
どこでもいいのですが
C:\ForexTester2\Examples\Indicators\Delphi\test を作成してそこに3つファイルをコピーしました。
ほかのテクニカル指標のコードはC:\ForexTester2\Examples\Indicators\Delphi\IndicatorsSrc の中に入っています。
*.pas はどのテクニカル指標をコンパイルする時でも必要と思われます。特に変更は加えません。
*.dpr が指標のコードです。
Lazarusを起動します。
最初に表示されるプロジェクトを閉じましょう。
ファイルから新規プロジェクト... を選択してMovingAverage.dpr を選択しましょう。
Noをクリックします。
ライブラリを選択します。
コードが表示されます。既存のMovingAverageとダブらないように少し変更します。
4行目 ライブラリ名を変更 library MovingAverageTest;
20行目 インディケーター名を変更 IndicatorShortName('Moving average TEST');
パッケージを追加します。
+をクリックします。
LCLを選択します。
追加されました。
コンパイルオプションを変更します。
Delphiを選びます。
コンパイルしてみます。すべて構築 を選びます。
エラーになりました。
コードを変更します。 7行目を追加しました。
再試行するとコンパイル成功しました。
MovingAverage.dllができています。 ほかの追加されたファイルは無視です。
名前をMovingAverageText.dllに変更してC:\ForexTester2\Indicators にコピーします。
Forex Testerを起動してインディケーター追加を確認すると追加されています。
lazarus-0.9.28.2-fpc-2.2.4-win32.exe を実行します。
インストール先の指定です。変えないほうがいいと思います。
関連付けは好きでないので全部解除しました。お好きにどうぞ。
スタートメニューのフォルダ名です。お好きにどうぞ。
デスクトップにアイコンを作りません。お好きにどうぞ。
インストールの確認です。
インストール中画面です。
インストール終了画面です。
特に迷わなかったです。
C++ か Borland Delphi (Object Pascal)でプログラムを書いてdllを作成する必要があります。
私はC言語とC#言語を少し知っているのですが全く知らないPascalを利用することにします。
無料でDelphiのコードをコンパイルできるLazarusという統合開発環境(IDE)を利用します。
インストールは
http://sourceforge.net/projects/lazarus/files/
から
lazarus-0.9.28.2-fpc-2.2.4-win32.exe
をダウンロードしてインストールしました。
forex testerとMeta Trader4 は同じ開発者です。なので画面は似ています。
Meta Trader4 と同様にプログラムで自分好みのテクニカル指標を表示したり自動売買させることも可能です。
普通にfx業者のチャートツールで過去のチャートを眺めるのでは出来上がったチャートを見ているだけですが
forex testerではチャートの右端で次にどうなるかわからない状態で決断する必要があります。
ローソク足の出来上がる過程も見えます。1時間足を例えば15分ずつの4段階や5分ずつの12段階で作成させることも可能なのでより現実に近いです。
ここでは1時間足でのことを話しますが実時間では1時間足が1日に24本ずつしか作成されません。
ところがforex testerでは1秒に1本以上の速さで作成されていきます。作成速度は調整可能です。
実時間で経験しようと思えば24時間必要なことがforex testerでは24秒で経験できるのです。
3600倍の速さで経験値が増えることになるのです。これを利用しない手はありません。
24時間チャートを眺めることはほぼ不可能ですが24秒なら眺めれると思います。
forex tester での売買はチャート上に印が残るためあとで仕掛けと決済の場所を確認することも可能です。
forex testerは海外のソフトなのですがインストールや過去データのインポート方法を紹介している人が日本にもたくさん存在するのでそちらを探してください。
私はテクニカル指標のプログラミングやテスト結果を中心にしていきたいです。
03 | 2025/04 | 05 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
自分で売買ルールを作成してテストして自信をもってリアルトレードしたいです。