損益計算と丸め誤差

  • 投稿日:
  • by
  • カテゴリ:

RealTick損益計算ツールで、微妙に損益合計が異なっていました。

原因は、小数を含む計算を行ったときの丸め誤差が起きた時に、小数部を切り捨ていたためです。

はい、ここでピンと来た方、その通りです。

sprintf("%d", $val)

とやってしまっていました。基本的なところですね。

sprintf("%.0f", $val)

とすれば、ほとんどの場合問題ありません。株価が小数点2桁、株数が100株単位であれば$valの小数部は0.0000...あるいは0.9999...だからです。しかし平均プロフィットの計算は小数点1桁までとしているので、%.1fでは丸め誤差の影響が出るかもしれません。

せっかくですから、四捨五入のためのPerlモジュールで修正してみました。

CPANのMath::Roundで Math::Round::nearest(0.1, $val) とすれば小数点2桁目を四捨五入して小数点1桁を表示します。

損益履歴の表示はデータベース側で四捨五入しているのでたぶん正確です。しかし損益計算の解釈を7月前半にかけて数度変更していたために、損益履歴の表示と損益合計が一致しなくなることが出て来ました。。

もう一度データを登録し直せば一致するようになるのですが、それも面倒なことなのでトレード日を表示したときに損益履歴が損益合計と異なっていれば更新するようにしました。損益履歴の表示データを作成後に損益合計を計算しているので、異なる日を表示すれば更新された損益履歴を表示するはずです。

えーと、つまり損益計算プロを使っている方は、一度各トレード日を表示して欲しいなという希望というかお願いです。

ちなみに最近の修正で、処理できないトレードデータを以前は無視して表示もしていませんでしたが、未処理データで表示するようにしました。さらにドテン取引が有った時に保有株数を超えた部分を新規トレードで表示していたのですが、それが分かりにくいので元データ表示で1件毎の記録を確認できるようにしました。