当サイトは、アフィリエイト広告を利用しています

JForexプログラミング入門その4-設定可能外部パラメーターの使い方

JForexプログラミング入門

今回は、ユーザーがプログラムの外から変数の中身を設定可能な外部パラメーターをストラテジーで使用する方法を解説します。

外部パラメーターを定義しておけば、ライブトレードやバックテストでストラテジーを開始する前にパラメーター定義ダイアログが表示され、プログラムを変更することなくストラテジーの挙動を変更することができます。

また、ストラテジーの最適化を行う際はこの外部パラメーターを使用して行うことになります。

外部パラメーターの定義方法

ユーザーが後から変更可能な外部パラメーターを使用するには、publicで宣言したメンバ変数の直前に「@Configurable」表記で注釈をつけます。

@Configurableの後ろにはカッコと二重引用符を使用してパラメーター名を定義します。

上のコードのようにInstrument型を外部パラメーターに指定すると、通貨ペア名を選択可能なドロップダウンリストを表示できます。

デフォルト値として、「EURUSD」を指定しているので、ストラテジー実行直後に表示されるダイアログは下記のようになります。

jforexprog4-1

「@Configurable」の指定で、下記のようにvalueやdescription、obligatory 等を指定すれば、パラメーター名の設定だけではなく、パラメーターの説明文を指定したり、必須パラメーターとして指定することもできます。

valueにはパラメーター名を、descriptionにはパラメーターの説明文を設定します。

また、obligatoryにtrueを指定するとパラメーターを必須パラメーターにすることができます。

上のコードでストラテジーを実行すると下記のダイアログが表示されます。

jforexprog4-2

valueで指定した文字列「通貨ペア名」がパラメーター名として表示され、descriptionで設定した文字列が、パラメーター名の上にマウスカーソルを乗せた際に表示されるツールチップ内に表示されます。

今回は、外部パラメーターを初期化していないので通貨ペア名のリストボックスは空白となっています。

obligatoryをtrueに設定したため、通貨ペア名のリストボックスが空白のまま「起動」ボタンを押した場合、下記のように必須パラメーターが設定されてないというエラーダイアログが表示されます。

jforexprog4-3

「@Configurable」の指定で「readonly」をtrueに設定すると、変更不可能な外部パラメーターとして定義できます。

ユーザーに設定情報は見せたいけれど変更はさせたくない場合等に使用します。

例えば、ストラテジーのタイムフレームとしては15分足を使用しますとユーザーに明示だけしたい場合は以下のように記述できます。

readOnlyにtrueを指定しているため、パラメーター定義ダイアログではタイムフレーム値は変更できなくなります。

jforexprog4-4

数値を外部パラメーターにすると、パラメーター定義ダイアログには上下ボタン付き数値入力コントロールが表示されます。

「@Configurable」の指定で「stepsize」を設定すると、数値入力コントロールの上下ボタンを押した際の変動量を指定できます。

stepsizeを指定しなければ上下ボタンを押した際に1ずつ変動しますが、以下のように記述すれば、0.01ずつ変動させることができます。

jforexprog4-5

サポートしているパラメータータイプ

以下は、JForexでサポートされているパラメーターのタイプ一覧です。

パラメータータイプ Java言語での型 パラメーター定義ダイアログ上のコントロール
数値 int, double, short, long, Integer, Double, Short, Long  上下ボタン付き数値入力コントロール
ブーリアン(真理値) boolean, Boolean  チェックボックス
文字 String  テキストボックス
ファイル java.util.File ファイルパス選択機能付きテキストフィールド
日付 java.util.Calendar, java.util.Date, long and Long with Configurable.datetimeAsLong = true  日付選択ボックス
java.util.Color  色選択コントロール
列挙 any enum or Enum or a class containing self-typed public static final fields  単一選択コンボボックス
コレクション java.util.Collection of any enum or Enum or a class containing self-typed public static final fields  複数選択ダイアログ
IFeedDescriptor  IFeedDescriptor implementations from com.dukascopy.api.feed.util  Data feed選択ダイアログ

サポートしているパラメータータイプを全部使ってみるとこんな感じになります。

jforexprog4-6

ソースは以下です。黄色くハイライトさせた部分がスケルトンコードへ追記した箇所です。

日付に特定の日を設定する

外部パラメーターで日付を扱う際、初期値として特定の日をセットしたい時があります。

Calenderオブジェクトは日付を初期化するコンストラクタがないため、特定日時をセットするには、静的初期化ブロックを用いてオブジェクトを初期化します。

外部パラメータとして使用するカレンダー型変数に初期化したオブジェクトをコピーすれば、設定した初期値をパラメーター定義ダイアログに表示できます。

実行すると以下のように初期化した値で表示されます。

jforexprog4-7

日時をミリ秒で指定する方法もあります。

ミリ秒指定を使用するには、ミリ秒値を格納するlong型変数を定義し、@Configurableのパラメータに「datetimeAsLong = true」を記述します。

以下は当日の21時をデフォルト値として表示させる例です。

カレンダーオブジェクトを初期化し、カレンダーオブジェクトのgetTimeInMilis関数でミリ秒を取得して、long型の変数に格納しています。

実行するとこうなります。

jforexprog4-8

まとめ

今回は、外部パラメーターの定義方法について解説しました。

基本的に、大概のストラテジーは外部パラメータを利用して作成すると思いますので、必ず理解しておきましょう。

コメント