omega

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
cf16
Stały bywalec
Stały bywalec
Posty: 33
Rejestracja: 27 sty 2012, 18:43

Nieprzeczytany post autor: cf16 »

wskaznik omega: jakby ktos chcial napisac to juz sie z tym uporalem,
nie potrzeba reinvent the wheel
http://en.wikipedia.org/wiki/Omega_ratio

Kod: Zaznacz cały

int _tmain(int argc, _TCHAR* argv[])
{
	boost::math::normal_distribution<Real> normdist;
	//////////////////////////
	/*Real spott=100.0;
	Rate rr=0.03;
	Time tauu=0.5;
	Volatility voll=0.20;
	Real strikee=110.0;
	Real a=strikee, b=strikee*10.0;
	boost::function<Real(Real)> ptrF;
	ptrF=boost::bind(&callFunc, spott, strikee,rr,voll,tauu,_1);
	Real absAcc=0.00001;
	Size maxEval=1000;
	SimpsonIntegral numInt(absAcc, maxEval);//integrating object
	std::cout<<" Call Value : "<<numInt(ptrF,a,b)<<std::endl;*/
	//////////////////////////
	
	omega om(normdist,-20,20,2,3);
	std::cout<<"Omega : "<<om(2)<<std::endl;
	om.distribution();
	cout<<endl<<endl;

	/*std::vector<double>v1(1000);
	std::vector<double>v2(1000);
	omega asset1omega(normdist,1.3050-1.0,1.3050+1.0,1.3050,0.0020);
	omega asset2omega(normdist,1.3050-1.0,1.3050+1.0,1.3050,0.0040);
	std::ofstream f("omega.csv",std::ios::app); 
	namespace pt = boost::posix_time;
	pt::ptime now=pt::second_clock::local_time();
	std::stringstream ss;
	ss<<static_cast<int>(now.date().month())<<"/"<<now.date().day()<<"/"<<now.date().year();
	for(int i=0;i<1000;i++){
		double dx=0.00005;
		double x=1.2800+i*dx;
		v1[i]=asset1omega(x);
		v2[i]=asset2omega(x);
		f<<std::fixed<<i<<","<<x<<", "<<ss.str()<<", "<<v1[i]<<", "<<v2[i]<<std::endl;
	}
	f.close();*/
	//////////////////////////

	nlopt::opt opt(nlopt::GN_ISRES, 4);//LN_COBYLA

	std::vector<double> lb(1);
	lb[0]=0.0; //lower bounds on x[]=x
	opt.set_lower_bounds(lb);

	std::vector<double> ub(1);
	ub[0]=1.0;//upper bounds on x[]=x
	opt.set_upper_bounds(ub);


	OmegaPortfolio pOmega(normdist,1.3050-1.0,1.3050+1.0,1.3050,1.3050,0.0020,0.0040);
	
	std::vector<double>v1(1000);
	std::vector<double>v2(1000);
	OmegaPortfolio pSharpeOptimal(normdist,1.3050-1.0,1.3050+1.0,1.3050,1.3050,0.0020,0.0040);
	Real sharpe_a=(0.0040*0.0040*1.3050/(0.0040*0.0040*1.3050+0.0020*0.0020*1.3050));
	std::ofstream f("omegaportfolio.csv",std::ios::app); 
	namespace pt = boost::posix_time;
	pt::ptime now=pt::second_clock::local_time();
	std::stringstream ss;
	ss<<static_cast<int>(now.date().month())<<"/"<<now.date().day()<<"/"<<now.date().year();
	for(int i=0;i<1000;i++){
		double dt=0.00005;
		double t=1.2800+i*dt;
		v1[i]=pSharpeOptimal(sharpe_a,1-sharpe_a,t);
		//and max omega
			std::vector<double> x(1);// x[]=re,rg,ru,xeurusd,xgbpusd
			x[0] = 0.5;
			opt.set_xtol_rel(0.0000001);
			opt.set_ftol_rel(0.0000001);
			opt.set_maxeval(1000000);
			my_constraint_data data[1] ={{pOmega,t}}; //{ {2,0}, {-1,1} };
			opt.add_inequality_constraint(xmin_constraint, &data[0], 0.0000001);
			opt.add_inequality_constraint(xmax_constraint, &data[0], 0.0000001);
			opt.set_max_objective(omegamax, &data[0]);
	
			double mmax;
			clock_t tstart=std::clock();
			nlopt::result result = opt.optimize(x, mmax);
			clock_t tend=std::clock();
			float time_elapsed = ((float)tend - (float)tstart);// /1000000.0F
			v2[i]=mmax;
		//end max
		f<<std::fixed<<i<<","<<t<<", "<<ss.str()<<", "<<v1[i]<<", "<<v2[i]<<", a_max: "<<x[0]<<std::endl;
	}
	f.close();
	//////////////////////////

	return 0;
}


Dodano po 16 godzinach 13 minutach:

ciekawy miedzy innymi ze wzgledu na powiazane z cena opcji put. 2, prtfel optymalny w sensie Sharpe'a niekoniecznie jest optymalny w sensie najwyzszej relacji prawdopodobienstwa wzrostow powyzej/ponizej zadanego poziomu.
jak na obrazku


Dodano po 7 godzinach 18 minutach:

aby skorzystac z kodu nalezy podpiac QuantLib, Boost i NLopt. no i jeszcze definicje klas : DD
co jest fajne, to obindowanie funkcji (bind) i obliczenie calki oznaczonej. gra muzyka.
jak to policzylem? to uproszczenie dla rozkladu lacznego:

Dodano po 1 minutach:

ze niby normalny. to wtedy:

Dodano po 1 minutach:

zapraszam do dyskusji. koledzy, czy ktos uzywa omegi? czy macie jakies doswiadczenia z ta dosc nowa (2002?) miara?
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

ODPOWIEDZ