HP Forums
APR with fees (mortgage) - Printable Version

+- HP Forums (https://www.hpmuseum.org/forum)
+-- Forum: HP Software Libraries (/forum-10.html)
+--- Forum: HP Prime Software Library (/forum-15.html)
+--- Thread: APR with fees (mortgage) (/thread-3952.html)



APR with fees (mortgage) - salvomic - 05-23-2015 05:12 PM

hi everybody,
here there is a program to calculate the fees for a mortgage (as percentile "points" %, fix amount or both).

Enjoy!

Salvo Micciché

Code:

export APR_pmt:=0;
export APR_net:=0;
export APR_apr:={0,0};

smenu();
calcPoints();
calcAmt();
pointFix();

EXPORT APR_fees()
// APR (TAEG) with fees (spese)
// Salvo Micciché 2015
BEGIN
  smenu();
END;

calcPoints()
BEGIN
  local pv, n, r, points, beg;
  local pmt, net, apr;
  input ({ {pv, [0], {15,15,1}}, 
            {n, [0], {40,15,1}},{r,[0],{70,15,1}},
            {points, [0], {15,15,2}},
     {beg,0, {70,2,2}}
             }, 
            "APR (TAEG) rate", 
            {"PV", "N","i%","Points%","End"}, 
            {"Present value (mortgage)", "Period (months)", "Interest rate%", "Points fees (%)", 
             "Begin or End" }, 
            {0,0,0,0,0}, 
            {10000, 360, 5, 1, 1} );
  pmt:= Finance.CalcPMT(n,r, pv, 0, 12, 12, beg);
  net:= pv - (pv * points/100);
  apr:= Finance.CalcIPYR(n,net, pmt, 0, 12,12, beg);
  RECT_P();
   TEXTOUT_P("Monthly payment " + EVAL(pmt), 25,50);
   TEXTOUT_P("Actual amount received " + EVAL(net), 25, 70);
   TEXTOUT_P("Monthly rate " + ROUND(EVAL(apr/12),3) + "%", 25, 90);
   TEXTOUT_P("APR (TAEG) " + ROUND(EVAL(apr),3) + "%", 25, 110);
   TEXTOUT_P("Press ESC key to continue", 25, 130, 3, RGB(0,0,255));
  WAIT;
sto(pmt, APR_pmt);
sto(net, APR_net);
sto({apr/12, apr}, APR_apr);
  smenu();
END;

calcAmt()
BEGIN
  local pv, n, r, amt, beg;
  local pmt, net, apr;
  input ({ {pv, [0], {15,15,1}}, 
            {n, [0], {40,15,1}},{r,[0],{70,15,1}},
            {amt, [0], {15,15,2}},
     {beg,0, {70,2,2}}
             }, 
            "APR (TAEG) rate", 
            {"PV", "N","i%","Fix amount","End"}, 
            {"Present value (mortgage)", "Period (months)", "Interest rate%", "Fix amount to pay", 
             "Begin or End" }, 
            {0,0,0,0,0}, 
            {10000, 360, 5, 500, 1} );
  pmt:= Finance.CalcPMT(n,r, pv, 0, 12, 12, beg);
  net:= pv - amt;
  apr:= Finance.CalcIPYR(n,net, pmt, 0, 12,12, beg);
  RECT_P();
   TEXTOUT_P("Monthly payment " + EVAL(pmt), 25,50);
   TEXTOUT_P("Actual amount received " + EVAL(net), 25, 70);
   TEXTOUT_P("Monthly rate " + ROUND(EVAL(apr/12),3) + "%", 25, 90);
   TEXTOUT_P("APR (TAEG) " + ROUND(EVAL(apr),3) + "%", 25, 110);
   TEXTOUT_P("Press ESC key to continue", 25, 130, 3, RGB(0,0,255));
  WAIT;
sto(pmt, APR_pmt);
sto(net, APR_net);
sto({apr/12, apr}, APR_apr);
  smenu();
END;

pointFix()
BEGIN
  local pv, n, r, points, amt, beg;
  local pmt, net, apr;
  input ({ {pv, [0], {15,15,1}}, 
            {n, [0], {40,15,1}},{r,[0],{70,15,1}},
            {points, [0], {15,15,2}},{amt, [0], {70,15,2}},
     {beg,0, {70,2,3}}
             }, 
            "APR (TAEG) rate", 
            {"PV", "N","i%","Points%", "Fix amt", "End"}, 
            {"Present value (mortgage)", "Period (months)", "Interest rate%", "Points fees (%)", 
             "Fix amount to pay", "Begin or End" }, 
            {0,0,0,0,0,0}, 
            {10000, 360, 5, 1, 500, 1} );
  pmt:= Finance.CalcPMT(n,r, pv, 0, 12, 12, beg);
  net:= pv - (pv * points/100) - amt;
  apr:= Finance.CalcIPYR(n,net, pmt, 0, 12,12, beg);
  RECT_P();
   TEXTOUT_P("Monthly payment " + EVAL(pmt), 25,50);
   TEXTOUT_P("Actual amount received " + EVAL(net), 25, 70);
   TEXTOUT_P("Monthly rate " + ROUND(EVAL(apr/12),3) + "%", 25, 90);
   TEXTOUT_P("APR (TAEG) " + ROUND(EVAL(apr),3) + "%", 25, 110);
   TEXTOUT_P("Press ESC key to continue", 25, 130, 3, RGB(0,0,255));
  WAIT;
sto(pmt, APR_pmt);
sto(net, APR_net);
sto({apr/12, apr}, APR_apr);
  smenu();
END;

smenu()
BEGIN
local ch;
  CHOOSE(ch, "APR (TAEG) with fees", "Fees: points %", "Fees: amount", "Fees: points + fix amount", "Quit");
  CASE
   IF ch==1 THEN calcPoints(); END;
   IF ch==2 THEN calcAmt(); END;
   IF ch==3 THEN pointFix(); END;
   IF ch==4 THEN RETURN; END;
  DEFAULT
  END; // case
END;



RE: APR with fees (mortgage) - salvomic - 04-23-2016 03:19 PM

New version after firmware 10077.
This version doesn't work with previous firmwares.

Code:

// APR fees 2.0 by Salvo Micciché
// require firmware > 10077

export APR_pmt:=0;
export APR_net:=0;
export APR_apr:={0,0};

smenu();
calcPoints();
calcAmt();
pointFix();

EXPORT APR_fees()
// APR (TAEG) with fees (spese)
// Salvo Micciché 2015
BEGIN
  smenu();
END;

calcPoints()
BEGIN
  local pv, n, r, points, beg;
  local pmt, net, apr;
  input ({ {pv, [0], {15,15,1}}, 
            {n, [0], {40,15,1}},{r,[0],{70,15,1}},
            {points, [0], {15,15,2}},
   {beg,0, {70,2,2}}
             }, 
            "APR (TAEG) rate", 
            {"PV", "N","i%","Points%","End"}, 
            {"Present value (mortgage)", "Period (months)", "Interest rate%", "Points fees (%)", 
             "Begin or End" }, 
            {0,0,0,0,0}, 
            {10000, 360, 5, 1, 1} );
  pmt:= Finance.TvmPMT(n,r, pv, 0, 12, 12, beg);
  net:= pv - (pv * points/100);
  apr:= Finance.TvmIPYR(n,net, pmt, 0, 12,12, beg);
  RECT_P();
   TEXTOUT_P("Monthly payment " + EVAL(pmt), 25,50);
   TEXTOUT_P("Actual amount received " + EVAL(net), 25, 70);
   TEXTOUT_P("Monthly rate " + ROUND(EVAL(apr/12),3) + "%", 25, 90);
   TEXTOUT_P("APR (TAEG) " + ROUND(EVAL(apr),3) + "%", 25, 110);
   TEXTOUT_P("Press ESC key to continue", 25, 130, 3, RGB(0,0,255));
  WAIT;
sto(pmt, APR_pmt);
sto(net, APR_net);
sto({apr/12, apr}, APR_apr);
  smenu();
END;

calcAmt()
BEGIN
  local pv, n, r, amt, beg;
  local pmt, net, apr;
  input ({ {pv, [0], {15,15,1}}, 
            {n, [0], {40,15,1}},{r,[0],{70,15,1}},
            {amt, [0], {15,15,2}},
   {beg,0, {70,2,2}}
             }, 
            "APR (TAEG) rate", 
            {"PV", "N","i%","Fix amount","End"}, 
            {"Present value (mortgage)", "Period (months)", "Interest rate%", "Fix amount to pay", 
             "Begin or End" }, 
            {0,0,0,0,0}, 
            {10000, 360, 5, 500, 1} );
  pmt:= Finance.TvmPMT(n,r, pv, 0, 12, 12, beg);
  net:= pv - amt;
  apr:= Finance.TvmIPYR(n,net, pmt, 0, 12,12, beg);
  RECT_P();
   TEXTOUT_P("Monthly payment " + EVAL(pmt), 25,50);
   TEXTOUT_P("Actual amount received " + EVAL(net), 25, 70);
   TEXTOUT_P("Monthly rate " + ROUND(EVAL(apr/12),3) + "%", 25, 90);
   TEXTOUT_P("APR (TAEG) " + ROUND(EVAL(apr),3) + "%", 25, 110);
   TEXTOUT_P("Press ESC key to continue", 25, 130, 3, RGB(0,0,255));
  WAIT;
sto(pmt, APR_pmt);
sto(net, APR_net);
sto({apr/12, apr}, APR_apr);
  smenu();
END;

pointFix()
BEGIN
  local pv, n, r, points, amt, beg;
  local pmt, net, apr;
  input ({ {pv, [0], {15,15,1}}, 
            {n, [0], {40,15,1}},{r,[0],{70,15,1}},
            {points, [0], {15,15,2}},{amt, [0], {70,15,2}},
   {beg,0, {70,2,3}}
             }, 
            "APR (TAEG) rate", 
            {"PV", "N","i%","Points%", "Fix amt", "End"}, 
            {"Present value (mortgage)", "Period (months)", "Interest rate%", "Points fees (%)", 
             "Fix amount to pay", "Begin or End" }, 
            {0,0,0,0,0,0}, 
            {10000, 360, 5, 1, 500, 1} );
  pmt:= Finance.TvmPMT(n,r, pv, 0, 12, 12, beg);
  net:= pv - (pv * points/100) - amt;
  apr:= Finance.TvmIPYR(n,net, pmt, 0, 12,12, beg);
  RECT_P();
   TEXTOUT_P("Monthly payment " + EVAL(pmt), 25,50);
   TEXTOUT_P("Actual amount received " + EVAL(net), 25, 70);
   TEXTOUT_P("Monthly rate " + ROUND(EVAL(apr/12),3) + "%", 25, 90);
   TEXTOUT_P("APR (TAEG) " + ROUND(EVAL(apr),3) + "%", 25, 110);
   TEXTOUT_P("Press ESC key to continue", 25, 130, 3, RGB(0,0,255));
  WAIT;
sto(pmt, APR_pmt);
sto(net, APR_net);
sto({apr/12, apr}, APR_apr);
  smenu();
END;

smenu()
BEGIN
local ch;
  CHOOSE(ch, "APR (TAEG) with fees", "Fees: points %", "Fees: amount", "Fees: points + fix amount", "Quit");
  CASE
   IF ch==1 THEN calcPoints(); END;
   IF ch==2 THEN calcAmt(); END;
   IF ch==3 THEN pointFix(); END;
   IF ch==4 THEN RETURN; END;
  DEFAULT
  END; // case
END;