/*! \file \brief Robust \author Vasek Smidl */ //<<<<<<< .mine #include "robustlib.h" #include "trading_models_lib.h" #include #include "estim/arx.h" //======= //#include "application/robust/robustlib.h" ma tu byt aj daka cesta k tomu suboru? #include "trading_models_lib.h" #include "estim/arx.h" #include #include #include #include //>>>>>>> .r1284 using namespace bdm; double sumastlpec(int k,vector pole,vector pravd) { double r=0; for (int i=0;i < pole.size();i++) { r+=pole[i][k+4]*pravd[i][k]; //r=r+exp(pole[i][k+4]-m[k+4]+pravd[i][k]); } //cout <<"r"<< log(r); return r; //log } int main () { char* outfile_strings[18] = {"prsti_BO_.txt", "prsti_PA_.txt", "prsti_PL_.txt", "prsti_AD_.txt", "prsti_BP_.txt", "prsti_C__.txt", "prsti_CC_.txt", "prsti_CD_.txt", "prsti_CL_.txt", "prsti_CT_.txt", "prsti_CU_.txt", "prsti_ED_.txt", "prsti_FC2.txt", "prsti_FV2.txt", "prsti_GC_.txt", "prsti_HG_.txt", "prsti_HO_.txt", "prsti_HU_.txt"}; char* file_strings[18] = {"c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\BO_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\PA_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\PL_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\AD_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\BP_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\C__.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\CC_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\CD_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\CL_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\CT_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\CU_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\ED_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\FC2.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\FV2.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\GC_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\HG_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\HO_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\HU_.txt"}; //for (int a=0;a<18;a++) //{ int a=3; vector> ADdata; //nacitavanie dat do pola ADdata -funguje spravne ifstream myfile(file_strings[a]); //"C:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-Mathematika\\CL_.txt"); if (myfile.is_open()) { while ( myfile.good() ) { string line; getline(myfile,line); vector parsed_line; while(line.find(' ') != string::npos) //jeden kanal je jeden riadok, na zaciatku a na konci {,}, data oddelene ciarkou a medzerou. { line.erase(0,1); //toto nie je yrovna peknz sposob,ale pri poslednom nacitani cisla v riadku sme uz nemali ziadnu medyeru a cyklus by sa posledny krat nevykonal, tak tu medzeru odstranujeme vzdy tu int loc = line.find(','); //ale pri poslednom cisla to nenajde ziadnu ciaarku, tak potom co prida do parsed_line? parsed_line.push_back(line.substr(0,loc)); line.erase(0,loc+1); //odstranujeme ciarku za kazdym cislom } ADdata.push_back(parsed_line); //3927 dat v riadku, 6 riadkov } } myfile.close(); //konec nacitavania dat /* //to malo byt rpevedenie str na double, aspon mysslim std::istringstream stme,stmd; //je to dake chybne, aj cisla z toho ADdata cita/zapisuje trochu ine double d,e; vector data_rozdiel; for (int b=0;b>d; for (int c=1;c>e; cout< norm; //do norm zapisujeme normalizacne faktory for (int h=1;h<=2;h++) //cyklus ktory ovplzvnuje konstantu h=1- model s konstantou, h=2, bez konstanty { bool b; //b pouzivame pri set_constant if(h==2) b=false; else b=true; int g=2; while (g<=4) //cyklus co meni rozmery matice V { mat V0 = 0.0001*eye ( g ); // aj tato matica ma vplyv na normalizacny faktor, nemoze byt aj preto taky velky, ako inak by sa dala zvolit? int p=0; while (p<=1) //tento cyklus prechadza vacsinou len raz, vtedy p=0 a nic to neovplvni, ale pri AR(2) modely to bude vykonavat 2 krat aj pre p=1, ked bude brat do condition aj rozne kanale z toho isteho casu { int i=0; while(i < ADdata.size()-p) //niekedy sa ten cyklus ma vykonat len raz, preto nepouzivam for cyklus { int j=p*(i+1); //j=0 alebo j=i+1 while(j < ADdata.size()) { ARX Ar; RARX RAr(g+h-3,0,b); Ar.set_statistics ( 1, V0 ); //nu is default (set to have finite moments) Ar.set_constant ( b ); Ar.validate(); // forgetting is default: 1.0 vec pomocka; //pri kazdej jednej hypoteze zapisujeme normalizacne faktory do pomocky, tu potom ako riadok pridame do norm for(int k = 0;k<341;k++) //prechadyame "po riadkoch", teda v case. Nejake hodnoty su len po index 340, dalej uz #INF000 { vec condition; vec predikce; predikce.ins(0,ADdata[3][k+2]); //predpovede nacitavame a zadavame do Bayes zvlast condition.ins(0,ADdata[i][k+1]); condition.ins(1,ADdata[j][k+p]);//zalezi na poradi v conditions? Teraz su na zaciatku starsie data //cout<log_nc; norm.push_back(pomocka); if ((g==3 && h==2) || (g==4)) //tento cyklus sa bude opakovat, len ak mame maticu V0 roymeru 4x4, to je AR(2) model s konst, alebo podobne len g=3, h=2, teda AR(2)bez kons { j++; } else { j=ADdata.size(); //priradenim tejto hodnoty do j sa cyklus uz viac krat nevykona } } if (b==true && g==2) //pre model AR(0) s konstantou robi tento cyklus len raz, v ostatnych pripadoch viac-krat { i=ADdata.size(); } else { i++; } } if ((g==3 && h==2) || (g==4) ) {p++;} else {p=2;} } if (h==2 && g==3) //pripad g=4, a konstanta zaroven nas uz nezaujima, vtedy to ukoncime { g=5; //ak priradime takuto hodnotu, cyklus while sa uz nevykona } else { g++; } } } //pocitanie maxima y kaydeho stlpcu norm vector max; for (int i=4;i<345;i++) { double pom=norm[0][i]; for (int j=1;j nfaktor; for (int j=1;j prsti; int m,n,p; for(p=0;p<115;p++) { vec k; k.ins(0,1/115.); //log prsti.push_back(k); } // v ramci riadku v poli norm su hodnoty pre jednu hypotezu v roznych casoch, pocitanie pravdepodobnosti z norm. faktorov for (m=0;m