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

JForexプログラミング入門その2-ストラテジーの骨格を知ろう

JForexプログラミング入門

今回は、JForexストラテジーのスケルトンコードを使用してJForexストラテジーの骨格(構造)について解説していきます。

JForexストラテジーの骨格

以下は、JForexでストラテジーを新規追加した直後のスケルトンコードです。

このコードは正常にコンパイルでき、実行することもできますが、何も実装していないため実行しても何の機能も果たしません。

JForexストラテジーは、IStrategyというインターフェースを使用して作成します。

スケルトンコード7行目で、作成するストラテジーのクラスに対して「IStrategy」インターフェースを適用しています。

そして、8~13行目でオブジェクトの参照を格納するためのメンバ変数の宣言を行っています。

それぞれのオブジェクトの役割はまたおいおい解説していきます。

「IStrategy」インターフェースには、以下の6つのコールバック関数が定義されており、プログラマはこの6つの関数をオーバーライドしてストラテジーを作成していくことになります。

  • onStart
  • onAccount
  • onMessage
  • onStop
  • onTick
  • onBar

スケルトンコードの15~37行目に上の各関数が定義されています。

各コールバック関数の役割

先ほど説明した6つのコールバック関数は、それぞれ異なる特定のタイミングで自動的にシステムから呼び出されます。

ここでは、それぞれの関数についてどのような役割があるのかを説明します。

onStart

onStart関数はストラテジーを起動したときに最初に1度だけ呼ばれる関数です。

スケルトンコードの15~22行目に記述があります。

一般的にこの関数内では変数の初期化処理等を行います。

onStart関数は、引数として「IContext」型のオブジェクトが渡されてきます。

IContextは、チャートやコンソール、ヒストリー、インジケーター、オーダーエンジン等のJForexシステムの様々なコンポーネントにアクセスできます。

スケルトンコードでは作成しているストラテジークラスに宣言した各メンバ変数にIContextから取得したオブジェクトへの参照をコピーしています。

onAccount

onAccount関数は、 Account Info(アカウント情報)の更新があった際に呼ばれる関数です。

例えば、オープンポジションを持っている場合は、レートが変動すればEquity(純資産)も変動しますが、その変動を検知すると呼ばれます。

スケルトンコードの24~25行目に記述されています。

引数に、IAccountオブジェクトが渡され、そのオブジェクトを通して純資産等のアカウント情報にアクセスできます。

ただし、取得できるEquity等の情報はリアルタイムの情報ではなく、Wikiによると約5秒毎に更新されるスナップショット情報となります。

この関数を使用して時刻を表示させてみましたが、実際は約10秒毎に呼び出されていました。

JForexツールの左下に表示されている純資産情報もonAcountの呼び出しと同じタイミングで更新されているようです。

onMessage

onMessage関数は、JForexシステムから新しいメッセージを受信した際に呼び出される関数です。

スケルトンコードの27~28行目に記述されています。

引数にImessageオブジェクトが渡され、メッセージの種類や内容にアクセスできます。

オーダーをオープンしたりクローズしたりした際にメールを送信するといった用途等で使えそうです。

onStop

onStop関数はストラテジーを停止する直前に1度だけ呼ばれる関数です。

スケルトンコードの30~31行目に記述されています。

ロジックによりますが、チャート上に表示したオブジェクトを削除する等の後処理が必要な場合等に使用します。

onTick

onTick関数は、JForexアプリの銘柄リストに登録した全ての通貨ペアのティック更新毎に呼ばれます。

スケルトンコードの33~34行目に記述されています。

引数には、通貨ペア名の列挙型である「Instrument」オブジェクトと最新のASK、BID値を取得できる「ITick」オブジェクトが渡されます。

通常はInstrumentオブジェクトで通貨ペアをフィルタリングし、価格変動があった際のロジックをここに記述していきます。

onBar

onBar関数は、JForexで利用できる一般的なタイムフレームの足が確定する度に呼び出されます。

例えば1分足が確定する度、5分足が確定する度に呼ばれます。

スケルトンコードの36~37行目に記述されています。

引数には、onTick関数と同様に「Instrument」オブジェクト、どのタイムフレームのデータなのかを示すPeriodオブジェクト、最新のASKとBIDそれぞれの「IBar」オブジェクトが渡されます。

IBarオブジェクトにアクセスすることでレートの4本値(始値、高値、安値、終値)を取得することができます。

通常、これらのオブジェクトを使って不必要な通貨ペアやタイムフレームをフィルタリングして取引ロジックを記述していきます。

利用したいタイムフレームの足の確定をまって取引を行うようなストラテジを作成する場合は、OnTick関数よりもOnBarを使用すればよいでしょう。

コメント