エージェントの初期化と実行の流れ

エージェントの初期化と実行の流れを以下に示します。
バックテストを開始した場合や、エージェントをリアルトレードに登録した場合、以下の順番でエージェントのメソッドが呼び出されます。

エージェントの初期化と実行の流れ

1. コンストラクタ ( initialize() )

  • エージェントクラスのコンストラクタが実行され、インスタンスを生成します。
※コンストラクタ内では、brokerやloggerといった依存コンポーネントは、利用できません。 依存コンポーネントが必要な初期化処理は、 5. 初期化処理の実行(post_create()) で行ってください。

2. プロパティの設定 ( properties=(properties) )

  • エージェントの登録画面で設定したプロパティを、エージェントに設定します。
  • プロパティは、「プロパティIDをキー、プロパティ値を値とするハッシュ」で渡されます。
  • デフォルトの実装は以下の通りで、各キーの値をエージェントのインスタンス変数に設定するようになっています。 オーバーライドして任意の処理を行うことも可能です。
def properties=( properties )
  @properties = properties
  properties.each_pair {|k,v|
    instance_variable_set("@#{k}", v)
  }
end
※プロパティの値は文字列型で渡されます。数値等への変換は、エージェントで行ってください。

3. 依存コンポーネントの設定( broker=(broker), logger=(logger) ..etc.. )

  • エージェントに依存コンポーネントを設定します。
    • broker .. 取引や決済など、証券会社へのアクセスを提供するコンポーネントです。
    • graph_factory .. エージェントでグラフを描画する際に使用します。
    • notifier .. メール、Push通知を送信するときに利用します。
    • logger .. デバッグ用のログを出力するときに使用します。

4. 初期化処理の実行 ( post_create() )

  • プロパティ、依存コンポーネントの設定が終わったタイミングで、post_create が呼び出されます。
  • 初期化はコンストラクタで行うことも可能ですが、post_createであれば、loggerなどの依存コンポーネントを利用できます。

5. 状態の復元 ( restore_state(state) ) ※状態が保存されている場合のみ

  • システムの再起動等で状態が保存されていた場合、restore_state(state) で状態の復元が行われます。
  • デフォルトの実装は空なので、必要に応じでオーバーライドして実装してください。

6. レート情報の処理 ( next_tick(tick) )

  • 初期化が終わると、システムにより15秒ごとに next_tick(tick) が実行されます。
  • オーバーライドして、取引やPush通知を行うロジックを実装してください。
  • 引数でレート情報が渡されます。以下のようなコードで情報にアクセス可能です。
value = tick[:EURJPY]
value.bid    # EURJPY の bidレート
value.ask    # EURJPY の askレート

value = tick[:USDJPY]
value.bid    # USDJPY の bidレート
value.ask    # USDJPY の askレート

7. (システムが停止された場合) 状態の読み出しと保存 ( state() )

  • システムが停止された場合、state で状態の読み出しが行われます。
  • 返却された状態はシステムで保存され、次回システムを再起動した際に、restore_state(state) の引数として渡されます。
  • デフォルトの実装は、空のハッシュを返すようになっています。必要に応じてオーバーライドしてください。
※状態は、 Mongoid#Hash として永続化されます。Hashに格納できない型を返却すると永続化に失敗しますのでご注意ください。
  • 文字列や数値型であれば、問題ありません。
  • BigDecimalは、文字列型に変換されてしまいます。ご注意ください。
また、Hashのキーには .を含めることはできません。


各メソッドの詳細はAPIリファレンスを参照ください。