//---------------------------------------------------------------------------
#include <stdio.h>
#include <math.hpp>
#include <vcl.h>
#include <string>
#include <vcl.h>
#include <string.h>
#include "Unit1.h"
#include <quicksort.h>
#include <cci.h>

//---------------------------------------------------------------------------
#pragma hdrstop
#pragma package(smart_init)
#pragma link "PERFGRAP"
#pragma link "CGAUGES"
#pragma resource "*.dfm"

FILE *VstSoubor, *VystSoubor,*Info,*backtest_s,*Info_test;
// ukazatele na vstupni/vystupni soubory
int pocet_baru=5,proces=0,wO=0,wH=0,wL=0,wC=0,podobnost_pocitadlo=0;
//pocet_baru - z kolik baru se bude maximalne hledat hyp. pattern   // wO,wH.. - vahy pri pouziti zdroje dat OHLC price
int i=0,carky=0,profit_target=0,stop_loss=0,delka_obchodu=0,poprve=0,poprve2=0,poprve3=0;
//i - pomcona promena pri nacitani dat //carky-pocitani carek pri nacitani dat
//profit_target - definovany profit  //stop_loss-definovana ztrata  //delka_obchodu - maximalni delka trvani obchodu
long int pocet_radku=0;
//pocet radku v nactenem vstupnim souboru
AnsiString Open1,High1,Low1,Close2,status,Volume,Time1;
//Open1,High1.... - jednotlive hodnoty ceny vstupniho souboru jako pomocne promene pro prevod na cislo //status-aktualni status pro zobrazeni v stavovem radku
char radek[100];
//radek - pro nacitani jednotlivych radku ze souboru
float dolar=0,*pole_CHaPL_filtr_1,*pole_CHaPL_filtr_2;
//dolar - ke konverzi bodu/dolar //typical_price-pole hodnot Typical_Price //pole_CHaPL_filtr_1 - pole chyb //pole_CHaPL_filtr_2 - pole profitu/ztrat
float *pole_dat_time,*pole_dat_O,*pole_dat_H,*pole_dat_L,*pole_dat_C;
float *OOS_pole_dat_time,*OOS_pole_dat_O,*OOS_pole_dat_H,*OOS_pole_dat_L,*OOS_pole_dat_C,*OOS_backtest_chyba,*backtest_chyba;
float komise_uceni=0,mez_podobnosti=0; //poplatky pri uceni
//jednotlive hodnoty ceny v ciselne podobe
int *pole_strategii_1,*pole_strategii_2,perioda_1,perioda_2,perioda_3,perioda_4,perioda_5,delka_hypot_patternu=0,krok=0,chyba_filtr=0;
// pole_strategii_1 - pocateni pozice nelzenych strategii //pole_strategii_2 - koncove pozice nalezenych strategii //chyba_filtr=0 - chyba u casoveho filtru
//perioda_1 - perioda pri vypoctech indikatoru //delka_hypot_patternu - maximalni delka hypotetickeho patternu //krok=0 - rozliseni pri hledani hypotetickeho vzoru
int akt_radek=0,strategie_nalezena=0,j=0,priznak=0,x=0,minimum_accumulation=0;
//akt_radek - pozice aktualne zpracovavaneho radku //strategie_nalezena - promena pri nalezeni strategii //priznak-pomocna prom. pri nalezeni profitu/ztrat u backtestingu
//x - pocet nalezenych strategii //minimum_accumulation - minmalni hodnota naakumulovane profitu pri filtrovani,zdali je vzor smysluplny
int TimeFiltr1Start=0,TimeFiltr1Stop=0;
int TimeFiltr2Start=0,TimeFiltr2Stop=0;
int TimeFiltr3Start=0,TimeFiltr3Stop=0;
int TimeFiltr4Start=0,TimeFiltr4Stop=0;
int TimeFiltr5Start=0,TimeFiltr5Stop=0;
//promene pri vyuziti casoveho filtru
int pocet_kont_ztrat=0,pocet_kont_ztrat_max=0,pocet_kont_profitu=0,pocet_kont_profitu_max=0,priznak_podobnosti=0;//promene pro maximalni pocet ztrat/profitu za sebou
int pocet_profitu=0,pocet_ztrat=0,pocet_nul=0,pocet_obchodu=0;//promene pro vypocet % uspesnosti
float prumerny_profit=0,prumerna_ztrata=0,rrr=0,maximum_back_uceni=0;
float chyba_maxima=0;
int zdroj_dat=0,check=0,pom=0,pocitadlo_ignore=0;
bool generate=false;
char buffer[5],buffer_s[100],nazev_souboru[20],info[200],typ_dat[50],typ_dat_1[10],typ_dat_2[10],typ_dat_3[10],typ_dat_4[10],typ_dat_5[10];
//buffer-pom. prom. pri ukladani do souboru //nazev_souboru - nazev ukladaneho souboru //info - informace o provedenem backtestingu ve fazi uceni
int souradnice_strategie=0,akt_pocet_baru=0;
//souradnice_strategie - souradnice strategie,se kterou se prave pracuje //akt_pocet_baru
float chyba=0,chybaH=0,chybaL=0,chybaC=0,chybaO=0,akt_data[100][5],hyp_pattern[100][5],offset=0,chyba_1=0,chyba_2=0,chyba_3=0,chyba_4=0,chyba_5=0;
//chyba... - pom. prom. pri vypoctu chyby //akt_data-aktaulne nactena data,ktera se porovnavaji z hypot. vzorem //hyp_pattern-aktualne nacteny hyp.pat. pred danou strategii
int poc=0,pozice_maxima=0,poc_back=0;
float *suma_PL,maximum=0,*typical_price,*OOS_backtest;
//suma_PL - pole,ktere je vytvoreno sumou serazenych profitu a ztrat //maximum-maximalni naakumulovany profit ze sumy
TForm1 *Form1;
AnsiString buffer1,buffer3,buffer4,bufferO,bufferH,bufferL,bufferC,bufferTP,buffer_1,buffer_2,buffer_3,buffer_4,buffer_5;
//pomocne promenne pri ukladani ifnormaci do souboru
float  *indi_1,*indi_2,*indi_3,*indi_4,*indi_5,*backtest;
int pom2=0,pom_backtest=0;//pomocna promena pro zapis poctu zvolenych indikatoru
AnsiString profit,stop,OOS_soubor,delka_vzoru,chyba_vzoru,open_file,high_file,low_file,close_file,indi1_file,indi2_file,indi3_file,indi4_file,indi5_file,mez_chyby;
AnsiString typ_indi_1_ansi,typ_indi_2_ansi,typ_indi_3_ansi,typ_indi_4_ansi,typ_indi_5_ansi,perioda_1_ansi,perioda_2_ansi,perioda_3_ansi,perioda_4_ansi,perioda_5_ansi,tvar_vzoru;;
int typ_dat_vzor=0,delka_vzoru_1=0,mezery=0,poc_indi=0,typ_strategie=0,OOS_pom=0,radiogroup_pom=0,typ_chyby=0,minimum_backtest=0,obchod_proveden;
float min_norm=999999999,max_norm=0,chyba_vzoru_1=0,mez_chyby_1=0,komise_backtest=0;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
// Implicitni nastaveni programu
Memo1->Clear();
Memo3->Clear();
Edit1->Clear();
Edit2->Clear();
Edit3->Clear();
Edit4->Clear();
Edit5->Text = "0";
Edit6->Text = "0000";
Edit7->Text = "2359";
Edit8->Text = "0000";
Edit9->Text = "0000";
Edit10->Text = "0000";
Edit11->Text = "0000";
Edit12->Text = "0000";
Edit13->Text = "0000";
Edit14->Text = "0000";
Edit15->Text = "0000";
Edit16->Text = "1";
Edit17->Text = "1";
Edit18->Text = "1";
Edit19->Text = "1";
Edit16->Enabled=false;
Edit17->Enabled=false;
Edit18->Enabled=false;
Edit19->Enabled=false;
Edit20->Text = "5";
Edit21->Clear();
Edit22->Clear();
Edit23->Clear();
Edit24->Clear();
Edit25->Clear();
Edit26->Text = "1";
Edit27->Text = "1";
Edit28->Clear();
Edit29->Clear();
Edit30->Clear();
Edit31->Clear();
Edit32->Clear();
Edit33->Clear();
Edit34->Clear();
CheckBox6->Enabled=false;
CheckBox7->Enabled=false;
CheckBox8->Enabled=false;
CheckBox9->Enabled=false;
CheckBox10->Enabled=false;
ComboBox1->Enabled=false;
ComboBox2->Enabled=false;
ComboBox3->Enabled=false;
ComboBox4->Enabled=false;
ComboBox5->Enabled=false;
Edit21->Enabled=false;
Edit22->Enabled=false;
Edit23->Enabled=false;
Edit24->Enabled=false;
Edit25->Enabled=false;
Edit8->Enabled=false;
Edit9->Enabled=false;
Edit10->Enabled=false;
Edit11->Enabled=false;
Edit12->Enabled=false;
Edit13->Enabled=false;
Edit14->Enabled=false;
Edit15->Enabled=false;


}
//---------------------------------------------------------------------------


void soubor_out_of_sample()        // funkce vytvorena pro ulozeni informaci o vzorech do souboru
{
        //ulozeni typu zvolene strategie
        backtest_s = fopen (nazev_souboru,"w");
        if ((typ_strategie == 0)&&(OOS_pom == 0)) sprintf(info,"Strategie: LONG, out of sample backtesting");
        if ((typ_strategie == 1)&&(OOS_pom == 0)) sprintf(info,"Strategie: SHORT, out of sample backtesting");
        if ((typ_strategie == 0)&&(OOS_pom == 1)) sprintf(info,"Strategie: LONG, in sample backtesting");
        if ((typ_strategie == 1)&&(OOS_pom == 1)) sprintf(info,"Strategie: SHORT, in sample backtesting");
        sprintf(buffer_s,"%s",info);
        fputs(buffer_s, backtest_s);
        fputc('\n',backtest_s);

        // vypocet prumerneho profitu
        prumerny_profit=prumerny_profit/pom_backtest;
        prumerna_ztrata=prumerna_ztrata/pom_backtest;
        pom++; //pomocna promena pri pocitani uspesnych vzoru pri uceni
        sprintf(info,"                                                                                    ");
        sprintf(info,"win %f, lose %f, zero %f",(float(pocet_profitu)/float(pom_backtest))*100,(float(pocet_ztrat)/float(pom_backtest))*100,100-((float(pocet_profitu)/float(pom_backtest))*100 + ((float(pocet_ztrat)/float(pom_backtest)*100))));
        sprintf(buffer_s,"%s",info);
        fputs(buffer_s, backtest_s);
        fputc('\n',backtest_s);

        //vypocet prumerne ztraty
        sprintf(info,"                                                                                     ");
        if (prumerna_ztrata!=0) {sprintf(info,"RRR : %f",(prumerny_profit/prumerna_ztrata)*(-1));} else {sprintf(info,"RRR : XXX");}
        sprintf(buffer_s,"%s",info);
        fputs(buffer_s, backtest_s);
        fputc('\n',backtest_s);

        //vypocet po sobe jdoucich ztrat
        sprintf(info,"                                                                                     ");
        sprintf(info,"Pocet kontinualnich ztrat : %d, pocet kontinualnich profitu : %d",pocet_kont_ztrat_max,pocet_kont_profitu_max);
        sprintf(buffer_s,"%s",info);
        fputs(buffer_s, backtest_s);
        fputc('\n',backtest_s);

        //celkovy pocet provedenych obchodu
        sprintf(info,"                                                                                     ");
        sprintf(info,"Pocet obchodu : %d",pocet_obchodu);
        sprintf(buffer_s,"%s",info);
        fputs(buffer_s, backtest_s);
        fputc('\n',backtest_s);

        // maximalni dosazeny profit v equity krivce
        sprintf(info,"                                                                                     ");
        sprintf(info,"Maximalni profit : %f",maximum);
        sprintf(buffer_s,"%s",info);
        fputs(buffer_s, backtest_s);
        fputc('\n',backtest_s);

        //zaznam typu zvolenych vstupnich dat
        sprintf(info,"                                                                                     ");
        if (typ_dat_vzor == 0)sprintf(info,"Typ vstupnich dat : OHLC price");
        if (typ_dat_vzor == 2)sprintf(info,"Typ vstupnich dat : Typical price");
        if (typ_dat_vzor == 1)sprintf(info,"Typ vstupnich dat : %s %d, %s %d, %s %d, %s %d, %s %d",typ_indi_1_ansi,perioda_1,typ_indi_2_ansi,perioda_2,typ_indi_3_ansi,perioda_3,typ_indi_4_ansi,perioda_4,typ_indi_5_ansi,perioda_5);
        sprintf(buffer_s,"%s",info);
        fputs(buffer_s, backtest_s);
        fputc('\n',backtest_s);

        //delka nalezeneho vzoru
        sprintf(info,"                                                                                     ");
        sprintf(info,"Delka vzoru : %d",delka_vzoru_1);
        sprintf(buffer_s,"%s",info);
        fputs(buffer_s, backtest_s);
        fputc('\n',backtest_s);

        //zaznam vzoru v normalizovane podobe pro zvoleny typ vstupnich dat OHLC
    if (typ_dat_vzor == 0)
    {
          for (int a=0;a<delka_vzoru_1;a++)
        {
         sprintf(info,"                                                                                       ");
         bufferO=("0.000",RoundTo(hyp_pattern[a][0], -3));
         bufferH=("0.000",RoundTo(hyp_pattern[a][1], -3));
         bufferL=("0.000",RoundTo(hyp_pattern[a][2], -3));
         bufferC=("0.000",RoundTo(hyp_pattern[a][3], -3));

         sprintf(info,"%s %s %s %s",bufferO,bufferH,bufferL,bufferC);
         sprintf(buffer_s,"%s",info);
         fputs(buffer_s, backtest_s);
         fputc('\n',backtest_s);
        }
    }
        //zaznam vzoru v normalizovane podobe pro zvoleny typ vstupnich dat Indicators
    if (typ_dat_vzor == 1)
    {
          for (int a=0;a<delka_vzoru_1;a++)
        {
         sprintf(info,"                                                                                          ");
         buffer_1=("0.000",RoundTo(hyp_pattern[a][0], -3));
         buffer_2=("0.000",RoundTo(hyp_pattern[a][1], -3));
         buffer_3=("0.000",RoundTo(hyp_pattern[a][2], -3));
         buffer_4=("0.000",RoundTo(hyp_pattern[a][3], -3));
         buffer_5=("0.000",RoundTo(hyp_pattern[a][3], -3));

         if (poc_indi==1) sprintf(info,"%s",buffer_1);
         if (poc_indi==2) sprintf(info,"%s %s",buffer_1,buffer_2);
         if (poc_indi==3) sprintf(info,"%s %s %s",buffer_1,buffer_2,buffer_3);
         if (poc_indi==4) sprintf(info,"%s %s %s %s",buffer_1,buffer_2,buffer_3,buffer_4);
         if (poc_indi==5) sprintf(info,"%s %s %s %s %s",buffer_1,buffer_2,buffer_3,buffer_4,buffer_5);
         sprintf(buffer_s,"%s",info);
         fputs(buffer_s, backtest_s);
         fputc('\n',backtest_s);
        }
    }
         //zaznam vzoru v normalizovane podobe pro zvoleny typ vstupnich dat Typical Price
    if (typ_dat_vzor == 2)
    {
        for (int a=0;a<delka_vzoru_1;a++)

        {
         sprintf(info,"                                                                                         ");
         bufferTP=("0.000",RoundTo(hyp_pattern[a][0], -3));

         sprintf(info,"%s",bufferTP);
         tvar_vzoru=puts(info);
         sprintf(buffer_s,"%s",info);
         fputs(buffer_s, backtest_s);
         fputc('\n',backtest_s);
        }
    }


        for (proces=0;proces<pom_backtest;proces++) //proces vypsani distribuce zisku a ztrat pri prubehu
        {

                          if (OOS_pom==0) buffer1=AnsiString::FormatFloat("0.000",RoundTo(OOS_backtest_chyba[proces], -3));
                          if (OOS_pom==1) buffer1=AnsiString::FormatFloat("0.000",RoundTo(backtest_chyba[proces], -3));         //prevod kvuli hodne desetinnym mist u souboru float-prevedeme na tri desetine mista
                          sprintf(buffer_s,"%s",buffer1);
                          fputs(buffer_s, backtest_s);

                          fputc(' ',backtest_s);

                          if (OOS_pom==0) buffer1=AnsiString::FormatFloat("0.0",RoundTo(OOS_backtest[proces], -1));
                          if (OOS_pom==1) buffer1=AnsiString::FormatFloat("0.0",RoundTo(backtest[proces], -1));        //prevod kvuli hodne desetinnym mist u souboru float-prevedeme na tri desetine mista
                          sprintf(buffer_s,"%s",buffer1);
                          fputs(buffer_s, backtest_s);

                          fputc(' ',backtest_s);

                          buffer1=AnsiString::FormatFloat("0.0",RoundTo(suma_PL[proces], -1));         //prevod kvuli hodne desetinnym mist u souboru float-prevedeme na tri desetine mista
                          sprintf(buffer_s,"%s",buffer1);
                          fputs(buffer_s, backtest_s);


                          fputc('\n',backtest_s);
        }
 fclose(backtest_s);
}



// vypocet klouzaveho prumeru
void moving_average(float *close_price,int perioda,float *moving_average,int pocet_radku)
{
  float pom=0;
  for(int a=0;a<pocet_radku-perioda;a++)
        {
         for(int b=0;b<perioda;b++)
         {
               pom=pom+close_price[a+b];
         }
          moving_average[a+perioda-1]=pom/perioda;
          pom=0;
        }
}

void indi(float *H,float *L,float *C) //vypocet jednotlivych indikatoru pri jejich vyberu
{
  if (poc_indi > 0)
  {

        if (typ_indi_1_ansi == "CCI")  cci(H,L,C,perioda_1,indi_1,pocet_radku);
        if (typ_indi_1_ansi == "MA") moving_average(C,perioda_1,indi_1,pocet_radku);

  }

    if (poc_indi > 1)
  {

        if (typ_indi_2_ansi == "CCI")cci(H,L,C,perioda_2,indi_2,pocet_radku);
        if (typ_indi_2_ansi == "MA") moving_average(C,perioda_2,indi_2,pocet_radku);

  }

    if (poc_indi > 2)
  {

        if (typ_indi_3_ansi == "CCI") cci(H,L,C,perioda_3,indi_3,pocet_radku);
        if (typ_indi_3_ansi == "MA") moving_average(C,perioda_3,indi_3,pocet_radku);

  }

    if (poc_indi > 3)
  {

        if (typ_indi_4_ansi == "CCI")cci(H,L,C,perioda_4,indi_4,pocet_radku);
        if (typ_indi_4_ansi == "MA") moving_average(C,perioda_4,indi_4,pocet_radku);

  }

    if (poc_indi > 4)
  {

        if (typ_indi_5_ansi == "CCI")cci(H,L,C,perioda_5,indi_5,pocet_radku);
        if (typ_indi_5_ansi == "MA") moving_average(C,perioda_5,indi_5,pocet_radku);

  }
}

void info_o_vzorech() //ukladani informaci o vsech vzorech do jednoho souboru bez prubehu distribuce zisku a ztrat
{
        if (poprve == 0)
        {
        poprve=1;
        if (typ_strategie == 0) sprintf(info,"//Strategie: LONG, Profit %d $, Ztrata %d $\\",profit_target,stop_loss);
        if (typ_strategie == 1) sprintf(info,"//Popis strategie: SHORT, Profit %d $, Ztrata %d $\\",profit_target,stop_loss);
        sprintf(buffer,"%s",info);
        fputs(buffer, Info);
        fputc('\n',Info);
        }

        pom++; //pomocna promena pri pocitani uspesnych vzoru pri uceni
        sprintf(info,"                                                                                    ");
        fputc('#',Info);
        fputc('\n',Info);
        sprintf(info,"Strategie nalezena na pozici : %d",pole_strategii_1[poc]);
        sprintf(buffer,"%s",info);
        fputs(buffer, Info);
        fputc('\n',Info);

        sprintf(info,"                                                                                     ");
        sprintf(info,"Delka patternu : %d",akt_pocet_baru);
        sprintf(buffer,"%s",info);
        fputs(buffer, Info);
        fputc('\n',Info);

        sprintf(info,"                                                                                     ");
        buffer3=("0.0",RoundTo(maximum, -1));
        sprintf(info,"Maximalni naakumulovany cisty profit: %s $, s poplatky: %f $",buffer3,maximum - pozice_maxima*komise_uceni);
        sprintf(buffer,"%s",info);
        fputs(buffer, Info);
        fputc('\n',Info);

        sprintf(info,"                                                                                     ");
        buffer3=("0.0",RoundTo(suma_PL[pocet_radku-1], -1));
        sprintf(info,"Posledni hodnota naakumulovaneho profitu : %s $",buffer3);
        sprintf(buffer,"%s",info);
        fputs(buffer, Info);
        fputc('\n',Info);


        sprintf(info,"                                                                                      ");
        if (radiogroup_pom == 0 )
        {
        buffer3=("0.000",RoundTo(chyba_maxima, -3));
        sprintf(info,"Chyba pri maximalni naakumulovanem profitu (1st error method): %s ",buffer3);
        }

        if (radiogroup_pom == 1 )
        {
        buffer3=("0.00",RoundTo(mez_podobnosti, -3));
        sprintf(info,"Mez podobnosti (2nd error method) : %s , pocet obchodu : %d",buffer3,podobnost_pocitadlo);
        }

        sprintf(buffer,"%s",info);
        fputs(buffer, Info);
        fputc('\n',Info);


        sprintf(info,"                                                                                       ");
        sprintf(info,"Typ vstupnich dat%s ",typ_dat);
        sprintf(buffer,"%s",info);
        fputs(buffer, Info);
        fputc('\n',Info);








}

void zapis_do_souboru()// zaznam Backtestingu do souboru
{
        sprintf(nazev_souboru,"Strategy%d_%d.txt",poc,akt_pocet_baru);
        VystSoubor = fopen (nazev_souboru,"w");

        buffer3=("0.0",RoundTo(maximum, -1));
        buffer4=("0.0",RoundTo(suma_PL[pocet_radku-1], -1));
        sprintf(info,"Maximalni naakumulovany profit : %s $. Posledni hodnota : %s $",buffer3,buffer4);
        sprintf(buffer,"%s",info);
        fputs(buffer, VystSoubor);
        fputc('\n',VystSoubor);

        for (proces=0;proces<pocet_radku-delka_obchodu-1;proces++)
        {

                          buffer1=AnsiString::FormatFloat("0.000",RoundTo(pole_CHaPL_filtr_1[proces], -3));         //prevod kvuli hodne desetinnym mist u souboru float-prevedeme na tri desetine mista
                          sprintf(buffer,"%s",buffer1);
                          fputs(buffer, VystSoubor);

                          fputc(' ',VystSoubor);

                          buffer1=AnsiString::FormatFloat("0.0",RoundTo(pole_CHaPL_filtr_2[proces], -1));         //prevod kvuli hodne desetinnym mist u souboru float-prevedeme na tri desetine mista
                          sprintf(buffer,"%s",buffer1);
                          fputs(buffer, VystSoubor);

                          fputc(' ',VystSoubor);

                          buffer1=AnsiString::FormatFloat("0.0",RoundTo(suma_PL[proces], -1));         //prevod kvuli hodne desetinnym mist u souboru float-prevedeme na tri desetine mista
                          sprintf(buffer,"%s",buffer1);
                          fputs(buffer, VystSoubor);


                          fputc('\n',VystSoubor);
        }



        proces=0;
        fclose(VystSoubor);
}


void __fastcall TForm1::Close1Click(TObject *Sender)
{
delete suma_PL;
delete pole_CHaPL_filtr_1;
delete pole_CHaPL_filtr_2;
delete pole_dat_time;
delete pole_dat_O;
delete pole_dat_H;
delete pole_dat_L;
delete pole_dat_C;

Form1->Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Openfile1Click(TObject *Sender)  // funkce tlacitka pro nacteni zdrojoveho souboru, na kterem bude provedeno uceni
{
        status="Input file: Loading...";
        StatusBar1->Panels->Items[0]->Text=status;

if (OpenDialog1->Execute())
    {

        pocet_radku=0;
        Edit1->Text = OpenDialog1->FileName;
        Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
        VstSoubor = fopen(Edit1->Text.c_str(), "rt");

    while ( (fgets(radek, 100, VstSoubor)) != NULL) pocet_radku++;       //vypocet poctu radku
        rewind(VstSoubor);              //ukazatel souboru na zacatek
    CGauge2->MaxValue = pocet_radku;
        //cyklus pro projeti celeho souboru po radcich
pole_dat_time=new float[pocet_radku];
pole_dat_O=new float[pocet_radku];
pole_dat_H=new float[pocet_radku];
pole_dat_L=new float[pocet_radku];
pole_dat_C=new float[pocet_radku];


    while(akt_radek < pocet_radku)
    {
        //nacteni O H L C
        fgets(radek, 100, VstSoubor);

        while (radek[i]!= '\n' )             //nacteni radku
        {
         i++;
          if (carky==1 && radek[i] != ',') {if (radek[i]==':'){Time1=Time1;} else Time1=Time1+AnsiString(radek[i]);}
          if (carky==2 && radek[i] != ',') {if (radek[i]=='.'){Open1=Open1+AnsiString(',');}else Open1=Open1+AnsiString(radek[i]);}
          if (carky==3 && radek[i] != ',') {if (radek[i]=='.'){High1=High1+AnsiString(',');}else High1=High1+AnsiString(radek[i]);}
          if (carky==4 && radek[i] != ',') {if (radek[i]=='.'){Low1=Low1+AnsiString(',');}else Low1=Low1+AnsiString(radek[i]);}
          if (carky==5 && radek[i] != ',') {if (radek[i]=='.'){Close2=Close2+AnsiString(',');}else Close2=Close2+AnsiString(radek[i]);}
          if (carky==6 && radek[i] != ',' && radek[i] != '\n') Volume=Volume+AnsiString(radek[i]);
          if (radek[i] == ',' ) carky++;
         }
        i=0;
        carky=0;
        CGauge2->Progress++;
        pole_dat_time[akt_radek]=(StrToFloat(Time1));
        pole_dat_O[akt_radek]=(StrToFloat(Open1));
        pole_dat_H[akt_radek]=(StrToFloat(High1));
        pole_dat_L[akt_radek]=(StrToFloat(Low1));
        pole_dat_C[akt_radek]=(StrToFloat(Close2));

        //posun na dalsi radek
        akt_radek++;
        //vynulovani pomocnych promennych
        Time1=0;
        Open1=0;
        High1=0;
        Low1=0;
        Close2=0;
    }
    }
    akt_radek=0;//nulovani ukazatele radku v poli kvuli dalsimu pouziti
        status="Input file: Loaded";
        StatusBar1->Panels->Items[0]->Text=status;




}//---------------------------------------------------------------------------



//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)//funkce tlacitka SAVE strategy, ktera ulozi jednotlive nastaveni procesu uceni a provede vypocet indikatory nebo typical price
{
  mez_podobnosti = StrToFloat(Edit34->Text);
  komise_uceni = StrToFloat(Edit33->Text);
  if (CheckBox13->Checked == true ) {generate=true;} else{generate=false;}
  if (Strategy->ItemIndex == 0) {typ_strategie=0;} else{typ_strategie=1;}
  profit_target=StrToInt(Edit2->Text);
  stop_loss=StrToInt(Edit3->Text);
  delka_obchodu=StrToInt(Edit4->Text);
  wO=StrToInt(Edit16->Text);
  wH=StrToInt(Edit17->Text);
  wL=StrToInt(Edit18->Text);
  wC=StrToInt(Edit19->Text);
  delka_hypot_patternu=StrToInt(Edit20->Text);
  krok=StrToInt(Edit26->Text);
  minimum_accumulation=StrToInt(Edit28->Text);
  int pom=0;
  indi_1=new float[pocet_radku];
  indi_2=new float[pocet_radku];
  indi_3=new float[pocet_radku];
  indi_4=new float[pocet_radku];
  indi_5=new float[pocet_radku];

  typical_price=new float[pocet_radku];
  /*osetreni minimalni delky paternu=2 pri vyberu Indicators a Typical Price*/
  akt_pocet_baru=StrToInt(Edit27->Text);
  if ((akt_pocet_baru < 2) && ( DataSource->ItemIndex != 0))
  {
     akt_pocet_baru=2;
     Edit27->Text=akt_pocet_baru;
  }
  /**************************************************************************/

  //vypocet hodnot pro pole indikatoru

  //prepocet hodnot jednotlivych indikatoru pocitej az po splneni podminky zaskrtnuti Typical Price v objektu Data source
  if (DataSource->ItemIndex==2)
  {

    for(int a=0;a<pocet_radku;a++)
        {
            typical_price[a]=(pole_dat_H[a]+pole_dat_L[a]+pole_dat_C[a])/3;
        }

  }
  //prepocet hodnot jednotlivych indikatoru pocitej az po splneni podminky zaskrtnuti Indicators v objektu Data source
if (DataSource->ItemIndex==1)
{

  if (CheckBox6->Checked)
  {
        perioda_1=StrToInt(Edit21->Text);
        if (perioda_1>0)
        {
        if (ComboBox1->Text == "CCI")  cci(pole_dat_H,pole_dat_L,pole_dat_C,perioda_1,indi_1,pocet_radku);
        if (ComboBox1->Text == "MA") moving_average(pole_dat_C,perioda_1,indi_1,pocet_radku);
        }else ShowMessage("Change indicator period");
  }

    if (CheckBox7->Checked)
  {
        perioda_2=StrToInt(Edit22->Text);
        if (perioda_2>0)
        {
        if (ComboBox2->Text == "CCI")cci(pole_dat_H,pole_dat_L,pole_dat_C,perioda_2,indi_2,pocet_radku);
        if (ComboBox2->Text == "MA") moving_average(pole_dat_C,perioda_2,indi_2,pocet_radku);
        }else ShowMessage("Change indicator period");
  }

    if (CheckBox8->Checked)
  {
        perioda_3=StrToInt(Edit23->Text);
        if (perioda_3>0)
        {
        if (ComboBox3->Text == "CCI") cci(pole_dat_H,pole_dat_L,pole_dat_C,perioda_3,indi_3,pocet_radku);
        if (ComboBox3->Text == "MA") moving_average(pole_dat_C,perioda_3,indi_3,pocet_radku);
        }else ShowMessage("Change indicator period");
  }

    if (CheckBox9->Checked)
  {
        perioda_4=StrToInt(Edit24->Text);
        if (perioda_4>0)
        {
        if (ComboBox4->Text == "CCI")cci(pole_dat_H,pole_dat_L,pole_dat_C,perioda_4,indi_4,pocet_radku);
        if (ComboBox4->Text == "MA") moving_average(pole_dat_C,perioda_4,indi_4,pocet_radku);
        }else ShowMessage("Change indicator period");
  }

    if (CheckBox10->Checked)
  {
        perioda_5=StrToInt(Edit25->Text);
        if (perioda_5>0)
        {
        if (ComboBox5->Text == "CCI")cci(pole_dat_H,pole_dat_L,pole_dat_C,perioda_5,indi_5,pocet_radku);
        if (ComboBox5->Text == "MA") moving_average(pole_dat_C,perioda_5,indi_5,pocet_radku);
        }else ShowMessage("Change indicator period");
  }


}

  ///// konec cyklu pro vypcoet hodnot indikatoru pro vstup na vyhledavani patternu



  chyba_filtr=0;  //nastaveni promene pro otestovani,zdali nebyl zadan vetsi pocatecni cas nez cas koncovy u casoveho filtru
  TimeFiltr1Start=0;TimeFiltr1Stop=0;
  TimeFiltr2Start=0;TimeFiltr2Stop=0;
  TimeFiltr3Start=0;TimeFiltr3Stop=0;
  TimeFiltr4Start=0;TimeFiltr4Stop=0;
  TimeFiltr5Start=0;TimeFiltr5Stop=0;
  if (CheckBox1->Checked) {TimeFiltr1Start=StrToInt(Edit6->Text);TimeFiltr1Stop=StrToInt(Edit7->Text);if (TimeFiltr1Start>TimeFiltr1Stop){chyba_filtr=1;ShowMessage("Error in time intervals setup");}}
  if (CheckBox2->Checked) {TimeFiltr2Start=StrToInt(Edit8->Text);TimeFiltr2Stop=StrToInt(Edit9->Text);if (TimeFiltr2Start>TimeFiltr2Stop){chyba_filtr=1;ShowMessage("Error in time intervals setup");}}
  if (CheckBox3->Checked) {TimeFiltr3Start=StrToInt(Edit10->Text);TimeFiltr3Stop=StrToInt(Edit11->Text);if (TimeFiltr3Start>TimeFiltr3Stop){chyba_filtr=1;ShowMessage("Error in time intervals setup");}}
  if (CheckBox4->Checked) {TimeFiltr4Start=StrToInt(Edit12->Text);TimeFiltr4Stop=StrToInt(Edit13->Text);if (TimeFiltr4Start>TimeFiltr4Stop){chyba_filtr=1;ShowMessage("Error in time intervals setup");}}
  if (CheckBox5->Checked) {TimeFiltr5Start=StrToInt(Edit14->Text);TimeFiltr5Stop=StrToInt(Edit15->Text);if (TimeFiltr5Start>TimeFiltr5Stop){chyba_filtr=1;ShowMessage("Error in time intervals setup");}}


  if ((Strategy->ItemIndex != 0) && (Strategy->ItemIndex != 1))   ShowMessage("Choose type of Strategy");

  if ((DataSource->ItemIndex != 0) && (DataSource->ItemIndex != 1) && (DataSource->ItemIndex !=2))   ShowMessage("Choose type of Data source");


  if ((CheckBox1->Checked==false)&&(CheckBox2->Checked==false)&&(CheckBox3->Checked==false)&&(CheckBox4->Checked==false)&&(CheckBox5->Checked==false)) ShowMessage("Choose Time Filer");

  //zjisteni kolik je zaskrtnutych checku pri volbe indiaktory
  if (CheckBox6->Checked) check=1;
  if (CheckBox7->Checked) check=2;
  if (CheckBox8->Checked) check=3;
  if (CheckBox9->Checked) check=4;
  if (CheckBox10->Checked) check=5;


  //definice typu vstupnich dat pro vyhledavani patternu
  pom2=0;
  if (DataSource->ItemIndex==0) {sprintf(typ_dat," : OHLC Price");zdroj_dat=0;}
  if (DataSource->ItemIndex==2) {sprintf(typ_dat," : Typical Price");zdroj_dat=2;}
  if (DataSource->ItemIndex==1)
  {
   zdroj_dat=1;
   sprintf(typ_dat_1,"");
   sprintf(typ_dat_2,"");
   sprintf(typ_dat_3,"");
   sprintf(typ_dat_4,"");
   sprintf(typ_dat_5,"");
   if (CheckBox6->Checked) {pom2++; if(ComboBox1->Text=="MA") {sprintf(typ_dat_1,"MA %d",perioda_1);}else {sprintf(typ_dat_1,"CCI %d",perioda_1);} }
   if (CheckBox7->Checked) {pom2++; if(ComboBox2->Text=="MA") {sprintf(typ_dat_2,"MA %d",perioda_2);}else {sprintf(typ_dat_2,"CCI %d",perioda_2);} }
   if (CheckBox8->Checked) {pom2++; if(ComboBox3->Text=="MA") {sprintf(typ_dat_3,"MA %d",perioda_3);}else {sprintf(typ_dat_3,"CCI %d",perioda_3);} }
   if (CheckBox9->Checked) {pom2++; if(ComboBox4->Text=="MA") {sprintf(typ_dat_4,"MA %d",perioda_4);}else {sprintf(typ_dat_4,"CCI %d",perioda_4);} }
   if (CheckBox10->Checked) {pom2++; if(ComboBox5->Text=="MA") {sprintf(typ_dat_5,"MA %d",perioda_5);}else {sprintf(typ_dat_5,"CCI %d",perioda_5);} }
   sprintf(typ_dat,", %d indi : %s, %s, %s, %s, %s;",pom2,typ_dat_1,typ_dat_2,typ_dat_3,typ_dat_4,typ_dat_5);
  }


}
//---------------------------------------------------------------------------





//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)//samotna funkce vzhledavani vzoru v datech
{
        Info = fopen ("patterns.txt","w");
        pole_CHaPL_filtr_1=new float[pocet_radku];
        pole_CHaPL_filtr_2=new float[pocet_radku];
        pole_strategii_1=new int[pocet_radku];
        pole_strategii_2=new int[pocet_radku];
        suma_PL=new float[pocet_radku];
        CGauge1->Progress =0;
        x=0;
        proces=0;
        dolar=StrToFloat(Edit5->Text);

        if (dolar!=0)
        {
 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        switch(Strategy->ItemIndex)
        {          //nalezeni vyskytnutych strategii
        case 0:
                {               //pro LONG
                proces=0;
                 while(proces <= (pocet_radku-delka_obchodu))    //prochazeni celeho souboru
                      {


                          while( j < delka_obchodu && priznak == 0)   // 0 - ztrata ; 1 - ani profit ani ztrata ; 2 - profit;  prochazeni poctu predikce
                          {
                          strategie_nalezena = 1;

                          if ((pole_dat_O[proces]+(profit_target*dolar))<=(pole_dat_H[proces+j])){ strategie_nalezena = 2;priznak=1;}   //nalezeni profitu

                          if ((pole_dat_O[proces]-(stop_loss*dolar))>=(pole_dat_L[proces+j])){strategie_nalezena = 0;priznak=1;}        //nalezeni ztraty

                          if (priznak==1 && strategie_nalezena == 2)
                                {
                                        pole_strategii_1[x]=proces;        //ukladani profitu do matice
                                        pole_strategii_2[x]=proces+j;
                                        x++;
                                }

                          j++;


                          }
                          j=0;
                          proces++;
                          priznak=0;
                      }


                }break;
        case 1: {               //pro SHORT
                proces=0;
                x=0;
                while(proces <= (pocet_radku-delka_obchodu))
                      {
                         while( j < delka_obchodu && priznak == 0)   // 0 - ztrata ; 1 - ani profit ani ztrata ; 2 - profit;
                          {
                          strategie_nalezena = 1;

                          if ((pole_dat_O[proces]-(profit_target*dolar))>=(pole_dat_L[proces+j])){ strategie_nalezena = 2;priznak=1;}

                          if ((pole_dat_O[proces]+(stop_loss*dolar))<=(pole_dat_H[proces+j])){strategie_nalezena = 0;priznak=1;}


                          if (priznak==1 && strategie_nalezena == 2)
                                {
                                        pole_strategii_1[x]=proces;
                                        pole_strategii_2[x]=proces+j;
                                        x++;
                                }

                          j++;


                          }
                          j=0;
                          proces++;
                          priznak=0;
                      }

                }


         }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//nacist souradnice prvni nalezene strategie


pocet_baru=StrToInt(Edit20->Text);
krok=StrToInt(Edit26->Text);

priznak=0;
proces=0;

CGauge1->MaxValue=x;
                             //hledani hypotetickeho patternu
    while (poc < x)  // x - pocet nalezenych strategii
        {
         souradnice_strategie=pole_strategii_1[poc];
 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       switch(DataSource->ItemIndex)
           {
           case 0:    //OHLC PRICE
                {
                  while (akt_pocet_baru <= pocet_baru && pocet_baru <= souradnice_strategie)
                        {

                               for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //nacteni hypotetickeho patternu
                                        {
                                        hyp_pattern[poc1][0]=pole_dat_O[souradnice_strategie-akt_pocet_baru+poc1];  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                        hyp_pattern[poc1][1]=pole_dat_H[souradnice_strategie-akt_pocet_baru+poc1];
                                        hyp_pattern[poc1][2]=pole_dat_L[souradnice_strategie-akt_pocet_baru+poc1];
                                        hyp_pattern[poc1][3]=pole_dat_C[souradnice_strategie-akt_pocet_baru+poc1];
                                        }


                               if (RadioGroup4->ItemIndex == 0)
                               {
                               //vypocet offsetu
                                        offset=hyp_pattern[0][0];
                               for (int poc1=0;poc1<akt_pocet_baru;poc1++)
                                        {
                                        hyp_pattern[poc1][0]=hyp_pattern[poc1][0]-offset;
                                        hyp_pattern[poc1][1]=hyp_pattern[poc1][1]-offset;
                                        hyp_pattern[poc1][2]=hyp_pattern[poc1][2]-offset;
                                        hyp_pattern[poc1][3]=hyp_pattern[poc1][3]-offset;
                                        }
                                //
                                }

                                if (RadioGroup4->ItemIndex == 1)  // vypocet normalizace
                                {
                                for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >hyp_pattern[poc1][2] ) min_norm=hyp_pattern[poc1][2];
                                 if ( max_norm <hyp_pattern[poc1][1] ) max_norm=hyp_pattern[poc1][1];
                                }
                                for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   hyp_pattern[poc1][0]=(hyp_pattern[poc1][0]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                   hyp_pattern[poc1][1]=(hyp_pattern[poc1][1]-min_norm)/(max_norm-min_norm);
                                   hyp_pattern[poc1][2]=(hyp_pattern[poc1][2]-min_norm)/(max_norm-min_norm);
                                   hyp_pattern[poc1][3]=(hyp_pattern[poc1][3]-min_norm)/(max_norm-min_norm);
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }


                                while (proces <= (pocet_radku-delka_obchodu-akt_pocet_baru)) // projeti vsech dat a porovnani s hypotetickym patternem
                                        {
                                         //casovy filtr. nebude porovnavat hypoteticky pattern s aktualnimy daty kdyz nebude v casovem filtru

                                         if (((pole_dat_time[proces]>TimeFiltr1Start && pole_dat_time[proces]<TimeFiltr1Stop)||(pole_dat_time[proces]>TimeFiltr2Start && pole_dat_time[proces]<TimeFiltr2Stop)||(pole_dat_time[proces]>TimeFiltr3Start && pole_dat_time[proces]<TimeFiltr3Stop)||(pole_dat_time[proces]>TimeFiltr4Start && pole_dat_time[proces]<TimeFiltr4Stop)||(pole_dat_time[proces]>TimeFiltr5Start && pole_dat_time[proces]<TimeFiltr5Stop))&&chyba_filtr==0)
                                          {

                                           if (proces != (souradnice_strategie-akt_pocet_baru)) //osetruje to,ze nebudeme testovat tu strategii,pred kterou byl nacten pattern
                                                {
                                                        for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //nacteni aktualnich dat
                                                            {
                                                                  akt_data[poc1][0]=pole_dat_O[proces+poc1];
                                                                  akt_data[poc1][1]=pole_dat_H[proces+poc1];
                                                                  akt_data[poc1][2]=pole_dat_L[proces+poc1];
                                                                  akt_data[poc1][3]=pole_dat_C[proces+poc1];
                                                            }
                                        if (RadioGroup4->ItemIndex == 0)
                                        {
                               //vypocet offsetu
                                                           offset=akt_data[0][0];
                                                           for (int poc1=0;poc1<akt_pocet_baru;poc1++)
                                                            {
                                                                   akt_data[poc1][0]=akt_data[poc1][0]-offset;
                                                                   akt_data[poc1][1]=akt_data[poc1][1]-offset;
                                                                   akt_data[poc1][2]=akt_data[poc1][2]-offset;
                                                                   akt_data[poc1][3]=akt_data[poc1][3]-offset;
                                                            }
                                        }

                                if (RadioGroup4->ItemIndex == 1)   //vypocet normlizace
                                {
                                for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >akt_data[poc1][2] ) min_norm=akt_data[poc1][2];
                                 if ( max_norm <akt_data[poc1][1] ) max_norm=akt_data[poc1][1];
                                }
                                for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   akt_data[poc1][0]=(akt_data[poc1][0]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                   akt_data[poc1][1]=(akt_data[poc1][1]-min_norm)/(max_norm-min_norm);
                                   akt_data[poc1][2]=(akt_data[poc1][2]-min_norm)/(max_norm-min_norm);
                                   akt_data[poc1][3]=(akt_data[poc1][3]-min_norm)/(max_norm-min_norm);
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }



                                                  chybaO=0;
                                                  chybaH=0;
                                                  chybaL=0;
                                                  chybaC=0;
                                               //Vypocet chybove funkce metodou nejmensich ctvrtercu
                                                  for(int poc1=0;poc1<akt_pocet_baru;poc1++)
                                                  {
                                                  chybaO=chybaO + (hyp_pattern[poc1][0] - akt_data[poc1][0])*(hyp_pattern[poc1][0] - akt_data[poc1][0]);
                                                  }
                                                  chybaO=chybaO/2;

                                                  for(int poc1=0;poc1<akt_pocet_baru;poc1++)
                                                  {
                                                  chybaH=chybaH + (hyp_pattern[poc1][1] - akt_data[poc1][1])*(hyp_pattern[poc1][1] - akt_data[poc1][1]);
                                                  }
                                                  chybaH=chybaH/2;

                                                  for(int poc1=0;poc1<akt_pocet_baru;poc1++)
                                                  {
                                                  chybaL=chybaL + (hyp_pattern[poc1][2] - akt_data[poc1][2])*(hyp_pattern[poc1][2] - akt_data[poc1][2]);
                                                  }
                                                  chybaL=chybaL/2;

                                                  for(int poc1=0;poc1<akt_pocet_baru;poc1++)
                                                  {
                                                  chybaC=chybaC + (hyp_pattern[poc1][3] - akt_data[poc1][3])*(hyp_pattern[poc1][3] - akt_data[poc1][3]);
                                                  }
                                                  chybaC=chybaC/2;

                                                  chyba= (wO*chybaO + wH*chybaH + wL*chybaL + wC*chybaC)*100000;//vypocet chyby
                                                  pole_CHaPL_filtr_1[proces]=chyba;     //zapis chyby do pole
                                  //////////////////  vypcoet profitu/ztraty pri prochazeni dat a vypoctu chyby
                                                  //pro LONG
                                       if (Strategy->ItemIndex==0)
                                            {
                                                  for (int poc1=0;poc1<delka_obchodu && priznak==0;poc1++)  //nacteni aktualnich dat
                                                            {

                                                               if ((pole_dat_O[proces+akt_pocet_baru]+(profit_target*dolar))<=(pole_dat_H[proces+akt_pocet_baru+poc1])){ strategie_nalezena = 2;priznak=1;}   //nalezeni profitu

                                                               if ((pole_dat_O[proces+akt_pocet_baru]-(stop_loss*dolar))>=(pole_dat_L[proces+akt_pocet_baru+poc1])){strategie_nalezena = 0;priznak=1;}        //nalezeni ztraty

                                                               if (poc1==delka_obchodu-1 && priznak==0) {strategie_nalezena=1;priznak=1;}
                                                            }
                                                            priznak=0;
                                                  switch(strategie_nalezena)
                                                  {
                                                        case 0:
                                                                {
                                                                 pole_CHaPL_filtr_2[proces]=-stop_loss;
                                                                 }break;

                                                        case 1:
                                                                {
                                                                 pole_CHaPL_filtr_2[proces]=(pole_dat_C[proces+akt_pocet_baru+delka_obchodu-1]-pole_dat_O[proces+akt_pocet_baru])*1/dolar;

                                                                }break;
                                                        case 2:
                                                                {
                                                                 pole_CHaPL_filtr_2[proces]=profit_target;


                                                                }
                                                  }



                                             }

                                                   //pro SHORT
                                       if (Strategy->ItemIndex==1)
                                            {
                                                  for (int poc1=0;poc1<delka_obchodu && priznak==0;poc1++)  //nacteni aktualnich dat
                                                            {
                                                               if ((pole_dat_O[proces+akt_pocet_baru]-(profit_target*dolar))>=(pole_dat_L[proces+akt_pocet_baru+poc1])){ strategie_nalezena = 2;priznak=1;}   //nalezeni profitu

                                                               if ((pole_dat_O[proces+akt_pocet_baru]+(stop_loss*dolar))<=(pole_dat_H[proces+akt_pocet_baru+poc1])){strategie_nalezena = 0;priznak=1;}        //nalezeni ztraty

                                                               if (poc1==delka_obchodu-1 && priznak==0) {strategie_nalezena=1;priznak=1;}
                                                            }
                                                            priznak=0;
                                                  switch(strategie_nalezena)
                                                  {
                                                        case 0:
                                                                {
                                                                 pole_CHaPL_filtr_2[proces]=-stop_loss;
                                                                }break;

                                                        case 1:
                                                                {
                                                                 pole_CHaPL_filtr_2[proces]=(pole_dat_O[proces+akt_pocet_baru]-pole_dat_C[proces+akt_pocet_baru+delka_obchodu-1])*1/dolar;

                                                                }break;
                                                        case 2:
                                                                {
                                                                 pole_CHaPL_filtr_2[proces]=profit_target;
                                                                }
                                                  }

                                    /////////////////////

                                           }

                                        }
                                    }
                                         proces++;



                        }


                         QuickSort(pole_CHaPL_filtr_1,pole_CHaPL_filtr_2,0,pocet_radku-delka_obchodu-akt_pocet_baru);

                         ////////////////////proces rozhodnuti o zajimavem patternu
                         //vypocet sumy profitu a ztrat serazeneho pole podle chyby

                        suma_PL[0]=pole_CHaPL_filtr_2[0];

                        for (int a=1;a<pocet_radku;a++)
                                {
                                suma_PL[a]=suma_PL[a-1]+pole_CHaPL_filtr_2[a];
                                }

                        maximum=0;
                        pozice_maxima=0;
                        for (int a=0;a<pocet_radku;a++)
                        {
                          if (maximum < suma_PL[a]) {maximum = suma_PL[a];chyba_maxima=pole_CHaPL_filtr_1[a];pozice_maxima=a;}
                        }


 if ((maximum > minimum_accumulation)&&(suma_PL[pocet_radku-1] < -5000))
{
        //zapis do souboru

  info_o_vzorech();


        sprintf(info,"                                                                                     ");
        sprintf(info,"Pozice maximalni profitu : %d",pozice_maxima);
        sprintf(buffer,"%s",info);
        fputs(buffer, Info);
        fputc('\n',Info);

        sprintf(info,"                                                                                        ");
        sprintf(info,"Tvar patternu v offset podobe : ");
        sprintf(buffer,"%s",info);
        fputs(buffer, Info);
        fputc('\n',Info);

          for (int a=0;a<akt_pocet_baru;a++)
        {
         sprintf(info,"                                                                                       ");
         bufferO=("0.000",RoundTo(hyp_pattern[a][0], -3));
         bufferH=("0.000",RoundTo(hyp_pattern[a][1], -3));
         bufferL=("0.000",RoundTo(hyp_pattern[a][2], -3));
         bufferC=("0.000",RoundTo(hyp_pattern[a][3], -3));

         sprintf(info,"%s %s %s %s",bufferO,bufferH,bufferL,bufferC);
         sprintf(buffer,"%s",info);
         fputs(buffer, Info);
         fputc('\n',Info);
        }
   if (generate==true)
   {
    zapis_do_souboru();
   }
}

                         proces=0;
                         akt_pocet_baru=akt_pocet_baru + krok;
                        }




                }break;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


/***************************************************************************************************************************/
           case 1:    //pro volbu vstupnich dat INDICATORS
                {
                     //osetreni toho, aby se zacaly vyhledavat vzory az po nejvetsi periode indikatoru
                     if ((pole_strategii_1[poc] > perioda_1) && (pole_strategii_1[poc] > perioda_2) && (pole_strategii_1[poc] > perioda_3) && (pole_strategii_1[poc] > perioda_4) && (pole_strategii_1[poc] > perioda_5))
                     {
                              while (akt_pocet_baru <= pocet_baru && pocet_baru <= souradnice_strategie)
                        {

                               for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //nacteni hypotetickeho patternu
                                        {
                                        if ( CheckBox6->Checked ) hyp_pattern[poc1][0]=indi_1[souradnice_strategie-akt_pocet_baru+poc1];  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                        if ( CheckBox7->Checked ) hyp_pattern[poc1][1]=indi_2[souradnice_strategie-akt_pocet_baru+poc1];
                                        if ( CheckBox8->Checked ) hyp_pattern[poc1][2]=indi_3[souradnice_strategie-akt_pocet_baru+poc1];
                                        if ( CheckBox9->Checked ) hyp_pattern[poc1][3]=indi_4[souradnice_strategie-akt_pocet_baru+poc1];
                                        if ( CheckBox10->Checked ) hyp_pattern[poc1][4]=indi_5[souradnice_strategie-akt_pocet_baru+poc1];
                                        }
                                //vypocet offsetu
                               if ( RadioGroup4->ItemIndex == 0)
                               {
                               offset=hyp_pattern[0][0];
                               for (int poc1=0;poc1<akt_pocet_baru;poc1++)
                                        {
                                        if ( CheckBox6->Checked ) hyp_pattern[poc1][0]=hyp_pattern[poc1][0]-offset;
                                        if ( CheckBox7->Checked ) hyp_pattern[poc1][1]=hyp_pattern[poc1][1]-offset;
                                        if ( CheckBox8->Checked ) hyp_pattern[poc1][2]=hyp_pattern[poc1][2]-offset;
                                        if ( CheckBox9->Checked ) hyp_pattern[poc1][3]=hyp_pattern[poc1][3]-offset;
                                        if ( CheckBox10->Checked ) hyp_pattern[poc1][4]=hyp_pattern[poc1][4]-offset;
                                        }
                               }

                                if (RadioGroup4->ItemIndex == 1)
                                {
                                if ( CheckBox6->Checked )
                                {
                                for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >hyp_pattern[poc1][0] ) min_norm=hyp_pattern[poc1][0];
                                 if ( max_norm <hyp_pattern[poc1][0] ) max_norm=hyp_pattern[poc1][0];
                                }
                                for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   hyp_pattern[poc1][0]=(hyp_pattern[poc1][0]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }

                                if ( CheckBox7->Checked )
                                {
                                for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >hyp_pattern[poc1][1] ) min_norm=hyp_pattern[poc1][1];
                                 if ( max_norm <hyp_pattern[poc1][1] ) max_norm=hyp_pattern[poc1][1];
                                }
                                for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   hyp_pattern[poc1][1]=(hyp_pattern[poc1][1]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }

                       if ( CheckBox8->Checked )
                                {
                                for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >hyp_pattern[poc1][2] ) min_norm=hyp_pattern[poc1][2];
                                 if ( max_norm <hyp_pattern[poc1][2] ) max_norm=hyp_pattern[poc1][2];
                                }
                                for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   hyp_pattern[poc1][2]=(hyp_pattern[poc1][2]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }

                       if ( CheckBox9->Checked )
                                {
                                for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >hyp_pattern[poc1][3] ) min_norm=hyp_pattern[poc1][3];
                                 if ( max_norm <hyp_pattern[poc1][3] ) max_norm=hyp_pattern[poc1][3];
                                }
                                for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   hyp_pattern[poc1][3]=(hyp_pattern[poc1][3]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }

                       if ( CheckBox10->Checked )
                                {
                                for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >hyp_pattern[poc1][4] ) min_norm=hyp_pattern[poc1][4];
                                 if ( max_norm <hyp_pattern[poc1][4] ) max_norm=hyp_pattern[poc1][4];
                                }
                                for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   hyp_pattern[poc1][4]=(hyp_pattern[poc1][4]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }

                       }

                                while (proces <= (pocet_radku-delka_obchodu-akt_pocet_baru)) // projeti vsech dat a porovnani s hypotetickym patternem
                                        {


                                           if ((proces != (souradnice_strategie-akt_pocet_baru)) && ((proces > perioda_1) && (proces > perioda_2) &&(proces > perioda_3) &&(proces > perioda_4) &&(proces > perioda_5))) //osetruje to,ze nebudeme testovat tu strategii,pred kterou byl nacten pattern
                                                {
                                                        for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //nacteni aktualnich dat
                                                            {
                                                                  if ( CheckBox6->Checked ) akt_data[poc1][0]=indi_1[proces+poc1];
                                                                  if ( CheckBox7->Checked ) akt_data[poc1][1]=indi_2[proces+poc1];
                                                                  if ( CheckBox8->Checked ) akt_data[poc1][2]=indi_3[proces+poc1];
                                                                  if ( CheckBox9->Checked ) akt_data[poc1][3]=indi_4[proces+poc1];
                                                                  if ( CheckBox10->Checked ) akt_data[poc1][4]=indi_5[proces+poc1];
                                                            }

                                                       if (RadioGroup4->ItemIndex == 0)
                                                       {
                                                       offset=akt_data[0][0];
                                                       for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //offset
                                                            {
                                                                  if ( CheckBox6->Checked ) akt_data[poc1][0]=akt_data[poc1][0]-offset;
                                                                  if ( CheckBox7->Checked ) akt_data[poc1][1]=akt_data[poc1][1]-offset;
                                                                  if ( CheckBox8->Checked ) akt_data[poc1][2]=akt_data[poc1][2]-offset;
                                                                  if ( CheckBox9->Checked ) akt_data[poc1][3]=akt_data[poc1][3]-offset;
                                                                  if ( CheckBox10->Checked ) akt_data[poc1][4]=akt_data[poc1][4]-offset;
                                                            }
                                                       }

                                if (RadioGroup4->ItemIndex == 1)
                                {

                                if ( CheckBox6->Checked )
                                {
                                for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >akt_data[poc1][0] ) min_norm=akt_data[poc1][0];
                                 if ( max_norm <akt_data[poc1][0] ) max_norm=akt_data[poc1][0];
                                }
                                for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   akt_data[poc1][0]=(akt_data[poc1][0]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }

                                if ( CheckBox7->Checked )
                                {
                                for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >akt_data[poc1][1] ) min_norm=akt_data[poc1][1];
                                 if ( max_norm <akt_data[poc1][1] ) max_norm=akt_data[poc1][1];
                                }
                                for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   akt_data[poc1][1]=(akt_data[poc1][1]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }

                       if ( CheckBox8->Checked )
                                {
                                for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >akt_data[poc1][2] ) min_norm=akt_data[poc1][2];
                                 if ( max_norm <akt_data[poc1][2] ) max_norm=akt_data[poc1][2];
                                }
                                for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   akt_data[poc1][2]=(akt_data[poc1][2]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }

                       if ( CheckBox9->Checked )
                                {
                                for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >akt_data[poc1][3] ) min_norm=akt_data[poc1][3];
                                 if ( max_norm <akt_data[poc1][3] ) max_norm=akt_data[poc1][3];
                                }
                                for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   akt_data[poc1][3]=(akt_data[poc1][3]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }

                       if ( CheckBox10->Checked )
                                {
                                for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >akt_data[poc1][4] ) min_norm=akt_data[poc1][4];
                                 if ( max_norm <akt_data[poc1][4] ) max_norm=akt_data[poc1][4];
                                }
                                for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   akt_data[poc1][4]=(akt_data[poc1][4]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }
                           }





                                               //Vypocet chybove funkce metodou nejmensich ctvrtercu
                                                  chyba_1=0;chyba_2=0;chyba_3=0,chyba_4=0,chyba_5=0;

                                                  for(int poc1=0;poc1<akt_pocet_baru;poc1++)
                                                  {
                                                  if ( CheckBox6->Checked ) chyba_1=chyba_1 + (hyp_pattern[poc1][0] - akt_data[poc1][0])*(hyp_pattern[poc1][0] - akt_data[poc1][0]);
                                                  if ( CheckBox7->Checked ) chyba_2=chyba_2 + (hyp_pattern[poc1][1] - akt_data[poc1][1])*(hyp_pattern[poc1][1] - akt_data[poc1][1]);
                                                  if ( CheckBox8->Checked ) chyba_3=chyba_3 + (hyp_pattern[poc1][2] - akt_data[poc1][2])*(hyp_pattern[poc1][2] - akt_data[poc1][2]);
                                                  if ( CheckBox9->Checked ) chyba_4=chyba_4 + (hyp_pattern[poc1][3] - akt_data[poc1][3])*(hyp_pattern[poc1][3] - akt_data[poc1][3]);
                                                  if ( CheckBox10->Checked ) chyba_5=chyba_5 + (hyp_pattern[poc1][4] - akt_data[poc1][4])*(hyp_pattern[poc1][4] - akt_data[poc1][4]);
                                                  }
                                                  chyba=(chyba_1+chyba_2+chyba_3+chyba_4+chyba_5)/2;//vypocet chyby

                                                  pole_CHaPL_filtr_1[proces]=chyba;
                                  //////////////////  vypcoet profitu/ztraty pri prochazeni dat a vypoctu chyby
                                                  //pro LONG
                                        if (Strategy->ItemIndex==0)
                                            {
                                                  for (int poc1=0;poc1<delka_obchodu && priznak==0;poc1++)  //nacteni aktualnich dat
                                                            {

                                                               if ((pole_dat_O[proces+akt_pocet_baru]+(profit_target*dolar))<=(pole_dat_H[proces+akt_pocet_baru+poc1])){ strategie_nalezena = 2;priznak=1;}   //nalezeni profitu

                                                               if ((pole_dat_O[proces+akt_pocet_baru]-(stop_loss*dolar))>=(pole_dat_L[proces+akt_pocet_baru+poc1])){strategie_nalezena = 0;priznak=1;}        //nalezeni ztraty

                                                               if (poc1==delka_obchodu-1 && priznak==0) {strategie_nalezena=1;priznak=1;}
                                                            }
                                                            priznak=0;
                                                  switch(strategie_nalezena)
                                                  {
                                                        case 0:
                                                                {
                                                                 pole_CHaPL_filtr_2[proces]=-stop_loss;
                                                                }break;

                                                        case 1:
                                                                {
                                                                 pole_CHaPL_filtr_2[proces]=(pole_dat_C[proces+akt_pocet_baru+delka_obchodu-1]-pole_dat_O[proces+akt_pocet_baru])*1/dolar;

                                                                }break;
                                                        case 2:
                                                                {
                                                                 pole_CHaPL_filtr_2[proces]=profit_target;
                                                                }
                                                  }



                                             }

                                                   //pro SHORT
                                       if (Strategy->ItemIndex==1)
                                            {
                                                  for (int poc1=0;poc1<delka_obchodu && priznak==0;poc1++)  //nacteni aktualnich dat
                                                            {
                                                               if ((pole_dat_O[proces+akt_pocet_baru]-(profit_target*dolar))>=(pole_dat_L[proces+akt_pocet_baru+poc1])){ strategie_nalezena = 2;priznak=1;}   //nalezeni profitu

                                                               if ((pole_dat_O[proces+akt_pocet_baru]+(stop_loss*dolar))<=(pole_dat_H[proces+akt_pocet_baru+poc1])){strategie_nalezena = 0;priznak=1;}        //nalezeni ztraty

                                                               if (poc1==delka_obchodu-1 && priznak==0) {strategie_nalezena=1;priznak=1;}
                                                            }
                                                            priznak=0;
                                                  switch(strategie_nalezena)
                                                  {
                                                        case 0:
                                                                {
                                                                 pole_CHaPL_filtr_2[proces]=-stop_loss;
                                                                }break;

                                                        case 1:
                                                                {
                                                                 pole_CHaPL_filtr_2[proces]=(pole_dat_O[proces+akt_pocet_baru]-pole_dat_C[proces+akt_pocet_baru+delka_obchodu-1])*1/dolar;

                                                                }break;
                                                        case 2:
                                                                {
                                                                 pole_CHaPL_filtr_2[proces]=profit_target;
                                                                }
                                                  }


                                    /////////////////////



                                        }
                                    }
                                         proces++;



                        }


                         QuickSort(pole_CHaPL_filtr_1,pole_CHaPL_filtr_2,0,pocet_radku-delka_obchodu-akt_pocet_baru);
                         ////////////////////proces rozhodnuti o zajimavem patternu
                         //vypocet sumy profitu a ztrat serazeneho pole podle chyby

                        suma_PL[0]=pole_CHaPL_filtr_2[0];

                        for (int a=1;a<pocet_radku;a++)
                                {
                                suma_PL[a]=suma_PL[a-1]+pole_CHaPL_filtr_2[a];
                                }

                        maximum=0;
                        pozice_maxima=0;
                        for (int a=0;a<pocet_radku;a++)
                        {
                          if (maximum < suma_PL[a]) {maximum = suma_PL[a];chyba_maxima=pole_CHaPL_filtr_1[a];pozice_maxima=a;}
                        }


 if ((maximum > minimum_accumulation)&&(suma_PL[pocet_radku-1] < -5000))
{
        //zapis do souboru

info_o_vzorech();


        sprintf(info,"                                                                                     ");
        sprintf(info,"Pozice maximalni profitu : %d",pozice_maxima);
        sprintf(buffer,"%s",info);
        fputs(buffer, Info);
        fputc('\n',Info);

        sprintf(info,"                                                                                        ");
        sprintf(info,"Tvar patternu v offset podobe : ");
        sprintf(buffer,"%s",info);
        fputs(buffer, Info);
        fputc('\n',Info);

        for (int a=0;a<akt_pocet_baru;a++)
        {
         sprintf(info,"                                                                                          ");
         buffer_1=("0.000",RoundTo(hyp_pattern[a][0], -3));
         buffer_2=("0.000",RoundTo(hyp_pattern[a][1], -3));
         buffer_3=("0.000",RoundTo(hyp_pattern[a][2], -3));
         buffer_4=("0.000",RoundTo(hyp_pattern[a][3], -3));
         buffer_5=("0.000",RoundTo(hyp_pattern[a][3], -3));

         if (check==1) sprintf(info,"%s",buffer_1);
         if (check==2) sprintf(info,"%s %s",buffer_1,buffer_2);
         if (check==3) sprintf(info,"%s %s %s",buffer_1,buffer_2,buffer_3);
         if (check==4) sprintf(info,"%s %s %s %s",buffer_1,buffer_2,buffer_3,buffer_4);
         if (check==5) sprintf(info,"%s %s %s %s %s",buffer_1,buffer_2,buffer_3,buffer_4,buffer_5);
         sprintf(buffer,"%s",info);
         fputs(buffer, Info);
         fputc('\n',Info);
        }
   if (generate==true)
   {
        zapis_do_souboru();
   }

}

                        proces=0;
                         akt_pocet_baru=akt_pocet_baru + krok;
                        }
                        }



                }break;
/**********************************************************************************************************/
               case 2:    //pro volbu vstupnich dat TYPICAL PRICE
                {



                while (akt_pocet_baru <= pocet_baru && pocet_baru <= souradnice_strategie)
                        {
                         podobnost_pocitadlo=0;
                         for(int a=0;a<pocet_radku;a++)
                         {
                          pole_CHaPL_filtr_2[a] = 0;
                         } //prvopocatecni vynulovani matice

                               for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //nacteni hypotetickeho patternu
                                        {
                                        hyp_pattern[poc1][0]=typical_price[souradnice_strategie-akt_pocet_baru+poc1];  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku

                                        }
                                //vypocet offsetu
                               if (RadioGroup4->ItemIndex == 0)
                               {
                               offset=hyp_pattern[0][0];
                               for (int poc1=0;poc1<akt_pocet_baru;poc1++)
                                        {
                                        hyp_pattern[poc1][0]=hyp_pattern[poc1][0]-offset;
                                        }
                               }

                               if (RadioGroup4->ItemIndex == 1)
                               {
                                for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >hyp_pattern[poc1][0] ) min_norm=hyp_pattern[poc1][0];
                                 if ( max_norm <hyp_pattern[poc1][0] ) max_norm=hyp_pattern[poc1][0];
                                }
                                for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   hyp_pattern[poc1][0]=(hyp_pattern[poc1][0]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                               }


                        while (proces <= (pocet_radku-delka_obchodu-akt_pocet_baru)) // projeti vsech dat a porovnani s hypotetickym patternem
                                        {


                                           if (proces != (souradnice_strategie-akt_pocet_baru)) //osetruje to,ze nebudeme testovat tu strategii,pred kterou byl nacten pattern
                                                {
                                                        for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //nacteni aktualnich dat
                                                            {
                                                                  akt_data[poc1][0]=typical_price[proces+poc1];
                                                            }

                                                       if ( RadioGroup4->ItemIndex == 0)
                                                       {
                                                       offset=akt_data[0][0];
                                                       for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //offset
                                                            {
                                                                  akt_data[poc1][0]=akt_data[poc1][0]-offset;
                                                            }
                                                       }

                                                       if (RadioGroup4->ItemIndex == 1)
                                                       {
                                                         for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //nacteni hypotetickeho patternu
                                                         {
                                                         if ( min_norm >akt_data[poc1][0] ) min_norm=akt_data[poc1][0];
                                                         if ( max_norm <akt_data[poc1][0] ) max_norm=akt_data[poc1][0];
                                                         }
                                                         for (int poc1=0;poc1<akt_pocet_baru;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                                         {
                                                            akt_data[poc1][0]=(akt_data[poc1][0]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                                         }
                                                            min_norm=9999999;
                                                            max_norm=0;

                                                        }
                                if (RadioGroup5->ItemIndex == 1 )
                                        {
                                        priznak_podobnosti=0;
                                        for (int poc1=0;poc1<akt_pocet_baru;poc1++)
                                        {
                                        if ((akt_data[poc1][0] > hyp_pattern[poc1][0] + mez_podobnosti) || (akt_data[poc1][0] < hyp_pattern[poc1][0] - mez_podobnosti))
                                             {
                                               priznak_podobnosti = 1;
                                             }
                                        }
                                        }

                                               //Vypocet chybove funkce metodou nejmensich ctvrtercu
                                               if (RadioGroup5->ItemIndex == 0)
                                               {
                                                  chyba=0;
                                                  for(int poc1=0;poc1<akt_pocet_baru;poc1++)
                                                  {
                                                  chyba=chyba + (hyp_pattern[poc1][0] - akt_data[poc1][0])*(hyp_pattern[poc1][0] - akt_data[poc1][0]);
                                                  }
                                                  chyba=chyba/2;//vypocet chyby

                                                  pole_CHaPL_filtr_1[proces]=chyba;
                                                }
                                  //////////////////  vypcoet profitu/ztraty pri prochazeni dat a vypoctu chyby
                                                  //pro LONG

                                     if ((RadioGroup5->ItemIndex == 1) && (priznak_podobnosti == 0))
                                     {
                                        podobnost_pocitadlo++;
                                        if (Strategy->ItemIndex==0)
                                            {
                                                  for (int poc1=0;poc1<delka_obchodu && priznak==0;poc1++)  //nacteni aktualnich dat
                                                            {

                                                               if ((pole_dat_O[proces+akt_pocet_baru]+(profit_target*dolar))<=(pole_dat_H[proces+akt_pocet_baru+poc1])){ strategie_nalezena = 2;priznak=1;}   //nalezeni profitu

                                                               if ((pole_dat_O[proces+akt_pocet_baru]-(stop_loss*dolar))>=(pole_dat_L[proces+akt_pocet_baru+poc1])){strategie_nalezena = 0;priznak=1;}        //nalezeni ztraty

                                                               if (poc1==delka_obchodu-1 && priznak==0) {strategie_nalezena=1;priznak=1;}
                                                            }
                                                            priznak=0;
                                                  switch(strategie_nalezena)
                                                  {
                                                        case 0:
                                                                {
                                                                 pole_CHaPL_filtr_2[proces]=-stop_loss-komise_uceni;
                                                                }break;

                                                        case 1:
                                                                {
                                                                 pole_CHaPL_filtr_2[proces]=(pole_dat_C[proces+akt_pocet_baru+delka_obchodu-1]-pole_dat_O[proces+akt_pocet_baru])*1/dolar-komise_uceni;

                                                                }break;
                                                        case 2:
                                                                {
                                                                 pole_CHaPL_filtr_2[proces]=profit_target-komise_uceni;
                                                                }
                                                  }



                                             }

                                                   //pro SHORT
                                       if (Strategy->ItemIndex==1)
                                            {
                                                  for (int poc1=0;poc1<delka_obchodu && priznak==0;poc1++)  //nacteni aktualnich dat
                                                            {
                                                               if ((pole_dat_O[proces+akt_pocet_baru]-(profit_target*dolar))>=(pole_dat_L[proces+akt_pocet_baru+poc1])){ strategie_nalezena = 2;priznak=1;}   //nalezeni profitu

                                                               if ((pole_dat_O[proces+akt_pocet_baru]+(stop_loss*dolar))<=(pole_dat_H[proces+akt_pocet_baru+poc1])){strategie_nalezena = 0;priznak=1;}        //nalezeni ztraty

                                                               if (poc1==delka_obchodu-1 && priznak==0) {strategie_nalezena=1;priznak=1;}
                                                            }
                                                            priznak=0;
                                                  switch(strategie_nalezena)
                                                  {
                                                        case 0:
                                                                {
                                                                 pole_CHaPL_filtr_2[proces]=-stop_loss-komise_uceni;
                                                                }break;

                                                        case 1:
                                                                {
                                                                 pole_CHaPL_filtr_2[proces]=(pole_dat_O[proces+akt_pocet_baru]-pole_dat_C[proces+akt_pocet_baru+delka_obchodu-1])*1/dolar-komise_uceni;

                                                                }break;
                                                        case 2:
                                                                {
                                                                 pole_CHaPL_filtr_2[proces]=profit_target-komise_uceni;
                                                                }
                                                  }


                                    /////////////////////



                                        }
                                       }
                                    }
                                         proces++;



                        }

                        if (RadioGroup5->ItemIndex == 0)
                        {
                         QuickSort(pole_CHaPL_filtr_1,pole_CHaPL_filtr_2,0,pocet_radku-delka_obchodu-akt_pocet_baru);
                        }

                        //////////////////proces nalezeni podobnosti pro 2nd method////////////////////

                        ///////////////////////////////////////////////////////////////////////////////
                         ////////////////////proces rozhodnuti o zajimavem patternu
                         //vypocet sumy profitu a ztrat serazeneho pole podle chyby

                        suma_PL[0]=pole_CHaPL_filtr_2[0];

                        for (int a=1;a<pocet_radku;a++)
                                {
                                suma_PL[a]=suma_PL[a-1]+pole_CHaPL_filtr_2[a];
                                }

                        maximum=0;
                        pozice_maxima=0;
                        for (int a=0;a<pocet_radku;a++)
                        {
                          if (maximum < suma_PL[a]) {maximum = suma_PL[a];chyba_maxima=pole_CHaPL_filtr_1[a];pozice_maxima=a;}
                        }
 if (((RadioGroup5->ItemIndex==0) && (maximum > minimum_accumulation)&&(suma_PL[pocet_radku-1] < -5000)) || ((RadioGroup5->ItemIndex ==1)&((suma_PL[pocet_radku-1]) > minimum_accumulation)))
{
        //zapis do souboru
if (RadioGroup5->ItemIndex == 0) {radiogroup_pom=0;} else {radiogroup_pom=1;}
info_o_vzorech();


        sprintf(info,"                                                                                     ");
        sprintf(info,"Pozice maximalni profitu : %d",pozice_maxima);
        sprintf(buffer,"%s",info);
        fputs(buffer, Info);
        fputc('\n',Info);

        sprintf(info,"                                                                                        ");
        sprintf(info,"Tvar patternu v offset podobe : ");
        sprintf(buffer,"%s",info);
        fputs(buffer, Info);
        fputc('\n',Info);
        for (int a=0;a<akt_pocet_baru;a++)

        {
         sprintf(info,"                                                                                         ");
         bufferTP=("0.000",RoundTo(hyp_pattern[a][0], -3));

         sprintf(info,"%s",bufferTP);
         sprintf(buffer,"%s",info);
         fputs(buffer, Info);
         fputc('\n',Info);
        }
        podobnost_pocitadlo=0;
   if (generate==true)
   {
        zapis_do_souboru();
   }
}

                         proces=0;
                         akt_pocet_baru=akt_pocet_baru + krok;
                        }



                }break;
           }
/***************************************************************************************************************************/
           akt_pocet_baru=StrToInt(Edit27->Text);
           poc++;


          CGauge1->Progress++;









/////////////////////////////////////////////////////////


}




         }else ShowMessage("Type point value for 1$");

   fputc('#',Info);
   fputc('#',Info);
   fclose(Info);
}
//---------------------------------------------------------------------------







void __fastcall TForm1::DataSourceClick(TObject *Sender)
{
        if (DataSource->ItemIndex==0)
        {
        Edit16->Enabled=true;
        Edit17->Enabled=true;
        Edit18->Enabled=true;
        Edit19->Enabled=true;
        CheckBox6->Enabled=false;
        ComboBox1->Enabled=false;
        Edit21->Enabled=false;
        CheckBox6->Checked=false;
        CheckBox7->Enabled = false ;
        CheckBox7->Checked = false ;
        CheckBox8->Enabled = false ;
        CheckBox8->Checked = false ;
        CheckBox9->Enabled = false ;
        CheckBox9->Checked = false ;
        CheckBox10->Enabled = false ;
        CheckBox10->Checked = false ;
        ComboBox2->Enabled = false ;
        ComboBox3->Enabled = false ;
        ComboBox4->Enabled = false ;
        ComboBox5->Enabled = false ;
        Edit22->Enabled = false ;
        Edit23->Enabled = false ;
        Edit24->Enabled = false ;
        Edit25->Enabled = false ;
        RadioGroup5->Enabled = false;
        }
        else
        {
        Edit16->Enabled=false;
        Edit17->Enabled=false;
        Edit18->Enabled=false;
        Edit19->Enabled=false;
        }



        if (DataSource->ItemIndex==1)
        {
        CheckBox6->Enabled=true;
        ComboBox1->Enabled=true;
        Edit21->Enabled=true;
        RadioGroup5->Enabled = false;
        }

        if (DataSource->ItemIndex==2)
        {
                CheckBox6->Enabled=false;
        ComboBox1->Enabled=false;
        Edit21->Enabled=false;
        CheckBox6->Checked=false;
        CheckBox7->Enabled = false ;
        CheckBox7->Checked = false ;
        CheckBox8->Enabled = false ;
        CheckBox8->Checked = false ;
        CheckBox9->Enabled = false ;
        CheckBox9->Checked = false ;
        CheckBox10->Enabled = false ;
        CheckBox10->Checked = false ;
        ComboBox2->Enabled = false ;
        ComboBox3->Enabled = false ;
        ComboBox4->Enabled = false ;
        ComboBox5->Enabled = false ;
        Edit22->Enabled = false ;
        Edit23->Enabled = false ;
        Edit24->Enabled = false ;
        Edit25->Enabled = false ;
        RadioGroup5->Enabled = true;
        }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::CheckBox2Click(TObject *Sender)
{
        if (CheckBox2->Checked==true)
        {
         Edit8->Enabled=true;
         Edit9->Enabled=true;
        }
        else
        {
         Edit8->Enabled=false;
         Edit9->Enabled=false;

        }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::CheckBox1Click(TObject *Sender)
{
        if (CheckBox1->Checked==true)
        {
         Edit6->Enabled=true;
         Edit7->Enabled=true;
        }
        else
        {
         Edit6->Enabled=false;
         Edit7->Enabled=false;

        }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::CheckBox5Click(TObject *Sender)
{
         if (CheckBox5->Checked==true)
        {
         Edit12->Enabled=true;
         Edit13->Enabled=true;
        }
        else
        {
         Edit12->Enabled=false;
         Edit13->Enabled=false;

        }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::CheckBox4Click(TObject *Sender)
{
        if (CheckBox4->Checked==true)
        {
         Edit14->Enabled=true;
         Edit15->Enabled=true;
        }
        else
        {
         Edit14->Enabled=false;
         Edit15->Enabled=false;

        }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::CheckBox3Click(TObject *Sender)
{
        if (CheckBox3->Checked==true)
        {
         Edit10->Enabled=true;
         Edit11->Enabled=true;
        }
        else
        {
         Edit10->Enabled=false;
         Edit11->Enabled=false;

        }
}



void __fastcall TForm1::CheckBox6Click(TObject *Sender)
{
if (CheckBox6->Checked == true)
{
 CheckBox7->Enabled = true ;
 ComboBox2->Enabled = true ;
 Edit22->Enabled = true ;
}else
{
 CheckBox7->Enabled = false ;
 CheckBox7->Checked = false ;
 CheckBox8->Enabled = false ;
 CheckBox8->Checked = false ;
 CheckBox9->Enabled = false ;
 CheckBox9->Checked = false ;
 CheckBox10->Enabled = false ;
 CheckBox10->Checked = false ;
 ComboBox2->Enabled = false ;
 ComboBox3->Enabled = false ;
 ComboBox4->Enabled = false ;
 ComboBox5->Enabled = false ;
 Edit22->Enabled = false ;
 Edit23->Enabled = false ;
 Edit24->Enabled = false ;
 Edit25->Enabled = false ;

}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::CheckBox7Click(TObject *Sender)
{
if (CheckBox7->Checked == true)
{
 CheckBox8->Enabled = true ;
 ComboBox3->Enabled = true ;
 Edit23->Enabled = true ;
}else
{

 CheckBox8->Enabled = false ;
 CheckBox8->Checked = false ;
 CheckBox9->Enabled = false ;
 CheckBox9->Checked = false ;
 CheckBox10->Enabled = false ;
 CheckBox10->Checked = false ;

 ComboBox3->Enabled = false ;
 ComboBox4->Enabled = false ;
 ComboBox5->Enabled = false ;

 Edit23->Enabled = false ;
 Edit24->Enabled = false ;
 Edit25->Enabled = false ;

}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::CheckBox8Click(TObject *Sender)
{
if (CheckBox8->Checked == true)
{
 CheckBox9->Enabled = true ;
 ComboBox4->Enabled = true ;
 Edit24->Enabled = true ;
}else
{
 CheckBox9->Enabled = false ;
 CheckBox9->Checked = false ;
 CheckBox10->Enabled = false ;
 CheckBox10->Checked = false ;
 ComboBox4->Enabled = false ;
 ComboBox5->Enabled = false ;
 Edit24->Enabled = false ;
 Edit25->Enabled = false ;

}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::CheckBox9Click(TObject *Sender)
{
if (CheckBox9->Checked == true)
{
 CheckBox10->Enabled = true ;
 ComboBox5->Enabled = true ;
 Edit25->Enabled = true ;
}else
{
 CheckBox10->Enabled = false ;
 CheckBox10->Checked = false ;
 ComboBox5->Enabled = false ;
 Edit25->Enabled = false ;

}
}
//---------------------------------------------------------------------------

//BACKTESTINGOVA CAST//

void __fastcall TForm1::Openoutofsampledatafile1Click(TObject *Sender)
{
        status="Out of sample file: Loading...";
        StatusBar1->Panels->Items[2]->Text=status;
        AnsiString BT_soubor;
if (OpenDialog2->Execute())
    {
        akt_radek=0;
        pocet_radku=0;
        BT_soubor = OpenDialog2->FileName;
        VstSoubor = fopen(BT_soubor.c_str(), "rt");

    while ( (fgets(radek, 100, VstSoubor)) != NULL) pocet_radku++;       //vypocet poctu radku
        rewind(VstSoubor);              //ukazatel souboru na zacatek
CGauge3->MaxValue = pocet_radku;
        //cyklus pro projeti celeho souboru po radcich
OOS_pole_dat_time=new float[pocet_radku];
OOS_pole_dat_O=new float[pocet_radku];
OOS_pole_dat_H=new float[pocet_radku];
OOS_pole_dat_L=new float[pocet_radku];
OOS_pole_dat_C=new float[pocet_radku];


    while(akt_radek < pocet_radku)
    {
        //nacteni O H L C
        fgets(radek, 100, VstSoubor);

        while (radek[i]!= '\n' )             //nacteni radku
        {
         i++;
          if (carky==1 && radek[i] != ',') {if (radek[i]==':'){Time1=Time1;} else Time1=Time1+AnsiString(radek[i]);}
          if (carky==2 && radek[i] != ',') {if (radek[i]=='.'){Open1=Open1+AnsiString(',');}else Open1=Open1+AnsiString(radek[i]);}
          if (carky==3 && radek[i] != ',') {if (radek[i]=='.'){High1=High1+AnsiString(',');}else High1=High1+AnsiString(radek[i]);}
          if (carky==4 && radek[i] != ',') {if (radek[i]=='.'){Low1=Low1+AnsiString(',');}else Low1=Low1+AnsiString(radek[i]);}
          if (carky==5 && radek[i] != ',') {if (radek[i]=='.'){Close2=Close2+AnsiString(',');}else Close2=Close2+AnsiString(radek[i]);}
          if (carky==6 && radek[i] != ',' && radek[i] != '\n') Volume=Volume+AnsiString(radek[i]);
          if (radek[i] == ',' ) carky++;
         }
        i=0;
        carky=0;

        OOS_pole_dat_time[akt_radek]=(StrToFloat(Time1));
        OOS_pole_dat_O[akt_radek]=(StrToFloat(Open1));
        OOS_pole_dat_H[akt_radek]=(StrToFloat(High1));
        OOS_pole_dat_L[akt_radek]=(StrToFloat(Low1));
        OOS_pole_dat_C[akt_radek]=(StrToFloat(Close2));

        //posun na dalsi radek
        akt_radek++;
        //vynulovani pomocnych promennych
        Time1=0;
        Open1=0;
        High1=0;
        Low1=0;
        Close2=0;                                    
        CGauge3->Progress++;
    }
    }
    akt_radek=0;//nulovani ukazatele radku v poli kvuli dalsimu pouziti
        status="Out of sample file: Loaded";
        StatusBar1->Panels->Items[2]->Text=status;

        //vypocet hodnot indikatoru




}
//---------------------------------------------------------------------------

void __fastcall TForm1::Openpatternfile1Click(TObject *Sender)
{

        poc=0;


 if (OpenDialog3->Execute())
    {

        akt_radek=0;
   //     pocet_radku=0;
        OOS_soubor = OpenDialog3->FileName;
   //    VstSoubor = fopen(OOS_soubor.c_str(), "rt");
   //     while ( (fgets(radek, 100, VstSoubor)) != NULL)
   //     {

   //       pocet_radku++;
   //     };       //vypocet poctu radku

        OOS_backtest=new float[pocet_radku];
        backtest=new float[pocet_radku];
        status="Pattern file: Loaded";
        StatusBar1->Panels->Items[1]->Text=status;
    }
}





//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)
{
  VstSoubor = fopen(OOS_soubor.c_str(), "rt");
  Info_test = fopen ("patterns_test.txt","w");
  Memo3->Clear();
  mez_chyby_1=0;
  poprve=0;
  poprve2=0;poprve3=0;
  typ_strategie=RadioGroup1->ItemIndex;
  poc_back=0;
  komise_backtest=StrToFloat(Edit29->Text);
  minimum_backtest=StrToInt(Edit30->Text);
  TimeFiltr1Start=0;TimeFiltr1Stop=0;
  TimeFiltr2Start=0;TimeFiltr2Stop=0;
  TimeFiltr3Start=0;TimeFiltr3Stop=0;
  TimeFiltr4Start=0;TimeFiltr4Stop=0;
  TimeFiltr5Start=0;TimeFiltr5Stop=0;
  if (CheckBox1->Checked) {TimeFiltr1Start=StrToInt(Edit6->Text);TimeFiltr1Stop=StrToInt(Edit7->Text);if (TimeFiltr1Start>TimeFiltr1Stop){chyba_filtr=1;ShowMessage("Error in time intervals setup");}}
  if (CheckBox2->Checked) {TimeFiltr2Start=StrToInt(Edit8->Text);TimeFiltr2Stop=StrToInt(Edit9->Text);if (TimeFiltr2Start>TimeFiltr2Stop){chyba_filtr=1;ShowMessage("Error in time intervals setup");}}
  if (CheckBox3->Checked) {TimeFiltr3Start=StrToInt(Edit10->Text);TimeFiltr3Stop=StrToInt(Edit11->Text);if (TimeFiltr3Start>TimeFiltr3Stop){chyba_filtr=1;ShowMessage("Error in time intervals setup");}}
  if (CheckBox4->Checked) {TimeFiltr4Start=StrToInt(Edit12->Text);TimeFiltr4Stop=StrToInt(Edit13->Text);if (TimeFiltr4Start>TimeFiltr4Stop){chyba_filtr=1;ShowMessage("Error in time intervals setup");}}
  if (CheckBox5->Checked) {TimeFiltr5Start=StrToInt(Edit14->Text);TimeFiltr5Stop=StrToInt(Edit15->Text);if (TimeFiltr5Start>TimeFiltr5Stop){chyba_filtr=1;ShowMessage("Error in time intervals setup");}}
   pom_backtest=0; //pomocna promena pro zapis SL nebo PT do pole
  indi_1=new float[pocet_radku];
  indi_2=new float[pocet_radku];
  indi_3=new float[pocet_radku];
  indi_4=new float[pocet_radku];
  indi_5=new float[pocet_radku];
  pocet_kont_profitu=0;
  pocet_kont_profitu_max=0;
  pocet_kont_ztrat=0;
  pocet_kont_ztrat_max=0;
  pocet_obchodu=0;
  pocet_profitu=0;
  pocet_ztrat=0;
    perioda_1_ansi='0';
    perioda_2_ansi='0';
    perioda_3_ansi='0';
    perioda_4_ansi='0';
    perioda_5_ansi='0';

    indi1_file=' ';
    indi2_file=' ';
    indi3_file=' ';
    indi4_file=' ';
    indi5_file=' ';

    dolar=StrToFloat(Edit32->Text);
    delka_obchodu=StrToInt(Edit31->Text);
    fgets(radek, 100, VstSoubor);
          for (int i=0;radek[i]!='\n';i++)
          {
                if ((radek[i]=='t') && (radek[i+1]==' '))
                {
                        for (int b=i+2;radek[b]!=' ';b++)
                        {
                                profit=profit+AnsiString(radek[b]);
                        }
                }
                if ((radek[i]=='a') && (radek[i+1]==' '))
                {
                        for (int b=i+2;radek[b]!=' ';b++)
                        {
                                stop=stop+AnsiString(radek[b]);
                        }
                }
          }
       stop_loss=StrToInt(stop);
       profit_target=StrToInt(profit);
     fgets(radek, 100, VstSoubor);
    while(radek[1] != '#')
    {
        //nacteni O H L C

        if ( radek[0] == '#')
        {
        poc_back++;
          fgets(radek, 100, VstSoubor);
          fgets(radek, 100, VstSoubor);
          for (int i=0;radek[i]!='\n';i++)
          {
                if ((radek[i]==':') && (radek[i+1]==' '))
                {
                        for (int b=i+2;radek[b]!='\n';b++)
                        {
                                delka_vzoru=delka_vzoru+AnsiString(radek[b]);
                        }
                }
          }
          delka_vzoru_1=StrToInt(delka_vzoru);
          fgets(radek, 100, VstSoubor);
          fgets(radek, 100, VstSoubor);
          fgets(radek, 100, VstSoubor);

          for (int i=0;radek[i]!='\n';i++)
          {
                if ((radek[i]==':') && (radek[i+1]==' '))
                {
                        if (radek[i-2]!=')')
                        {

                        for (int b=i+2;radek[b]!='\n';b++)
                        {
                                chyba_vzoru=chyba_vzoru+AnsiString(radek[b]);
                        }
                        }
                        else
                        {
                        typ_chyby=1;
                         for (int b=i+2;radek[b]!=' ';b++)
                        {
                                mez_chyby=mez_chyby+AnsiString(radek[b]);
                        }
                        }
                }
          }
          chyba_vzoru_1=StrToFloat(chyba_vzoru);
          mez_chyby_1=StrToFloat(mez_chyby);
          mez_chyby="";
          fgets(radek, 100, VstSoubor);
          for (int i=0;radek[i]!='\n';i++)
          {

                if ((radek[i]=='t') && (radek[i+1]==',')) poc_indi=StrToInt(radek[i+3]);
                if ((radek[i]==':') && (radek[i+1]==' '))
                {
                        if (radek[i+2] == 'O') typ_dat_vzor = 0;  // OHLC Price
                        if ((radek[i+2] != 'O') && (radek[i+2] != 'T')) typ_dat_vzor = 1;  // Indicators
                        if (radek[i+2] == 'T') typ_dat_vzor = 2;  // Typical Price

                }
                if ((radek[i]==':') && (radek[i+1]==' ') && (typ_dat_vzor == 1))
                {
                  i+=2;

                   while (radek[i]!=' ')
                   {
                    typ_indi_1_ansi=typ_indi_1_ansi+AnsiString(radek[i]);
                    i++;
                   }
                   i++;
                   while (radek[i]!=',')
                   {
                    perioda_1_ansi=perioda_1_ansi+AnsiString(radek[i]);
                    i++;
                   }
                   if (radek[i+2]==','){i++;}else i+=2;
                   while (radek[i]!=' ')
                   {
                    typ_indi_2_ansi=typ_indi_2_ansi+AnsiString(radek[i]);
                    i++;
                   }
                   i++;
                   while (radek[i]!=',')
                   {
                    perioda_2_ansi=perioda_2_ansi+AnsiString(radek[i]);
                    i++;
                   }
                   if (radek[i+2]==','){i++;}else i+=2;
                   while (radek[i]!=' ')
                   {
                    typ_indi_3_ansi=typ_indi_3_ansi+AnsiString(radek[i]);
                    i++;
                   }
                   i++;
                   while (radek[i]!=',')
                   {
                    perioda_3_ansi=perioda_3_ansi+AnsiString(radek[i]);
                    i++;
                   }
                   if (radek[i+2]==','){i++;}else i+=2;
                   while (radek[i]!=' ')
                   {
                    typ_indi_4_ansi=typ_indi_4_ansi+AnsiString(radek[i]);
                    i++;
                   }
                   i++;
                   while (radek[i]!=',')
                   {
                    perioda_4_ansi=perioda_4_ansi+AnsiString(radek[i]);
                    i++;
                   }
                   if (radek[i+2]==';'){i++;}else i+=2;
                   while (radek[i]!=' ')
                   {
                    typ_indi_5_ansi=typ_indi_5_ansi+AnsiString(radek[i]);
                    i++;
                   }
                   i++;
                   while (radek[i]!=';')
                   {
                    perioda_5_ansi=perioda_5_ansi+AnsiString(radek[i]);
                    i++;
                   }
                   i++;
                   perioda_1=StrToInt(perioda_1_ansi);
                   perioda_2=StrToInt(perioda_2_ansi);
                   perioda_3=StrToInt(perioda_3_ansi);
                   perioda_4=StrToInt(perioda_4_ansi);
                   perioda_5=StrToInt(perioda_5_ansi);
                   perioda_1_ansi='0';
                   perioda_2_ansi='0';
                   perioda_3_ansi='0';
                   perioda_4_ansi='0';
                   perioda_5_ansi='0';

                }

          }



          fgets(radek, 100, VstSoubor);
          fgets(radek, 100, VstSoubor);
          fgets(radek, 100, VstSoubor);
          //NACTENI PATTERN FILE PRI VOLBE TYPICAL PRICE OHLC price
          if (typ_dat_vzor == 0)
          {
          for(int i=0;i<delka_vzoru_1;i++)
          {
           for ( int c=0;radek[c]!='\n';c++)
           {
             if (mezery==0) open_file=open_file+AnsiString(radek[c]);
             if (mezery==1) high_file=high_file+AnsiString(radek[c]);
             if (mezery==2) low_file=low_file+AnsiString(radek[c]);
             if (mezery==3) close_file=close_file+AnsiString(radek[c]);
             if (radek[c]==' ') mezery++;
           }

           hyp_pattern[poc][0]=StrToFloat(open_file);
           hyp_pattern[poc][1]=StrToFloat(high_file);
           hyp_pattern[poc][2]=StrToFloat(low_file);
           hyp_pattern[poc][3]=StrToFloat(close_file);
           open_file=' ';
           high_file=' ';
           low_file=' ';
           close_file=' ';

           mezery=0;
           fgets(radek, 100, VstSoubor);
           poc++;
          }
          }

          //NACTENI PATTERN FILE PRI VOLBE indikatory
          if (typ_dat_vzor == 1)
          {
          //vypocet hodnot indikatoru

         indi(OOS_pole_dat_H,OOS_pole_dat_L,OOS_pole_dat_C);

          //////


          for(int i=0;i<delka_vzoru_1;i++)
          {
           for ( int c=0;radek[c]!='\n';c++)
           {
             if (mezery==0) indi1_file=indi1_file+AnsiString(radek[c]);
             if (mezery==1) indi2_file=indi2_file+AnsiString(radek[c]);
             if (mezery==2) indi3_file=indi3_file+AnsiString(radek[c]);
             if (mezery==3) indi4_file=indi4_file+AnsiString(radek[c]);
             if (mezery==4) indi5_file=indi5_file+AnsiString(radek[c]);
             if (radek[c]==' ') mezery++;
           }
             if (indi1_file == ' ') indi1_file = '0';
             if (indi2_file == ' ') indi2_file = '0';
             if (indi3_file == ' ') indi3_file = '0';
             if (indi4_file == ' ') indi4_file = '0';
             if (indi5_file == ' ') indi5_file = '0';

           hyp_pattern[poc][0]=StrToFloat(indi1_file);
           hyp_pattern[poc][1]=StrToFloat(indi2_file);
           hyp_pattern[poc][2]=StrToFloat(indi3_file);
           hyp_pattern[poc][3]=StrToFloat(indi4_file);
           hyp_pattern[poc][4]=StrToFloat(indi5_file);
           indi1_file=' ';
           indi2_file=' ';
           indi3_file=' ';
           indi4_file=' ';
           indi5_file=' ';

           mezery=0;
           fgets(radek, 100, VstSoubor);
           poc++;
          }
         }
          //NACTENI PATTERN FILE PRI VOLBE TYPICAL PRICE
          if (typ_dat_vzor == 2)
          {
          for(int i=0;i<delka_vzoru_1;i++)
          {
           for ( int c=0;radek[c]!='\n';c++)
           {
            indi1_file=indi1_file+AnsiString(radek[c]);

           }

           hyp_pattern[poc][0]=StrToFloat(indi1_file);
           indi1_file=' ';
           fgets(radek, 100, VstSoubor);
           poc++;



         }

        }
          delka_vzoru=" ";
          chyba_vzoru=" ";
          profit=" ";
          stop=" ";
          akt_radek++;
          poc=0;

           OOS_backtest_chyba=new float[pocet_radku];
           backtest_chyba=new float[pocet_radku];
          ///////////////////////
          //BACKTESTING
          //////////////////////
          if (StatusBar1->Panels->Items[2]->Text != "Out of sample file: no file")
          {
          OOS_pom=0;

          //vypocet hodnot typical price
            if (typ_dat_vzor == 2)
                 {

                  for(int a=0;a<pocet_radku;a++)
                     {
                           indi_1[a]=(OOS_pole_dat_H[a]+OOS_pole_dat_L[a]+OOS_pole_dat_C[a])/3;
                    }

                 }



          if (((RadioGroup1->ItemIndex ==0)||(RadioGroup1->ItemIndex ==1))&&((RadioGroup2->ItemIndex==0)||(RadioGroup2->ItemIndex==1)))
          {
           //LONG strategy
           if (RadioGroup1->ItemIndex==0)
           {

            //VOLBA DAT OHLC PRICE
            if (typ_dat_vzor == 0)
            {
                                while (proces <= (pocet_radku-delka_obchodu-delka_vzoru_1))
                                        {


                                         if (((OOS_pole_dat_time[proces]>TimeFiltr1Start && OOS_pole_dat_time[proces]<TimeFiltr1Stop)||(OOS_pole_dat_time[proces]>TimeFiltr2Start && OOS_pole_dat_time[proces]<TimeFiltr2Stop)||(OOS_pole_dat_time[proces]>TimeFiltr3Start && OOS_pole_dat_time[proces]<TimeFiltr3Stop)||(OOS_pole_dat_time[proces]>TimeFiltr4Start && OOS_pole_dat_time[proces]<TimeFiltr4Stop)||(OOS_pole_dat_time[proces]>TimeFiltr5Start && OOS_pole_dat_time[proces]<TimeFiltr5Stop))&&chyba_filtr==0)
                                          {


                                                        for (int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                            {
                                                                  akt_data[poc1][0]=OOS_pole_dat_O[proces+poc1];
                                                                  akt_data[poc1][1]=OOS_pole_dat_H[proces+poc1];
                                                                  akt_data[poc1][2]=OOS_pole_dat_L[proces+poc1];
                                                                  akt_data[poc1][3]=OOS_pole_dat_C[proces+poc1];
                                                            }

                                                       if (RadioGroup3->ItemIndex == 0)
                                                       {
                                                           offset=akt_data[0][0];
                                                           for (int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                            {
                                                                   akt_data[poc1][0]=akt_data[poc1][0]-offset;
                                                                   akt_data[poc1][1]=akt_data[poc1][1]-offset;
                                                                   akt_data[poc1][2]=akt_data[poc1][2]-offset;
                                                                   akt_data[poc1][3]=akt_data[poc1][3]-offset;
                                                            }
                                                       }

                                                    if (RadioGroup3->ItemIndex == 1)
                                                   {
                                                    for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //nacteni hypotetickeho patternu
                                                   {
                                                    if ( min_norm >hyp_pattern[poc1][2] ) min_norm=hyp_pattern[poc1][2];
                                                     if ( max_norm <hyp_pattern[poc1][1] ) max_norm=hyp_pattern[poc1][1];
                                                   }
                                                   for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                                     {
                                                      hyp_pattern[poc1][0]=(hyp_pattern[poc1][0]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                                      hyp_pattern[poc1][1]=(hyp_pattern[poc1][1]-min_norm)/(max_norm-min_norm);
                                                      hyp_pattern[poc1][2]=(hyp_pattern[poc1][2]-min_norm)/(max_norm-min_norm);
                                                      hyp_pattern[poc1][3]=(hyp_pattern[poc1][3]-min_norm)/(max_norm-min_norm);
                                                     }
                                                     min_norm=9999999;
                                                     max_norm=0;
                                                    }



                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                  {
                                                  chybaO=chybaO + (hyp_pattern[poc1][0] - akt_data[poc1][0])*(hyp_pattern[poc1][0] - akt_data[poc1][0]);
                                                  }
                                                  chybaO=chybaO/2;

                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                  {
                                                  chybaH=chybaH + (hyp_pattern[poc1][1] - akt_data[poc1][1])*(hyp_pattern[poc1][1] - akt_data[poc1][1]);
                                                  }
                                                  chybaH=chybaH/2;

                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                  {
                                                  chybaL=chybaL + (hyp_pattern[poc1][2] - akt_data[poc1][2])*(hyp_pattern[poc1][2] - akt_data[poc1][2]);
                                                  }
                                                  chybaL=chybaL/2;

                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                  {
                                                  chybaC=chybaC + (hyp_pattern[poc1][3] - akt_data[poc1][3])*(hyp_pattern[poc1][3] - akt_data[poc1][3]);
                                                  }
                                                  chybaC=chybaC/2;

                                                  chyba= (chybaO + chybaH + chybaL + chybaC)*100000;//vypocet chyby

                        //po vypoctu chyby urcit,jestli je pattern dostatecne podobny
                        if (chyba <= chyba_vzoru_1)
                        {
                        pocet_obchodu++;
                        OOS_backtest_chyba[pom_backtest]=chyba;
                             //nastaveni backtestingu,ze pri otevrene pozici ignoruji dalsi vyskytnute vzory
                             if ( RadioGroup2->ItemIndex == 0 )
                             {
                               for (int poc1=0;poc1<delka_obchodu && priznak==0;poc1++)  //nacteni aktualnich dat
                                                            {

                                                               if ((OOS_pole_dat_O[proces+delka_vzoru_1]+(profit_target*dolar))<=(OOS_pole_dat_H[proces+delka_vzoru_1+poc1])){ strategie_nalezena = 2;priznak=1;}   //nalezeni profitu

                                                               if ((OOS_pole_dat_O[proces+delka_vzoru_1]-(stop_loss*dolar))>=(OOS_pole_dat_L[proces+delka_vzoru_1+poc1])){strategie_nalezena = 0;priznak=1;}        //nalezeni ztraty

                                                               if (poc1==delka_obchodu-1 && priznak==0) {strategie_nalezena=1;priznak=1;}
                                                            }
                                                            priznak=0;
                                                  switch(strategie_nalezena)
                                                  {
                                                        case 0:
                                                                {
                                                                 OOS_backtest[pom_backtest]=-stop_loss;
                                                                 pocet_kont_ztrat++;
                                                                 pocet_kont_profitu=0;
                                                                 pocet_ztrat++;
                                                                 prumerna_ztrata+=OOS_backtest[pom_backtest];
                                                                }break;

                                                        case 1:
                                                                {
                                                                 OOS_backtest[pom_backtest]=(OOS_pole_dat_C[proces+delka_vzoru_1+delka_obchodu-1]-OOS_pole_dat_O[proces+delka_vzoru_1])*1/dolar;
                                                                 if (OOS_backtest[pom_backtest]>0){pocet_kont_ztrat=0;pocet_kont_profitu++;pocet_profitu++;prumerny_profit+=OOS_backtest[pom_backtest];}
                                                                 if (OOS_backtest[pom_backtest]<0) {pocet_kont_ztrat++;pocet_kont_profitu=0;prumerna_ztrata+=OOS_backtest[pom_backtest];}
                                                                 if (OOS_backtest[pom_backtest]==0) {pocet_nul++;}
                                                                }break;
                                                        case 2:
                                                                {
                                                                 OOS_backtest[pom_backtest]=profit_target;
                                                                 pocet_kont_ztrat=0;
                                                                 pocet_kont_profitu++;
                                                                 pocet_profitu++;
                                                                 prumerny_profit+=OOS_backtest[pom_backtest];
                                                                }
                                                  }
                                                  proces++;
                                                  pom_backtest++;

                             }
                             //nastaveni backtestingu, ze pri otevrene pozici prikupuji dale pozice pri vyskytnuti vzoru
                             if ( RadioGroup2->ItemIndex == 1)
                             {
                               for (int poc1=0;poc1<delka_obchodu && priznak==0;poc1++)  //nacteni aktualnich dat
                                                            {

                                                               if ((OOS_pole_dat_O[proces+delka_vzoru_1]+(profit_target*dolar))<=(OOS_pole_dat_H[proces+delka_vzoru_1+poc1])){ strategie_nalezena = 2;priznak=1;}   //nalezeni profitu

                                                               if ((OOS_pole_dat_O[proces+delka_vzoru_1]-(stop_loss*dolar))>=(OOS_pole_dat_L[proces+delka_vzoru_1+poc1])){strategie_nalezena = 0;priznak=1;}        //nalezeni ztraty

                                                               if (poc1==delka_obchodu-1 && priznak==0) {strategie_nalezena=1;priznak=1;}
                                                            }
                                                            priznak=0;
                                                  switch(strategie_nalezena)
                                                  {
                                                        case 0:
                                                                {
                                                                 OOS_backtest[pom_backtest]=-stop_loss;
                                                                 pocet_kont_ztrat++;
                                                                 pocet_kont_profitu=0;
                                                                 pocet_ztrat++;
                                                                 prumerna_ztrata+=OOS_backtest[pom_backtest];
                                                                }break;

                                                        case 1:
                                                                {
                                                                 OOS_backtest[pom_backtest]=(OOS_pole_dat_C[proces+delka_vzoru_1+delka_obchodu-1]-OOS_pole_dat_O[proces+delka_vzoru_1])*1/dolar;
                                                                 if (OOS_backtest[pom_backtest]>0){pocet_kont_ztrat=0;pocet_kont_profitu++;pocet_profitu++;prumerny_profit+=OOS_backtest[pom_backtest];}
                                                                 if (OOS_backtest[pom_backtest]<0) {pocet_kont_ztrat++;pocet_kont_profitu=0;prumerna_ztrata+=OOS_backtest[pom_backtest];}
                                                                 if (OOS_backtest[pom_backtest]==0) {pocet_nul++;}
                                                                }break;
                                                        case 2:
                                                                {
                                                                 OOS_backtest[pom_backtest]=profit_target;
                                                                 pocet_kont_ztrat=0;
                                                                 pocet_kont_profitu++;
                                                                 pocet_profitu++;
                                                                 prumerny_profit+=OOS_backtest[pom_backtest];
                                                                }

                                                  }
                                              pom_backtest++;


                             }


                             }

                        }
                        proces++;
                        chybaO=0;
                        chybaH=0;
                        chybaL=0;
                        chybaC=0;
                        if (pocet_kont_ztrat > pocet_kont_ztrat_max)pocet_kont_ztrat_max=pocet_kont_ztrat;
                        if (pocet_kont_profitu > pocet_kont_profitu_max)pocet_kont_profitu_max=pocet_kont_profitu;

            }
           }
            if (typ_dat_vzor == 1)
            {
                                while (proces <= (pocet_radku-delka_obchodu-delka_vzoru_1))
                                        {


                                         if (((OOS_pole_dat_time[proces]>TimeFiltr1Start && OOS_pole_dat_time[proces]<TimeFiltr1Stop)||(OOS_pole_dat_time[proces]>TimeFiltr2Start && OOS_pole_dat_time[proces]<TimeFiltr2Stop)||(OOS_pole_dat_time[proces]>TimeFiltr3Start && OOS_pole_dat_time[proces]<TimeFiltr3Stop)||(OOS_pole_dat_time[proces]>TimeFiltr4Start && OOS_pole_dat_time[proces]<TimeFiltr4Stop)||(OOS_pole_dat_time[proces]>TimeFiltr5Start && OOS_pole_dat_time[proces]<TimeFiltr5Stop))&&chyba_filtr==0)
                                          {
                                           if (((proces > perioda_1) && (proces > perioda_2) &&(proces > perioda_3) &&(proces > perioda_4) &&(proces > perioda_5))) //osetruje to,ze nebudeme testovat tu strategii,pred kterou byl nacten pattern
                                            {
                                                        for (int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                            {
                                                                  akt_data[poc1][0]=indi_1[proces+poc1];
                                                                  akt_data[poc1][1]=indi_2[proces+poc1];
                                                                  akt_data[poc1][2]=indi_3[proces+poc1];
                                                                  akt_data[poc1][3]=indi_4[proces+poc1];
                                                                  akt_data[poc1][4]=indi_5[proces+poc1];
                                                            }

                                                          if (RadioGroup3->ItemIndex == 0)
                                                          {
                                                           offset=akt_data[0][0];
                                                           for (int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                            {
                                                                   akt_data[poc1][0]=akt_data[poc1][0]-offset;
                                                                   akt_data[poc1][1]=akt_data[poc1][1]-offset;
                                                                   akt_data[poc1][2]=akt_data[poc1][2]-offset;
                                                                   akt_data[poc1][3]=akt_data[poc1][3]-offset;
                                                                   akt_data[poc1][4]=akt_data[poc1][3]-offset;
                                                            }
                                                           }


                                if (RadioGroup3->ItemIndex == 1)
                                {
                                if ( CheckBox6->Checked )
                                {
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >akt_data[poc1][0] ) min_norm=akt_data[poc1][0];
                                 if ( max_norm <akt_data[poc1][0] ) max_norm=akt_data[poc1][0];
                                }
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   akt_data[poc1][0]=(akt_data[poc1][0]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }

                                if ( CheckBox7->Checked )
                                {
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >akt_data[poc1][1] ) min_norm=akt_data[poc1][1];
                                 if ( max_norm <akt_data[poc1][1] ) max_norm=akt_data[poc1][1];
                                }
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   akt_data[poc1][1]=(akt_data[poc1][1]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }

                       if ( CheckBox8->Checked )
                                {
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >akt_data[poc1][2] ) min_norm=akt_data[poc1][2];
                                 if ( max_norm <akt_data[poc1][2] ) max_norm=akt_data[poc1][2];
                                }
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   akt_data[poc1][2]=(akt_data[poc1][2]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }

                       if ( CheckBox9->Checked )
                                {
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >akt_data[poc1][3] ) min_norm=akt_data[poc1][3];
                                 if ( max_norm <akt_data[poc1][3] ) max_norm=akt_data[poc1][3];
                                }
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   akt_data[poc1][3]=(akt_data[poc1][3]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }

                       if ( CheckBox10->Checked )
                                {
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >akt_data[poc1][4] ) min_norm=akt_data[poc1][4];
                                 if ( max_norm <akt_data[poc1][4] ) max_norm=akt_data[poc1][4];
                                }
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   akt_data[poc1][4]=(akt_data[poc1][4]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }

                       }

                                                  if (delka_vzoru_1 > 0)
                                                  {
                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++){chyba_1=chyba_1 + (hyp_pattern[poc1][0] - akt_data[poc1][0])*(hyp_pattern[poc1][0] - akt_data[poc1][0]);}

                                                  }

                                                  if (delka_vzoru_1 > 1)
                                                  {
                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++){chyba_2=chyba_2 + (hyp_pattern[poc1][1] - akt_data[poc1][1])*(hyp_pattern[poc1][1] - akt_data[poc1][1]);}

                                                  }else chyba_2=0;

                                                  if (delka_vzoru_1 > 2)
                                                  {
                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++){chyba_3=chyba_3 + (hyp_pattern[poc1][2] - akt_data[poc1][2])*(hyp_pattern[poc1][2] - akt_data[poc1][2]);}

                                                  }else chyba_3=0;

                                                  if (delka_vzoru_1 > 3)
                                                  {
                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++){chyba_4=chyba_4 + (hyp_pattern[poc1][3] - akt_data[poc1][3])*(hyp_pattern[poc1][3] - akt_data[poc1][3]);}

                                                  }else chyba_4=0;

                                                  if (delka_vzoru_1 > 4)
                                                  {
                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++){chyba_5=chyba_5 + (hyp_pattern[poc1][4] - akt_data[poc1][4])*(hyp_pattern[poc1][4] - akt_data[poc1][4]);}

                                                  }else chyba_5=0;


                                                  chyba= (chyba_1 + chyba_2 + chyba_3 + chyba_4 + chyba_5)/2;//vypocet chyby
                                                  chyba_1=0;
                                                  chyba_2=0;
                                                  chyba_3=0;
                                                  chyba_4=0;
                                                  chyba_5=0;
                        //po vypoctu chyby urcit,jestli je pattern dostatecne podobny
                        if (chyba <= chyba_vzoru_1)
                        {
                        pocet_obchodu++;
                        OOS_backtest_chyba[pom_backtest]=chyba;
                             //nastaveni backtestingu,ze pri otevrene pozici ignoruji dalsi vyskytnute vzory
                             if ( RadioGroup2->ItemIndex == 0 )
                             {
                               for (int poc1=0;poc1<delka_obchodu && priznak==0;poc1++)  //nacteni aktualnich dat
                                                            {

                                                               if ((OOS_pole_dat_O[proces+delka_vzoru_1]+(profit_target*dolar))<=(OOS_pole_dat_H[proces+delka_vzoru_1+poc1])){ strategie_nalezena = 2;priznak=1;}   //nalezeni profitu

                                                               if ((OOS_pole_dat_O[proces+delka_vzoru_1]-(stop_loss*dolar))>=(OOS_pole_dat_L[proces+delka_vzoru_1+poc1])){strategie_nalezena = 0;priznak=1;}        //nalezeni ztraty

                                                               if (poc1==delka_obchodu-1 && priznak==0) {strategie_nalezena=1;priznak=1;}
                                                            }
                                                            priznak=0;
                                                  switch(strategie_nalezena)
                                                  {
                                                        case 0:
                                                                {
                                                                 OOS_backtest[pom_backtest]=-stop_loss;
                                                                 pocet_kont_ztrat++;
                                                                 pocet_kont_profitu=0;
                                                                 pocet_ztrat++;
                                                                 prumerna_ztrata+=OOS_backtest[pom_backtest];
                                                                }break;

                                                        case 1:
                                                                {
                                                                 OOS_backtest[pom_backtest]=(OOS_pole_dat_C[proces+delka_vzoru_1+delka_obchodu-1]-OOS_pole_dat_O[proces+delka_vzoru_1])*1/dolar;
                                                                 if (OOS_backtest[pom_backtest]>0){pocet_kont_ztrat=0;pocet_kont_profitu++;pocet_profitu++;prumerny_profit+=OOS_backtest[pom_backtest];}
                                                                 if (OOS_backtest[pom_backtest]<0) {pocet_kont_ztrat++;pocet_kont_profitu=0;prumerna_ztrata+=OOS_backtest[pom_backtest];}
                                                                 if (OOS_backtest[pom_backtest]==0) {pocet_nul++;}
                                                                }break;
                                                        case 2:
                                                                {
                                                                 OOS_backtest[pom_backtest]=profit_target;
                                                                 pocet_kont_ztrat=0;
                                                                 pocet_kont_profitu++;
                                                                 pocet_profitu++;
                                                                 prumerny_profit+=OOS_backtest[pom_backtest];
                                                                }
                                                  }
                                                  pom_backtest++;
                                                  proces++;

                             }
                             //nastaveni backtestingu, ze pri otevrene pozici prikupuji dale pozice pri vyskytnuti vzoru
                             if ( RadioGroup2->ItemIndex == 1)
                             {
                               for (int poc1=0;poc1<delka_obchodu && priznak==0;poc1++)  //nacteni aktualnich dat
                                                            {

                                                               if ((OOS_pole_dat_O[proces+delka_vzoru_1]+(profit_target*dolar))<=(OOS_pole_dat_H[proces+delka_vzoru_1+poc1])){ strategie_nalezena = 2;priznak=1;}   //nalezeni profitu

                                                               if ((OOS_pole_dat_O[proces+delka_vzoru_1]-(stop_loss*dolar))>=(OOS_pole_dat_L[proces+delka_vzoru_1+poc1])){strategie_nalezena = 0;priznak=1;}        //nalezeni ztraty

                                                               if (poc1==delka_obchodu-1 && priznak==0) {strategie_nalezena=1;priznak=1;}
                                                            }
                                                            priznak=0;
                                                  switch(strategie_nalezena)
                                                  {
                                                        case 0:
                                                                {
                                                                 OOS_backtest[pom_backtest]=-stop_loss;
                                                                 pocet_kont_ztrat++;
                                                                 pocet_kont_profitu=0;
                                                                 pocet_ztrat++;
                                                                 prumerna_ztrata+=OOS_backtest[pom_backtest];
                                                                }break;

                                                        case 1:
                                                                {
                                                                 OOS_backtest[pom_backtest]=(OOS_pole_dat_C[proces+delka_vzoru_1+delka_obchodu-1]-OOS_pole_dat_O[proces+delka_vzoru_1])*1/dolar;
                                                                 if (OOS_backtest[pom_backtest]>0){pocet_kont_ztrat=0;pocet_kont_profitu++;pocet_profitu++;prumerny_profit+=OOS_backtest[pom_backtest];}
                                                                 if (OOS_backtest[pom_backtest]<0) {pocet_kont_ztrat++;pocet_kont_profitu=0;prumerna_ztrata+=OOS_backtest[pom_backtest];}
                                                                 if (OOS_backtest[pom_backtest]==0) {pocet_nul++;}
                                                                }break;
                                                        case 2:
                                                                {
                                                                 OOS_backtest[pom_backtest]=profit_target;
                                                                 pocet_kont_ztrat=0;
                                                                 pocet_kont_profitu++;
                                                                 pocet_profitu++;
                                                                 prumerny_profit+=OOS_backtest[pom_backtest];
                                                                }
                                                  }
                                                  pom_backtest++;


                             }


                             }

                        }
                        }
                        proces++;
                        if (pocet_kont_ztrat > pocet_kont_ztrat_max)pocet_kont_ztrat_max=pocet_kont_ztrat;
                        if (pocet_kont_profitu > pocet_kont_profitu_max)pocet_kont_profitu_max=pocet_kont_profitu;
            }

            }

            if (typ_dat_vzor == 2)
            {
                                while (proces <= (pocet_radku-delka_obchodu-delka_vzoru_1))
                                        {


                                         if (((OOS_pole_dat_time[proces]>TimeFiltr1Start && OOS_pole_dat_time[proces]<TimeFiltr1Stop)||(OOS_pole_dat_time[proces]>TimeFiltr2Start && OOS_pole_dat_time[proces]<TimeFiltr2Stop)||(OOS_pole_dat_time[proces]>TimeFiltr3Start && OOS_pole_dat_time[proces]<TimeFiltr3Stop)||(OOS_pole_dat_time[proces]>TimeFiltr4Start && OOS_pole_dat_time[proces]<TimeFiltr4Stop)||(OOS_pole_dat_time[proces]>TimeFiltr5Start && OOS_pole_dat_time[proces]<TimeFiltr5Stop))&&chyba_filtr==0)
                                          {


                                                        for (int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                            {
                                                                  akt_data[poc1][0]=indi_1[proces+poc1];

                                                            }

                                                           if (RadioGroup3->ItemIndex == 0)
                                                           {
                                                           offset=akt_data[0][0];
                                                           for (int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                            {
                                                                   akt_data[poc1][0]=akt_data[poc1][0]-offset;

                                                            }
                                                           }

                                                       if (RadioGroup3->ItemIndex == 1)
                                                       {
                                                         for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //nacteni hypotetickeho patternu
                                                         {
                                                         if ( min_norm >akt_data[poc1][0] ) min_norm=akt_data[poc1][0];
                                                         if ( max_norm <akt_data[poc1][0] ) max_norm=akt_data[poc1][0];
                                                         }
                                                         for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                                         {
                                                            akt_data[poc1][0]=(akt_data[poc1][0]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                                         }
                                                            min_norm=9999999;
                                                            max_norm=0;

                                                        }


                                 if ( typ_chyby==1 )
                                        {
                                        priznak_podobnosti=0;
                                        for (int poc1=0;poc1<delka_vzoru_1;poc1++)
                                        {
                                        if ((akt_data[poc1][0] > hyp_pattern[poc1][0] + mez_chyby_1) || (akt_data[poc1][0] < hyp_pattern[poc1][0] - mez_chyby_1))
                                             {
                                               priznak_podobnosti = 1;
                                             }
                                        }
                                        }

                                    if ( typ_chyby==0)
                                    {
                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++){chyba_1=chyba_1 + (hyp_pattern[poc1][0] - akt_data[poc1][0])*(hyp_pattern[poc1][0] - akt_data[poc1][0]);}
                                                  chyba= (chyba_1)/2;//vypocet chyby
                                                  chyba_1=0;
                                    }
                        //po vypoctu chyby urcit,jestli je pattern dostatecne podobny
                        if (((chyba <= chyba_vzoru_1)&&(typ_chyby==0))||((priznak_podobnosti==0)&&(typ_chyby==1)))
                        {
                        if(typ_chyby==0) OOS_backtest_chyba[pom_backtest]=chyba_1;
                        pocet_obchodu++;
                             //nastaveni backtestingu,ze pri otevrene pozici ignoruji dalsi vyskytnute vzory
                             if ( RadioGroup2->ItemIndex == 0 )
                             {
                               for (int poc1=0;poc1<delka_obchodu && priznak==0;poc1++)  //nacteni aktualnich dat
                                                            {
                                                               obchod_proveden=1;
                                                               if ((OOS_pole_dat_O[proces+delka_vzoru_1]+(profit_target*dolar))<=(OOS_pole_dat_H[proces+delka_vzoru_1+poc1])){ strategie_nalezena = 2;priznak=1;}   //nalezeni profitu

                                                               if ((OOS_pole_dat_O[proces+delka_vzoru_1]-(stop_loss*dolar))>=(OOS_pole_dat_L[proces+delka_vzoru_1+poc1])){strategie_nalezena = 0;priznak=1;}        //nalezeni ztraty

                                                               if (poc1==delka_obchodu-1 && priznak==0) {strategie_nalezena=1;priznak=1;}
                                                               pocitadlo_ignore++;
                                                            }
                                                            proces+=pocitadlo_ignore-1;
                                                            pocitadlo_ignore=0;
                                                            priznak=0;
                                                  switch(strategie_nalezena)
                                                  {
                                                        case 0:
                                                                {
                                                                 OOS_backtest[pom_backtest]=-stop_loss-komise_backtest;
                                                                 pocet_kont_ztrat++;
                                                                 pocet_kont_profitu=0;
                                                                 pocet_ztrat++;
                                                                 prumerna_ztrata+=OOS_backtest[pom_backtest];
                                                                }break;

                                                        case 1:
                                                                {
                                                                 OOS_backtest[pom_backtest]=(OOS_pole_dat_C[proces+delka_vzoru_1+delka_obchodu-1]-OOS_pole_dat_O[proces+delka_vzoru_1])*1/dolar-komise_backtest;
                                                                 if (OOS_backtest[pom_backtest]>0){pocet_kont_ztrat=0;pocet_kont_profitu++;pocet_profitu++;prumerny_profit+=OOS_backtest[pom_backtest];}
                                                                 if (OOS_backtest[pom_backtest]<0) {pocet_kont_ztrat++;pocet_kont_profitu=0;prumerna_ztrata+=OOS_backtest[pom_backtest];}
                                                                 if (OOS_backtest[pom_backtest]==0) {pocet_nul++;}
                                                                }break;
                                                        case 2:
                                                                {
                                                                 OOS_backtest[pom_backtest]=profit_target-komise_backtest;
                                                                 pocet_kont_ztrat=0;
                                                                 pocet_kont_profitu++;
                                                                 pocet_profitu++;
                                                                 prumerny_profit+=OOS_backtest[pom_backtest];
                                                                }
                                                  }
                                                  pom_backtest++;


                             }
                             //nastaveni backtestingu, ze pri otevrene pozici prikupuji dale pozice pri vyskytnuti vzoru
                             if ( RadioGroup2->ItemIndex == 1)
                             {
                               for (int poc1=0;poc1<delka_obchodu && priznak==0;poc1++)  //nacteni aktualnich dat
                                                            {
                                                               obchod_proveden=1;
                                                               if ((OOS_pole_dat_O[proces+delka_vzoru_1]+(profit_target*dolar))<=(OOS_pole_dat_H[proces+delka_vzoru_1+poc1])){ strategie_nalezena = 2;priznak=1;}   //nalezeni profitu

                                                               if ((OOS_pole_dat_O[proces+delka_vzoru_1]-(stop_loss*dolar))>=(OOS_pole_dat_L[proces+delka_vzoru_1+poc1])){strategie_nalezena = 0;priznak=1;}        //nalezeni ztraty

                                                               if (poc1==delka_obchodu-1 && priznak==0) {strategie_nalezena=1;priznak=1;}
                                                            }
                                                            priznak=0;
                                                  switch(strategie_nalezena)
                                                  {
                                                        case 0:
                                                                {
                                                                 OOS_backtest[pom_backtest]=-stop_loss-komise_backtest;
                                                                 pocet_kont_ztrat++;
                                                                 pocet_kont_profitu=0;
                                                                 pocet_ztrat++;
                                                                 prumerna_ztrata+=OOS_backtest[pom_backtest];
                                                                }break;

                                                        case 1:
                                                                {
                                                                 OOS_backtest[pom_backtest]=(OOS_pole_dat_C[proces+delka_vzoru_1+delka_obchodu-1]-OOS_pole_dat_O[proces+delka_vzoru_1])*1/dolar-komise_backtest;
                                                                 if (OOS_backtest[pom_backtest]>0){pocet_kont_ztrat=0;pocet_kont_profitu++;pocet_profitu++;prumerny_profit+=OOS_backtest[pom_backtest];}
                                                                 if (OOS_backtest[pom_backtest]<0) {pocet_kont_ztrat++;pocet_kont_profitu=0;prumerna_ztrata+=OOS_backtest[pom_backtest];}
                                                                 if (OOS_backtest[pom_backtest]==0) {pocet_nul++;}
                                                                }break;
                                                        case 2:
                                                                {
                                                                 OOS_backtest[pom_backtest]=profit_target-komise_backtest;
                                                                 pocet_kont_ztrat=0;
                                                                 pocet_kont_profitu++;
                                                                 pocet_profitu++;
                                                                 prumerny_profit+=OOS_backtest[pom_backtest];
                                                                }
                                                  }
                                                  pom_backtest++;


                             }


                             }

                        }

                        proces++;
                        if (pocet_kont_ztrat > pocet_kont_ztrat_max)pocet_kont_ztrat_max=pocet_kont_ztrat;
                        if (pocet_kont_profitu > pocet_kont_profitu_max)pocet_kont_profitu_max=pocet_kont_profitu;
            }

            }  //konec ifu pro volbu typical price

           }
        ///SHORT
        if (RadioGroup1->ItemIndex == 1)
                {

            //VOLBA DAT OHLC PRICE
            if (typ_dat_vzor == 0)
            {
                                while (proces <= (pocet_radku-delka_obchodu-delka_vzoru_1))
                                        {


                                         if (((OOS_pole_dat_time[proces]>TimeFiltr1Start && OOS_pole_dat_time[proces]<TimeFiltr1Stop)||(OOS_pole_dat_time[proces]>TimeFiltr2Start && OOS_pole_dat_time[proces]<TimeFiltr2Stop)||(OOS_pole_dat_time[proces]>TimeFiltr3Start && OOS_pole_dat_time[proces]<TimeFiltr3Stop)||(OOS_pole_dat_time[proces]>TimeFiltr4Start && OOS_pole_dat_time[proces]<TimeFiltr4Stop)||(OOS_pole_dat_time[proces]>TimeFiltr5Start && OOS_pole_dat_time[proces]<TimeFiltr5Stop))&&chyba_filtr==0)
                                          {


                                                        for (int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                            {
                                                                  akt_data[poc1][0]=OOS_pole_dat_O[proces+poc1];
                                                                  akt_data[poc1][1]=OOS_pole_dat_H[proces+poc1];
                                                                  akt_data[poc1][2]=OOS_pole_dat_L[proces+poc1];
                                                                  akt_data[poc1][3]=OOS_pole_dat_C[proces+poc1];
                                                            }

                                                           if(RadioGroup3->ItemIndex == 0)
                                                           {
                                                           offset=akt_data[0][0];
                                                           for (int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                            {
                                                                   akt_data[poc1][0]=akt_data[poc1][0]-offset;
                                                                   akt_data[poc1][1]=akt_data[poc1][1]-offset;
                                                                   akt_data[poc1][2]=akt_data[poc1][2]-offset;
                                                                   akt_data[poc1][3]=akt_data[poc1][3]-offset;
                                                            }
                                                            }

                                                   if (RadioGroup3->ItemIndex == 1)
                                                   {
                                                    for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //nacteni hypotetickeho patternu
                                                   {
                                                    if ( min_norm >akt_data[poc1][2] ) min_norm=akt_data[poc1][2];
                                                     if ( max_norm <akt_data[poc1][1] ) max_norm=akt_data[poc1][1];
                                                   }
                                                   for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                                     {
                                                      akt_data[poc1][0]=(akt_data[poc1][0]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                                      akt_data[poc1][1]=(akt_data[poc1][1]-min_norm)/(max_norm-min_norm);
                                                      akt_data[poc1][2]=(akt_data[poc1][2]-min_norm)/(max_norm-min_norm);
                                                      akt_data[poc1][3]=(akt_data[poc1][3]-min_norm)/(max_norm-min_norm);
                                                     }
                                                     min_norm=9999999;
                                                     max_norm=0;
                                                    }


                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                  {
                                                  chybaO=chybaO + (hyp_pattern[poc1][0] - akt_data[poc1][0])*(hyp_pattern[poc1][0] - akt_data[poc1][0]);
                                                  }
                                                  chybaO=chybaO/2;

                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                  {
                                                  chybaH=chybaH + (hyp_pattern[poc1][1] - akt_data[poc1][1])*(hyp_pattern[poc1][1] - akt_data[poc1][1]);
                                                  }
                                                  chybaH=chybaH/2;

                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                  {
                                                  chybaL=chybaL + (hyp_pattern[poc1][2] - akt_data[poc1][2])*(hyp_pattern[poc1][2] - akt_data[poc1][2]);
                                                  }
                                                  chybaL=chybaL/2;

                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                  {
                                                  chybaC=chybaC + (hyp_pattern[poc1][3] - akt_data[poc1][3])*(hyp_pattern[poc1][3] - akt_data[poc1][3]);
                                                  }
                                                  chybaC=chybaC/2;

                                                  chyba= (chybaO + chybaH + chybaL + chybaC)*100000;//vypocet chyby

                        //po vypoctu chyby urcit,jestli je pattern dostatecne podobny
                        if (chyba <= chyba_vzoru_1)
                        {
                        OOS_backtest_chyba[pom_backtest]=chyba;
                        pocet_obchodu++;
                             //nastaveni backtestingu,ze pri otevrene pozici ignoruji dalsi vyskytnute vzory
                             if ( RadioGroup2->ItemIndex == 0 )
                             {
                               for (int poc1=0;poc1<delka_obchodu && priznak==0;poc1++)  //nacteni aktualnich dat
                                                            {

                                                               if ((OOS_pole_dat_O[proces+delka_vzoru_1]-(profit_target*dolar))>=(OOS_pole_dat_H[proces+delka_vzoru_1+poc1])){ strategie_nalezena = 2;priznak=1;}   //nalezeni profitu

                                                               if ((OOS_pole_dat_O[proces+delka_vzoru_1]+(stop_loss*dolar))<=(OOS_pole_dat_L[proces+delka_vzoru_1+poc1])){strategie_nalezena = 0;priznak=1;}        //nalezeni ztraty

                                                               if (poc1==delka_obchodu-1 && priznak==0) {strategie_nalezena=1;priznak=1;}
                                                            }
                                                            priznak=0;
                                                  switch(strategie_nalezena)
                                                  {
                                                        case 0:
                                                                {
                                                                 OOS_backtest[pom_backtest]=-stop_loss;
                                                                 pocet_kont_ztrat++;
                                                                 pocet_kont_profitu=0;
                                                                 pocet_ztrat++;
                                                                 prumerna_ztrata+=OOS_backtest[pom_backtest];
                                                                }break;

                                                        case 1:
                                                                {
                                                                 OOS_backtest[pom_backtest]=(OOS_pole_dat_C[proces+delka_vzoru_1+delka_obchodu-1]-OOS_pole_dat_O[proces+delka_vzoru_1])*1/dolar;
                                                                 if (OOS_backtest[pom_backtest]>0){pocet_kont_ztrat=0;pocet_kont_profitu++;pocet_profitu++;prumerny_profit+=OOS_backtest[pom_backtest];}
                                                                 if (OOS_backtest[pom_backtest]<0) {pocet_kont_ztrat++;pocet_kont_profitu=0;prumerna_ztrata+=OOS_backtest[pom_backtest];}
                                                                 if (OOS_backtest[pom_backtest]==0) {pocet_nul++;}
                                                                }break;
                                                        case 2:
                                                                {
                                                                 OOS_backtest[pom_backtest]=profit_target;
                                                                 pocet_kont_ztrat=0;
                                                                 pocet_kont_profitu++;
                                                                 pocet_profitu++;
                                                                 prumerny_profit+=OOS_backtest[pom_backtest];
                                                                }
                                                  }
                                                  pom_backtest++;
                                                  proces++;

                             }
                             //nastaveni backtestingu, ze pri otevrene pozici prikupuji dale pozice pri vyskytnuti vzoru
                             if ( RadioGroup2->ItemIndex == 1)
                             {
                               for (int poc1=0;poc1<delka_obchodu && priznak==0;poc1++)  //nacteni aktualnich dat
                                                            {

                                                               if ((OOS_pole_dat_O[proces+delka_vzoru_1]-(profit_target*dolar))>=(OOS_pole_dat_H[proces+delka_vzoru_1+poc1])){ strategie_nalezena = 2;priznak=1;}   //nalezeni profitu

                                                               if ((OOS_pole_dat_O[proces+delka_vzoru_1]+(stop_loss*dolar))<=(OOS_pole_dat_L[proces+delka_vzoru_1+poc1])){strategie_nalezena = 0;priznak=1;}        //nalezeni ztraty

                                                               if (poc1==delka_obchodu-1 && priznak==0) {strategie_nalezena=1;priznak=1;}
                                                            }
                                                            priznak=0;
                                                  switch(strategie_nalezena)
                                                  {

                                                        case 0:
                                                                {
                                                                 OOS_backtest[pom_backtest]=-stop_loss;
                                                                 pocet_kont_ztrat++;
                                                                 pocet_kont_profitu=0;
                                                                 pocet_ztrat++;
                                                                 prumerna_ztrata+=OOS_backtest[pom_backtest];
                                                                }break;

                                                        case 1:
                                                                {
                                                                 OOS_backtest[pom_backtest]=(OOS_pole_dat_C[proces+delka_vzoru_1+delka_obchodu-1]-OOS_pole_dat_O[proces+delka_vzoru_1])*1/dolar;
                                                                 if (OOS_backtest[pom_backtest]>0){pocet_kont_ztrat=0;pocet_kont_profitu++;pocet_profitu++;prumerny_profit+=OOS_backtest[pom_backtest];}
                                                                 if (OOS_backtest[pom_backtest]<0) {pocet_kont_ztrat++;pocet_kont_profitu=0;prumerna_ztrata+=OOS_backtest[pom_backtest];}
                                                                 if (OOS_backtest[pom_backtest]==0) {pocet_nul++;}
                                                                }break;
                                                        case 2:
                                                                {
                                                                 OOS_backtest[pom_backtest]=profit_target;
                                                                 pocet_kont_ztrat=0;
                                                                 pocet_kont_profitu++;
                                                                 pocet_profitu++;
                                                                 prumerny_profit+=OOS_backtest[pom_backtest];
                                                                }
                                                  }
                                                  pom_backtest++;


                             }


                             }

                        }
                        proces++;
                        chybaO=0;
                        chybaH=0;
                        chybaL=0;
                        chybaC=0;
                        if (pocet_kont_ztrat > pocet_kont_ztrat_max)pocet_kont_ztrat_max=pocet_kont_ztrat;
                        if (pocet_kont_profitu > pocet_kont_profitu_max)pocet_kont_profitu_max=pocet_kont_profitu;
            }
           }
            if (typ_dat_vzor == 1)
            {
                                while (proces <= (pocet_radku-delka_obchodu-delka_vzoru_1))
                                        {


                                         if (((OOS_pole_dat_time[proces]>TimeFiltr1Start && OOS_pole_dat_time[proces]<TimeFiltr1Stop)||(OOS_pole_dat_time[proces]>TimeFiltr2Start && OOS_pole_dat_time[proces]<TimeFiltr2Stop)||(OOS_pole_dat_time[proces]>TimeFiltr3Start && OOS_pole_dat_time[proces]<TimeFiltr3Stop)||(OOS_pole_dat_time[proces]>TimeFiltr4Start && OOS_pole_dat_time[proces]<TimeFiltr4Stop)||(OOS_pole_dat_time[proces]>TimeFiltr5Start && OOS_pole_dat_time[proces]<TimeFiltr5Stop))&&chyba_filtr==0)
                                          {
                                           if (((proces > perioda_1) && (proces > perioda_2) &&(proces > perioda_3) &&(proces > perioda_4) &&(proces > perioda_5))) //osetruje to,ze nebudeme testovat tu strategii,pred kterou byl nacten pattern
                                            {
                                                        for (int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                            {
                                                                  akt_data[poc1][0]=indi_1[proces+poc1];
                                                                  akt_data[poc1][1]=indi_2[proces+poc1];
                                                                  akt_data[poc1][2]=indi_3[proces+poc1];
                                                                  akt_data[poc1][3]=indi_4[proces+poc1];
                                                                  akt_data[poc1][4]=indi_5[proces+poc1];
                                                            }

                                                           if ( RadioGroup3->ItemIndex == 0)
                                                           {
                                                           offset=akt_data[0][0];
                                                           for (int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                            {
                                                                   akt_data[poc1][0]=akt_data[poc1][0]-offset;
                                                                   akt_data[poc1][1]=akt_data[poc1][1]-offset;
                                                                   akt_data[poc1][2]=akt_data[poc1][2]-offset;
                                                                   akt_data[poc1][3]=akt_data[poc1][3]-offset;
                                                                   akt_data[poc1][4]=akt_data[poc1][4]-offset;
                                                            }
                                                            }





                                if (RadioGroup3->ItemIndex == 1)
                                {

                                if ( CheckBox6->Checked )
                                {
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >akt_data[poc1][0] ) min_norm=akt_data[poc1][0];
                                 if ( max_norm <akt_data[poc1][0] ) max_norm=akt_data[poc1][0];
                                }
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   akt_data[poc1][0]=(akt_data[poc1][0]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }

                                if ( CheckBox7->Checked )
                                {
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >akt_data[poc1][1] ) min_norm=akt_data[poc1][1];
                                 if ( max_norm <akt_data[poc1][1] ) max_norm=akt_data[poc1][1];
                                }
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   akt_data[poc1][1]=(akt_data[poc1][1]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }

                       if ( CheckBox8->Checked )
                                {
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >akt_data[poc1][2] ) min_norm=akt_data[poc1][2];
                                 if ( max_norm <akt_data[poc1][2] ) max_norm=akt_data[poc1][2];
                                }
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   akt_data[poc1][2]=(akt_data[poc1][2]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }

                       if ( CheckBox9->Checked )
                                {
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >akt_data[poc1][3] ) min_norm=akt_data[poc1][3];
                                 if ( max_norm <akt_data[poc1][3] ) max_norm=akt_data[poc1][3];
                                }
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   akt_data[poc1][3]=(akt_data[poc1][3]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }

                       if ( CheckBox10->Checked )
                                {
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >akt_data[poc1][4] ) min_norm=akt_data[poc1][4];
                                 if ( max_norm <akt_data[poc1][4] ) max_norm=akt_data[poc1][4];
                                }
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   akt_data[poc1][4]=(akt_data[poc1][4]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }
                           }



                                                  if (delka_vzoru_1 > 0)
                                                  {
                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++){chyba_1=chyba_1 + (hyp_pattern[poc1][0] - akt_data[poc1][0])*(hyp_pattern[poc1][0] - akt_data[poc1][0]);}

                                                  }

                                                  if (delka_vzoru_1 > 1)
                                                  {
                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++){chyba_2=chyba_2 + (hyp_pattern[poc1][1] - akt_data[poc1][1])*(hyp_pattern[poc1][1] - akt_data[poc1][1]);}

                                                  }else chyba_2=0;

                                                  if (delka_vzoru_1 > 2)
                                                  {
                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++){chyba_3=chyba_3 + (hyp_pattern[poc1][2] - akt_data[poc1][2])*(hyp_pattern[poc1][2] - akt_data[poc1][2]);}

                                                  }else chyba_3=0;

                                                  if (delka_vzoru_1 > 3)
                                                  {
                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++){chyba_4=chyba_4 + (hyp_pattern[poc1][3] - akt_data[poc1][3])*(hyp_pattern[poc1][3] - akt_data[poc1][3]);}

                                                  }else chyba_4=0;

                                                  if (delka_vzoru_1 > 4)
                                                  {
                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++){chyba_5=chyba_5 + (hyp_pattern[poc1][4] - akt_data[poc1][4])*(hyp_pattern[poc1][4] - akt_data[poc1][4]);}

                                                  }else chyba_5=0;


                                                  chyba= (chyba_1 + chyba_2 + chyba_3 + chyba_4 + chyba_5)/2;//vypocet chyby
                                                  chyba_1=0;
                                                  chyba_2=0;
                                                  chyba_3=0;
                                                  chyba_4=0;
                                                  chyba_5=0;
                        //po vypoctu chyby urcit,jestli je pattern dostatecne podobny
                        if (chyba <= chyba_vzoru_1)
                        {
                        OOS_backtest_chyba[pom_backtest]=chyba;
                        pocet_obchodu++;
                             //nastaveni backtestingu,ze pri otevrene pozici ignoruji dalsi vyskytnute vzory
                             if ( RadioGroup2->ItemIndex == 0 )
                             {
                               for (int poc1=0;poc1<delka_obchodu && priznak==0;poc1++)  //nacteni aktualnich dat
                                                            {

                                                               if ((OOS_pole_dat_O[proces+delka_vzoru_1]-(profit_target*dolar))>=(OOS_pole_dat_H[proces+delka_vzoru_1+poc1])){ strategie_nalezena = 2;priznak=1;}   //nalezeni profitu

                                                               if ((OOS_pole_dat_O[proces+delka_vzoru_1]+(stop_loss*dolar))<=(OOS_pole_dat_L[proces+delka_vzoru_1+poc1])){strategie_nalezena = 0;priznak=1;}        //nalezeni ztraty

                                                               if (poc1==delka_obchodu-1 && priznak==0) {strategie_nalezena=1;priznak=1;}
                                                            }
                                                            priznak=0;
                                                  switch(strategie_nalezena)
                                                  {
                                                        case 0:
                                                                {
                                                                 OOS_backtest[pom_backtest]=-stop_loss-komise_uceni;
                                                                 pocet_kont_ztrat++;
                                                                 pocet_kont_profitu=0;
                                                                 pocet_ztrat++;
                                                                 prumerna_ztrata+=OOS_backtest[pom_backtest];
                                                                }break;

                                                        case 1:
                                                                {
                                                                 OOS_backtest[pom_backtest]=(OOS_pole_dat_C[proces+delka_vzoru_1+delka_obchodu-1]-OOS_pole_dat_O[proces+delka_vzoru_1])*1/dolar-komise_uceni;
                                                                 if (OOS_backtest[pom_backtest]>0){pocet_kont_ztrat=0;pocet_kont_profitu++;pocet_profitu++;prumerny_profit+=OOS_backtest[pom_backtest];}
                                                                 if (OOS_backtest[pom_backtest]<0) {pocet_kont_ztrat++;pocet_kont_profitu=0;prumerna_ztrata+=OOS_backtest[pom_backtest];}
                                                                 if (OOS_backtest[pom_backtest]==0) {pocet_nul++;}
                                                                }break;
                                                        case 2:
                                                                {
                                                                 OOS_backtest[pom_backtest]=profit_target-komise_uceni;
                                                                 pocet_kont_ztrat=0;
                                                                 pocet_kont_profitu++;
                                                                 pocet_profitu++;
                                                                 prumerny_profit+=OOS_backtest[pom_backtest];
                                                                }
                                                  }
                                                  pom_backtest++;
                                                  proces++;

                             }
                             //nastaveni backtestingu, ze pri otevrene pozici prikupuji dale pozice pri vyskytnuti vzoru
                             if ( RadioGroup2->ItemIndex == 1)
                             {
                               for (int poc1=0;poc1<delka_obchodu && priznak==0;poc1++)  //nacteni aktualnich dat
                                                            {

                                                               if ((OOS_pole_dat_O[proces+delka_vzoru_1]-(profit_target*dolar))>=(OOS_pole_dat_H[proces+delka_vzoru_1+poc1])){ strategie_nalezena = 2;priznak=1;}   //nalezeni profitu

                                                               if ((OOS_pole_dat_O[proces+delka_vzoru_1]+(stop_loss*dolar))<=(OOS_pole_dat_L[proces+delka_vzoru_1+poc1])){strategie_nalezena = 0;priznak=1;}        //nalezeni ztraty

                                                               if (poc1==delka_obchodu-1 && priznak==0) {strategie_nalezena=1;priznak=1;}
                                                            }
                                                            priznak=0;
                                                  switch(strategie_nalezena)
                                                  {
                                                        case 0:
                                                                {
                                                                 OOS_backtest[pom_backtest]=-stop_loss-komise_uceni;
                                                                 pocet_kont_ztrat++;
                                                                 pocet_kont_profitu=0;
                                                                 pocet_ztrat++;
                                                                 prumerna_ztrata+=OOS_backtest[pom_backtest];
                                                                }break;

                                                        case 1:
                                                                {
                                                                 OOS_backtest[pom_backtest]=(OOS_pole_dat_C[proces+delka_vzoru_1+delka_obchodu-1]-OOS_pole_dat_O[proces+delka_vzoru_1])*1/dolar-komise_uceni;
                                                                 if (OOS_backtest[pom_backtest]>0){pocet_kont_ztrat=0;pocet_kont_profitu++;pocet_profitu++;prumerny_profit+=OOS_backtest[pom_backtest];}
                                                                 if (OOS_backtest[pom_backtest]<0) {pocet_kont_ztrat++;pocet_kont_profitu=0;prumerna_ztrata+=OOS_backtest[pom_backtest];}
                                                                 if (OOS_backtest[pom_backtest]==0) {pocet_nul++;}
                                                                }break;
                                                        case 2:
                                                                {
                                                                 OOS_backtest[pom_backtest]=profit_target-komise_uceni;
                                                                 pocet_kont_ztrat=0;
                                                                 pocet_kont_profitu++;
                                                                 pocet_profitu++;
                                                                 prumerny_profit+=OOS_backtest[pom_backtest];
                                                                }
                                                  }
                                                  pom_backtest++;


                             }


                             }

                        }
                        }
                        proces++;
                        if (pocet_kont_ztrat > pocet_kont_ztrat_max)pocet_kont_ztrat_max=pocet_kont_ztrat;
                        if (pocet_kont_profitu > pocet_kont_profitu_max)pocet_kont_profitu_max=pocet_kont_profitu;
            }

            }

            if (typ_dat_vzor == 2)
            {
                                while (proces <= (pocet_radku-delka_obchodu-delka_vzoru_1))
                                        {


                                         if (((OOS_pole_dat_time[proces]>TimeFiltr1Start && OOS_pole_dat_time[proces]<TimeFiltr1Stop)||(OOS_pole_dat_time[proces]>TimeFiltr2Start && OOS_pole_dat_time[proces]<TimeFiltr2Stop)||(OOS_pole_dat_time[proces]>TimeFiltr3Start && OOS_pole_dat_time[proces]<TimeFiltr3Stop)||(OOS_pole_dat_time[proces]>TimeFiltr4Start && OOS_pole_dat_time[proces]<TimeFiltr4Stop)||(OOS_pole_dat_time[proces]>TimeFiltr5Start && OOS_pole_dat_time[proces]<TimeFiltr5Stop))&&chyba_filtr==0)
                                          {

                                                        for (int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                            {
                                                                  akt_data[poc1][0]=indi_1[proces+poc1];

                                                            }
                                                           if (RadioGroup3->ItemIndex == 0)
                                                           {
                                                           offset=akt_data[0][0];
                                                           for (int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                            {
                                                                   akt_data[poc1][0]=akt_data[poc1][0]-offset;

                                                            }
                                                           }

                                                        if (RadioGroup3->ItemIndex == 1)
                                                       {
                                                         for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //nacteni hypotetickeho patternu
                                                         {
                                                         if ( min_norm >akt_data[poc1][0] ) min_norm=akt_data[poc1][0];
                                                         if ( max_norm <akt_data[poc1][0] ) max_norm=akt_data[poc1][0];
                                                         }
                                                         for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                                         {
                                                            akt_data[poc1][0]=(akt_data[poc1][0]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                                         }
                                                            min_norm=9999999;
                                                            max_norm=0;

                                                        }

                                 if (typ_chyby==1 )
                                        {
                                        priznak_podobnosti=0;
                                        for (int poc1=0;poc1<delka_vzoru_1;poc1++)
                                        {
                                        if ((akt_data[poc1][0] > hyp_pattern[poc1][0] + mez_chyby_1) || (akt_data[poc1][0] < hyp_pattern[poc1][0] - mez_chyby_1))
                                             {
                                               priznak_podobnosti = 1;
                                             }
                                        }
                                        }


                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++){chyba_1=chyba_1 + (hyp_pattern[poc1][0] - akt_data[poc1][0])*(hyp_pattern[poc1][0] - akt_data[poc1][0]);}




                                                  chyba= (chyba_1)/2;//vypocet chyby
                                                  chyba_1=0;
                        //po vypoctu chyby urcit,jestli je pattern dostatecne podobny
                          if (((chyba <= chyba_vzoru_1)&&(typ_chyby==0))||((priznak_podobnosti==0)&&(typ_chyby==1)))
                        {
                        if (typ_chyby==0) OOS_backtest_chyba[pom_backtest]=chyba_1;
                        pocet_obchodu++;
                             //nastaveni backtestingu,ze pri otevrene pozici ignoruji dalsi vyskytnute vzory
                             if ( RadioGroup2->ItemIndex == 0 )
                             {
                               for (int poc1=0;poc1<delka_obchodu && priznak==0;poc1++)  //nacteni aktualnich dat
                                                            {

                                                               obchod_proveden=1;
                                                               if ((OOS_pole_dat_O[proces+delka_vzoru_1]-(profit_target*dolar))>=(OOS_pole_dat_L[proces+delka_vzoru_1+poc1])){ strategie_nalezena = 2;priznak=1;}   //nalezeni profitu

                                                               if ((OOS_pole_dat_O[proces+delka_vzoru_1]+(stop_loss*dolar))<=(OOS_pole_dat_H[proces+delka_vzoru_1+poc1])){strategie_nalezena = 0;priznak=1;}        //nalezeni ztraty

                                                               if (poc1==delka_obchodu-1 && priznak==0) {strategie_nalezena=1;priznak=1;}
                                                            pocitadlo_ignore++;
                                                            }
                                                            proces+=pocitadlo_ignore-1;
                                                            pocitadlo_ignore=0;
                                                            priznak=0;
                                                  switch(strategie_nalezena)
                                                  {
                                                        case 0:
                                                                {
                                                                 OOS_backtest[pom_backtest]=-stop_loss-komise_backtest;
                                                                 pocet_kont_ztrat++;
                                                                 pocet_kont_profitu=0;
                                                                 pocet_ztrat++;
                                                                 prumerna_ztrata+=OOS_backtest[pom_backtest];
                                                                }break;

                                                        case 1:
                                                                {
                                                                 OOS_backtest[pom_backtest]=(-OOS_pole_dat_C[proces+delka_vzoru_1+delka_obchodu-1]+OOS_pole_dat_O[proces+delka_vzoru_1])*1/dolar-komise_backtest;
                                                                 if (OOS_backtest[pom_backtest]>0){pocet_kont_ztrat=0;pocet_kont_profitu++;pocet_profitu++;prumerny_profit+=OOS_backtest[pom_backtest];}
                                                                 if (OOS_backtest[pom_backtest]<0) {pocet_kont_ztrat++;pocet_kont_profitu=0;prumerna_ztrata+=OOS_backtest[pom_backtest];}
                                                                 if (OOS_backtest[pom_backtest]==0) {pocet_nul++;}
                                                                }break;
                                                        case 2:
                                                                {
                                                                 OOS_backtest[pom_backtest]=profit_target-komise_backtest;
                                                                 pocet_kont_ztrat=0;
                                                                 pocet_kont_profitu++;
                                                                 pocet_profitu++;
                                                                 prumerny_profit+=OOS_backtest[pom_backtest];
                                                                }
                                                  }
                                                  pom_backtest++;


                             }
                             //nastaveni backtestingu, ze pri otevrene pozici prikupuji dale pozice pri vyskytnuti vzoru
                             if ( RadioGroup2->ItemIndex == 1)
                             {
                               for (int poc1=0;poc1<delka_obchodu && priznak==0;poc1++)  //nacteni aktualnich dat
                                                            {
                                                               obchod_proveden=1;
                                                               if ((OOS_pole_dat_O[proces+delka_vzoru_1]-(profit_target*dolar))>=(OOS_pole_dat_L[proces+delka_vzoru_1+poc1])){ strategie_nalezena = 2;priznak=1;}   //nalezeni profitu

                                                               if ((OOS_pole_dat_O[proces+delka_vzoru_1]+(stop_loss*dolar))<=(OOS_pole_dat_H[proces+delka_vzoru_1+poc1])){strategie_nalezena = 0;priznak=1;}        //nalezeni ztraty

                                                               if (poc1==delka_obchodu-1 && priznak==0) {strategie_nalezena=1;priznak=1;}
                                                            }
                                                            priznak=0;
                                                  switch(strategie_nalezena)
                                                  {

                                                        case 0:
                                                                {
                                                                 OOS_backtest[pom_backtest]=-stop_loss-komise_backtest;
                                                                 pocet_kont_ztrat++;
                                                                 pocet_kont_profitu=0;
                                                                 pocet_ztrat++;
                                                                 prumerna_ztrata+=OOS_backtest[pom_backtest];
                                                                }break;

                                                        case 1:
                                                                {
                                                                 OOS_backtest[pom_backtest]=(-OOS_pole_dat_C[proces+delka_vzoru_1+delka_obchodu-1]+OOS_pole_dat_O[proces+delka_vzoru_1])*1/dolar-komise_backtest;
                                                                 if (OOS_backtest[pom_backtest]>0){pocet_kont_ztrat=0;pocet_kont_profitu++;pocet_profitu++;prumerny_profit+=OOS_backtest[pom_backtest];}
                                                                 if (OOS_backtest[pom_backtest]<0) {pocet_kont_ztrat++;pocet_kont_profitu=0;prumerna_ztrata+=OOS_backtest[pom_backtest];}
                                                                 if (OOS_backtest[pom_backtest]==0) {pocet_nul++;}
                                                                }break;
                                                        case 2:
                                                                {
                                                                 OOS_backtest[pom_backtest]=profit_target-komise_backtest;
                                                                 pocet_kont_ztrat=0;
                                                                 pocet_kont_profitu++;
                                                                 pocet_profitu++;
                                                                 prumerny_profit+=OOS_backtest[pom_backtest];
                                                                }
                                                  }
                                                  pom_backtest++;


                             }


                             }

                        }

                        proces++;
                        if (pocet_kont_ztrat > pocet_kont_ztrat_max)pocet_kont_ztrat_max=pocet_kont_ztrat;
                        if (pocet_kont_profitu > pocet_kont_profitu_max)pocet_kont_profitu_max=pocet_kont_profitu;

            }
            }  //konec ifu pro volbu typical price

           }//konec ifu pro backtesting na shrot stranu



          }else ShowMessage("Setup backtesting strategy");
                        proces=0;
                        suma_PL=new float[pom_backtest];
                        suma_PL[0]=OOS_backtest[0];

                        for (int a=1;a<pom_backtest;a++)
                                {
                                suma_PL[a]=suma_PL[a-1]+OOS_backtest[a];
                                }

                        maximum=0;

                        for (int a=0;a<pom_backtest;a++)
                        {
                          if (maximum < suma_PL[a]) {maximum = suma_PL[a];}
                        }
         sprintf(nazev_souboru,"Backtest%d_OOS.txt",poc_back);
        if (((minimum_backtest < suma_PL[pom_backtest-1])||(RadioGroup6->ItemIndex == 1))&&(obchod_proveden==1))
         {
         soubor_out_of_sample();


         akt_pocet_baru=delka_vzoru_1;

        if (poprve == 0)
        {
        Memo3->Clear();
        Memo3->Lines->Add("Successfully patterns");
        poprve=1;
        if (typ_strategie == 0) sprintf(info,"//Strategie: LONG, Profit %d $, Ztrata %d $\\",profit_target,stop_loss);
        if (typ_strategie == 1) sprintf(info,"//Popis strategie: SHORT, Profit %d $, Ztrata %d $\\",profit_target,stop_loss);
        sprintf(buffer,"%s",info);
        fputs(buffer, Info_test);
        fputc('\n',Info_test);
        }

        pom++; //pomocna promena pri pocitani uspesnych vzoru pri uceni
        sprintf(info,"                                                                                    ");
        fputc('#',Info_test);
        fputc('\n',Info_test);
        sprintf(info,"Strategie nalezena na pozici : 1");
        sprintf(buffer,"%s",info);
        fputs(buffer, Info_test);
        fputc('\n',Info_test);

        sprintf(info,"                                                                                     ");
        sprintf(info,"Delka patternu : %d",akt_pocet_baru);
        sprintf(buffer,"%s",info);
        fputs(buffer, Info_test);
        fputc('\n',Info_test);

        sprintf(info,"                                                                                     ");
        buffer3=("0.0",RoundTo(maximum, -1));
        sprintf(info,"Maximalni naakumulovany cisty profit: 1");
        sprintf(buffer,"%s",info);
        fputs(buffer, Info_test);
        fputc('\n',Info_test);

        sprintf(info,"                                                                                     ");
        buffer3=("0.0",RoundTo(suma_PL[pom_backtest-1], -1));
        sprintf(info,"Posledni hodnota naakumulovaneho profitu : %s $",buffer3);
        sprintf(buffer,"%s",info);
        Memo3->Lines->Add("--------------------------------");
        Memo3->Lines->Add(buffer);
        Memo3->Lines->Add("\n");
        fputs(buffer, Info_test);
        fputc('\n',Info_test);


        buffer3=("0.00",RoundTo(mez_chyby_1, -3));
        sprintf(info,"Mez podobnosti (2nd error method) : %s , pocet obchodu : %d",buffer3,podobnost_pocitadlo);


        sprintf(buffer,"%s",info);
        fputs(buffer, Info_test);
        fputc('\n',Info_test);


        sprintf(info,"                                                                                       ");
        sprintf(info,"Typ vstupnich dat : Typical Price");
        sprintf(buffer,"%s",info);
        fputs(buffer, Info_test);
        fputc('\n',Info_test);


        sprintf(info,"                                                                                     ");
        sprintf(info,"Pozice maximalni profitu : 1");
        sprintf(buffer,"%s",info);
        fputs(buffer, Info_test);
        fputc('\n',Info_test);

        sprintf(info,"                                                                                        ");
        sprintf(info,"Tvar patternu v offset podobe : ");
        sprintf(buffer,"%s",info);
        Memo3->Lines->Add("Tvar vzoru v normalizovane podobe:");
        fputs(buffer, Info_test);
        fputc('\n',Info_test);
        for (int a=0;a<akt_pocet_baru;a++)

        {
         sprintf(info,"                                                                                         ");
         bufferTP=("0.000",RoundTo(hyp_pattern[a][0], -3));

         sprintf(info,"%s",bufferTP);
         sprintf(buffer,"%s",info);
         Memo3->Lines->Add(buffer);
         fputs(buffer, Info_test);
         fputc('\n',Info_test);
        }

        podobnost_pocitadlo=0;
         }
         delete suma_PL;
          }else {if (poprve2==0){Memo3->Lines->Add("No out of sample file loaded");poprve2=1;}}
          proces=0;


          //////////////////////////////////////////////////////////////////////////////
         //zapis statistiky backtestingu do souboru
         //////////////////////////////////////////////////////////////////////////////

         pom_backtest=0;

          pocet_kont_profitu=0;
          pocet_kont_profitu_max=0;
          pocet_kont_ztrat=0;
          pocet_kont_ztrat_max=0;
          pocet_obchodu=0;
          pocet_profitu=0;
          pocet_ztrat=0;
        //IN SAMPLE ANALYZA///////////////////////////////////////////////////////////
         if (StatusBar1->Panels->Items[0]->Text != "Input file: no file")
          {
          OOS_pom=1;
                 if (typ_dat_vzor == 2)
                 {

                  for(int a=0;a<pocet_radku;a++)
                     {
                           indi_1[a]=(pole_dat_H[a]+pole_dat_L[a]+pole_dat_C[a])/3;
                    }

                 }

          if (((RadioGroup1->ItemIndex ==0)||(RadioGroup1->ItemIndex ==1))&&((RadioGroup2->ItemIndex==0)||(RadioGroup2->ItemIndex==1)))
          {
           if (typ_dat_vzor==1) indi(pole_dat_H,pole_dat_L,pole_dat_C); //vypocet insample hodnot indikatoru
           if (typ_dat_vzor==2)
           {
               for(int a=0;a<pocet_radku;a++)
                {
                indi_1[a]=(pole_dat_H[a]+pole_dat_L[a]+pole_dat_C[a])/3;
                }
           }
           //LONG strategy
           if (RadioGroup1->ItemIndex==0)
           {

            //VOLBA DAT OHLC PRICE
            if (typ_dat_vzor == 0)
            {
                                while (proces <= (pocet_radku-delka_obchodu-delka_vzoru_1))
                                        {


                                         if (((pole_dat_time[proces]>TimeFiltr1Start && pole_dat_time[proces]<TimeFiltr1Stop)||(pole_dat_time[proces]>TimeFiltr2Start && pole_dat_time[proces]<TimeFiltr2Stop)||(pole_dat_time[proces]>TimeFiltr3Start && pole_dat_time[proces]<TimeFiltr3Stop)||(pole_dat_time[proces]>TimeFiltr4Start && pole_dat_time[proces]<TimeFiltr4Stop)||(pole_dat_time[proces]>TimeFiltr5Start && pole_dat_time[proces]<TimeFiltr5Stop))&&chyba_filtr==0)
                                          {


                                                        for (int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                            {
                                                                  akt_data[poc1][0]=pole_dat_O[proces+poc1];
                                                                  akt_data[poc1][1]=pole_dat_H[proces+poc1];
                                                                  akt_data[poc1][2]=pole_dat_L[proces+poc1];
                                                                  akt_data[poc1][3]=pole_dat_C[proces+poc1];
                                                            }

                                                           if(RadioGroup3->ItemIndex == 0)
                                                           {
                                                           offset=akt_data[0][0];
                                                           for (int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                            {
                                                                   akt_data[poc1][0]=akt_data[poc1][0]-offset;
                                                                   akt_data[poc1][1]=akt_data[poc1][1]-offset;
                                                                   akt_data[poc1][2]=akt_data[poc1][2]-offset;
                                                                   akt_data[poc1][3]=akt_data[poc1][3]-offset;
                                                            }
                                                           }

                                                    if (RadioGroup3->ItemIndex == 1)
                                                   {
                                                    for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //nacteni hypotetickeho patternu
                                                   {
                                                    if ( min_norm >akt_data[poc1][2] ) min_norm=akt_data[poc1][2];
                                                     if ( max_norm <akt_data[poc1][1] ) max_norm=akt_data[poc1][1];
                                                   }
                                                   for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                                     {
                                                      akt_data[poc1][0]=(akt_data[poc1][0]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                                      akt_data[poc1][1]=(akt_data[poc1][1]-min_norm)/(max_norm-min_norm);
                                                      akt_data[poc1][2]=(akt_data[poc1][2]-min_norm)/(max_norm-min_norm);
                                                      akt_data[poc1][3]=(akt_data[poc1][3]-min_norm)/(max_norm-min_norm);
                                                     }
                                                     min_norm=9999999;
                                                     max_norm=0;
                                                    }



                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                  {
                                                  chybaO=chybaO + (hyp_pattern[poc1][0] - akt_data[poc1][0])*(hyp_pattern[poc1][0] - akt_data[poc1][0]);
                                                  }
                                                  chybaO=chybaO/2;

                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                  {
                                                  chybaH=chybaH + (hyp_pattern[poc1][1] - akt_data[poc1][1])*(hyp_pattern[poc1][1] - akt_data[poc1][1]);
                                                  }
                                                  chybaH=chybaH/2;

                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                  {
                                                  chybaL=chybaL + (hyp_pattern[poc1][2] - akt_data[poc1][2])*(hyp_pattern[poc1][2] - akt_data[poc1][2]);
                                                  }
                                                  chybaL=chybaL/2;

                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                  {
                                                  chybaC=chybaC + (hyp_pattern[poc1][3] - akt_data[poc1][3])*(hyp_pattern[poc1][3] - akt_data[poc1][3]);
                                                  }
                                                  chybaC=chybaC/2;

                                                  chyba= (chybaO + chybaH + chybaL + chybaC)*100000;//vypocet chyby

                        //po vypoctu chyby urcit,jestli je pattern dostatecne podobny
                        if (chyba <= chyba_vzoru_1)
                        {
                        backtest_chyba[pom_backtest]=chyba;
                        pocet_obchodu++;
                             //nastaveni backtestingu,ze pri otevrene pozici ignoruji dalsi vyskytnute vzory
                             if ( RadioGroup2->ItemIndex == 0 )
                             {
                               for (int poc1=0;poc1<delka_obchodu && priznak==0;poc1++)  //nacteni aktualnich dat
                                                            {

                                                               if ((pole_dat_O[proces+delka_vzoru_1]+(profit_target*dolar))<=(pole_dat_H[proces+delka_vzoru_1+poc1])){ strategie_nalezena = 2;priznak=1;}   //nalezeni profitu

                                                               if ((pole_dat_O[proces+delka_vzoru_1]-(stop_loss*dolar))>=(pole_dat_L[proces+delka_vzoru_1+poc1])){strategie_nalezena = 0;priznak=1;}        //nalezeni ztraty

                                                               if (poc1==delka_obchodu-1 && priznak==0) {strategie_nalezena=1;priznak=1;}
                                                            }
                                                            priznak=0;
                                                  switch(strategie_nalezena)
                                                  {
                                                        case 0:
                                                                {
                                                                 backtest[pom_backtest]=-stop_loss;
                                                                 pocet_kont_ztrat++;
                                                                 pocet_kont_profitu=0;
                                                                 pocet_ztrat++;
                                                                 prumerna_ztrata+=backtest[pom_backtest];
                                                                }break;

                                                        case 1:
                                                                {
                                                                 backtest[pom_backtest]=(pole_dat_C[proces+delka_vzoru_1+delka_obchodu-1]-pole_dat_O[proces+delka_vzoru_1])*1/dolar;
                                                                 if (backtest[pom_backtest]>0){pocet_kont_ztrat=0;pocet_kont_profitu++;pocet_profitu++;prumerny_profit+=backtest[pom_backtest];}
                                                                 if (backtest[pom_backtest]<0) {pocet_kont_ztrat++;pocet_kont_profitu=0;prumerna_ztrata+=backtest[pom_backtest];}
                                                                 if (backtest[pom_backtest]==0) {pocet_nul++;}
                                                                }break;
                                                        case 2:
                                                                {
                                                                 backtest[pom_backtest]=profit_target;
                                                                 pocet_kont_ztrat=0;
                                                                 pocet_kont_profitu++;
                                                                 pocet_profitu++;
                                                                 prumerny_profit+=backtest[pom_backtest];
                                                                }
                                                  }
                                                  proces++;
                                                  pom_backtest++;

                             }
                             //nastaveni backtestingu, ze pri otevrene pozici prikupuji dale pozice pri vyskytnuti vzoru
                             if ( RadioGroup2->ItemIndex == 1)
                             {
                               for (int poc1=0;poc1<delka_obchodu && priznak==0;poc1++)  //nacteni aktualnich dat
                                                            {

                                                               if ((pole_dat_O[proces+delka_vzoru_1]+(profit_target*dolar))<=(pole_dat_H[proces+delka_vzoru_1+poc1])){ strategie_nalezena = 2;priznak=1;}   //nalezeni profitu

                                                               if ((pole_dat_O[proces+delka_vzoru_1]-(stop_loss*dolar))>=(pole_dat_L[proces+delka_vzoru_1+poc1])){strategie_nalezena = 0;priznak=1;}        //nalezeni ztraty

                                                               if (poc1==delka_obchodu-1 && priznak==0) {strategie_nalezena=1;priznak=1;}
                                                            }
                                                            priznak=0;
                                                  switch(strategie_nalezena)
                                                  {
                                                        case 0:
                                                                {
                                                                 backtest[pom_backtest]=-stop_loss;
                                                                 pocet_kont_ztrat++;
                                                                 pocet_kont_profitu=0;
                                                                 pocet_ztrat++;
                                                                 prumerna_ztrata+=backtest[pom_backtest];
                                                                }break;

                                                        case 1:
                                                                {
                                                                 backtest[pom_backtest]=(pole_dat_C[proces+delka_vzoru_1+delka_obchodu-1]-pole_dat_O[proces+delka_vzoru_1])*1/dolar;
                                                                 if (backtest[pom_backtest]>0){pocet_kont_ztrat=0;pocet_kont_profitu++;pocet_profitu++;prumerny_profit+=backtest[pom_backtest];}
                                                                 if (backtest[pom_backtest]<0) {pocet_kont_ztrat++;pocet_kont_profitu=0;prumerna_ztrata+=backtest[pom_backtest];}
                                                                 if (backtest[pom_backtest]==0) {pocet_nul++;}
                                                                }break;
                                                        case 2:
                                                                {
                                                                 backtest[pom_backtest]=profit_target;
                                                                 pocet_kont_ztrat=0;
                                                                 pocet_kont_profitu++;
                                                                 pocet_profitu++;
                                                                 prumerny_profit+=backtest[pom_backtest];
                                                                }

                                                  }
                                                  pom_backtest++;

                             }


                             }

                        }
                        proces++;
                        chybaO=0;
                        chybaH=0;
                        chybaL=0;
                        chybaC=0;
                        if (pocet_kont_ztrat > pocet_kont_ztrat_max)pocet_kont_ztrat_max=pocet_kont_ztrat;
                        if (pocet_kont_profitu > pocet_kont_profitu_max)pocet_kont_profitu_max=pocet_kont_profitu;
            }
           }
            if (typ_dat_vzor == 1)
            {
                                while (proces <= (pocet_radku-delka_obchodu-delka_vzoru_1))
                                        {


                                         if (((pole_dat_time[proces]>TimeFiltr1Start && pole_dat_time[proces]<TimeFiltr1Stop)||(pole_dat_time[proces]>TimeFiltr2Start && pole_dat_time[proces]<TimeFiltr2Stop)||(pole_dat_time[proces]>TimeFiltr3Start && pole_dat_time[proces]<TimeFiltr3Stop)||(pole_dat_time[proces]>TimeFiltr4Start && pole_dat_time[proces]<TimeFiltr4Stop)||(pole_dat_time[proces]>TimeFiltr5Start && pole_dat_time[proces]<TimeFiltr5Stop))&&chyba_filtr==0)
                                          {
                                           if (((proces > perioda_1) && (proces > perioda_2) &&(proces > perioda_3) &&(proces > perioda_4) &&(proces > perioda_5))) //osetruje to,ze nebudeme testovat tu strategii,pred kterou byl nacten pattern
                                            {


                                                        for (int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                            {
                                                                  akt_data[poc1][0]=indi_1[proces+poc1];
                                                                  akt_data[poc1][1]=indi_2[proces+poc1];
                                                                  akt_data[poc1][2]=indi_3[proces+poc1];
                                                                  akt_data[poc1][3]=indi_4[proces+poc1];
                                                                  akt_data[poc1][4]=indi_5[proces+poc1];
                                                            }

                                                           if (RadioGroup3->ItemIndex == 0)
                                                           {
                                                           offset=akt_data[0][0];
                                                           for (int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                            {
                                                                   akt_data[poc1][0]=akt_data[poc1][0]-offset;
                                                                   akt_data[poc1][1]=akt_data[poc1][1]-offset;
                                                                   akt_data[poc1][2]=akt_data[poc1][2]-offset;
                                                                   akt_data[poc1][3]=akt_data[poc1][3]-offset;
                                                                   akt_data[poc1][4]=akt_data[poc1][3]-offset;
                                                            }
                                                           }

                                if (RadioGroup3->ItemIndex == 1)
                                {
                                if ( CheckBox6->Checked )
                                {
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >akt_data[poc1][0] ) min_norm=akt_data[poc1][0];
                                 if ( max_norm <akt_data[poc1][0] ) max_norm=akt_data[poc1][0];
                                }
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   akt_data[poc1][0]=(akt_data[poc1][0]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }

                                if ( CheckBox7->Checked )
                                {
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >akt_data[poc1][1] ) min_norm=akt_data[poc1][1];
                                 if ( max_norm <akt_data[poc1][1] ) max_norm=akt_data[poc1][1];
                                }
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   akt_data[poc1][1]=(akt_data[poc1][1]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }

                       if ( CheckBox8->Checked )
                                {
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >akt_data[poc1][2] ) min_norm=akt_data[poc1][2];
                                 if ( max_norm <akt_data[poc1][2] ) max_norm=akt_data[poc1][2];
                                }
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   akt_data[poc1][2]=(akt_data[poc1][2]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }

                       if ( CheckBox9->Checked )
                                {
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >akt_data[poc1][3] ) min_norm=akt_data[poc1][3];
                                 if ( max_norm <akt_data[poc1][3] ) max_norm=akt_data[poc1][3];
                                }
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   akt_data[poc1][3]=(akt_data[poc1][3]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }

                       if ( CheckBox10->Checked )
                                {
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >akt_data[poc1][4] ) min_norm=akt_data[poc1][4];
                                 if ( max_norm <akt_data[poc1][4] ) max_norm=akt_data[poc1][4];
                                }
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   akt_data[poc1][4]=(akt_data[poc1][4]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }

                       }


                                                  if (delka_vzoru_1 > 0)
                                                  {
                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++){chyba_1=chyba_1 + (hyp_pattern[poc1][0] - akt_data[poc1][0])*(hyp_pattern[poc1][0] - akt_data[poc1][0]);}

                                                  }

                                                  if (delka_vzoru_1 > 1)
                                                  {
                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++){chyba_2=chyba_2 + (hyp_pattern[poc1][1] - akt_data[poc1][1])*(hyp_pattern[poc1][1] - akt_data[poc1][1]);}

                                                  }else chyba_2=0;

                                                  if (delka_vzoru_1 > 2)
                                                  {
                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++){chyba_3=chyba_3 + (hyp_pattern[poc1][2] - akt_data[poc1][2])*(hyp_pattern[poc1][2] - akt_data[poc1][2]);}

                                                  }else chyba_3=0;

                                                  if (delka_vzoru_1 > 3)
                                                  {
                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++){chyba_4=chyba_4 + (hyp_pattern[poc1][3] - akt_data[poc1][3])*(hyp_pattern[poc1][3] - akt_data[poc1][3]);}

                                                  }else chyba_4=0;

                                                  if (delka_vzoru_1 > 4)
                                                  {
                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++){chyba_5=chyba_5 + (hyp_pattern[poc1][4] - akt_data[poc1][4])*(hyp_pattern[poc1][4] - akt_data[poc1][4]);}

                                                  }else chyba_5=0;


                                                  chyba= (chyba_1 + chyba_2 + chyba_3 + chyba_4 + chyba_5)/2;//vypocet chyby
                                                  chyba_1=0;
                                                  chyba_2=0;
                                                  chyba_3=0;
                                                  chyba_4=0;
                                                  chyba_5=0;
                        //po vypoctu chyby urcit,jestli je pattern dostatecne podobny
                        if (chyba <= chyba_vzoru_1)
                        {
                        backtest_chyba[pom_backtest]=chyba;
                        pocet_obchodu++;
                             //nastaveni backtestingu,ze pri otevrene pozici ignoruji dalsi vyskytnute vzory
                             if ( RadioGroup2->ItemIndex == 0 )
                             {
                               for (int poc1=0;poc1<delka_obchodu && priznak==0;poc1++)  //nacteni aktualnich dat
                                                            {

                                                               if ((pole_dat_O[proces+delka_vzoru_1]+(profit_target*dolar))<=(pole_dat_H[proces+delka_vzoru_1+poc1])){ strategie_nalezena = 2;priznak=1;}   //nalezeni profitu

                                                               if ((pole_dat_O[proces+delka_vzoru_1]-(stop_loss*dolar))>=(pole_dat_L[proces+delka_vzoru_1+poc1])){strategie_nalezena = 0;priznak=1;}        //nalezeni ztraty

                                                               if (poc1==delka_obchodu-1 && priznak==0) {strategie_nalezena=1;priznak=1;}
                                                            }
                                                            priznak=0;
                                                  switch(strategie_nalezena)
                                                  {
                                                        case 0:
                                                                {
                                                                 backtest[pom_backtest]=-stop_loss;
                                                                 pocet_kont_ztrat++;
                                                                 pocet_kont_profitu=0;
                                                                 pocet_ztrat++;
                                                                 prumerna_ztrata+=backtest[pom_backtest];
                                                                }break;

                                                        case 1:
                                                                {
                                                                 backtest[pom_backtest]=(pole_dat_C[proces+delka_vzoru_1+delka_obchodu-1]-pole_dat_O[proces+delka_vzoru_1])*1/dolar;
                                                                 if (backtest[pom_backtest]>0){pocet_kont_ztrat=0;pocet_kont_profitu++;pocet_profitu++;prumerny_profit+=backtest[pom_backtest];}
                                                                 if (backtest[pom_backtest]<0) {pocet_kont_ztrat++;pocet_kont_profitu=0;prumerna_ztrata+=backtest[pom_backtest];}
                                                                 if (backtest[pom_backtest]==0) {pocet_nul++;}
                                                                }break;
                                                        case 2:
                                                                {
                                                                 backtest[pom_backtest]=profit_target;
                                                                 pocet_kont_ztrat=0;
                                                                 pocet_kont_profitu++;
                                                                 pocet_profitu++;
                                                                 prumerny_profit+=backtest[pom_backtest];
                                                                }
                                                  }
                                                  pom_backtest++;
                                                  proces++;

                             }
                             //nastaveni backtestingu, ze pri otevrene pozici prikupuji dale pozice pri vyskytnuti vzoru
                             if ( RadioGroup2->ItemIndex == 1)
                             {
                               for (int poc1=0;poc1<delka_obchodu && priznak==0;poc1++)  //nacteni aktualnich dat
                                                            {

                                                               if ((pole_dat_O[proces+delka_vzoru_1]+(profit_target*dolar))<=(pole_dat_H[proces+delka_vzoru_1+poc1])){ strategie_nalezena = 2;priznak=1;}   //nalezeni profitu

                                                               if ((pole_dat_O[proces+delka_vzoru_1]-(stop_loss*dolar))>=(pole_dat_L[proces+delka_vzoru_1+poc1])){strategie_nalezena = 0;priznak=1;}        //nalezeni ztraty

                                                               if (poc1==delka_obchodu-1 && priznak==0) {strategie_nalezena=1;priznak=1;}
                                                            }
                                                            priznak=0;
                                                  switch(strategie_nalezena)
                                                  {
                                                        case 0:
                                                                {
                                                                 backtest[pom_backtest]=-stop_loss;
                                                                 pocet_kont_ztrat++;
                                                                 pocet_kont_profitu=0;
                                                                 pocet_ztrat++;
                                                                 prumerna_ztrata+=backtest[pom_backtest];
                                                                }break;

                                                        case 1:
                                                                {
                                                                 backtest[pom_backtest]=(pole_dat_C[proces+delka_vzoru_1+delka_obchodu-1]-pole_dat_O[proces+delka_vzoru_1])*1/dolar;
                                                                 if (backtest[pom_backtest]>0){pocet_kont_ztrat=0;pocet_kont_profitu++;pocet_profitu++;prumerny_profit+=backtest[pom_backtest];}
                                                                 if (backtest[pom_backtest]<0) {pocet_kont_ztrat++;pocet_kont_profitu=0;prumerna_ztrata+=backtest[pom_backtest];}
                                                                 if (backtest[pom_backtest]==0) {pocet_nul++;}
                                                                }break;
                                                        case 2:
                                                                {
                                                                 backtest[pom_backtest]=profit_target;
                                                                 pocet_kont_ztrat=0;
                                                                 pocet_kont_profitu++;
                                                                 pocet_profitu++;
                                                                 prumerny_profit+=backtest[pom_backtest];
                                                                }
                                                  }
                                                  pom_backtest++;


                             }


                             }

                        }
                        }
                        proces++;
                        if (pocet_kont_ztrat > pocet_kont_ztrat_max)pocet_kont_ztrat_max=pocet_kont_ztrat;
                        if (pocet_kont_profitu > pocet_kont_profitu_max)pocet_kont_profitu_max=pocet_kont_profitu;

            }

            }

            if (typ_dat_vzor == 2)
            {
                                while (proces <= (pocet_radku-delka_obchodu-delka_vzoru_1))
                                        {


                                         if (((pole_dat_time[proces]>TimeFiltr1Start && pole_dat_time[proces]<TimeFiltr1Stop)||(pole_dat_time[proces]>TimeFiltr2Start && pole_dat_time[proces]<TimeFiltr2Stop)||(pole_dat_time[proces]>TimeFiltr3Start && pole_dat_time[proces]<TimeFiltr3Stop)||(pole_dat_time[proces]>TimeFiltr4Start && pole_dat_time[proces]<TimeFiltr4Stop)||(pole_dat_time[proces]>TimeFiltr5Start && pole_dat_time[proces]<TimeFiltr5Stop))&&chyba_filtr==0)
                                          {

                                                        for (int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                            {
                                                                  akt_data[poc1][0]=indi_1[proces+poc1];

                                                            }

                                                           if (RadioGroup3->ItemIndex == 0)
                                                           {
                                                           offset=akt_data[0][0];
                                                           for (int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                            {
                                                                   akt_data[poc1][0]=akt_data[poc1][0]-offset;

                                                            }
                                                           }

                                                        if (RadioGroup3->ItemIndex == 1)
                                                       {
                                                         for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //nacteni hypotetickeho patternu
                                                         {
                                                         if ( min_norm >akt_data[poc1][0] ) min_norm=akt_data[poc1][0];
                                                         if ( max_norm <akt_data[poc1][0] ) max_norm=akt_data[poc1][0];
                                                         }
                                                         for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                                         {
                                                            akt_data[poc1][0]=(akt_data[poc1][0]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                                         }
                                                            min_norm=9999999;
                                                            max_norm=0;

                                                        }                                                           



                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++){chyba_1=chyba_1 + (hyp_pattern[poc1][0] - akt_data[poc1][0])*(hyp_pattern[poc1][0] - akt_data[poc1][0]);}




                                                  chyba= (chyba_1)/2;//vypocet chyby
                                                  chyba_1=' ';
                        //po vypoctu chyby urcit,jestli je pattern dostatecne podobny
                        if (chyba <= chyba_vzoru_1)
                        {
                        backtest_chyba[pom_backtest]=chyba;
                        pocet_obchodu++;
                             //nastaveni backtestingu,ze pri otevrene pozici ignoruji dalsi vyskytnute vzory
                             if ( RadioGroup2->ItemIndex == 0 )
                             {
                               for (int poc1=0;poc1<delka_obchodu && priznak==0;poc1++)  //nacteni aktualnich dat
                                                            {

                                                               if ((pole_dat_O[proces+delka_vzoru_1]+(profit_target*dolar))<=(pole_dat_H[proces+delka_vzoru_1+poc1])){ strategie_nalezena = 2;priznak=1;}   //nalezeni profitu

                                                               if ((pole_dat_O[proces+delka_vzoru_1]-(stop_loss*dolar))>=(pole_dat_L[proces+delka_vzoru_1+poc1])){strategie_nalezena = 0;priznak=1;}        //nalezeni ztraty

                                                               if (poc1==delka_obchodu-1 && priznak==0) {strategie_nalezena=1;priznak=1;}
                                                            }
                                                            priznak=0;
                                                  switch(strategie_nalezena)
                                                  {
                                                        case 0:
                                                                {
                                                                 backtest[pom_backtest]=-stop_loss;
                                                                 pocet_kont_ztrat++;
                                                                 pocet_kont_profitu=0;
                                                                 pocet_ztrat++;
                                                                 prumerna_ztrata+=backtest[pom_backtest];
                                                                }break;

                                                        case 1:
                                                                {
                                                                 backtest[pom_backtest]=(pole_dat_C[proces+delka_vzoru_1+delka_obchodu-1]-pole_dat_O[proces+delka_vzoru_1])*1/dolar;
                                                                 if (backtest[pom_backtest]>0){pocet_kont_ztrat=0;pocet_kont_profitu++;pocet_profitu++;prumerny_profit+=backtest[pom_backtest];}
                                                                 if (backtest[pom_backtest]<0) {pocet_kont_ztrat++;pocet_kont_profitu=0;prumerna_ztrata+=backtest[pom_backtest];}
                                                                 if (backtest[pom_backtest]==0) {pocet_nul++;}
                                                                }break;
                                                        case 2:
                                                                {
                                                                 backtest[pom_backtest]=profit_target;
                                                                 pocet_kont_ztrat=0;
                                                                 pocet_kont_profitu++;
                                                                 pocet_profitu++;
                                                                 prumerny_profit+=backtest[pom_backtest];
                                                                }
                                                  }
                                                  pom_backtest++;
                                                  proces++;

                             }
                             //nastaveni backtestingu, ze pri otevrene pozici prikupuji dale pozice pri vyskytnuti vzoru
                             if ( RadioGroup2->ItemIndex == 1)
                             {
                               for (int poc1=0;poc1<delka_obchodu && priznak==0;poc1++)  //nacteni aktualnich dat
                                                            {

                                                               if ((pole_dat_O[proces+delka_vzoru_1]+(profit_target*dolar))<=(pole_dat_H[proces+delka_vzoru_1+poc1])){ strategie_nalezena = 2;priznak=1;}   //nalezeni profitu

                                                               if ((pole_dat_O[proces+delka_vzoru_1]-(stop_loss*dolar))>=(pole_dat_L[proces+delka_vzoru_1+poc1])){strategie_nalezena = 0;priznak=1;}        //nalezeni ztraty

                                                               if (poc1==delka_obchodu-1 && priznak==0) {strategie_nalezena=1;priznak=1;}
                                                            }
                                                            priznak=0;
                                                  switch(strategie_nalezena)
                                                  {
                                                        case 0:
                                                                {
                                                                 backtest[pom_backtest]=-stop_loss;
                                                                 pocet_kont_ztrat++;
                                                                 pocet_kont_profitu=0;
                                                                 pocet_ztrat++;
                                                                 prumerna_ztrata+=backtest[pom_backtest];
                                                                }break;

                                                        case 1:
                                                                {
                                                                 backtest[pom_backtest]=(pole_dat_C[proces+delka_vzoru_1+delka_obchodu-1]-pole_dat_O[proces+delka_vzoru_1])*1/dolar;
                                                                 if (backtest[pom_backtest]>0){pocet_kont_ztrat=0;pocet_kont_profitu++;pocet_profitu++;prumerny_profit+=backtest[pom_backtest];}
                                                                 if (backtest[pom_backtest]<0) {pocet_kont_ztrat++;pocet_kont_profitu=0;prumerna_ztrata+=backtest[pom_backtest];}
                                                                 if (backtest[pom_backtest]==0) {pocet_nul++;}
                                                                }break;
                                                        case 2:
                                                                {
                                                                 backtest[pom_backtest]=profit_target;
                                                                 pocet_kont_ztrat=0;
                                                                 pocet_kont_profitu++;
                                                                 pocet_profitu++;
                                                                 prumerny_profit+=backtest[pom_backtest];
                                                                }
                                                  }
                                                  pom_backtest++;


                             }


                             }

                        }

                        proces++;
                        if (pocet_kont_ztrat > pocet_kont_ztrat_max)pocet_kont_ztrat_max=pocet_kont_ztrat;
                        if (pocet_kont_profitu > pocet_kont_profitu_max)pocet_kont_profitu_max=pocet_kont_profitu;

            }
            }  //konec ifu pro volbu typical price

           }
        ///SHORT
        if (RadioGroup1->ItemIndex == 1)
                {

            //VOLBA DAT OHLC PRICE
            if (typ_dat_vzor == 0)
            {
                                while (proces <= (pocet_radku-delka_obchodu-delka_vzoru_1))
                                        {


                                         if (((pole_dat_time[proces]>TimeFiltr1Start && pole_dat_time[proces]<TimeFiltr1Stop)||(pole_dat_time[proces]>TimeFiltr2Start && pole_dat_time[proces]<TimeFiltr2Stop)||(pole_dat_time[proces]>TimeFiltr3Start && pole_dat_time[proces]<TimeFiltr3Stop)||(pole_dat_time[proces]>TimeFiltr4Start && pole_dat_time[proces]<TimeFiltr4Stop)||(pole_dat_time[proces]>TimeFiltr5Start && pole_dat_time[proces]<TimeFiltr5Stop))&&chyba_filtr==0)
                                          {


                                                        for (int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                            {
                                                                  akt_data[poc1][0]=pole_dat_O[proces+poc1];
                                                                  akt_data[poc1][1]=pole_dat_H[proces+poc1];
                                                                  akt_data[poc1][2]=pole_dat_L[proces+poc1];
                                                                  akt_data[poc1][3]=pole_dat_C[proces+poc1];
                                                            }


                                                           if(RadioGroup3->ItemIndex == 0)
                                                           {
                                                           offset=akt_data[0][0];
                                                           for (int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                            {
                                                                   akt_data[poc1][0]=akt_data[poc1][0]-offset;
                                                                   akt_data[poc1][1]=akt_data[poc1][1]-offset;
                                                                   akt_data[poc1][2]=akt_data[poc1][2]-offset;
                                                                   akt_data[poc1][3]=akt_data[poc1][3]-offset;
                                                            }
                                                            }

                                                   if (RadioGroup3->ItemIndex == 1)
                                                   {
                                                    for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //nacteni hypotetickeho patternu
                                                   {
                                                    if ( min_norm >akt_data[poc1][2] ) min_norm=akt_data[poc1][2];
                                                     if ( max_norm <akt_data[poc1][1] ) max_norm=akt_data[poc1][1];
                                                   }
                                                   for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                                     {
                                                      akt_data[poc1][0]=(akt_data[poc1][0]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                                      akt_data[poc1][1]=(akt_data[poc1][1]-min_norm)/(max_norm-min_norm);
                                                      akt_data[poc1][2]=(akt_data[poc1][2]-min_norm)/(max_norm-min_norm);
                                                      akt_data[poc1][3]=(akt_data[poc1][3]-min_norm)/(max_norm-min_norm);
                                                     }
                                                     min_norm=9999999;
                                                     max_norm=0;
                                                    }




                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                  {
                                                  chybaO=chybaO + (hyp_pattern[poc1][0] - akt_data[poc1][0])*(hyp_pattern[poc1][0] - akt_data[poc1][0]);
                                                  }
                                                  chybaO=chybaO/2;

                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                  {
                                                  chybaH=chybaH + (hyp_pattern[poc1][1] - akt_data[poc1][1])*(hyp_pattern[poc1][1] - akt_data[poc1][1]);
                                                  }
                                                  chybaH=chybaH/2;

                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                  {
                                                  chybaL=chybaL + (hyp_pattern[poc1][2] - akt_data[poc1][2])*(hyp_pattern[poc1][2] - akt_data[poc1][2]);
                                                  }
                                                  chybaL=chybaL/2;

                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                  {
                                                  chybaC=chybaC + (hyp_pattern[poc1][3] - akt_data[poc1][3])*(hyp_pattern[poc1][3] - akt_data[poc1][3]);
                                                  }
                                                  chybaC=chybaC/2;

                                                  chyba= (chybaO + chybaH + chybaL + chybaC)*100000;//vypocet chyby

                        //po vypoctu chyby urcit,jestli je pattern dostatecne podobny
                        if (chyba <= chyba_vzoru_1)
                        {
                        backtest_chyba[pom_backtest]=chyba;
                        pocet_obchodu++;
                             //nastaveni backtestingu,ze pri otevrene pozici ignoruji dalsi vyskytnute vzory
                             if ( RadioGroup2->ItemIndex == 0 )
                             {
                               for (int poc1=0;poc1<delka_obchodu && priznak==0;poc1++)  //nacteni aktualnich dat
                                                            {

                                                               if ((pole_dat_O[proces+delka_vzoru_1]-(profit_target*dolar))>=(pole_dat_H[proces+delka_vzoru_1+poc1])){ strategie_nalezena = 2;priznak=1;}   //nalezeni profitu

                                                               if ((pole_dat_O[proces+delka_vzoru_1]+(stop_loss*dolar))<=(pole_dat_L[proces+delka_vzoru_1+poc1])){strategie_nalezena = 0;priznak=1;}        //nalezeni ztraty

                                                               if (poc1==delka_obchodu-1 && priznak==0) {strategie_nalezena=1;priznak=1;}
                                                            }
                                                            priznak=0;
                                                  switch(strategie_nalezena)
                                                  {
                                                        case 0:
                                                                {
                                                                 backtest[pom_backtest]=-stop_loss;
                                                                 pocet_kont_ztrat++;
                                                                 pocet_kont_profitu=0;
                                                                 pocet_ztrat++;
                                                                 prumerna_ztrata+=backtest[pom_backtest];
                                                                }break;

                                                        case 1:
                                                                {
                                                                 backtest[pom_backtest]=(pole_dat_C[proces+delka_vzoru_1+delka_obchodu-1]-pole_dat_O[proces+delka_vzoru_1])*1/dolar;
                                                                 if (backtest[pom_backtest]>0){pocet_kont_ztrat=0;pocet_kont_profitu++;pocet_profitu++;prumerny_profit+=backtest[pom_backtest];}
                                                                 if (backtest[pom_backtest]<0) {pocet_kont_ztrat++;pocet_kont_profitu=0;prumerna_ztrata+=backtest[pom_backtest];}
                                                                 if (backtest[pom_backtest]==0) {pocet_nul++;}
                                                                }break;
                                                        case 2:
                                                                {
                                                                 backtest[pom_backtest]=profit_target;
                                                                 pocet_kont_ztrat=0;
                                                                 pocet_kont_profitu++;
                                                                 pocet_profitu++;
                                                                 prumerny_profit+=backtest[pom_backtest];
                                                                }
                                                  }
                                                  pom_backtest++;
                                                  proces++;

                             }
                             //nastaveni backtestingu, ze pri otevrene pozici prikupuji dale pozice pri vyskytnuti vzoru
                             if ( RadioGroup2->ItemIndex == 1)
                             {
                               for (int poc1=0;poc1<delka_obchodu && priznak==0;poc1++)  //nacteni aktualnich dat
                                                            {

                                                               if ((pole_dat_O[proces+delka_vzoru_1]-(profit_target*dolar))>=(pole_dat_H[proces+delka_vzoru_1+poc1])){ strategie_nalezena = 2;priznak=1;}   //nalezeni profitu

                                                               if ((pole_dat_O[proces+delka_vzoru_1]+(stop_loss*dolar))<=(pole_dat_L[proces+delka_vzoru_1+poc1])){strategie_nalezena = 0;priznak=1;}        //nalezeni ztraty

                                                               if (poc1==delka_obchodu-1 && priznak==0) {strategie_nalezena=1;priznak=1;}
                                                            }
                                                            priznak=0;
                                                  switch(strategie_nalezena)
                                                  {
                                                        case 0:
                                                                {
                                                                 backtest[pom_backtest]=-stop_loss;
                                                                 pocet_kont_ztrat++;
                                                                 pocet_kont_profitu=0;
                                                                 pocet_ztrat++;
                                                                 prumerna_ztrata+=backtest[pom_backtest];
                                                                }break;

                                                        case 1:
                                                                {
                                                                 backtest[pom_backtest]=(pole_dat_C[proces+delka_vzoru_1+delka_obchodu-1]-pole_dat_O[proces+delka_vzoru_1])*1/dolar;
                                                                 if (backtest[pom_backtest]>0){pocet_kont_ztrat=0;pocet_kont_profitu++;pocet_profitu++;prumerny_profit+=backtest[pom_backtest];}
                                                                 if (backtest[pom_backtest]<0) {pocet_kont_ztrat++;pocet_kont_profitu=0;prumerna_ztrata+=backtest[pom_backtest];}
                                                                 if (backtest[pom_backtest]==0) {pocet_nul++;}
                                                                }break;
                                                        case 2:
                                                                {
                                                                 backtest[pom_backtest]=profit_target;
                                                                 pocet_kont_ztrat=0;
                                                                 pocet_kont_profitu++;
                                                                 pocet_profitu++;
                                                                 prumerny_profit+=backtest[pom_backtest];
                                                                }
                                                  }
                                                  pom_backtest++;


                             }


                             }

                        }
                        proces++;
                        chybaO=0;
                        chybaH=0;
                        chybaL=0;
                        chybaC=0;
                        if (pocet_kont_ztrat > pocet_kont_ztrat_max)pocet_kont_ztrat_max=pocet_kont_ztrat;
                        if (pocet_kont_profitu > pocet_kont_profitu_max)pocet_kont_profitu_max=pocet_kont_profitu;
            }
           }
            if (typ_dat_vzor == 1)
            {
                                while (proces <= (pocet_radku-delka_obchodu-delka_vzoru_1))
                                        {


                                         if (((pole_dat_time[proces]>TimeFiltr1Start && pole_dat_time[proces]<TimeFiltr1Stop)||(pole_dat_time[proces]>TimeFiltr2Start && pole_dat_time[proces]<TimeFiltr2Stop)||(pole_dat_time[proces]>TimeFiltr3Start && pole_dat_time[proces]<TimeFiltr3Stop)||(pole_dat_time[proces]>TimeFiltr4Start && pole_dat_time[proces]<TimeFiltr4Stop)||(pole_dat_time[proces]>TimeFiltr5Start && pole_dat_time[proces]<TimeFiltr5Stop))&&chyba_filtr==0)
                                          {
                                           if (((proces > perioda_1) && (proces > perioda_2) &&(proces > perioda_3) &&(proces > perioda_4) &&(proces > perioda_5))) //osetruje to,ze nebudeme testovat tu strategii,pred kterou byl nacten pattern
                                            {
                                                        for (int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                            {
                                                                  akt_data[poc1][0]=indi_1[proces+poc1];
                                                                  akt_data[poc1][1]=indi_2[proces+poc1];
                                                                  akt_data[poc1][2]=indi_3[proces+poc1];
                                                                  akt_data[poc1][3]=indi_4[proces+poc1];
                                                                  akt_data[poc1][4]=indi_5[proces+poc1];
                                                            }

                                                          if (RadioGroup3->ItemIndex == 0)
                                                          {
                                                           offset=akt_data[0][0];
                                                           for (int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                            {
                                                                   akt_data[poc1][0]=akt_data[poc1][0]-offset;
                                                                   akt_data[poc1][1]=akt_data[poc1][1]-offset;
                                                                   akt_data[poc1][2]=akt_data[poc1][2]-offset;
                                                                   akt_data[poc1][3]=akt_data[poc1][3]-offset;
                                                                   akt_data[poc1][4]=akt_data[poc1][3]-offset;
                                                            }
                                                           }


                                if (RadioGroup3->ItemIndex == 1)
                                {
                                if ( CheckBox6->Checked )
                                {
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >akt_data[poc1][0] ) min_norm=akt_data[poc1][0];
                                 if ( max_norm <akt_data[poc1][0] ) max_norm=akt_data[poc1][0];
                                }
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   akt_data[poc1][0]=(akt_data[poc1][0]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }

                                if ( CheckBox7->Checked )
                                {
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >akt_data[poc1][1] ) min_norm=akt_data[poc1][1];
                                 if ( max_norm <akt_data[poc1][1] ) max_norm=akt_data[poc1][1];
                                }
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   akt_data[poc1][1]=(akt_data[poc1][1]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }

                       if ( CheckBox8->Checked )
                                {
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >akt_data[poc1][2] ) min_norm=akt_data[poc1][2];
                                 if ( max_norm <akt_data[poc1][2] ) max_norm=akt_data[poc1][2];
                                }
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   akt_data[poc1][2]=(akt_data[poc1][2]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }

                       if ( CheckBox9->Checked )
                                {
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >akt_data[poc1][3] ) min_norm=akt_data[poc1][3];
                                 if ( max_norm <akt_data[poc1][3] ) max_norm=akt_data[poc1][3];
                                }
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   akt_data[poc1][3]=(akt_data[poc1][3]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }

                       if ( CheckBox10->Checked )
                                {
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //nacteni hypotetickeho patternu
                                {
                                 if ( min_norm >akt_data[poc1][4] ) min_norm=akt_data[poc1][4];
                                 if ( max_norm <akt_data[poc1][4] ) max_norm=akt_data[poc1][4];
                                }
                                for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                  {
                                   akt_data[poc1][4]=(akt_data[poc1][4]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                  }
                                  min_norm=9999999;
                                  max_norm=0;
                                }

                       }



                                                  if (delka_vzoru_1 > 0)
                                                  {
                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++){chyba_1=chyba_1 + (hyp_pattern[poc1][0] - akt_data[poc1][0])*(hyp_pattern[poc1][0] - akt_data[poc1][0]);}

                                                  }

                                                  if (delka_vzoru_1 > 1)
                                                  {
                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++){chyba_2=chyba_2 + (hyp_pattern[poc1][1] - akt_data[poc1][1])*(hyp_pattern[poc1][1] - akt_data[poc1][1]);}

                                                  }else chyba_2=0;

                                                  if (delka_vzoru_1 > 2)
                                                  {
                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++){chyba_3=chyba_3 + (hyp_pattern[poc1][2] - akt_data[poc1][2])*(hyp_pattern[poc1][2] - akt_data[poc1][2]);}

                                                  }else chyba_3=0;

                                                  if (delka_vzoru_1 > 3)
                                                  {
                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++){chyba_4=chyba_4 + (hyp_pattern[poc1][3] - akt_data[poc1][3])*(hyp_pattern[poc1][3] - akt_data[poc1][3]);}

                                                  }else chyba_4=0;

                                                  if (delka_vzoru_1 > 4)
                                                  {
                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++){chyba_5=chyba_5 + (hyp_pattern[poc1][4] - akt_data[poc1][4])*(hyp_pattern[poc1][4] - akt_data[poc1][4]);}

                                                  }else chyba_5=0;


                                                  chyba= (chyba_1 + chyba_2 + chyba_3 + chyba_4 + chyba_5)/2;//vypocet chyby
                                                  chyba_1=0;
                                                  chyba_2=0;
                                                  chyba_3=0;
                                                  chyba_4=0;
                                                  chyba_5=0;
                        //po vypoctu chyby urcit,jestli je pattern dostatecne podobny
                        if (chyba <= chyba_vzoru_1)
                        {
                        backtest_chyba[pom_backtest]=chyba;
                        pocet_obchodu++;
                             //nastaveni backtestingu,ze pri otevrene pozici ignoruji dalsi vyskytnute vzory
                             if ( RadioGroup2->ItemIndex == 0 )
                             {
                               for (int poc1=0;poc1<delka_obchodu && priznak==0;poc1++)  //nacteni aktualnich dat
                                                            {

                                                               if ((pole_dat_O[proces+delka_vzoru_1]-(profit_target*dolar))>=(pole_dat_H[proces+delka_vzoru_1+poc1])){ strategie_nalezena = 2;priznak=1;}   //nalezeni profitu

                                                               if ((pole_dat_O[proces+delka_vzoru_1]+(stop_loss*dolar))<=(pole_dat_L[proces+delka_vzoru_1+poc1])){strategie_nalezena = 0;priznak=1;}        //nalezeni ztraty

                                                               if (poc1==delka_obchodu-1 && priznak==0) {strategie_nalezena=1;priznak=1;}
                                                            }
                                                            priznak=0;
                                                  switch(strategie_nalezena)
                                                  {
                                                        case 0:
                                                                {
                                                                 backtest[pom_backtest]=-stop_loss;
                                                                 pocet_kont_ztrat++;
                                                                 pocet_kont_profitu=0;
                                                                 pocet_ztrat++;
                                                                 prumerna_ztrata+=backtest[pom_backtest];
                                                                }break;

                                                        case 1:
                                                                {
                                                                 backtest[pom_backtest]=(pole_dat_C[proces+delka_vzoru_1+delka_obchodu-1]-pole_dat_O[proces+delka_vzoru_1])*1/dolar;
                                                                 if (backtest[pom_backtest]>0){pocet_kont_ztrat=0;pocet_kont_profitu++;pocet_profitu++;prumerny_profit+=backtest[pom_backtest];}
                                                                 if (backtest[pom_backtest]<0) {pocet_kont_ztrat++;pocet_kont_profitu=0;prumerna_ztrata+=backtest[pom_backtest];}
                                                                 if (backtest[pom_backtest]==0) {pocet_nul++;}
                                                                }break;
                                                        case 2:
                                                                {
                                                                 backtest[pom_backtest]=profit_target;
                                                                 pocet_kont_ztrat=0;
                                                                 pocet_kont_profitu++;
                                                                 pocet_profitu++;
                                                                 prumerny_profit+=backtest[pom_backtest];
                                                                }
                                                  }
                                                  pom_backtest++;
                                                  proces++;

                             }
                             //nastaveni backtestingu, ze pri otevrene pozici prikupuji dale pozice pri vyskytnuti vzoru
                             if ( RadioGroup2->ItemIndex == 1)
                             {
                               for (int poc1=0;poc1<delka_obchodu && priznak==0;poc1++)  //nacteni aktualnich dat
                                                            {

                                                               if ((pole_dat_O[proces+delka_vzoru_1]-(profit_target*dolar))>=(pole_dat_H[proces+delka_vzoru_1+poc1])){ strategie_nalezena = 2;priznak=1;}   //nalezeni profitu

                                                               if ((pole_dat_O[proces+delka_vzoru_1]+(stop_loss*dolar))<=(pole_dat_L[proces+delka_vzoru_1+poc1])){strategie_nalezena = 0;priznak=1;}        //nalezeni ztraty

                                                               if (poc1==delka_obchodu-1 && priznak==0) {strategie_nalezena=1;priznak=1;}
                                                            }
                                                            priznak=0;
                                                  switch(strategie_nalezena)
                                                  {
                                                        case 0:
                                                                {
                                                                 backtest[pom_backtest]=-stop_loss;
                                                                 pocet_kont_ztrat++;
                                                                 pocet_kont_profitu=0;
                                                                 pocet_ztrat++;
                                                                 prumerna_ztrata+=backtest[pom_backtest];
                                                                }break;

                                                        case 1:
                                                                {
                                                                 backtest[pom_backtest]=(pole_dat_C[proces+delka_vzoru_1+delka_obchodu-1]-pole_dat_O[proces+delka_vzoru_1])*1/dolar;
                                                                 if (backtest[pom_backtest]>0){pocet_kont_ztrat=0;pocet_kont_profitu++;pocet_profitu++;prumerny_profit+=backtest[pom_backtest];}
                                                                 if (backtest[pom_backtest]<0) {pocet_kont_ztrat++;pocet_kont_profitu=0;prumerna_ztrata+=backtest[pom_backtest];}
                                                                 if (backtest[pom_backtest]==0) {pocet_nul++;}
                                                                }break;
                                                        case 2:
                                                                {
                                                                 backtest[pom_backtest]=profit_target;
                                                                 pocet_kont_ztrat=0;
                                                                 pocet_kont_profitu++;
                                                                 pocet_profitu++;
                                                                 prumerny_profit+=backtest[pom_backtest];
                                                                }
                                                  }
                                                  pom_backtest++;


                             }


                             }

                        }
                        }
                        proces++;
                        if (pocet_kont_ztrat > pocet_kont_ztrat_max)pocet_kont_ztrat_max=pocet_kont_ztrat;
                        if (pocet_kont_profitu > pocet_kont_profitu_max)pocet_kont_profitu_max=pocet_kont_profitu;

            }

            }

            if (typ_dat_vzor == 2)
            {
                                while (proces <= (pocet_radku-delka_obchodu-delka_vzoru_1))
                                        {


                                         if (((pole_dat_time[proces]>TimeFiltr1Start && pole_dat_time[proces]<TimeFiltr1Stop)||(pole_dat_time[proces]>TimeFiltr2Start && pole_dat_time[proces]<TimeFiltr2Stop)||(pole_dat_time[proces]>TimeFiltr3Start && pole_dat_time[proces]<TimeFiltr3Stop)||(pole_dat_time[proces]>TimeFiltr4Start && pole_dat_time[proces]<TimeFiltr4Stop)||(pole_dat_time[proces]>TimeFiltr5Start && pole_dat_time[proces]<TimeFiltr5Stop))&&chyba_filtr==0)
                                          {

                                                        for (int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                            {
                                                                  akt_data[poc1][0]=indi_1[proces+poc1];

                                                            }

                                                           if (RadioGroup3->ItemIndex == 0)
                                                           {
                                                           offset=akt_data[0][0];
                                                           for (int poc1=0;poc1<delka_vzoru_1;poc1++)
                                                            {
                                                                   akt_data[poc1][0]=akt_data[poc1][0]-offset;

                                                            }
                                                           }

                                                       if (RadioGroup3->ItemIndex == 1)
                                                       {
                                                         for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //nacteni hypotetickeho patternu
                                                         {
                                                         if ( min_norm >akt_data[poc1][0] ) min_norm=akt_data[poc1][0];
                                                         if ( max_norm <akt_data[poc1][0] ) max_norm=akt_data[poc1][0];
                                                         }
                                                         for (int poc1=0;poc1<delka_vzoru_1;poc1++)  //vypocet nromalizace v rozmezi 0-1
                                                         {
                                                            akt_data[poc1][0]=(akt_data[poc1][0]-min_norm)/(max_norm-min_norm);  //  -akt_pocet_baru+pom jedna tam je kvuli tomu,abych nacital pattern od zacatku
                                                         }
                                                            min_norm=9999999;
                                                            max_norm=0;

                                                        }




                                                  for(int poc1=0;poc1<delka_vzoru_1;poc1++){chyba_1=chyba_1 + (hyp_pattern[poc1][0] - akt_data[poc1][0])*(hyp_pattern[poc1][0] - akt_data[poc1][0]);}




                                                  chyba= (chyba_1)/2;//vypocet chyby
                                                  chyba_1=0;
                        //po vypoctu chyby urcit,jestli je pattern dostatecne podobny
                        if (chyba <= chyba_vzoru_1)
                        {
                        backtest_chyba[pom_backtest]=chyba;
                        pocet_obchodu++;
                             //nastaveni backtestingu,ze pri otevrene pozici ignoruji dalsi vyskytnute vzory
                             if ( RadioGroup2->ItemIndex == 0 )
                             {
                               for (int poc1=0;poc1<delka_obchodu && priznak==0;poc1++)  //nacteni aktualnich dat
                                                            {

                                                               if ((pole_dat_O[proces+delka_vzoru_1]-(profit_target*dolar))>=(pole_dat_H[proces+delka_vzoru_1+poc1])){ strategie_nalezena = 2;priznak=1;}   //nalezeni profitu

                                                               if ((pole_dat_O[proces+delka_vzoru_1]+(stop_loss*dolar))<=(pole_dat_L[proces+delka_vzoru_1+poc1])){strategie_nalezena = 0;priznak=1;}        //nalezeni ztraty

                                                               if (poc1==delka_obchodu-1 && priznak==0) {strategie_nalezena=1;priznak=1;}
                                                            }
                                                            priznak=0;
                                                  switch(strategie_nalezena)
                                                  {
                                                        case 0:
                                                                {
                                                                 backtest[pom_backtest]=-stop_loss;
                                                                 pocet_kont_ztrat++;
                                                                 pocet_kont_profitu=0;
                                                                 pocet_ztrat++;
                                                                 prumerna_ztrata+=backtest[pom_backtest];
                                                                }break;

                                                        case 1:
                                                                {
                                                                 backtest[pom_backtest]=(pole_dat_C[proces+delka_vzoru_1+delka_obchodu-1]-pole_dat_O[proces+delka_vzoru_1])*1/dolar;
                                                                 if (backtest[pom_backtest]>0){pocet_kont_ztrat=0;pocet_kont_profitu++;pocet_profitu++;prumerny_profit+=backtest[pom_backtest];}
                                                                 if (backtest[pom_backtest]<0) {pocet_kont_ztrat++;pocet_kont_profitu=0;prumerna_ztrata+=backtest[pom_backtest];}
                                                                 if (backtest[pom_backtest]==0) {pocet_nul++;}
                                                                }break;
                                                        case 2:
                                                                {
                                                                 backtest[pom_backtest]=profit_target;
                                                                 pocet_kont_ztrat=0;
                                                                 pocet_kont_profitu++;
                                                                 pocet_profitu++;
                                                                 prumerny_profit+=backtest[pom_backtest];
                                                                }
                                                  }
                                                  pom_backtest++;
                                                  proces++;

                             }
                             //nastaveni backtestingu, ze pri otevrene pozici prikupuji dale pozice pri vyskytnuti vzoru
                             if ( RadioGroup2->ItemIndex == 1)
                             {
                               for (int poc1=0;poc1<delka_obchodu && priznak==0;poc1++)  //nacteni aktualnich dat
                                                            {

                                                               if ((pole_dat_O[proces+delka_vzoru_1]-(profit_target*dolar))>=(pole_dat_H[proces+delka_vzoru_1+poc1])){ strategie_nalezena = 2;priznak=1;}   //nalezeni profitu

                                                               if ((pole_dat_O[proces+delka_vzoru_1]+(stop_loss*dolar))<=(pole_dat_L[proces+delka_vzoru_1+poc1])){strategie_nalezena = 0;priznak=1;}        //nalezeni ztraty

                                                               if (poc1==delka_obchodu-1 && priznak==0) {strategie_nalezena=1;priznak=1;}
                                                            }
                                                            priznak=0;
                                                  switch(strategie_nalezena)
                                                  {
                                                        case 0:
                                                                {
                                                                 backtest[pom_backtest]=-stop_loss;
                                                                 pocet_kont_ztrat++;
                                                                 pocet_kont_profitu=0;
                                                                 pocet_ztrat++;
                                                                 prumerna_ztrata+=backtest[pom_backtest];
                                                                }break;

                                                        case 1:
                                                                {
                                                                 backtest[pom_backtest]=(pole_dat_C[proces+delka_vzoru_1+delka_obchodu-1]-pole_dat_O[proces+delka_vzoru_1])*1/dolar;
                                                                 if (backtest[pom_backtest]>0){pocet_kont_ztrat=0;pocet_kont_profitu++;pocet_profitu++;prumerny_profit+=backtest[pom_backtest];}
                                                                 if (backtest[pom_backtest]<0) {pocet_kont_ztrat++;pocet_kont_profitu=0;prumerna_ztrata+=backtest[pom_backtest];}
                                                                 if (backtest[pom_backtest]==0) {pocet_nul++;}
                                                                }break;
                                                        case 2:
                                                                {
                                                                 backtest[pom_backtest]=profit_target;
                                                                 pocet_kont_ztrat=0;
                                                                 pocet_kont_profitu++;
                                                                 pocet_profitu++;
                                                                 prumerny_profit+=backtest[pom_backtest];
                                                                }
                                                  }
                                                  pom_backtest++;


                             }


                             }

                        }

                        proces++;
                        if (pocet_kont_ztrat > pocet_kont_ztrat_max)pocet_kont_ztrat_max=pocet_kont_ztrat;
                        if (pocet_kont_profitu > pocet_kont_profitu_max)pocet_kont_profitu_max=pocet_kont_profitu;

            }
            }  //konec ifu pro volbu typical price

           }//konec ifu pro backtesting na shrot stranu



          }else ShowMessage("Setup backtesting strategy");
                        proces=0;
                        suma_PL=new float[pom_backtest];
                        suma_PL[0]=OOS_backtest[0];

                        for (int a=1;a<pom_backtest;a++)
                                {
                                suma_PL[a]=suma_PL[a-1]+backtest[a];
                                }

                        maximum=0;

                        for (int a=0;a<pom_backtest;a++)
                        {
                          if (maximum < suma_PL[a]) {maximum = suma_PL[a];}
                        }
         sprintf(nazev_souboru,"Backtest%d_OOS.txt",poc_back);
         soubor_out_of_sample();
         delete suma_PL;
          }else {if (poprve3==0){poprve3=1;}}
          proces=0;


           
          pom_backtest=0;
          pocet_kont_profitu=0;
          pocet_kont_profitu_max=0;
          pocet_kont_ztrat=0;
          pocet_kont_ztrat_max=0;
          pocet_obchodu=0;
          pocet_profitu=0;
          pocet_ztrat=0;
     /////////////////////////////////////////////////////////////////////////////////////konec in sample analyzy
     //vypis souboru statistky z in sample backtestu
    }

   }

   fputc('#',Info_test);
   fputc('#',Info_test);
   fclose(Info_test);
   rewind(VstSoubor);
   obchod_proveden=0;
  }

//---------------------------------------------------------------------------




