コードエディタ

このマニュアルでは、JForex4 に組み込まれているコードエディタ(Code Editor)を使用して、ストラテジー、インジケーター、プラグインのソースコードを作成、開く、編集する方法、および変更をコンパイル・保存する方法について説明します。

名称変更: このツールは以前「Strategy Editor(ストラテジーエディタ)」と呼ばれていました。ストラテジーだけでなく、インジケーターやプラグインの編集にも使用されるため、現在はコードエディタと呼ばれています。


1. エディタを開く

コードエディタには次の 2 つの方法でアクセスできます。

  • 新規コードの作成: Navigator(ナビゲーター)パネル(左下)で該当のノード——StrategiesIndicatorsPlugins(またはそれぞれの Custom サブノード)——を右クリックし、New StrategyNew IndicatorNew Plugin のいずれかを選択します。プラットフォームが適切な雛形を持つ新しい .java ファイルを生成し、エディタで直接開きます。
  • 既存コードの編集: Navigator または対応するパネルで、ストラテジー、インジケーター、プラグインを右クリックし、Edit を選択します。これにより、そのソースファイル(.java)がエディタで開かれます。コンパイル済みの .jfx ファイルのみが存在し、ソースコードが存在しない場合は編集できません——編集するには元の .java ファイルが必要です。

注:新規ファイルはデフォルトで JCloud に保存されます。ファイルをカスタム名で保存した場合は、ファイル内の Java のクラス名もそれに合わせて変更することを忘れないでください——コンパイルを成功させるには、クラス名とファイル名が一致している必要があります。

2. コードの雛形を理解する

生成される雛形は、作成しようとした対象によって異なります。

  • New StrategyIStrategy を実装するクラスを生成します。
  • New IndicatorIIndicator を実装するクラスを生成します。
  • New PluginIPlugin を実装するクラスを生成します。

本マニュアルの以降の部分では、主にストラテジーの編集を例として扱いますが、同じエディタの操作手順(開く、編集する、コンパイルする、保存する)はインジケーターやプラグインにも同様に適用されます——異なるのは、コンパイル後の起動方法のみです(第 6 節を参照)。

すべてのストラテジーIStrategy を実装する Java クラスであり、コンパイルに必要な最低限のメソッドセットは次のとおりです。

package jforex;
import com.dukascopy.api.*;

public class Strategy1 implements IStrategy {
    public void onStart(IContext context) throws JFException {}
    public void onAccount(IAccount account) throws JFException {}
    public void onMessage(IMessage message) throws JFException {}
    public void onStop() throws JFException {}
    public void onTick(Instrument instr, ITick tick) throws JFException {}
    public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {}
}
メソッド 用途
onStart ストラテジー起動時に一度だけ実行されます——初期化、通貨ペア(インストゥルメント)の購読、IContext/IConsole の保存などを行います。
onTick 購読中のインストゥルメントに新しいティックが着信するたびに実行されます。
onBar 購読中のインストゥルメント/時間足で新しいバーが確定するたびに実行されます。
onAccount 口座状態(残高、有効証拠金、マージンなど)が変化したときに実行されます。
onMessage 注文/ポジションのライフサイクルイベント(約定、拒否など)が発生したときに実行されます。
onStop ストラテジー停止時に一度だけ実行されます——クリーンアップ処理を行います。

インジケーターとプラグインには、それぞれ独自の必須インターフェースメソッドがあります(例:IIndicatorcalculate())。コードエディタは、手順 1 で選択した「New ...」オプションに応じて、適切なメソッドのひな型を自動的に生成します。

3. コードを編集する

エディタペイン内で直接作業し、該当するライフサイクルメソッド内にロジックを追加します。例として、ストラテジー内で受信したティックをログに出力する場合:

package jforex;
import com.dukascopy.api.*;

public class Strategy1 implements IStrategy {
    private IConsole con = null;

    public void onStart(IContext context) throws JFException {
        // store the console for printing to the Messages tab
        this.con = context.getConsole();
    }

    public void onAccount(IAccount account) throws JFException {}
    public void onMessage(IMessage message) throws JFException {}
    public void onStop() throws JFException {}

    public void onTick(Instrument instr, ITick tick) throws JFException {
        con.getOut().println(instr + " " + tick.getAsk() + "/" + tick.getBid());
    }

    public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {}
}

この段階でよく行われる編集には、次のようなものがあります。

  • @Configurable を付けた public フィールドを追加し、ストラテジー、インジケーター、プラグインを実行する際に Define Parameters(パラメータ定義)ダイアログでパラメータを表示できるようにする。
  • onTickonBar、または(ストラテジーの場合)onStart 内に注文ロジック(成行注文/条件付注文、ストップロス/テイクプロフィットなど)を追加する。
  • カスタムのインジケーター計算を追加したり、組み込みインジケーターを参照したりする。

ヒント:ストラテジーをリモート(remote)で実行する予定がある場合、ストラテジーが使用するカスタムインジケータークラスは、同じファイル内で定義する必要があります——リモート環境では、別個のローカルクラスファイルを読み込むことができません。これは、インジケーターやプラグインが使用するヘルパークラスにも同様に当てはまります。

4. 変更をコンパイルする

編集後、次のいずれかの方法でファイルをコンパイルします。

  • コードエディタのツールバーにある Compile ボタンを使用する、または
  • キーボードショートカット F5 を使用する、または
  • 対応する Navigator のリストでストラテジー、インジケーター、プラグインを右クリックし、Compile を選択する。

コンパイルの結果は Messages タブに表示されます。

  • Compiling... OK——コードが正常にコンパイルされ、.java ソースファイルと同じ場所に対応する .jfx ファイルが保存されたことを示します。
  • エラー詳細——コンパイルに失敗した場合、Messages タブに具体的なエラー(行番号、構文エラーなど)が一覧表示されるため、エディタ内で該当箇所を特定して修正できます。

5. 作業内容を保存する

  • 通常の保存(Ctrl+S またはツールバーの Save ボタン)を行うと、変更内容が .java ソースファイルに書き込まれます。
  • Save As を使って新しいファイル名で保存した場合は、その後ファイルを開き、public class の宣言を新しいファイル名に合わせて変更してください——Java では、public クラス名とファイル名が一致している必要があります。

6. 編集したコードを実行する

コンパイル後に編集したコードをどのように起動するかは、編集した成果物の種類(ストラテジー、インジケーター、プラグイン)によって異なります。JForex4 ではそれぞれに異なる起動方法があります。

  • ストラテジーLocal run(ローカル実行)または Remote run(リモート実行)によって起動します。

    1. Navigator 内でストラテジーを左クリックするか、Strategies パネルで選択します。
    2. Local run または Remote run を選択します(各モードの違いは以下を参照)。
    3. プロンプトが表示された場合は Define Parameters ダイアログでパラメータを設定し、Run をクリックします。
    モード 編集したコードに関する注意点
    Local run ローカルファイル、他の Java クラス、チャートに完全にアクセスできます——アクティブにデバッグする際に便利です。
    Remote run Dukascopy サーバー上で実行されます。ファイルシステムへのアクセスはできず、チャートへのアクセスもできません(IContext.getChart()null を返します)。すべてのインストゥルメントは onStart 内で明示的に購読する必要があり、カスタムインジケーターはストラテジーファイル内に自己完結している必要があります。

    Dukascopy サーバー上での Remote run に対応しているのはストラテジーのみです。インジケーターとプラグインにはリモート実行モードはありません。

  • インジケーターは、ストラテジーのように「実行」されるものではなく、代わりにチャートに追加されます。Navigator または Indicators パネルでコンパイル済みのインジケーターを選択し、開いているチャートに追加します(例:ドラッグ&ドロップ、ダブルクリック、チャートのインジケーターメニューなど)。これにより、ライブまたは過去の価格データに基づいて計算・プロットされる様子を確認できます。@Configurable パラメータは、チャート上のインジケーターの設定ダイアログで設定します。

  • プラグインは、チャートに関連付けられたりリモートで実行されたりするのではなく、プラットフォーム内部で起動されます。Navigator または Plugins パネルでコンパイル済みのプラグインを選択し、直接起動します。設計に応じて、プラットフォームの UI やワークスペースと統合される形で、JForex4 アプリケーション内で動作します。


編集時のベストプラクティス

  • 本格的な開発には外部 IDE を使用する。 JForex4 に組み込まれたコードエディタは簡単な修正には便利ですが、Eclipse、IntelliJ IDEA、NetBeans といった IDE では、コンパイルを試す前にミスを検出できるリアルタイムのエラーチェック、オートコンプリート、リファクタリング機能を利用できます。
  • 意味のある変更を行うたびに再コンパイルし、Messages タブを確認してください——保存が成功したからといって、コンパイルが通ったと思い込まないでください。
  • まずデモ口座でテストする。 発注やリスクパラメータに影響するストラテジーロジックを編集した後は、必ずヒストリカルテスター(Historical Tester)でバックテストを行い、デモ環境でテストしてから実運用に移してください。
  • 大きな編集を行う前に、動作確認済みのバージョンをバックアップしておく。 エディタは保存時に .java ファイルを直接上書きするためです。
  • ストラテジー、インジケーター、プラグインのファイルを名前変更または複製するたびに、ファイル名とクラス名を一致させて、コンパイルエラーを避けてください。