関心のあるトピックに関するいくつかの問題を読みましたが、まだ結論を出すのに苦労しています. これが冗長な質問である場合は、事前にお詫び申し上げます。
要点を言えば、私の問題は、論理的なペイオフ テストを実装しようとすることです。たとえば、金融商品にはいくつかの条件があり、それぞれの条件によってペイオフが異なります。ただ、条件はどれくらいかは契約するまでわかりません。目標は、新製品が登場するたびに各 if ステートメントをハードコーディングせずに、ペイオフ実装をプログラムすることです。たとえば、条件が 1 つだけの契約を最初に受け取ります。翌日には2条件等で契約。ポリモーフィズムで対応できることは理解できたが、どうしようか悩んでいる。
ペイオフ自体は、ポリモーフィズムを使用してコード化されています。
たとえば、具体的なジェネリック ペイオフ クラスを持つ抽象的なジェネリック ペイオフ クラスがあります。
class cPayoffAbstract
{
private:
public:
cPayoffAbstract(){}
virtual cPayoffAbstract* clone() const = 0;
virtual ~cPayoffAbstract(){}
virtual double operator()(double& x) const = 0;
};
class cPayoffConcrete1 : public cPayoffAbstract
{
private:
double y;
public:
cPayoffConcrete1(double& argY);
virtual cPayoffConcrete1* clone() const;
virtual ~cPayoffConcrete1(){}
virtual double operator()(double& x) const;
};
class cPayoffConcrete2 : public cPayoffAbstract
{
private:
double y;
public:
cPayoffConcrete2(double& argY);
virtual cPayoffConcrete2* clone() const;
virtual ~cPayoffConcrete2(){}
virtual double operator()(double& x) const;
};
次に、より複雑なペイオフのインターフェイスを定義する別のクラスがあります。
#include <cPayoffAbstract.h>
#include <SmartPtr.h>
#include <vector>
class cConditionalPayoff
{
private:
// Some data members
public:
cConditionalPayoff(const SmartPtr<cPayoffAbstract>& argPayoffPtr1, const SmartPtr<cPayoffAbstract>& argPayoffPtr2);
// some methods ...
double fConditionalPayoff(const std::vector<double>& argXs, double& argY, double& argZ) const;
};
条件がほとんどないコントラクトがあり、条件に応じて、ジェネリック ペイオフ クラスで実装される異なるペイオフがあるとします。
double cConditionalPayoff::fConditionalPayoff(const std::vector<double>& argXs, double& argY, double& argZ) const
{
for (unsigned long i = 0; i < argXs.size(); i++)
{
if (argXs[i] > argY) { return dmPayoffPtr1->operator()(argXs[i]); }
else
{
if (argXs[i] < argZ) { return dmPayoffPtr2->operator()(argXs[i]); }
else { return argX[i]; }
}
}
}
問題は、たとえば、同様の報酬を伴う別の契約が契約でより多くの条件が設計されている場合に発生します。次に、上記の if ステートメントを再コーディングするか、別のメソッドを実装する必要があります。
したがって、目標はfConditionalPayoff
、ifs アドホックでコーディングするのではなく、動的な方法で実装することです。
私の再編集がいくつかの誤解を明確にするのに役立つことを願っています. あったらごめんなさい。
ありがとうございました。