ppf.core.leg( TradeServer.retrieve(flows, 'flows') , eval("ppf.core."+pay_or_receive) , adjuvants , eval("ppf.pricer.payoffs."+payoff)()) TradeServer._legs[tag] = leg return tag except RuntimeError, e: utils.raise_com_exception(e) def CreateTrade( self , tag , legs , exercise_sched , exercise_type): try: tl = [TradeServer.retrieve(l, 'legs') for l in legs[1:]] if exercise_sched: exercises = TradeServer.retrieve(exercise_sched, 'exercises') if not exercise_type: raise RuntimeError, "missing exercise type" call_cancel = eval("ppf.core.exercise_type."+exercise_type) trade = ppf.core.trade(tl, (exercises, call_cancel)) else: trade = ppf.core.trade(tl, None) TradeServer._trades[tag] = trade return tag except RuntimeError, e: utils.raise_com_exception(e) if __name__ == "__main__": utils.register_com_class(TradeServer)
_pricers = {} retrieve = staticmethod(lambda tag, which: utils.retrieve( 'pricer_server', 'PricerServer', tag, which)) def CreateHullWhiteLatticePricer(self, tag, trade_id, env_id, num_states, num_std_dev): try: from trade_server import TradeServer from market_server import MarketServer trade = TradeServer.retrieve(trade_id, 'trades') env = MarketServer.retrieve(env_id, 'environments') model_args = {"num states": num_states, "num std dev": num_std_dev} factory = ppf.model.hull_white_lattice_model_factory() model = factory(trade, env, model_args) pricer = ppf.pricer.lattice_pricer(trade, model, env, None) PricerServer._pricers[tag] = pricer return tag except RuntimeError, e: ppf.com.utils.raise_com_exception(e) def InvokePricer(self, tag): try: return PricerServer.retrieve(tag, 'pricers').__call__() except RuntimeError, e: utils.raise_com_exception(e) if __name__ == "__main__": utils.register_com_class(PricerServer)
leg = \ ppf.core.leg( TradeServer.retrieve(flows, 'flows') , eval("ppf.core."+pay_or_receive) , adjuvants , eval("ppf.pricer.payoffs."+payoff)()) TradeServer._legs[tag] = leg return tag except RuntimeError, e: utils.raise_com_exception(e) def CreateTrade(self, tag, legs, exercise_sched, exercise_type): try: tl = [TradeServer.retrieve(l, 'legs') for l in legs[1:]] if exercise_sched: exercises = TradeServer.retrieve(exercise_sched, 'exercises') if not exercise_type: raise RuntimeError, "missing exercise type" call_cancel = eval("ppf.core.exercise_type." + exercise_type) trade = ppf.core.trade(tl, (exercises, call_cancel)) else: trade = ppf.core.trade(tl, None) TradeServer._trades[tag] = trade return tag except RuntimeError, e: utils.raise_com_exception(e) if __name__ == "__main__": utils.register_com_class(TradeServer)
try: import ppf.math.interpolation interp = eval("ppf.math.interpolation." + interp) times, factors = [x[1] for x in curve[1:]], [x[2] for x in curve[1:]] MarketServer.retrieve(tag, 'environments').add_curve( str(name), ppf.market.curve(times, factors, interp)) except RuntimeError, e: utils.raise_com_exception(e) def AddConstant(self, tag, name, value): try: MarketServer.retrieve(tag, 'environments').add_constant( str(name), value) except RuntimeError, e: utils.raise_com_exception(e) def AddSurface(self, tag, name, expiries, tenors, values): try: import numpy exp, ten = expiries[1:], tenors[1:] surface = [x[1:] for x in values[1:]] MarketServer.retrieve(tag, 'environments').add_surface( str(name), ppf.market.surface(exp, ten, numpy.array(surface))) except RuntimeError, e: utils.raise_com_exception(e) if __name__ == "__main__": utils.register_com_class(MarketServer)
import utils class BlackScholesServer(object): _public_methods_ = ["OptionPrice"] _reg_progid_ = "ppf.black_scholes" _reg_clsid_ = "{14B40B3E-DC9A-4E07-A512-F65DA07BDC09}" def OptionPrice(self, spot, strike, rate, vol, time, call_put): from ppf.core import black_scholes try: return black_scholes( S=spot, K=strike, r=rate, sig=vol, T=time, CP=call_put) except RuntimeError, e: ppf.com.utils.raise_com_exception(e) if __name__ == "__main__": utils.register_com_class(BlackScholesServer)
MarketServer._environments[tag] = \ ppf.market.environment(utils.to_ppf_date(t)) return tag except RuntimeError, e: utils.raise_com_exception(e) def AddCurve(self, tag, name, curve, interp): try: import ppf.math.interpolation interp = eval("ppf.math.interpolation."+interp) times, factors = [x[1] for x in curve[1:]],[x[2] for x in curve[1:]] MarketServer.retrieve(tag, 'environments').add_curve( str(name), ppf.market.curve(times, factors, interp)) except RuntimeError, e: utils.raise_com_exception(e) def AddConstant(self, tag, name, value): try: MarketServer.retrieve(tag, 'environments').add_constant( str(name), value) except RuntimeError, e: utils.raise_com_exception(e) def AddSurface(self, tag, name, expiries, tenors, values): try: import numpy exp, ten = expiries[1:], tenors[1:] surface = [x[1:] for x in values[1:]] MarketServer.retrieve(tag,'environments').add_surface( str(name), ppf.market.surface(exp, ten, numpy.array(surface))) except RuntimeError, e: utils.raise_com_exception(e) if __name__ == "__main__": utils.register_com_class(MarketServer)
import utils class BlackScholesServer(object): _public_methods_ = ["OptionPrice"] _reg_progid_ = "ppf.black_scholes" _reg_clsid_ = "{14B40B3E-DC9A-4E07-A512-F65DA07BDC09}" def OptionPrice(self, spot, strike, rate, vol, time, call_put): from ppf.core import black_scholes try: return black_scholes(S=spot, K=strike, r=rate, sig=vol, T=time, CP=call_put) except RuntimeError, e: ppf.com.utils.raise_com_exception(e) if __name__ == "__main__": utils.register_com_class(BlackScholesServer)
retrieve = staticmethod( lambda tag, which : utils.retrieve('pricer_server', 'PricerServer', tag, which)) def CreateHullWhiteLatticePricer( self , tag , trade_id , env_id , num_states , num_std_dev): try: from trade_server import TradeServer from market_server import MarketServer trade = TradeServer.retrieve(trade_id, 'trades') env = MarketServer.retrieve(env_id, 'environments') model_args = {"num states": num_states, "num std dev": num_std_dev} factory = ppf.model.hull_white_lattice_model_factory() model = factory(trade, env, model_args) pricer = ppf.pricer.lattice_pricer(trade, model, env, None) PricerServer._pricers[tag] = pricer return tag except RuntimeError, e: ppf.com.utils.raise_com_exception(e) def InvokePricer(self, tag): try: return PricerServer.retrieve(tag, 'pricers').__call__() except RuntimeError, e: utils.raise_com_exception(e) if __name__ == "__main__": utils.register_com_class(PricerServer)