Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

P/L caculation not correct except in the case of Vs-Yen transaction #77

Open
ippeif opened this issue Jun 4, 2016 · 9 comments
Open

Comments

@ippeif
Copy link

ippeif commented Jun 4, 2016

jiji停止中に jiji外で 決済された非クロス円ポジションの損益計算が正しくない

インストールして動かしてみました。

jiji外での取引データを取り込んで履歴を構築してくれる機能がありますが(/positions の表示まわり),
非クロス円ポジションの損益計算が正しくないです。
たとえば EUR/USD とか AUD/CAD とかの取引ログがまじっていると,集計の数字がめっちゃくちゃになってしまいます。

ここはブローカー側から実現損益の値を取得するのが筋のように思います。
(概算であれば,決済時刻におけるレートを取得して円に換算することもできそうですが)

oanda_api gemのオブジェクトでいうと OandaAPI::Resource::Transaction#pl がそれだと思います。
OandaAPI::Resource::Transaction#account_balance も役に立つかもしれません。
ご検討ください……。

@unageanu
Copy link
Owner

unageanu commented Jun 4, 2016

Jijiを使わずに決済されたポジションの損益が正しく反映されない、という認識でよいでしょうか?

現状ではこのような動作になります。決済されると、ポジション一覧から取得できなくなってしまうため、
Jijiの外で決済されると正しい損益が反映されません。(内部的には ロスト したという扱いになっています)

ご指摘の通り、transactions で履歴をたどって追跡すれば、正しい損益に修正することは可能ですが、現在は行ってません。

@ippeif
Copy link
Author

ippeif commented Jun 4, 2016

はい,そうです。
すでにJiji外での取引履歴のあるアカウントでJijiを初起動すると,それまでの履歴が
Jijiを起動しっぱなしでJiJi外で取引すると,
「エージェント不明」として取り込まれてきますね。Jijiの外で建てたポジションが入り込んでしまう。
(Jiji専用アカウントを使うことを想定しておられるのだろうな,という想像はしていますが,偶発的にJiji外で取引をしてしまう事態は,あると思うのですよね……)

@unageanu
Copy link
Owner

unageanu commented Jun 4, 2016

「手動で建てたポジションにもアルゴリズムによる損切ルールを強制する」といったことができるように、Jijiの外で作成されたポジションもJijiで捕捉して処理できるようにしています。

なので、ご指摘の通り、本来はtransactionsをたどって正しい損益に更新するのが理想なのですが、現状では実装できてないです・・・。

@ippeif
Copy link
Author

ippeif commented Jun 4, 2016

せっかくのgithubなので,少しずつコード眺めてます。しかしSinatraに不慣れでして……。
OANDA一蓮托生な設計にならないよう気を遣っておられるのもなんとなく伝わっておりまして,ロジックがなにやら internal とかいうところに詰め込んであることもあり,うーん,どうしたものかなというところですね。
リアクションありがとうございました。

@ippeif
Copy link
Author

ippeif commented Jun 4, 2016

すみません,思い込みで事実誤認がありました。Jijiを止めていると思い込んでいたのですが,
「起動しっぱなしの状態で,Jiji外で取引をしたもの」について表題のような状況になっていました。
(コードのどこを読んでも過去の履歴を取り込んでいるところがなく,おかしいなおかしいなと思ってしまいました……)

なんと,生きているポジション(trade)のリアルタイム損益,APIで取れないんですね……なんてこった……fxTradeとやらのUIには表示されるのになー

あれっ,とすると,実はこれJiji経由で建てたポジションについてもおんなじ現象になったりしませんか?
クロス円ではないポジション(たとえばEUR/USD)については, Jiji::Model::Trading::Internal::PositionInternalFunctions.calculate_profit_or_loss で,その時のクロス円レート(USD/JPY)を参照して掛け算し続けないといけないのでは……(ペアによっては割り算)。

建てたときのポジション評価額(円換算)も計算して覚えておかないといけない。
(編集: 寝言を言いました。そんなことをしたら,初めからクロス円で建てたのと同じなってしまいます)

(いずれにしても,interest分のズレとかも気にし始めると気になるので,やはり履歴が取れるブローカーからは履歴を取って,後でつじつま合わせをするのが望ましいですかね)

ちょっとやる気になったのですがSinatraもMongoDBも勝手がよくわからなくて,すみません!(:3 _ )=

@unageanu
Copy link
Owner

unageanu commented Jun 4, 2016

クロス円ではないポジションについては, Jiji::Model::Trading::Internal::PositionInternalFunctions.calculate_profit_or_loss で,その時のクロス円レート(USD/JPY)を参照して掛け算し続けないといけないのでは……(ペアによっては割り算)。

あー、これは不具合ですね。非クロス円のポジションの損益計算で考慮漏れしています。。
ご指摘ありがとうございます。これは明確な不具合なので直したいと思います。

@unageanu
Copy link
Owner

unageanu commented Jun 4, 2016

損益の計算方法って、これであっていますでしょうか?
http://jp.forex.com/jp/learn/profit_loss.shtml

ここで使われている「相対通貨の対円レート」は、(ポジション作成時ではなく)現在の対円レートのように読めます。この通りなら、ポジションを作成した時点の対円レートを記憶しておく必要はないような気がするのですが、どうでしょうか?

いろいろ、ややこしいですね・・・

@ippeif
Copy link
Author

ippeif commented Jun 5, 2016

すみません,寝ぼけたことを言いました。(ここ数日,思い込みが激しいみたいで。お察しかと思いますが,まだ私はJiji経由の取引ということをひとつもしていません。怪しいことを言っていたらごめんなさい。)
損益を「建てたときの円換算評価額と,決済時の円換算評価額の差」と定義してしまったら,これは初めからクロス円で取引したのと同じことですね。
正しくは,含み損益も必要証拠金も,あくまで分母側通貨(決済通貨,相対通貨)建てで計算し,生きているポジションの円建て評価額は単に評価する瞬間の対円レート(※)を掛ける。決済のタイミングでは,決済時の対円レートで口座残高にrealizeされる,ということでなければなりません。(ほんとかな……)

(※)あとは,そのレートってmidなの? それとも「損ならask,益ならbid」とかなの? みたいなところは気になります。調べてみるか。。

@unageanu
Copy link
Owner

以下の修正を行った Jiji v.1.0.12 をリリースしました。

    1. ポジションの通貨ペアがクロス円でない場合の損益計算の不具合を修正。
    1. Jijiからポジションを決裁したときに、レスポンスとして返される損益をポジションに反映するように変更。

2に関して、以下の場合には同期が行われませんので、ローカルでの損益計算結果がそのまま使われます。

  • 新規注文で既存のポジションが決済/部分的に決済された場合
  • OANDA のツールを利用するなどして、 Jijiの外でポジションを決済した場合

上記の場合、正しい損益はOANDAのツールを利用して確認してください。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants