root/applications/trading_models/trading_models_main.cpp @ 1340

Revision 1338, 9.4 kB (checked in by sindj, 13 years ago)

Zacatky experimentovani v robustlib. Zacleneni vypoctu polynomialni rovnice pro optimalni akci s vyuzitim funkce itpp::roots(). Odstranovani zbylych chyb. JS

Line 
1
2/*!
3\file
4\brief Robust
5\author Vasek Smidl
6
7 */
8
9//<<<<<<< .mine
10#include "trading_models_lib.h"
11#include <iostream>
12#include "estim/arx.h"
13//=======
14#include "trading_models_lib.h"
15#include "estim/arx.h"
16#include <vector>
17#include <string>
18#include <sstream>
19#include <fstream>
20
21
22//>>>>>>> .r1284
23using namespace bdm;
24
25/*
26string cislo(string s)   // tato procedura spracova tie cisla z toho textoveho suboru tak aby sa odstranilo to e-001 a boli v spravnom
27                                                //formate. Lebo predtym to vyhadyovalo divne cisla, nevedel som ci je to zato, ze bayes si  stym neporadi, ale yjavne nepomohlo
28{
29        int b=s.find('e');
30        string t=s.substr(0,b);
31        string poz=s.substr(b+1,s.size());
32
33        istringstream g(poz);
34        int pozc;
35        g>>pozc;
36        istringstream k(t);
37        double csl;
38        k>>csl;
39        if (pozc<0) //pozc moze byt niekedy aj kladne
40        {
41                for(int i=1;i<=-pozc;i++)
42                csl/=10;
43        } else
44        {
45                for(int j=1;j<=pozc;j++)
46                csl*=10;
47        }
48       
49        ostringstream o;
50        o<<csl;
51        return o.str();
52} */
53
54double sumastlpec(int k,vector<vec> pole,vector<vec> pravd) {  //robi sumu k-teho stlpca, pouzivam na konci pri ratani pravdepodobnosti
55        double r=0;
56        for (int i=0;i<pole.size();i++)
57        {
58                r+=pole[i][k]*pravd[i][k];
59        }
60        return r;
61                }
62
63int main () {
64        vector<vector<string>> ADdata;     //nacitavanie dat do pola ADdata -funguje spravne
65                ifstream myfile("C:\\AD_dataupravene.txt");
66                if (myfile.is_open())
67                {
68                        while ( myfile.good() )
69                        {
70                                string line;
71                                getline(myfile,line);
72                                vector<string> parsed_line;                             
73                                while(line.find(' ') != string::npos) //jeden kanal je jeden riadok, na zaciatku a na konci {,}, data oddelene ciarkou a medzerou.
74                                {
75                                        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
76                                        int loc = line.find(',');   //ale pri poslednom cisla to nenajde ziadnu ciaarku, tak potom co prida do parsed_line?
77                                        parsed_line.push_back(line.substr(0,loc));     
78                                        line.erase(0,loc+1);                            //odstranujeme ciarku za kazdym cislom
79                                }                               
80                                ADdata.push_back(parsed_line); //3927 dat v riadku, 6 riadkov
81                        }
82                }
83                myfile.close();  //konec nacitavania dat
84
85                vector<vec> norm; //do norm zapisujeme normalizacne faktory
86                for (int h=1;h<=2;h++) //cyklus ktory ovplzvnuje konstantu h=1- model s konstantou, h=2, bez konstanty
87                { 
88                        bool b;                 //b pouzivame pri set_constant
89                        if(h==2)
90                                b=false;   
91                        else
92                                b=true;
93                        int g=2;
94                        while (g<=4)  //cyklus co meni rozmery matice V
95                        {
96                                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?
97                               
98                                int p=0;
99                                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
100                                {
101                                        int i=0;
102                                        while(i < ADdata.size()-p) //niekedy sa ten cyklus ma vykonat len raz, preto nepouzivam for cyklus
103                                        {       
104                                                int j=p*(i+1); //j=0 alebo j=i+1
105                                       
106                                                while(j < ADdata.size())
107                                                {
108                                                        ARX Ar;
109                                                        Ar.set_statistics ( 1, V0 ); //nu is default (set to have finite moments)
110                                                        Ar.set_constant ( b );
111                                                        Ar.validate();  // forgetting is default: 1.0
112                                                        vec pomocka;  //pri kazdej jednej hypoteze zapisujeme normalizacne faktory do pomocky, tu potom ako riadok pridame do norm
113                                                        for(int k = 0;k<341;k++) //prechadyame "po riadkoch", teda v case. Nejake hodnoty su len po index 340, dalej uz #INF000
114                                                        {
115                                                                vec condition; 
116                                                                vec predikce;
117                                                                predikce.ins(0,ADdata[3][k+2]);                 //predpovede nacitavame a zadavame do Bayes zvlast
118                                                                condition.ins(0,ADdata[i][k+1]);                                       
119                                                                condition.ins(0,ADdata[j][k+p]);//zmena i -> j aby to bralo regresory z roznych riadkov, ak p=1 bereme data z toho isteho casu
120                                                               
121                                                                cout << "Pred:" << predikce << ", ";
122                                                                cout << "Cond:" << condition << endl;
123                                                               
124                                                                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)                                     
125                                                                pomocka.ins(pomocka.size(),Ar.posterior().lognc()); //nie je tu exponenciala! -aby to bolo mensie
126                                                        }                                       
127                                                        norm.push_back(pomocka); 
128                                                        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
129                                                        {
130                                                                j++;
131                                                        } else
132                                                        {
133                                                                j=ADdata.size();        //priradenim tejto hodnoty do j sa cyklus uz viac krat nevykona
134                                                        }
135                                                }
136                                                if (b==true && g==2) //pre model AR(0) s konstantou robi tento cyklus len raz, v ostatnych pripadoch viac-krat
137                                                {
138                                                        i=ADdata.size();
139                                                } else
140                                                {
141                                                        i++;
142                                                }
143                                        }
144                                        if ((g==3 && h==2) || (g==4) )
145                                        {p++;} else {p=2;}
146                                }
147                                if (h==2 && g==3) //pripad g=4, a konstanta zaroven nas uz nezaujima, vtedy to ukoncime
148                                {
149                                        g=5; //ak priradime takuto hodnotu, cyklus while sa uz nevykona
150                                } else
151                                {
152                                        g++;
153                                }
154                        }
155                }
156
157                /*  //tu je to povodne
158                mat V0 = 0.0001 * eye ( 2 );  //pre pripad samotnej konstanty
159                ARX Ar;
160                Ar.set_statistics ( 1, V0 ); //nu is default (set to have finite moments)
161                Ar.set_constant ( true );
162                Ar.validate();                  // forgetting is default: 1.0
163                vector<double> pom1;
164                for(int k = 0;k<140;k++) //prechadyame "po riadkoch"
165                        {
166                                vec predikce;
167                                vec cond;
168                                cond.ins(0,ADdata[3][3]);
169                                predikce.ins(0,ADdata[3][k+2]);                 //predpovede nacitavame a zadavame do Bayes zvlast
170                                Ar.bayes(predikce,cond.right(0));                                       
171                                pom1.push_back(exp(Ar.posterior().lognc()));
172                        } 
173                norm.push_back(pom1); 
174               
175                for (int a=2;a<=3;a++)  //AR(1) bez a potom s konstantou
176                {
177                        bool b=false;                   //b pouzivame pri set_constant
178                        if(a==3)
179                                b=true;
180                        mat V0 = 0.0001 * eye ( a );  //pre pripad samotnej konstanty
181                       
182                        for (int p=0;p < ADdata.size();p++)
183                        {
184                                ARX Ar;
185                                Ar.set_statistics ( 1, V0 ); //nu is default (set to have finite moments)
186                                Ar.set_constant ( b );
187                                Ar.validate();                  // forgetting is default: 1.0
188                                vector<double> pom1;
189                                for(int k = 0;k<140;k++) //prechadyame "po riadkoch"
190                                {
191                                        vec predikce;
192                                        vec condition;
193                                        condition.ins(0,ADdata[p][k]);
194                                        predikce.ins(0,ADdata[3][k+1]);                 //predpovede nacitavame a zadavame do Bayes zvlast
195                                        Ar.bayes(predikce,condition);                                   
196                                        pom1.push_back(exp(Ar.posterior().lognc()));
197                                } 
198                                norm.push_back(pom1);  //normalizacne faktory pre urcitu kombinaciu regresorov(teda po kazdom riadku) ulozi do pola norm
199                        }
200                }
201               
202               
203                for (int g=3;g<=4;g++)  //tento cyklus je az do konca, raz to robime s konstantou, raz bez.
204                {
205                        bool b;                 //b pouzivame pri set_constant
206                        if(g==3)
207                                b=false;   
208                        else
209                                b=true;
210                        mat V0 = 0.0001 * eye ( g );
211                        for(int i = 0;i < ADdata.size();i++) //po pocet riadkov, co bz malo byt 6
212                        {
213                                for(int j = i+1; j<ADdata.size();j++)
214                                {
215                                        ARX Ar;
216                                        Ar.set_statistics ( 1, V0 ); //nu is default (set to have finite moments)
217                                        Ar.set_constant ( b );
218                                        Ar.validate();
219                                                        // forgetting is default: 1.0
220                                        vector<double> pomocka;
221                                        for(int k = 0;k<140;k++) //prechadyame "po riadkoch"
222                                        {
223                                                vec condition; 
224                                                vec predikce;
225                                                predikce.ins(0,ADdata[3][k+1]);                 //predpovede nacitavame a zadavame do Bayes zvlast
226                                                condition.ins(0,ADdata[i][k]);                                         
227                                                condition.ins(0,ADdata[j][k]);//zmena i -> j qby to bralo regresory z roznych riadkov                   
228                                                Ar.bayes(predikce,condition);                                   
229                                                pomocka.push_back(exp(Ar.posterior().lognc()));
230                                        }                                       
231                                        norm.push_back(pomocka); 
232                                }
233                        }               
234                        for(int i = 0;i < ADdata.size();i++) //po pocet riadkov, co bz malo byt 6
235                        {
236                                for(int j = 0; j<ADdata.size();j++)
237                                {
238                                        ARX Ar;
239                                        Ar.set_statistics ( 1, V0 ); //nu is default (set to have finite moments)
240                                        Ar.set_constant ( b );
241                                        Ar.validate();
242                                                        // forgetting is default: 1.0
243                                        vector<double> pomocka;
244                                        for(int k = 0;k<140;k++) //prechadyame "po riadkoch"
245                                        {
246                                                vec condition; 
247                                                vec predikce;
248                                                predikce.ins(0,ADdata[3][k+2]);                 //predpovede nacitavame a zadavame do Bayes zvlast
249                                                condition.ins(0,ADdata[i][k]);
250                                               
251                                                condition.ins(0,ADdata[j][k+1]);//zmena i -> j qby to bralo regresory z roznych riadkov                 
252                                                Ar.bayes(predikce,condition);                                   
253                                                pomocka.push_back(Ar.posterior().lognc());
254                                        } 
255                                       
256                                        norm.push_back(pomocka); 
257                                }
258                        }
259                }*/
260                        vector<vec> prsti; //hypotez je 85
261                        int m,n,p;
262                        for(p=0;p<115;p++) //inicializuem apriorne pravdepodobnosti
263                        {
264                                vec k;
265                                k.ins(0,1/115.);
266                                prsti.push_back(k);
267                        }
268                        // v ramci riadku v poli norm su hodnoty pre jednu hypotezu v roznych casoch, pocitanie pravdepodobnosti z norm. faktorov
269                        for (m=0;m<norm[1].size();m++) 
270                        {       double k=sumastlpec(m,norm,prsti);
271                                for(n=0;n < norm.size();n++)
272                                {
273                                        prsti[n].ins(prsti[n].size(),norm[n][m]*prsti[n][m]/k);                         
274                                }
275                        }               
276                        ofstream file;  //zapis pravdepodobnosti do suboru
277                        file.open("prsti_hypot.txt");
278                        for(int i=0;i < prsti.size();i++)
279                        {
280                                for(int j=0;j < prsti[i].size();j++)
281                                {
282                                        if(j!=prsti[i].size()-1)
283                                        {
284                                                file << prsti[i][j]<<" ";
285                                        }else
286                                        {
287                                                file<<prsti[i][j]<<endl;
288                                        }                                       
289                                }
290                        }
291                        file<<endl;
292                        file.close();
293               
294        }
295
296
297       
Note: See TracBrowser for help on using the browser.