-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathassetsReturns.hpp
129 lines (103 loc) · 4.33 KB
/
assetsReturns.hpp
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
//
// assetsReturns.hpp
// Exercise1
//
// Created by 李美漉 on 2020/6/4.
// Copyright © 2020 NYU. All rights reserved.
//
#ifndef assetsReturns_hpp
#define assetsReturns_hpp
#include "Matrix.hpp"
using namespace std;
//Vector genIniX(int size);
Vector avgFunc(Matrix matrix_);
Matrix covFunc(Matrix matrix_, Vector mean_);
class AR
{
protected:
int isWindow, oosWindow, rollingWindow, rollingTimes;
size_t numberAssets, numberReturns; //实际上就是int
Matrix assetsReturns;
public:
AR(int isWindow_, int oosWindow_, int rollingWindow_, Matrix assetsReturns_)
{isWindow = isWindow_; oosWindow = oosWindow_; rollingWindow = rollingWindow_; assetsReturns = assetsReturns_;
numberReturns = assetsReturns_.size();numberAssets = assetsReturns_[0].size();
rollingTimes = (int) (numberReturns - oosWindow - isWindow)/ rollingWindow + 1;
};
void setIsWindow(int isWindow_){isWindow = isWindow_;rollingTimes = (int) (numberReturns - oosWindow - isWindow)/ rollingWindow + 1;};
void setOosWindow(int oosWindow_){oosWindow_ = oosWindow_;rollingTimes = (int) (numberReturns - oosWindow - isWindow)/ rollingWindow + 1;};
void setRollingWindow(int rollingWindow_){rollingWindow = rollingWindow_; rollingTimes = (int) (numberReturns - oosWindow - isWindow)/ rollingWindow + 1;};
void setAssetsReturns(Matrix assetsReturns_)
{assetsReturns = assetsReturns_; numberReturns = assetsReturns_.size(); numberAssets = assetsReturns_[0].size();};
int getIsWindow(){return isWindow;};
int getOosWindow(){return oosWindow;};
int getRollingWindow(){return rollingWindow;};
int getRollingTimes(){return rollingTimes;};
int getNumberAssets(){return (int)numberAssets;};
int getNumberReturns(){return (int)numberReturns;};
virtual~AR(){};
};
class OOS: public virtual AR
{
protected: //或者private待考量
Matrix oosMean;
vector<Matrix> oosCovariance;
public:
OOS(int isWindow_, int oosWindow_, int rollingWindow_, Matrix assetsReturns_):AR(isWindow_, oosWindow_, rollingWindow_, assetsReturns_){};
void calOosMean();
void calOosCovariance();
Matrix getOosMean(){return oosMean;}
vector<Matrix> getOosCovariance(){return oosCovariance;}
~OOS(){};
};
class IS: public virtual AR
{
protected: //或者private待考量
double targetReturn;
Vector isb, isLambda, isMu;
Matrix isMean, weights, isX;
vector<Matrix> isCovariance, isQ;
public:
IS(int isWindow_, int oosWindow_, int rollingWindow_, Matrix assetsReturns_, double targetReturn_):AR(isWindow_, oosWindow_, rollingWindow_, assetsReturns_)
{targetReturn = targetReturn_; Vector temp(numberAssets, 0.0);
temp.push_back(-targetReturn_); temp.push_back(-1); isb = temp;};
void calIsMean();
void calIsCovariance(); //要在有isMean之后生成isCovariance
void calIsQ(); //要在有isMean和isCovariance之后生成Q
void weightSolver(double epsilon);
void setTargetReturn(double targetReturn_)
{targetReturn = targetReturn_; Vector temp(numberAssets, 0.0);
temp.push_back(-targetReturn_); temp.push_back(-1); isb = temp;};
double getTargetReturn(){return targetReturn;};
Vector getIsb(){return isb;};
Vector getIsLambda(){return isLambda;};
Vector getIsMu(){return isMu;};
Matrix getIsMean(){return isMean;};
Matrix getWeights(){return weights;};
Matrix getIsX(){return isX;};
vector<Matrix> getIsCovariance(){return isCovariance;};
vector<Matrix> getIsQ(){return isQ;};
~IS(){};
};
class FTSE: public OOS, public IS
{
private:
Vector actAvgReturn;
Vector actCov;
double AAR; //average of port returns
double CAAR;
double std;
double Sharpe;
public:
// FTSE(){};
FTSE(int isWindow_, int oosWindow_, int rollingWindow_, Matrix assetsReturns_, double targetReturn_):OOS(isWindow_, oosWindow_, rollingWindow_, assetsReturns_), IS(isWindow_, oosWindow_, rollingWindow_, assetsReturns_, targetReturn_), AR(isWindow_, oosWindow_, rollingWindow_, assetsReturns_){};
void backtest();
double getAAR(){return AAR;};
double getCAAR(){return CAAR;};
double getStd(){return std;};
double getSharpe(){return Sharpe;};
Vector getActAvgReturn(){return actAvgReturn;};
Vector getActCov(){return actCov;};
~FTSE(){};
};
#endif /* assetsReturns_hpp */