File: Swap.i

package info (click to toggle)
quantlib-python 0.2.1.cvs20020322-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 2,040 kB
  • ctags: 3,245
  • sloc: cpp: 32,997; python: 7,156; makefile: 70
file content (96 lines) | stat: -rw-r--r-- 3,084 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96

/*
 Copyright (C) 2000, 2001, 2002 RiskMap srl

 This file is part of QuantLib, a free-software/open-source library
 for financial quantitative analysts and developers - http://quantlib.org/

 QuantLib is free software: you can redistribute it and/or modify it under the
 terms of the QuantLib license.  You should have received a copy of the
 license along with this program; if not, please email ferdinando@ametrano.net
 The license is also available online at http://quantlib.org/html/license.html

 This program is distributed in the hope that it will be useful, but WITHOUT
 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 FOR A PARTICULAR PURPOSE.  See the license for more details.
*/

// $Id: Swap.i,v 1.22 2002/03/07 14:06:32 lballabio Exp $

#ifndef quantlib_swap_i
#define quantlib_swap_i

%include Instruments.i
%include TermStructures.i
%include CashFlows.i

%{
using QuantLib::Instruments::Swap;
using QuantLib::Instruments::SimpleSwap;
typedef Handle<Swap> SwapHandle;
typedef Handle<SimpleSwap> SimpleSwapHandle;
%}

// fake inheritance between handles
%name(Swap) class SwapHandle
: public InstrumentHandle {
  public:
    // constructor redefined below
    ~SwapHandle();
};

%addmethods SwapHandle {
    SwapHandle(CashFlowHandleVector firstLeg,
               CashFlowHandleVector secondLeg,
               TermStructureRelinkableHandle termStructure,
               String isinCode, String description) {
	        return new SwapHandle(
	            new Swap(firstLeg, secondLeg, termStructure,
	                isinCode, description));
    }
}



// fake inheritance between handles
%name(SimpleSwap) class SimpleSwapHandle
: public InstrumentHandle {
  public:
    // constructor redefined below
    ~SimpleSwapHandle();
};

%addmethods SimpleSwapHandle {
    SimpleSwapHandle(bool payFixedRate, Date startDate, int n, TimeUnit unit,
        Calendar calendar, RollingConvention rollingConvention,
        double nominal, int fixedFrequency, Rate fixedRate,
        bool fixedIsAdjusted, DayCounter fixedDayCount,
        int floatingFrequency, XiborHandle index, int indexFixingDays,
        Spread spread, TermStructureRelinkableHandle termStructure, 
        String isinCode, String description) {
            QL_REQUIRE(!index.isNull(), "null index given");
            Handle<Xibor> h = index;
            QL_REQUIRE(!h.isNull(), "index not of Libor type");
            return new SimpleSwapHandle(
                new SimpleSwap(payFixedRate, startDate, n, unit, calendar,
                    rollingConvention, nominal, fixedFrequency, fixedRate,
                    fixedIsAdjusted, fixedDayCount, floatingFrequency,
                    h, indexFixingDays, spread, termStructure, 
                    isinCode, description));
    }
    Rate fairRate() {
        return (*self)->fairRate();
    }
    double fixedLegBPS() {
        return (*self)->fixedLegBPS();
    }
    double floatingLegBPS() {
        return (*self)->floatingLegBPS();
    }
    Date maturity() {
        return (*self)->maturity();
    }
}


#endif