#include "TMath.h" #include "TCanvas.h" #include "TRandom.h" #include "TGraph.h" #include "Riostream.h" #include "exception" void train() { Int_t ntrain = 200; Int_t n = 378; Int_t i = 0; Int_t start = 100; Int_t end = start + n; Int_t nlines = 479; Float_t price0, price1, price2, price3, price4, price5; Float_t list0[479]; Float_t list1[479]; Float_t list2[479]; Float_t list3[479]; Float_t list4[479]; Float_t list5[479]; Double_t params[5]; Float_t x[378]; Float_t y1[378]; Float_t y2[378]; Float_t money = 10000; Float_t stock = 0; Float_t total = 10000; ifstream in; in.open("data.txt"); for (i=0;i> price5 >> price4 >> price3 >> price2 >> price1 >> price0 ; list0[i] = price0 ; list1[i] = price1 ; list2[i] = price2 ; list3[i] = price3 ; list4[i] = price4 ; list5[i] = price5 ; } in.close(); for (i=start;iBranch("price5",&price5,"price5/F"); milk->Branch("price4",&price4,"price4/F"); milk->Branch("price3",&price3,"price3/F"); milk->Branch("price2",&price2,"price2/F"); milk->Branch("price1",&price1,"price1/F"); milk->Branch("price0",&price0,"price0/F"); for (j=0;jFill(); } fout.cd(); milk->Write(); TMultiLayerPerceptron *mlp = new TMultiLayerPerceptron("price0,price1,price2,price3,price4:10:price5",milk,"Entry$%2","(Entry$+1)%2"); mlp->Train(ntrain, "update=10"); mlp->DumpWeights("milk.txt"); fout.Close(); train_file = new TFile("milk.root","read"); milk1 = (TTree * )train_file->Get("milk"); milk1.SetBranchAddress("price5",&price5); milk1.SetBranchAddress("price4",&price4); milk1.SetBranchAddress("price3",&price3); milk1.SetBranchAddress("price2",&price2); milk1.SetBranchAddress("price1",&price1); milk1.SetBranchAddress("price0",&price0); TMultiLayerPerceptron *mlp1 = new TMultiLayerPerceptron("price0,price1,price2,price3,price4:10:price5",milk1); mlpa = new TMLPAnalyzer(mlp1); mlpa->GatherInformations(); mlpa->CheckNetwork(); mlp1->LoadWeights("milk.txt"); // today is list5[i], // day-1 params[0] = list0[i-2]; params[1] = list1[i-2]; params[2] = list2[i-2]; params[3] = list3[i-2]; params[4] = list4[i-2]; val0 = mlp1->Evaluate(0, params); // day0 params[0] = list0[i-1]; params[1] = list1[i-1]; params[2] = list2[i-1]; params[3] = list3[i-1]; params[4] = list4[i-1]; val1 = mlp1->Evaluate(0, params); // day1 is today params[0] = list0[i]; params[1] = list1[i]; params[2] = list2[i]; params[3] = list3[i]; params[4] = list4[i]; val2 = mlp1->Evaluate(0, params); // day2 /* params[0] = list0[i+1]; params[1] = list1[i+1]; params[2] = list2[i+1]; params[3] = list3[i+1]; params[4] = list4[i+1]; val2 = mlp1->Evaluate(0, params); */ y1[i-start] = list5[i]; y2[i-start] = val2; x[i-start] = i; printf("%s %f %s %f %s %f %s %f %s %f \n", "ANN_yesterday=", val0, "ANN_today=",val1, "ANN_tomorrow=",val2, "Money = ",money, "Stock=",stock); printf("%s %f %s %f %s %f %s %f %s %f \n", "Rea_yesterday=", list5[i-1], "Rea_today=",list5[i], "Rea_tomorrow=",list5[i+1], "Money = ",money, "Stock=",stock); if (( val1 < val0) && (val1 < val2)){ if (money>1){ stock = money/list5[i]; money = 0; total = stock*list5[i]; printf(" %f %f %f %s %f %s \n ", money, stock,list5[i], "Total=", total, "---------------------------buy"); } } if (( val1 > val0) && (val1 > val2)){ if (stock>1){ money = stock*list5[i]; stock = 0; total = money; printf(" %f %f %f %s %f %s \n ", money, stock,list5[i],"Total=",total, "---------------------------sell"); } } } TCanvas *c1 = new TCanvas("c1", "Vavilov density"); c1->SetGrid(); c1->SetFillColor(0); c1->SetFrameFillColor(0); c1->SetFrameLineWidth(2); c1->SetFrameBorderMode(0); c1->SetFrameBorderSize(2); hpx = new TH2F("graph","graph",10,start,end,20,0,3); hpx->Draw(); TGraph *gr1 = new TGraph(n,x,y1); TGraph *gr2 = new TGraph(n,x,y2); gr1->GetXaxis()->SetNdivisions(606); gr1->SetLineWidth(2); gr1->SetMarkerStyle(25); gr1->SetMarkerSize(0.7); gr1->Draw("L"); gr2->GetXaxis()->SetNdivisions(606); gr2->SetMarkerStyle(30); gr2->SetMarkerSize(0.7); gr2->SetLineWidth(2); gr2->SetLineColor(2); gr2->Draw("L"); }