unageanu / jiji2

Forex algorithmic trading framework using OANDA REST API.
http://jiji2.unageanu.net/
238 stars 54 forks source link

バックテストの一括登録 #86

Open Yasushi-cc opened 8 years ago

Yasushi-cc commented 8 years ago

素晴らしいシステムトレードフレームワーク、ありがとうございます。

2点質問がございます。

①バックテストを一括投入することは可能でしょうか。 jiji(1)では、下記の方法で行えておりましたが、jiji2でも可能でしょうか。

②複数のバックテストを並列に実行することはできますでしょうか。 マルチコアCPUを活用して複数のバックテストを実行できれば大変助かります。

何卒よろしくお願いいたします。

unageanu commented 8 years ago

①バックテストを一括投入することは可能でしょうか。 jiji(1)では、下記の方法で行えておりましたが、jiji2でも可能でしょうか。

旧バージョンと同様にREST APIの「POST /backtest」を呼び出すことで登録は可能です。ただ、ドキュメント等は用意できていません。REST APIのテストケースで呼び出しているところがあるので、こちらが参考になるかもしれません。 https://github.com/unageanu/jiji2/blob/master/rest_spec/trading/backtest_spec.rb#L12

②複数のバックテストを並列に実行することはできますでしょうか。 マルチコアCPUを活用して複数のバックテストを実行できれば大変助かります。

バックテストのスレッド数は以下で定義しています。 https://github.com/unageanu/jiji2/blob/master/src/jiji/composing/configurators/model/trading_configurator.rb#L43

ここを変更することで複数スレッドで並列実行することはできるはずですが、動作確認は十分ではないので自己責任でお試しください。また、Rubyの特性として、スレッドを増やすだけではマルチコアCPUを使い切ることはできないハズなので、効果がどれだけあるかも不明です。(たしか、プロセスレベルで並列化しないといけないはず。それでもOANDAとの通信部分は並列化できそうなので、多少は効果があるとは思います。)

Yasushi-cc commented 8 years ago

ご回答いただきありがとうございます。

「POST /backtest」を呼び出すことで登録可能とのこと、スクリプトを作成して実行してみます。 また、スレッド数についても変更して実行してみたいと思います。

ありがとうございました。

Yasushi-cc commented 8 years ago

REST APIの「POST /backtest」を呼び出すことでバックテストが可能とのご回答をいただきましたので、 試しているのですが、うまく動かせていない状態です。 お手数かけますが、お教え願えますでしょうか。 Dockerにインストールして実行しております。

下記のURIにPOSTしているのですが、<h1>Not Found</h1> が返ってくるため、うまくアクセスできていないようです。 パスワード認証等、何か設定が必要かと思うのですが、お教え願えますでしょうか。

http://<インストール先ホスト>:<docker-compose.ymlで設定したJijiのポート/デフォルトは8080>/backtest

何卒宜しくお願い致します。

unageanu commented 8 years ago

すみません、URLは、正確には以下になります。(/api/ が必要です。また、 backtest は複数形でした。)

http://<インストール先ホスト>:<docker-compose.ymlで設定したJijiのポート/デフォルトは8080>/api/backtests

リクエストボディは JSON or MessagePack が利用できますがJSON形式の方が簡単かと。

{
  "name": "テスト",
  "start_time" : "2016-06-17T15:00:00.000Z",
  "end_time" : "2016-06-18T15:00:00.000Z",
  "memo" : "メモ",
  "pair_names" : ["EURJPY", "EURUSD"],
  "balance" : 1000000,
  "agent_setting" : [
    {
      "agent_class": "TestAgent1@テスト1",
      "agent_name":  "テスト1",
      "properties":  { "a" : 1, "b" : "bb" }
    }
  ]
}

また、リクエストヘッダでリクエストボディの形式と認証トークン(詳細は後述)を指定する必要があります。

Accept: application/json
Content-Type: application/json
Authorization: X-JIJI-AUTHENTICATE <認証トークン:例)aab001f00988fba9635ca9f4b70a032ad8e91fc972679b57d66ef5c5b089399eb2>

認証トークンは、以下のURLにPOSTリクエストを送付することで得られます。

URL:

POST http://<インストール先ホスト>:<ポート>/api/authenticator

リクエストヘッダ:

Accept: application/json
Content-Type: application/json

リクエストボディ:

{
   password: '<パスワード>'
}

これでどうでしょうか?

Yasushi-cc commented 8 years ago

ありがとうございます。 POST /api/backtests できました。 今後とも宜しくお願い致します。