0

My goal is to design a re-usable engine programmed in MATLAB using MATLAB OOP. This is my first attempt to do this. My problem that I would like to resolve is the following: I have an abstract class cPayoffBase that defines the interface for an unknown type payoff. Inheriting cPayoffBase, I have a concrete class cPayoffCall which implements a call option. Now I defined another class cVanillaDerivs that takes in an user-defined payoff object and a strike price. When I pass in the user-defined object to cVanillaDerivs to calculate some quantity an exception Index exceeds matrix dimensions. surfaces. I shall provide the codes in detail.

cPayoffBase.m

classdef (Abstract) cPayoffBase < handle

    methods (Abstract)
        mfGetPayoff(argSpotPrc)
    end

end

cPayoffCall.m

classdef cPayoffCall < cPayoffBase

    properties (GetAccess = private, SetAccess = private)

        dmStrikePrc

    end

    methods

    function obj = cPayoffCall(argStrikePrc)

        obj.dmStrikePrc = argStrikePrc;

    end

    function rslt = mfGetPayoff(obj, argSpotPrc)

        rslt = max(argSpotPrc - obj.dmStrikePrc, 0.0);

    end

end

cVanillaDerivs.m

classdef cVanillaDerivs

%% Data Members
properties (GetAccess = private, SetAccess = private)
    dmPayoffObj
    dmExpiryDt
end

%% Implementation
methods

    % Constructor
    function obj = cVanillaDerivs(argPayoffObj, argExpiryDt)

        obj.dmPayoffObj = argPayoffObj;
        obj.dmExpiryDt  = argExpiryDt;

    end

    % Member Functions
    function rslt = mfGetExpriyDt(obj)

        rslt = obj.dmExpiryDt;

    end

    function rslt = mfGetDerivPayoff(argSpotPrc)

        rslt = obj.dmPayoffObj(argSpotPrc);

    end
end
end

command window

>> clear classes
>> spot = 100; strike = 50; T = 1;
>> payoffObj = cPayoffCall(strike);
>> typeVanilla = cVanillaDerivs(payoffObj, T);
>> mfGetDerivPayoff(typeVanilla, spot)
Index exceeds matrix dimensions.

Error in cVanillaDerivs/mfGetDerivPayoff (line 37)
            rslt = obj.dmPayoffObj(argSpotPrc);

In C++, given that I have a wrapper class and wrap the class object cPayoffBase I can do something like return (*dmPayoff)(dmSpotPrc) for double returning function mfGetDerivPayoff(double dmSpotPrc) const in class cVanillaDerivs. Please kindly let me know my errors and if possible how can I achieve the same process in MATLAB OOP like C++.

2 Answers 2

1

You are trying to access element number 100 of the property dmPayoffObj. However, this property is set to payOffObj, which isn't an array. Thus the error.

What I think you wanted is return the Payoff of dmPayoffObj. You should change the method mfGetDerivPayoff of the class cVanillaDerivs as follows:

function rslt = mfGetDerivPayoff(argSpotPrc)
    rslt = obj.dmPayoffObj.mfGetPayoff(argSpotPrc);
end
Sign up to request clarification or add additional context in comments.

1 Comment

Ah. so need . to call the function mfGetPayoff() is needed. All that question writing for a great answer. Thank you.
1

Did you mean rslt = obj.dmPayoffObj.mfGetPayoff(argSpotPrc); instead of rslt = obj.dmPayoffObj(argSpotPrc);?

1 Comment

Yes the problem and solution that you and @Christian provided worked. Thank you.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.