root/applications/trading_models/trading_models_main.cpp @ 1398

Revision 1360, 8.7 kB (checked in by pierre2, 14 years ago)

vratane robust, aj pravdepodobnosti rata pre laplacovo rozdelenie

Line 
1
2/*!
3\file
4\brief Robust
5\author Vasek Smidl
6
7 */
8
9//<<<<<<< .mine
10#include "robustlib.h"
11#include "trading_models_lib.h"
12#include <iostream>
13#include "estim/arx.h"
14
15//=======
16#include "trading_models_lib.h"
17#include "estim/arx.h"
18#include <vector>
19#include <string>
20#include <sstream>
21#include <fstream>
22
23
24//>>>>>>> .r1284
25using namespace bdm;
26
27double sumastlpec(int k,vector<vec> pole,vector<vec> pravd) { 
28        double r=0;
29        for (int i=0;i < pole.size();i++)
30        {
31                r+=pole[i][k+5]*pravd[i][k];
32        }
33        return r;
34        }
35
36int main () {
37        //toto by bralo rozne subory, ale teraz to je zakomentovane, pouyivam len jeden
38        char* outfile_strings[19] = {"prsti_CL_.txt", "prsti_HO_.txt", "prsti_HU_.txt", "prsti_NG_.txt", "prsti_AD_.txt", "prsti_BP_.txt", "prsti_CD_.txt", "prsti_CU_.txt", "prsti_SF_.txt", "prsti_BO_.txt", "prsti_C__.txt", "prsti_CT_.txt", "prsti_MW_.txt", "prsti_W__.txt", "prsti_GC_.txt", "prsti_HG_.txt", "prsti_PA_.txt", "prsti_PL_.txt", "prsti_SI_.txt"};
39        char* file_strings[19] = {"c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\CL_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\HO_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\HU_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\NG_.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\\CD_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\CU_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\SF_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\BO_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\C__.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\CT_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\MW_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\W__.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\\PA_.txt","c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\PL_.txt","c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\SI_.txt"};
40        //for (int a=0;a<20;a++)
41        //{
42        int a=8; //volbou a menime pouzity subor
43        vector<vector<string>> ADdata;     //nacitavanie dat do pola ADdata
44                ifstream myfile(file_strings[a]);                               //"C:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-Mathematika\\CL_.txt");
45                if (myfile.is_open())
46                {
47                        while ( myfile.good() )
48                        {
49                                string line;
50                                getline(myfile,line);
51                                vector<string> parsed_line;                             
52                                while(line.find(' ') != string::npos) //jeden kanal je jeden riadok, na zaciatku a na konci {,}, data oddelene ciarkou a medzerou.
53                                {
54                                        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
55                                        int loc = line.find(',');   //ale pri poslednom cisla to nenajde ziadnu ciaarku, tak potom co prida do parsed_line?
56                                        parsed_line.push_back(line.substr(0,loc));     
57                                        line.erase(0,loc+1);                            //odstranujeme ciarku za kazdym cislom
58                                }                               
59                                ADdata.push_back(parsed_line); //3927 dat v riadku, 6 riadkov
60                        }
61                }
62                myfile.close();  //konec nacitavania dat
63               
64                vector<vec> norm; //do tychto  poli zapisujeme normalizacne faktory
65                vector<vec> nfaktor;
66                for (int h=1;h<=2;h++) //cyklus ktory ovplyvnuje konstantu h=1- model s konstantou, h=2, bez konstanty
67                { 
68                        bool b;                 //b pouzivame pri set_constant
69                        if(h==2)
70                                b=false;   
71                        else
72                                b=true;
73                        int g=2;
74                        while (g<=4)  //cyklus co meni rozmery matice V
75                        {
76                                mat V0 = 0.0001*eye ( g );                             
77                                int p=0;
78                                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
79                                {
80                                        int i=0;
81                                        while(i < ADdata.size()-p) //niekedy sa ten cyklus ma vykonat len raz, preto nepouzivam for cyklus
82                                        {       
83                                                int j=p*(i+1); //j=0 alebo j=i+1
84                                                while(j < ADdata.size())
85                                                {
86                                                        ARX Ar;
87                                                        RARX Rar(g-1,0,b);
88                                                        Ar.set_statistics ( 1, V0 ); //nu is default (set to have finite moments)
89                                                        Ar.set_constant ( b );
90                                                        Ar.validate();  // forgetting is default: 1.0
91                                                        vec pomocka1;  //pri kazdej jednej hypoteze zapisujeme normalizacne faktory do pomocky, tu potom ako riadok pridame do norm
92                                                        vec pomocka2; 
93                                                        for(int k = 0;k<6;k++) //prechadzame "po riadkoch", teda v case
94                                                        {
95                                                                vec condition; 
96                                                                vec predikce;
97                                                                predikce.ins(0,ADdata[3][k+2]);                 //predpovede nacitavame a zadavame do Bayes zvlast
98                                                                condition.ins(0,ADdata[i][k+1]);                               
99                                                                condition.ins(1,ADdata[j][k+p]);        //teraz su starsie data viac vpravo
100                                                                Ar.bayes(predikce,condition.right(g+h-3));      //z condition berem len urcity pocet prvkov, bud 0, 1,alebo 2, lebo nepotrebujem vzdy vsetky (AR(1) model)                                     
101                                                                condition.ins(0,predikce);
102                                                                if (g+h!=3) Rar.bayes(condition.left(g+h-2)); // podmienka brani aby sme nepouzivali robust pre AR(o) model len s konstantou
103                                                                //cout<< "Normalne rozdel" <<Ar.posterior().lognc();
104                                                                //cout << "Lapla normalizacny faktor" <<Rar.posterior->log_nc;
105                                                                pomocka1.ins(pomocka1.size(),Ar.posterior().lognc()); //nie je tu exponenciala! -aby to bolo mensie
106                                                                if (g+h!=3) pomocka2.ins(pomocka2.size(),exp(Rar.posterior->log_nc));                                                           
107                                                        } 
108                                                        //pridame na zaciatok cisla, ktore urcuje y akeho modelu budu pravdepodobnosti
109                                                        pomocka1.ins(0,j+1);
110                                                        pomocka1.ins(0,i+1);
111                                                        pomocka1.ins(0,g);
112                                                        pomocka1.ins(0,h);
113                                                        pomocka1.ins(0,1); // jednotka na zaciatku znamena normalne rozdelenie
114                                                        pomocka2.ins(0,j+1);
115                                                        pomocka2.ins(0,i+1);
116                                                        pomocka2.ins(0,g);
117                                                        pomocka2.ins(0,h);
118                                                        pomocka2.ins(0,2); //2 bude ako Laplacovo
119                                                        norm.push_back(pomocka1); 
120                                                        if (g+h!=3) nfaktor.push_back(pomocka2);  //sem idu tie s Laplacovzm rozdelenim
121                                                        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
122                                                        {
123                                                                j++;
124                                                        } else
125                                                        {
126                                                                j=ADdata.size();        //priradenim tejto hodnoty do j sa cyklus uz viac krat nevykona
127                                                        }
128                                                }
129                                                if (b==true && g==2) //pre model AR(0) s konstantou robi tento cyklus len raz, v ostatnych pripadoch viac-krat
130                                                {
131                                                        i=ADdata.size();
132                                                } else
133                                                {
134                                                        i++;
135                                                }
136                                        }
137                                        if ((g==3 && h==2) || (g==4) )
138                                        {p++;} else {p=2;}
139                                }
140                                if (h==2 && g==3) //pripad g=4, a konstanta zaroven nas uz nezaujima, vtedy to ukoncime
141                                {
142                                        g=5; //ak priradime takuto hodnotu, cyklus while sa uz nevykona
143                                } else
144                                {
145                                        g++;
146                                }
147                        }
148                }
149                //pocitanie maxima z kazdeho stlpcu norm
150                vector<double> max;
151                for (int i=5;i<norm[1].size();i++) 
152                {
153                        double pom=norm[0][i];
154                        for (int j=1;j<norm.size();j++)
155                        {
156                                if (pom<norm[j][i])
157                                {
158                                        pom=norm[j][i];
159                                }                       
160                        }
161                        max.push_back(pom);
162                }
163                //v poli nfaktor uz mame zapisane normalizacne faktory pre Laplacovo rozdelenie, nie su take velke, preto nerobime odcitanie maxima
164                // teraz odcitujeme od tych y normalnym rozdelenim maximum a pridame dalej do pola nfaktor
165                        for (int i=0;i<norm.size();i++)
166                        {
167                                vec riadok;
168                                for (int j=0;j<5;j++)
169                                {
170                                        riadok.ins(riadok.size(),norm[i][j]);   //toto pridava tie cisla na zaciatku, ktore urcuju o aky model sa jedna
171                                }
172                                for (int j=0;j<norm[i].size()-5;j++)
173                                {
174                                        riadok.ins(riadok.size(),exp(norm[i][j+5]-max[j]));                     
175                                }
176                                nfaktor.push_back(riadok); 
177                        }
178                        // nfaktor ma 229 riadkov, to je 229 hypotez
179                        vector<vec> prsti; 
180                        int m,n,p;
181                        for(p=0;p<229;p++) 
182                        {
183                                vec k;
184                                k.ins(0,1/229.);
185                                prsti.push_back(k);
186                        }
187                        // v ramci riadku v poli nfaktor su hodnoty pre jednu hypotezu v roznych casoch, pocitanie pravdepodobnosti z norm. faktorov
188                        for (m=0;m<nfaktor[2].size()-5;m++) 
189                        {       double k=sumastlpec(m,nfaktor,prsti);
190                                for(n=0;n < nfaktor.size();n++)
191                                {
192                                        prsti[n].ins(prsti[n].size(),nfaktor[n][m+5]*prsti[n][m]/k);
193                                }
194                        }               
195                        ofstream file; 
196                        file.open(outfile_strings[a]);                  //"prsti_hypot.txt",ios::app);
197                        for(int i=0;i < prsti.size();i++)
198                        {
199                                file << nfaktor[i][0] <<" "<<nfaktor[i][1]<<" "<<nfaktor[i][2]<<" "<<nfaktor[i][3]<<" "<<nfaktor[i][4]<<" ";
200                                for(int j=0;j < prsti[i].size();j++)
201                                {
202                                        if(j!=prsti[i].size()-1)
203                                        {
204                                                file << prsti[i][j]<<" "; 
205                                        }else
206                                        {
207                                                file<<prsti[i][j]<<endl; 
208                                        }                                       
209                                }
210                        }
211                        file<<endl;
212                        file.close();
213                //}     
214        }
215
216
217       
Note: See TracBrowser for help on using the browser.