using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ZedGraph;
using System.IO;
using System.Text.RegularExpressions;
using System.Globalization;
using System.Threading;
namespace NNmarket
{
    public partial class NNmarket : Form
    {
        public double[] indices;
        public double[] errorList;
        public double[] errorListtest;
        public delegate bool ZedMouseEventHandler(ZedGraphControl control, MouseEventArgs e);
        public double[] predykcja;
        PointF startPt;
        CurveItem dragCurve;
        int dragIndex;
        PointPair startPair;
        public List<double> KupnoKlik = new List<double>();
        public List<double> SprzedazKlik = new List<double>();
        public string[] NazwyFirm;
        public double[] TablicaNotowanOtwarcie;
        public double[] TablicaNotowanZamkniecie;
        public double[] TablicaNotowanMax;
        public double[] TablicaNotowanMin;
        public double[] TablicaNotowanWolumen;
        public string[] TablicaNotowandatas;
        public double[] TablicaNotowandata;
        List<double[]> TabliceWejcie = new List<double[]>();
        string cudirstart = Directory.GetCurrentDirectory();
        BP siec = new BP();




        public NNmarket()
        {
            Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
            Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
            InitializeComponent();
            ZawartoscCbxNazwaSpolki();
            
            cbxRodzajWykresu.Text = "Punkty";
            cbxIleWarstw.Text = "2 warstwy ukryte";
            InitGraph();
            ZGCwykres.MouseDownEvent += new ZedGraphControl.ZedMouseEventHandler(zg1_MouseDownEvent);
        }
        //zed
        private void InitGraph()
        {
            GraphPane myPane = ZGCwykres.GraphPane;
            myPane.Title.Text = "";
            myPane.XAxis.Title.Text = "Data";
            myPane.YAxis.Title.Text = "Cena/Wartość współczynnika";
            myPane.XAxis.Type = AxisType.LinearAsOrdinal;
            myPane.X2Axis.Type = AxisType.LinearAsOrdinal;
            myPane.Chart.Fill = new Fill(Color.WhiteSmoke);
            myPane.Fill = new Fill(Color.WhiteSmoke);
            myPane.BarSettings.Type = BarType.Overlay;
            myPane.Legend.IsVisible = false;
            ZGCwykres.AxisChange();
        }
        private bool zg1_MouseDownEvent(ZedGraphControl control, MouseEventArgs e)
        {

            if (Control.ModifierKeys == Keys.Control)
            {
                GraphPane myPane = control.GraphPane;
                PointF mousePt = new PointF(e.X, e.Y);


                if (myPane.FindNearestPoint(mousePt, out dragCurve, out dragIndex) &&
                         dragCurve.Points is PointPairList &&
                         dragCurve.YAxisIndex == 0)
                {

                    startPt = mousePt;
                    startPair = dragCurve.Points[dragIndex];


                    KupnoKlik.Add(Convert.ToDouble(startPair.X.ToString()));

                    wykres();
                    return true;

                }

            }
            if (Control.ModifierKeys == Keys.Alt)
            {
                GraphPane myPane = control.GraphPane;
                PointF mousePt = new PointF(e.X, e.Y);


                if (myPane.FindNearestPoint(mousePt, out dragCurve, out dragIndex) &&
                         dragCurve.Points is PointPairList &&
                         dragCurve.YAxisIndex == 0)
                {

                    startPt = mousePt;
                    startPair = dragCurve.Points[dragIndex];

                    SprzedazKlik.Add(Convert.ToDouble(startPair.X.ToString()));



                    wykres();
                    return true;
                }

            }

            return false;
        }
        //koniecZed
        //kontrolki
        public void ZawartoscCbxNazwaSpolki()
        {
            if (rbUSA.Checked == true)
            {
                NazwyFirm = SystemPlikow.PobierzNazwyFirmNyse(cudirstart);      //USAdata.PobierzNazwyFirmNyse();
            }
            if (rbPL.Checked == true)
            {

                NazwyFirm = SystemPlikow.PobierzNazwyFirmGPW(cudirstart);    //GPWdata.PobierzNazwyFirmGPW();
            }


            foreach (string NazwyGpwCiagle in NazwyFirm)
            {
                cbxNazwaSpolki.Items.Add(NazwyGpwCiagle);
            }
            cbxNazwaSpolki.Text = NazwyFirm[0];


        }
        public void wykres()
        {

            double[] parametrnawykres;
            int ProcentOgolu = Convert.ToInt32(txtZbiorUczacy.Text);
            // double LiczbaZProcentu = (ListaTablic[0].Length / 100) * ProcentOgolu;
            double LiczbaZProcentu = (Convert.ToInt32(txtIloscPunktowNaWykresie.Text) / 100) * ProcentOgolu;
            int ZbiorTestowy = Convert.ToInt32(txtIloscPunktowNaWykresie.Text) - Convert.ToInt32(LiczbaZProcentu);
            int ZbiorUczacy = Convert.ToInt32(txtIloscPunktowNaWykresie.Text) - ZbiorTestowy;
            // int Dlugosc = ListaTablic[0].Length;
            
           // Wlaczkontrolki(false);
            try
            {
                parametrnawykres = TabliceWejcie[lbWybraneWejscia.SelectedIndex];
            }
            catch
            {
                parametrnawykres = new double[Convert.ToInt32(txtIloscPunktowNaWykresie.Text)];
            }
            /*double[] SMA1 = Wskazniki.SMA(TablicaNotowanZamkniecie, Convert.ToInt32(txtParametrWskaznika.Text));
            double[] SygnalySMA1 = Wskazniki.SygnalySMA2(TablicaNotowanZamkniecie, SMA1);
            double[] ROC1 = Wskazniki.ROC(TablicaNotowanZamkniecie, Convert.ToInt32(txtParametrWskaznika.Text));
            double[] SygnalyRoc1 = Wskazniki.SygnalyROC(ROC1, Convert.ToInt32(txtParametrWskaznika.Text));
            double[] CCI1 = Wskazniki.CCI(TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin, Convert.ToInt32(txtParametrWskaznika.Text));
            double[] SygnalyCCI1 = (Wskazniki.SygnalyCCI(CCI1));
            double[] ATR1 = Wskazniki.ATR(TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin, Convert.ToInt32(txtParametrWskaznika.Text));
            double[] SygnalyATR1 = Wskazniki.SygnalyATR(ATR1, TablicaNotowanZamkniecie);
            double[] RSI1 = Wskazniki.RSI(TablicaNotowanZamkniecie, Convert.ToInt32(txtParametrWskaznika.Text));
            double[] SygnalyRSI1 = Wskazniki.SygnalyRSI(RSI1);
            double[] SO1 = Wskazniki.SO(TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin, Convert.ToInt32(txtParametrWskaznika.Text));
            double[] SygnalySO1 = Wskazniki.SygnalySO(SO1);
            double[] SygnalySwiece = Wskazniki.SygnalySwiece(TablicaNotowanOtwarcie, TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin);*/
            double[] SygnalyKupSprzedaj = new double[TablicaNotowanZamkniecie.Length];
            if (rbProsteNN.Checked == true)
            {
                SygnalyKupSprzedaj = filtry.SygnalyKupSprzedajKlik(KupnoKlik, SprzedazKlik, TablicaNotowandata);
                if (chbautosygnaly.Checked)
                {

                    SygnalyKupSprzedaj = filtry.SygnalyKupSprzedajAuto(TablicaNotowanZamkniecie);
                    if (chbfiltr.Checked)
                    {

                        SygnalyKupSprzedaj = filtry.filtr(filtry.SygnalyKupSprzedajAuto(TablicaNotowanZamkniecie));
                    }

                }
            }
            
            if (rbSprzedajNN.Checked == true)
            {
                SygnalyKupSprzedaj = filtry.ZamienSprzedajNaDodatnie(filtry.WyrzucKup(filtry.SygnalyKupSprzedajKlik(KupnoKlik, SprzedazKlik, TablicaNotowandata)));
                if (chbautosygnaly.Checked)
                {

                    SygnalyKupSprzedaj = filtry.ZamienSprzedajNaDodatnie(filtry.WyrzucKup(filtry.SygnalyKupSprzedajAuto(TablicaNotowanZamkniecie)));
                    if (chbfiltr.Checked)
                    {

                        SygnalyKupSprzedaj = filtry.ZamienSprzedajNaDodatnie(filtry.WyrzucKup(filtry.filtr(filtry.SygnalyKupSprzedajAuto(TablicaNotowanZamkniecie))));
                    }

                }

            }
            if (rbKupNN.Checked == true)
            {
                SygnalyKupSprzedaj = filtry.WyrzucSprzedaj(filtry.SygnalyKupSprzedajKlik(KupnoKlik, SprzedazKlik, TablicaNotowandata));
                if (chbautosygnaly.Checked)
                {

                    SygnalyKupSprzedaj = filtry.WyrzucSprzedaj(filtry.SygnalyKupSprzedajAuto(TablicaNotowanZamkniecie));
                    if (chbfiltr.Checked)
                    {

                        SygnalyKupSprzedaj = filtry.WyrzucSprzedaj(filtry.filtr(filtry.SygnalyKupSprzedajAuto(TablicaNotowanZamkniecie)));
                    }

                }



            }




            //Waznosc sygnalu
            //double[] SygnalyKupSprzedaj = Wskazniki.WyrzucMaleZakupyAkcji(Wskazniki.SygnalyKupsprzedaj(TablicaNotowanZamkniecie));
            XDate xDate = new XDate(2006, 1, 1);
            double prevClose = 0;
            PointPairList ListaPunktowy = new PointPairList();
            StockPointList spl = new StockPointList();
            int Dlugosc = TablicaNotowanZamkniecie.Length;
            int IloscPunktowNaWykresie = Convert.ToInt32(txtIloscPunktowNaWykresie.Text);
            double[] liczniktbl = new double[IloscPunktowNaWykresie];
            int Start = Dlugosc - IloscPunktowNaWykresie;
            double[] parametrnawykresp = new double[Dlugosc];
            PointPairList parametrnawykresl = new PointPairList();
            BarItem parametrnawykresb = new BarItem("parametr", parametrnawykresl, Color.Blue);
            double[] y8 = new double[Dlugosc];
            /* double[] y = new double[Dlugosc];
            double[] y2 = new double[Dlugosc];
            double[] y3 = new double[Dlugosc];
            double[] y4 = new double[Dlugosc];
            double[] y5 = new double[Dlugosc];
            double[] y6 = new double[Dlugosc];
            double[] y7 = new double[Dlugosc];
            
            double[] x = new double[Dlugosc];
            PointPairList list1 = new PointPairList();
            PointPairList list2 = new PointPairList();
            PointPairList list3 = new PointPairList();
            PointPairList list4 = new PointPairList();
            PointPairList list5 = new PointPairList();
            PointPairList list6 = new PointPairList();
            PointPairList list7 = new PointPairList();
            
            BarItem Sma1 = new BarItem("SMA1", list1, Color.Blue);
            BarItem Roc1 = new BarItem("ROC1", list2, Color.Red);
            BarItem Cci1 = new BarItem("CCI1", list3, Color.Green);
            BarItem Atr1 = new BarItem("ATR1", list4, Color.HotPink);
            BarItem Rsi1 = new BarItem("RSI1", list5, Color.Yellow);
            BarItem So1 = new BarItem("SO1", list6, Color.White);
            BarItem Sygnalyswiece = new BarItem("Świece", list7, Color.Orange);*/
            PointPairList list8 = new PointPairList();
            BarItem Sygnalykupsprzedaj = new BarItem("KS", list8, Color.Black);
            PointPairList Podział = new PointPairList();
            for (int i = 0; i < Convert.ToInt32(txtIloscPunktowNaWykresie.Text); i++)
            {
                double xData = TablicaNotowandata[i];
                double yZamkniecie = TablicaNotowanZamkniecie[i];
                double open = TablicaNotowanOtwarcie[i];
                double close = TablicaNotowanZamkniecie[i];
                double hi = TablicaNotowanMax[i];
                double low = TablicaNotowanMin[i];
                double Vol = TablicaNotowanWolumen[i];
                parametrnawykresp[i] = parametrnawykres[i];
                /*y[i] = SygnalySMA1[i];
                y2[i] = SygnalyRoc1[i];
                y3[i] = SygnalyCCI1[i];
                y4[i] = SygnalyATR1[i];
                y5[i] = SygnalyRSI1[i];
                y6[i] = SygnalySO1[i];
                y7[i] = SygnalySwiece[i];*/
                y8[i] = SygnalyKupSprzedaj[i];
                ListaPunktowy.Add(xData, yZamkniecie);
                StockPt pt = new StockPt(xData, hi, low, open, close, Vol);
                pt.ColorValue = close > prevClose ? 2 : 1;
                spl.Add(pt);
                prevClose = close;
                if (i == ZbiorUczacy)
                {
                    Podział.Add(i, 50);
                }
                else
                {
                    Podział.Add(i, 0);
                }
                xDate.AddDays(1.0);
                if (XDate.XLDateToDayOfWeek(xDate.XLDate) == 6)
                    xDate.AddDays(2.0);
            }

           /* for (int i = 0; i < y.GetLength(0); i++)
                y2[i] += y[i];
            for (int i = 0; i < y2.GetLength(0); i++)
                y3[i] += y2[i];
            for (int i = 0; i < y2.GetLength(0); i++)
                y4[i] += y3[i];
            for (int i = 0; i < y2.GetLength(0); i++)
                y5[i] += y4[i];
            for (int i = 0; i < y2.GetLength(0); i++)
                y6[i] += y5[i];
            for (int i = 0; i < y2.GetLength(0); i++)
                y7[i] += y6[i];
            // for (int i = 0; i < y2.GetLength(0); i++)
            //y8[i] += y7[i];*/
           
          
            for (int i = 0; i < Convert.ToInt32(txtIloscPunktowNaWykresie.Text); i++)
            {
                parametrnawykresl.Add(TablicaNotowandata[i], parametrnawykresp[i]);
                list8.Add(TablicaNotowandata[i], y8[i]);
                
                /*list1.Add(TablicaNotowandata[i], y[i]);
                list2.Add(TablicaNotowandata[i], y2[i]);
                list3.Add(TablicaNotowandata[i], y3[i]);
                list4.Add(TablicaNotowandata[i], y4[i]);
                list5.Add(TablicaNotowandata[i], y5[i]);
                list6.Add(TablicaNotowandata[i], y6[i]);
                list7.Add(TablicaNotowandata[i], y7[i]);
                */
            }
            Color[] colors = { Color.Red, Color.Black };
            Fill myFill = new Fill(colors);
            myFill.Type = FillType.GradientByColorValue;
            myFill.SecondaryValueGradientColor = Color.Empty;
            myFill.RangeMin = 1;
            myFill.RangeMax = 2;
            OHLCBarItem Słupki = new OHLCBarItem("Price", spl, Color.Empty);
            Słupki.Bar.GradientFill = myFill;
            Słupki.Bar.IsAutoSize = true;
            JapaneseCandleStickItem Świece = new JapaneseCandleStickItem("notka", spl);
            LineItem Punkty = new LineItem("Cena na zamknięciu", ListaPunktowy, Color.DarkBlue, SymbolType.None);
            ZGCwykres.GraphPane.CurveList.Clear();
            if (cbxRodzajWykresu.Text == "Świece")
            {
                ZGCwykres.GraphPane.CurveList.Add(Świece);
            }
            if (cbxRodzajWykresu.Text == "Punkty")
            {
                ZGCwykres.GraphPane.CurveList.Add(Punkty);
            }
            if (cbxRodzajWykresu.Text == "Słupki")
            {
                ZGCwykres.GraphPane.CurveList.Add(Słupki);
            }

            if (rbSygnalyAT.Checked == true)
            {
                ZGCwykres.GraphPane.CurveList.Add(parametrnawykresb);
              /*  ZGCwykres.GraphPane.CurveList.Add(Sma1);
                ZGCwykres.GraphPane.CurveList.Add(Roc1);
                ZGCwykres.GraphPane.CurveList.Add(Cci1);
                ZGCwykres.GraphPane.CurveList.Add(Atr1);
                ZGCwykres.GraphPane.CurveList.Add(Rsi1);
                ZGCwykres.GraphPane.CurveList.Add(So1);
                ZGCwykres.GraphPane.CurveList.Add(Sygnalyswiece);*/
            }

            if (rbSyknalyKS.Checked == true)
            {

                ZGCwykres.GraphPane.CurveList.Add(Sygnalykupsprzedaj);
            }

            BarItem PodzialLinia = new BarItem("Uczacy/Testowy", Podział, Color.Red);
            ZGCwykres.GraphPane.CurveList.Add(PodzialLinia);
            ZGCwykres.Refresh();
            ZGCwykres.Invalidate();
            ZGCwykres.AxisChange();
            //Wlaczkontrolki(true);
        }

        //konieckontrolki
        //optymalizatory
        public double[] optymalizatorSMA()
        {
            
                double[] zarobki = new double[Convert.ToInt32(txtOptymalizujOgranicznik.Text)];
                int ProcentOgolu = Convert.ToInt32(txtZbiorUczacy.Text);
                double LiczbaZProcentu = (Convert.ToInt32(txtIloscPunktowNaWykresie.Text) / 100) * ProcentOgolu;
                int ZbiorTestowy = Convert.ToInt32(txtIloscPunktowNaWykresie.Text) - Convert.ToInt32(LiczbaZProcentu);
                int ZbiorUczacy = Convert.ToInt32(txtIloscPunktowNaWykresie.Text) - ZbiorTestowy;
                for (int i = 2; i < Convert.ToInt32(txtOptymalizujOgranicznik.Text); i++)
                {
                    double[] sygnaly = Wskazniki.SygnalySMA2(TablicaNotowanZamkniecie, (Wskazniki.SMA(TablicaNotowanZamkniecie, i)));
                    double wartosck = 0;
                    double wartoscs = 0;
                    double roznica = 0;
                    double zarobek = 0;
                    double szukana = 1;
                    for (int j = ZbiorUczacy; j < Convert.ToInt32(txtIloscPunktowNaWykresie.Text) - 1; j++)
                    {
                        if (sygnaly[j] == szukana)
                        {
                            if (szukana == 1) { wartosck = TablicaNotowanOtwarcie[j + 1]; }
                            if (szukana == -1) { wartoscs = TablicaNotowanOtwarcie[j + 1]; }
                            if (wartosck != 0) { szukana = -1; }
                            if (wartoscs != 0) { szukana = 1; }
                            if (wartosck != 0 && wartoscs != 0)
                            {
                                roznica = wartoscs - wartosck;
                                szukana = 1;
                                wartosck = 0;
                                wartoscs = 0;
                            }
                        }
                        zarobek += roznica;
                        roznica = 0;
                    }
                    zarobki[i] = zarobek;
                }
                return zarobki;
            
        }
        public double[] optymalizatorROC()
        {
            double[] zarobki = new double[Convert.ToInt32(txtOptymalizujOgranicznik.Text)];
            int ProcentOgolu = Convert.ToInt32(txtZbiorUczacy.Text);
            double LiczbaZProcentu = (Convert.ToInt32(txtIloscPunktowNaWykresie.Text) / 100) * ProcentOgolu;
            int ZbiorTestowy = Convert.ToInt32(txtIloscPunktowNaWykresie.Text) - Convert.ToInt32(LiczbaZProcentu);
            int ZbiorUczacy = Convert.ToInt32(txtIloscPunktowNaWykresie.Text) - ZbiorTestowy;
            for (int i = 2; i < Convert.ToInt32(txtOptymalizujOgranicznik.Text); i++)
            {
                double[] sygnaly = Wskazniki.SygnalyROC(Wskazniki.ROC(TablicaNotowanZamkniecie, i), i);
                double wartosck = 0;
                double wartoscs = 0;
                double roznica = 0;
                double zarobek = 0;
                double szukana = 1;
                for (int j = ZbiorUczacy; j < Convert.ToInt32(txtIloscPunktowNaWykresie.Text)-1; j++)
                {
                    if (sygnaly[j] == szukana)
                    {
                        if (szukana == 1) { wartosck = TablicaNotowanOtwarcie[j + 1]; }
                        if (szukana == -1) { wartoscs = TablicaNotowanOtwarcie[j + 1]; }
                        if (wartosck != 0) { szukana = -1; }
                        if (wartoscs != 0) { szukana = 1; }
                        if (wartosck != 0 && wartoscs != 0)
                        {
                            roznica = wartoscs - wartosck;
                            szukana = 1;
                            wartosck = 0;
                            wartoscs = 0;
                        }
                    }
                    zarobek += roznica;
                    roznica = 0;
                }
                zarobki[i] = zarobek;
            }
            return zarobki;
        }
        public double[] optymalizatorATR()
        {
            double[] zarobki = new double[Convert.ToInt32(txtOptymalizujOgranicznik.Text)];
            int ProcentOgolu = Convert.ToInt32(txtZbiorUczacy.Text);
            double LiczbaZProcentu = (Convert.ToInt32(txtIloscPunktowNaWykresie.Text) / 100) * ProcentOgolu;
            int ZbiorTestowy = Convert.ToInt32(txtIloscPunktowNaWykresie.Text) - Convert.ToInt32(LiczbaZProcentu);
            int ZbiorUczacy = Convert.ToInt32(txtIloscPunktowNaWykresie.Text) - ZbiorTestowy;
            for (int i = 2; i < Convert.ToInt32(txtOptymalizujOgranicznik.Text); i++)
            {
                double[] sygnaly = Wskazniki.SygnalyATR(Wskazniki.ATR(TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin, i), TablicaNotowanZamkniecie);
                double wartosck = 0;
                double wartoscs = 0;
                double roznica = 0;
                double zarobek = 0;
                double szukana = 1;
                for (int j = ZbiorUczacy; j < Convert.ToInt32(txtIloscPunktowNaWykresie.Text) - 1; j++)
                {
                    if (sygnaly[j] == szukana)
                    {
                        if (szukana == 1) { wartosck = TablicaNotowanOtwarcie[j + 1]; }
                        if (szukana == -1) { wartoscs = TablicaNotowanOtwarcie[j + 1]; }
                        if (wartosck != 0) { szukana = -1; }
                        if (wartoscs != 0) { szukana = 1; }
                        if (wartosck != 0 && wartoscs != 0)
                        {
                            roznica = wartoscs - wartosck;
                            szukana = 1;
                            wartosck = 0;
                            wartoscs = 0;
                        }
                    }
                    zarobek += roznica;
                    roznica = 0;
                }
                zarobki[i] = zarobek;
            }
            return zarobki;
        }
        public double[] optymalizatorRSI()
        {
            double[] zarobki = new double[Convert.ToInt32(txtOptymalizujOgranicznik.Text)];
            int ProcentOgolu = Convert.ToInt32(txtZbiorUczacy.Text);
            double LiczbaZProcentu = (Convert.ToInt32(txtIloscPunktowNaWykresie.Text) / 100) * ProcentOgolu;
            int ZbiorTestowy = Convert.ToInt32(txtIloscPunktowNaWykresie.Text) - Convert.ToInt32(LiczbaZProcentu);
            int ZbiorUczacy = Convert.ToInt32(txtIloscPunktowNaWykresie.Text) - ZbiorTestowy;
            for (int i = 2; i < Convert.ToInt32(txtOptymalizujOgranicznik.Text) ; i++)
            {
                double[] sygnaly = Wskazniki.SygnalyRSI(Wskazniki.RSI(TablicaNotowanZamkniecie, i));
                double wartosck = 0;
                double wartoscs = 0;
                double roznica = 0;
                double zarobek = 0;
                double szukana = 1;
                for (int j = ZbiorUczacy; j < Convert.ToInt32(txtIloscPunktowNaWykresie.Text) - 1; j++)
                {
                    if (sygnaly[j] == szukana)
                    {
                        if (szukana == 1) { wartosck = TablicaNotowanOtwarcie[j + 1]; }
                        if (szukana == -1) { wartoscs = TablicaNotowanOtwarcie[j + 1]; }
                        if (wartosck != 0) { szukana = -1; }
                        if (wartoscs != 0) { szukana = 1; }
                        if (wartosck != 0 && wartoscs != 0)
                        {
                            roznica = wartoscs - wartosck;
                            szukana = 1;
                            wartosck = 0;
                            wartoscs = 0;
                        }
                    }
                    zarobek += roznica;
                    roznica = 0;
                }
                zarobki[i] = zarobek;
            }
            return zarobki;
        }
        public double[] optymalizatorSO()
        {
            double[] zarobki = new double[Convert.ToInt32(txtOptymalizujOgranicznik.Text)];
            int ProcentOgolu = Convert.ToInt32(txtZbiorUczacy.Text);
            double LiczbaZProcentu = (Convert.ToInt32(txtIloscPunktowNaWykresie.Text) / 100) * ProcentOgolu;
            int ZbiorTestowy = Convert.ToInt32(txtIloscPunktowNaWykresie.Text) - Convert.ToInt32(LiczbaZProcentu);
            int ZbiorUczacy = Convert.ToInt32(txtIloscPunktowNaWykresie.Text) - ZbiorTestowy;
            for (int i = 2; i < Convert.ToInt32(txtOptymalizujOgranicznik.Text); i++)
            {
                double[] sygnaly = Wskazniki.SygnalySO(Wskazniki.SO(TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin, i));
                double wartosck = 0;
                double wartoscs = 0;
                double roznica = 0;
                double zarobek = 0;
                double szukana = 1;
                for (int j = ZbiorUczacy; j < Convert.ToInt32(txtIloscPunktowNaWykresie.Text) - 1; j++)
                {
                    if (sygnaly[j] == szukana)
                    {
                        if (szukana == 1) { wartosck = TablicaNotowanOtwarcie[j + 1]; }
                        if (szukana == -1) { wartoscs = TablicaNotowanOtwarcie[j + 1]; }
                        if (wartosck != 0) { szukana = -1; }
                        if (wartoscs != 0) { szukana = 1; }
                        if (wartosck != 0 && wartoscs != 0)
                        {
                            roznica = wartoscs - wartosck;
                            szukana = 1;
                            wartosck = 0;
                            wartoscs = 0;
                        }
                    }
                    zarobek += roznica;
                    roznica = 0;
                }
                zarobki[i] = zarobek;
            }
            return zarobki;
        }
        public double[] optymalizatorCCI()
        {
            double[] zarobki = new double[Convert.ToInt32(txtOptymalizujOgranicznik.Text)];
            int ProcentOgolu = Convert.ToInt32(txtZbiorUczacy.Text);
            double LiczbaZProcentu = (Convert.ToInt32(txtIloscPunktowNaWykresie.Text) / 100) * ProcentOgolu;
            int ZbiorTestowy = Convert.ToInt32(txtIloscPunktowNaWykresie.Text) - Convert.ToInt32(LiczbaZProcentu);
            int ZbiorUczacy = Convert.ToInt32(txtIloscPunktowNaWykresie.Text) - ZbiorTestowy;
            for (int i = 2; i < Convert.ToInt32(txtOptymalizujOgranicznik.Text); i++)
            {
                double[] sygnaly = Wskazniki.SygnalyCCI(Wskazniki.CCI(TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin, i));
                double wartosck = 0;
                double wartoscs = 0;
                double roznica = 0;
                double zarobek = 0;
                double szukana = 1;
                for (int j = ZbiorUczacy; j < Convert.ToInt32(txtIloscPunktowNaWykresie.Text) - 1; j++)
                {
                    if (sygnaly[j] == szukana)
                    {
                        if (szukana == 1) { wartosck = TablicaNotowanOtwarcie[j + 1]; }
                        if (szukana == -1) { wartoscs = TablicaNotowanOtwarcie[j + 1]; }
                        if (wartosck != 0) { szukana = -1; }
                        if (wartoscs != 0) { szukana = 1; }
                        if (wartosck != 0 && wartoscs != 0)
                        {
                            roznica = wartoscs - wartosck;
                            szukana = 1;
                            wartosck = 0;
                            wartoscs = 0;
                        }
                    }
                    zarobek += roznica;
                    roznica = 0;
                }
                zarobki[i] = zarobek;
            }
            return zarobki;
        }
        public double optzyski(double[] sygnaly)
        {
            double wartosck = 0;
            double wartoscs = 0;
            double roznica = 0;
            double zarobek = 0;
            double szukana = 1;
            for (int j = Convert.ToInt32(txtIloscPunktowNaWykresie.Text); j < TablicaNotowanZamkniecie.Length - 1; j++)
            {
                if (sygnaly[j] == szukana)
                {
                    if (szukana == 1) { wartosck = TablicaNotowanOtwarcie[j + 1]; }
                    if (szukana == -1) { wartoscs = TablicaNotowanOtwarcie[j + 1]; }
                    if (wartosck != 0) { szukana = -1; }
                    if (wartoscs != 0) { szukana = 1; }
                    if (wartosck != 0 && wartoscs != 0)
                    {
                        roznica = wartoscs - wartosck;
                        szukana = 1;
                        wartosck = 0;
                        wartoscs = 0;
                    }
                }
                zarobek += roznica;
                roznica = 0;
            }

            return zarobek;
        }

        //koniecoptymalizatory

        private void button1_Click(object sender, EventArgs e)
        {

        }

        private void NNmarket_Load(object sender, EventArgs e)
        {

        }

        private void rbPL_CheckedChanged(object sender, EventArgs e)
        {
            cbxNazwaSpolki.Items.Clear();
            ZawartoscCbxNazwaSpolki();

        }

        private void rbUSA_CheckedChanged(object sender, EventArgs e)
        {
            cbxNazwaSpolki.Items.Clear();
            ZawartoscCbxNazwaSpolki();
           
        }

        private void cbxNazwaSpolki_SelectedIndexChanged(object sender, EventArgs e)
        {
            KupnoKlik.Clear();
            SprzedazKlik.Clear();
            TabliceWejcie.Clear();
            lbWybraneWejscia.Items.Clear();
           

            try
            {
                if (rbUSA.Checked == true)
                {
                    TablicaNotowanOtwarcie = SystemPlikow.ZPlikuDoTablicyNYSE(cbxNazwaSpolki.Text, "Otwarcie", cudirstart);    //USAdata.WyjmijZBazyNYSECiagle(cbxNazwaSpolki.Text, "Otwarcie");
                    TablicaNotowanZamkniecie = SystemPlikow.ZPlikuDoTablicyNYSE(cbxNazwaSpolki.Text, "Zamkniecie", cudirstart); //USAdata.WyjmijZBazyNYSECiagle(cbxNazwaSpolki.Text, "Zamkniecie");
                    TablicaNotowanMax = SystemPlikow.ZPlikuDoTablicyNYSE(cbxNazwaSpolki.Text, "Max", cudirstart); //USAdata.WyjmijZBazyNYSECiagle(cbxNazwaSpolki.Text, "Max");
                    TablicaNotowanMin = SystemPlikow.ZPlikuDoTablicyNYSE(cbxNazwaSpolki.Text, "Min", cudirstart); //USAdata.WyjmijZBazyNYSECiagle(cbxNazwaSpolki.Text, "Min");
                    TablicaNotowanWolumen = SystemPlikow.ZPlikuDoTablicyNYSE(cbxNazwaSpolki.Text, "Wolumen", cudirstart); //USAdata.WyjmijZBazyNYSECiagle(cbxNazwaSpolki.Text, "Wolumen");
                    TablicaNotowandatas = SystemPlikow.ZPlikuDoTablicyNYSEdata(cbxNazwaSpolki.Text, cudirstart); //USAdata.WyjmijZBazyNYSEData(cbxNazwaSpolki.Text);
                }
                if (rbPL.Checked == true)
                {
                    TablicaNotowanOtwarcie = SystemPlikow.ZPlikuDoTablicyGPW(cbxNazwaSpolki.Text, "Otwarcie", cudirstart); //GPWdata.WyjmijZBazyGpw(cbxNazwaSpolki.Text, "Otwarcie");
                    TablicaNotowanZamkniecie = SystemPlikow.ZPlikuDoTablicyGPW(cbxNazwaSpolki.Text, "Zamkniecie", cudirstart); //GPWdata.WyjmijZBazyGpw(cbxNazwaSpolki.Text, "Zamkniecie");
                    TablicaNotowanMax = SystemPlikow.ZPlikuDoTablicyGPW(cbxNazwaSpolki.Text, "Max", cudirstart); //GPWdata.WyjmijZBazyGpw(cbxNazwaSpolki.Text, "Max");
                    TablicaNotowanMin = SystemPlikow.ZPlikuDoTablicyGPW(cbxNazwaSpolki.Text, "Min", cudirstart); //GPWdata.WyjmijZBazyGpw(cbxNazwaSpolki.Text, "Min");
                    TablicaNotowanWolumen = SystemPlikow.ZPlikuDoTablicyGPW(cbxNazwaSpolki.Text, "Wolumen", cudirstart); //GPWdata.WyjmijZBazyGpw(cbxNazwaSpolki.Text, "Wolumen");
                    TablicaNotowandatas = SystemPlikow.ZPlikuDoTablicyGPWdata(cbxNazwaSpolki.Text, cudirstart); //GPWdata.WyjmijZBazyGpwData(cbxNazwaSpolki.Text);
                }

                if (chbtrubUczenia.Checked)
                {
                    int odciecie = (TablicaNotowanZamkniecie.Length / 100) * Convert.ToInt32(txtOdciecieTrybUczenia.Text);
                    txtIloscPunktowNaWykresie.Text = Convert.ToString(TablicaNotowanZamkniecie.Length - odciecie);
                }
                else
                {
                    txtIloscPunktowNaWykresie.Text = Convert.ToString(TablicaNotowanZamkniecie.Length);

                }

                TablicaNotowandata = new double[TablicaNotowandatas.Length];
                if (rbUSA.Checked)
                {
                    for (int i = 0; i < TablicaNotowandatas.Length; i++)
                    {
                        DateTime pomocnicza = Convert.ToDateTime(TablicaNotowandatas[i]);
                        string rok = pomocnicza.Year.ToString();
                        string miesiac = pomocnicza.Month.ToString();
                        string dzien = pomocnicza.Day.ToString();
                        if (Convert.ToInt32(miesiac) < 10)
                        {
                            miesiac = "0" + miesiac;

                        }
                        string koniec = rok + miesiac + dzien;
                        TablicaNotowandatas[i] = koniec;
                        TablicaNotowandata[i] = Convert.ToDouble(TablicaNotowandatas[i]);
                    }
                }
                else
                {
                    for (int i = 0; i < TablicaNotowandatas.Length; i++)
                    {
                        TablicaNotowandata[i] = Convert.ToDouble(TablicaNotowandatas[i]);
                    }
                }

            }
            catch { txtInfo.Text = "Wystąpił błąd , uruchom ponownie aplikacje :("; }
            /*
                IFormatProvider culture = new CultureInfo("PL-pl",true);
                dtpStart.MinDate = DateTime.ParseExact(TablicaNotowandatas[0],"yyyyMMdd",culture);
                dtpStart.MaxDate = DateTime.ParseExact(TablicaNotowandatas[TablicaNotowandatas.Length - 1], "yyyyMMdd", culture);
                dtpStop.MinDate = DateTime.ParseExact(TablicaNotowandatas[0], "yyyyMMdd", culture);
                dtpStop.MaxDate = DateTime.ParseExact(TablicaNotowandatas[TablicaNotowandatas.Length - 1],"yyyyMMdd",culture);
                dtpStop.Value = DateTime.ParseExact(TablicaNotowandatas[TablicaNotowandatas.Length - 1], "yyyyMMdd", culture);
                dtpStart.Value = DateTime.ParseExact(TablicaNotowandatas[0],"yyyyMMdd", culture);
                dtpstp();
                dtpstr();*/
        }

        private void btnTworzWykres_Click(object sender, EventArgs e)
        {
            txtInfo.Text = "";
            wykres();
        }


        private void btnSMAdodajs_Click(object sender, EventArgs e)
        {
            txtInfo.Text = "";
            try
            {
                if (chbTrwaloscSygnalow.Checked == true)
                {


                    TabliceWejcie.Add(filtry.WaznoscSygnalu(Wskazniki.SygnalySMA2(TablicaNotowanZamkniecie, (Wskazniki.SMA(TablicaNotowanZamkniecie, Convert.ToInt32(txtParametrWskaznika.Text)))), Convert.ToInt32(txtxTrwaloscSygnalowParametr.Text)));
                    lbWybraneWejscia.Items.Add("SMAs" + txtParametrWskaznika.Text + "");


                }
                else
                {
                    TabliceWejcie.Add(Wskazniki.SygnalySMA2(TablicaNotowanZamkniecie, (Wskazniki.SMA(TablicaNotowanZamkniecie, Convert.ToInt32(txtParametrWskaznika.Text)))));
                    lbWybraneWejscia.Items.Add("SMAs" + txtParametrWskaznika.Text + "");

                }
            }
            catch
            {
                txtInfo.Text = "Format ilości dni dla którego liczony jest wkaźnik jest niepoprawny";
            }

        }

        private void btnROCdodajs_Click(object sender, EventArgs e)
        {
            txtInfo.Text = "";
            try{
            if (chbTrwaloscSygnalow.Checked == true)
            {



                TabliceWejcie.Add(filtry.WaznoscSygnalu(Wskazniki.SygnalyROC((Wskazniki.ROC(TablicaNotowanZamkniecie, Convert.ToInt32(txtParametrWskaznika.Text))), Convert.ToInt32(txtParametrWskaznika.Text)), Convert.ToInt32(txtxTrwaloscSygnalowParametr.Text)));
                    lbWybraneWejscia.Items.Add("ROCs" + txtParametrWskaznika.Text + "");

               
            }
            else
            {
                TabliceWejcie.Add(Wskazniki.SygnalyROC((Wskazniki.ROC(TablicaNotowanZamkniecie, Convert.ToInt32(txtParametrWskaznika.Text))), Convert.ToInt32(txtParametrWskaznika.Text)));
                lbWybraneWejscia.Items.Add("ROCs" + txtParametrWskaznika.Text + "");
            } }catch
            {
                txtInfo.Text = "Format ilości dni dla którego liczony jest wkaźnik jest niepoprawny";
            }
        }

        private void btnCCIdodajs_Click(object sender, EventArgs e)
        {
            txtInfo.Text = "";
            try{
            if (chbTrwaloscSygnalow.Checked == true)
            {



                TabliceWejcie.Add(filtry.WaznoscSygnalu(Wskazniki.SygnalyCCI(Wskazniki.CCI(TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin, Convert.ToInt32(txtParametrWskaznika.Text))), Convert.ToInt32(txtxTrwaloscSygnalowParametr.Text)));
                    lbWybraneWejscia.Items.Add("CCIs" + txtParametrWskaznika.Text + "");
                
            }
            else
            {
                TabliceWejcie.Add(Wskazniki.SygnalyCCI(Wskazniki.CCI(TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin, Convert.ToInt32(txtParametrWskaznika.Text))));
                lbWybraneWejscia.Items.Add("CCIs" + txtParametrWskaznika.Text + "");
            }} catch
            {
                txtInfo.Text = "Format ilości dni dla którego liczony jest wkaźnik jest niepoprawny";
            }

        }

        private void btnATRdodajs_Click(object sender, EventArgs e)
        {
            txtInfo.Text = "";
            try{
            if (chbTrwaloscSygnalow.Checked == true)
            {

               
                    TabliceWejcie.Add(filtry.WaznoscSygnalu(Wskazniki.SygnalyATR(Wskazniki.ATR(TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin, Convert.ToInt32(txtParametrWskaznika.Text)), TablicaNotowanZamkniecie),Convert.ToInt32(txtxTrwaloscSygnalowParametr.Text)));
                    lbWybraneWejscia.Items.Add("ATRs" + txtParametrWskaznika.Text + "");


                
            }
            else
            {
                TabliceWejcie.Add(Wskazniki.SygnalyATR(Wskazniki.ATR(TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin, Convert.ToInt32(txtParametrWskaznika.Text)), TablicaNotowanZamkniecie));
                lbWybraneWejscia.Items.Add("ATRs" + txtParametrWskaznika.Text + "");

            } }catch
            {
                txtInfo.Text = "Format ilości dni dla którego liczony jest wkaźnik jest niepoprawny";
            }

        }

        private void btnRSIdodajs_Click(object sender, EventArgs e)
        {
            txtInfo.Text = "";
            try{
            if (chbTrwaloscSygnalow.Checked == true)
            {



                TabliceWejcie.Add(filtry.WaznoscSygnalu(Wskazniki.SygnalyRSI((Wskazniki.RSI(TablicaNotowanZamkniecie, Convert.ToInt32(txtParametrWskaznika.Text)))), Convert.ToInt32(txtxTrwaloscSygnalowParametr.Text)));
                    lbWybraneWejscia.Items.Add("RSIs" + txtParametrWskaznika.Text + "");
                
            }
            else
            {
                TabliceWejcie.Add(Wskazniki.SygnalyRSI((Wskazniki.RSI(TablicaNotowanZamkniecie, Convert.ToInt32(txtParametrWskaznika.Text)))));
                lbWybraneWejscia.Items.Add("RSIs" + txtParametrWskaznika.Text + "");
            } }catch
            {
                txtInfo.Text = "Format ilości dni dla którego liczony jest wkaźnik jest niepoprawny";
            }
        }

        private void btnSOdodajs_Click(object sender, EventArgs e)
        {
            txtInfo.Text = "";
            try
            {
                if (chbTrwaloscSygnalow.Checked == true)
                {




                    TabliceWejcie.Add(filtry.WaznoscSygnalu(Wskazniki.SygnalySO((Wskazniki.SO(TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin, Convert.ToInt32(txtParametrWskaznika.Text)))), Convert.ToInt32(txtxTrwaloscSygnalowParametr.Text)));
                    lbWybraneWejscia.Items.Add("SOs" + txtParametrWskaznika.Text + "");

                }
                else
                {
                    TabliceWejcie.Add(Wskazniki.SygnalySO((Wskazniki.SO(TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin, Convert.ToInt32(txtParametrWskaznika.Text)))));
                    lbWybraneWejscia.Items.Add("SOs" + txtParametrWskaznika.Text + "");
                }
            }
            catch
            {
                txtInfo.Text = "Format ilości dni dla którego liczony jest wkaźnik jest niepoprawny";
            }
        }

        private void button1btnSMAdodajw_Click(object sender, EventArgs e)
        {
            txtInfo.Text = "";
            try{TabliceWejcie.Add(Wskazniki.SMA(TablicaNotowanZamkniecie, Convert.ToInt32(txtParametrWskaznika.Text)));
            lbWybraneWejscia.Items.Add("SMA" + txtParametrWskaznika.Text + "");
            }
            catch
            {
                txtInfo.Text = "Format ilości dni dla którego liczony jest wkaźnik jest niepoprawny";
            }
        }

        private void btnROCdodajw_Click(object sender, EventArgs e)
        {
            txtInfo.Text = "";
            try{TabliceWejcie.Add(Wskazniki.ROC(TablicaNotowanZamkniecie, Convert.ToInt32(txtParametrWskaznika.Text)));
            lbWybraneWejscia.Items.Add("ROC" + txtParametrWskaznika.Text + "");} catch
            {
                txtInfo.Text = "Format ilości dni dla którego liczony jest wkaźnik jest niepoprawny";
            }
        }

        private void btnCCIdodajw_Click(object sender, EventArgs e)
        {
            txtInfo.Text = "";
            try{TabliceWejcie.Add(Wskazniki.CCI(TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin, Convert.ToInt32(txtParametrWskaznika.Text)));
            lbWybraneWejscia.Items.Add("CCI" + txtParametrWskaznika.Text + "");} catch
            {
                txtInfo.Text = "Format ilości dni dla którego liczony jest wkaźnik jest niepoprawny";
            }
        }

        private void btnATRdodajw_Click(object sender, EventArgs e)
        {
            txtInfo.Text = "";
            try{TabliceWejcie.Add(Wskazniki.ATR(TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin, Convert.ToInt32(txtParametrWskaznika.Text)));
            lbWybraneWejscia.Items.Add("ATR" + txtParametrWskaznika.Text + "");} catch
            {
                txtInfo.Text = "Format ilości dni dla którego liczony jest wkaźnik jest niepoprawny";
            }

        }

        private void btnRSIdodajw_Click(object sender, EventArgs e)
        {
            txtInfo.Text = "";
            try{TabliceWejcie.Add(Wskazniki.RSI(TablicaNotowanZamkniecie, Convert.ToInt32(txtParametrWskaznika.Text)));
            lbWybraneWejscia.Items.Add("RSI" + txtParametrWskaznika.Text + "");} catch
            {
                txtInfo.Text = "Format ilości dni dla którego liczony jest wkaźnik jest niepoprawny";
            }

        }

        private void btnSOdodajw_Click(object sender, EventArgs e)
        {
            txtInfo.Text = "";
            try{TabliceWejcie.Add(Wskazniki.SO(TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin, Convert.ToInt32(txtParametrWskaznika.Text)));
            lbWybraneWejscia.Items.Add("SO" + txtParametrWskaznika.Text + "");} catch
            {
                txtInfo.Text = "Format ilości dni dla którego liczony jest wkaźnik jest niepoprawny";
            }
        }

        private void chbtrubUczenia_CheckedChanged(object sender, EventArgs e)
        {
            if (chbtrubUczenia.Checked)
            {
                int odciecie = (TablicaNotowanZamkniecie.Length / 100) * Convert.ToInt32(txtOdciecieTrybUczenia.Text);
                txtIloscPunktowNaWykresie.Text = Convert.ToString(TablicaNotowanZamkniecie.Length - odciecie);
            }
            else
            {
                txtIloscPunktowNaWykresie.Text = Convert.ToString(TablicaNotowanZamkniecie.Length);

            }
        }

        private void btnSSs_Click(object sender, EventArgs e)
        {
            txtInfo.Text = "";
            try{if (chbTrwaloscSygnalow.Checked == true)
            {


              
                    TabliceWejcie.Add(filtry.WaznoscSygnalu(Wskazniki.SygnalySwiece(TablicaNotowanOtwarcie, TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin),Convert.ToInt32(txtxTrwaloscSygnalowParametr.Text)));
                    lbWybraneWejscia.Items.Add("Świece");
                
            }
            else
            {
                TabliceWejcie.Add(Wskazniki.SygnalySwiece(TablicaNotowanOtwarcie, TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin));
                lbWybraneWejscia.Items.Add("Świece");
            }} catch
            {
                txtInfo.Text = "Format ilości dni dla którego liczony jest wkaźnik jest niepoprawny";
            }
        }

        private void btnt1w_Click(object sender, EventArgs e)
        {
            txtInfo.Text = ""; TabliceWejcie.Add(Wskazniki.ZmianaWart(TablicaNotowanZamkniecie, 1));
            lbWybraneWejscia.Items.Add("t-1");
        }

        private void btnt2w_Click(object sender, EventArgs e)
        {
            txtInfo.Text = ""; TabliceWejcie.Add(Wskazniki.ZmianaWart(TablicaNotowanZamkniecie, 2));
            lbWybraneWejscia.Items.Add("t-2");
        }

        private void btnt3w_Click(object sender, EventArgs e)
        {
            txtInfo.Text = ""; TabliceWejcie.Add(Wskazniki.ZmianaWart(TablicaNotowanZamkniecie, 3));
            lbWybraneWejscia.Items.Add("t-3");
        }

        private void btnOtww_Click(object sender, EventArgs e)
        {
            txtInfo.Text = ""; TabliceWejcie.Add(TablicaNotowanOtwarcie);
            lbWybraneWejscia.Items.Add("Otwarcie");
        }

        private void btnMaxw_Click(object sender, EventArgs e)
        {
            txtInfo.Text = ""; TabliceWejcie.Add(TablicaNotowanMax);
            lbWybraneWejscia.Items.Add("Max");
        }

        private void btnMinw_Click(object sender, EventArgs e)
        {
            txtInfo.Text = ""; TabliceWejcie.Add(TablicaNotowanMin);
            lbWybraneWejscia.Items.Add("Min");
        }

        private void btnZamknw_Click(object sender, EventArgs e)
        {
            txtInfo.Text = ""; TabliceWejcie.Add(TablicaNotowanZamkniecie);
            lbWybraneWejscia.Items.Add("Zamkniecie");
        }

        private void btnWolumw_Click(object sender, EventArgs e)
        {
            txtInfo.Text = ""; TabliceWejcie.Add(TablicaNotowanWolumen);
            lbWybraneWejscia.Items.Add("Wolumen");
        }

        private void btnN2w_Click(object sender, EventArgs e)
        {
            txtInfo.Text = ""; TabliceWejcie.Add(Wskazniki.N2(TablicaNotowanZamkniecie));
            lbWybraneWejscia.Items.Add("N2");
        }

        private void btnN4w_Click(object sender, EventArgs e)
        {
            txtInfo.Text = ""; TabliceWejcie.Add(Wskazniki.N4(TablicaNotowanZamkniecie));
            lbWybraneWejscia.Items.Add("N4");
        }

        private void btnN8w_Click(object sender, EventArgs e)
        {
            txtInfo.Text = ""; TabliceWejcie.Add(Wskazniki.N8(TablicaNotowanZamkniecie));
            lbWybraneWejscia.Items.Add("N8");
        }

        private void btnN16w_Click(object sender, EventArgs e)
        {
            txtInfo.Text = ""; TabliceWejcie.Add(Wskazniki.N16(TablicaNotowanZamkniecie));
            lbWybraneWejscia.Items.Add("N16");
        }

        private void btnN32w_Click(object sender, EventArgs e)
        {
            txtInfo.Text = ""; TabliceWejcie.Add(Wskazniki.N32(TablicaNotowanZamkniecie));
            lbWybraneWejscia.Items.Add("N32");
        }

        private void btnN64w_Click(object sender, EventArgs e)
        {
            txtInfo.Text = ""; TabliceWejcie.Add(Wskazniki.N64(TablicaNotowanZamkniecie));
            lbWybraneWejscia.Items.Add("N64");
        }

        private void btnOptymalizuj_Click(object sender, EventArgs e)
        {
            txtInfo.Text = ""; try
            {
            double[] zarobkiSma = optymalizatorSMA();
            double[] zarobkiROC = optymalizatorROC();
            double[] zarobkiATR = optymalizatorATR();
            double[] zarobkiRSI = optymalizatorRSI();
            double[] zarobkiSO =  optymalizatorSO();
            double[] zarobkiCCI = optymalizatorCCI();

            txtInfo.Text = "";
            double maxsma = 0;
            double optsma = 0;
            double maxroc = 0;
            double optroc = 0;
            double maxatr = 0;
            double optatr = 0;
            double maxrsi = 0;
            double optrsi = 0;
            double maxso = 0;
            double optso = 0;
            double maxcci = 0;
            double optcci = 0;
            
                for (int i = 2; i < zarobkiSma.Length; i++)
                {
                    if (zarobkiSma[i] > maxsma) { maxsma = Math.Round(zarobkiSma[i], 2); optsma = i; }
                    if (zarobkiROC[i] > maxroc) { maxroc = Math.Round(zarobkiROC[i], 2); optroc = i; }
                    if (zarobkiATR[i] > maxatr) { maxatr = Math.Round(zarobkiATR[i], 2); optatr = i; }
                    if (zarobkiRSI[i] > maxrsi) { maxrsi = Math.Round(zarobkiRSI[i], 2); optrsi = i; }
                    if (zarobkiSO[i] > maxso) { maxso = Math.Round(zarobkiSO[i], 2); optso = i; }
                    if (zarobkiCCI[i] > maxcci) { maxcci = Math.Round(zarobkiCCI[i], 2); optcci = i; }
                }
                double zyskisma = 0;
                double zyskiroc = 0;
                double zyskiatr = 0;
                double zyskirsi = 0;
                double zyskiso = 0;
                double zyskicci = 0;
                if (optsma != 0)
                {
                    double[] sygnalysma = Wskazniki.SygnalySMA2(TablicaNotowanZamkniecie, (Wskazniki.SMA(TablicaNotowanZamkniecie, Convert.ToInt32(optsma))));
                    zyskisma = optzyski(sygnalysma);
                }
                if (optroc != 0)
                {
                    double[] sygnalyroc = Wskazniki.SygnalyROC(Wskazniki.ROC(TablicaNotowanZamkniecie, Convert.ToInt32(optroc)), Convert.ToInt32(optroc));
                    zyskiroc = optzyski(sygnalyroc);
                }
                if (optatr != 0)
                {
                    double[] sygnalyatr = Wskazniki.SygnalyATR(Wskazniki.ATR(TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin, Convert.ToInt32(optatr)), TablicaNotowanZamkniecie);
                    zyskiatr = optzyski(sygnalyatr);
                }
                if (optrsi != 0)
                {
                    double[] sygnalyrsi = Wskazniki.SygnalyRSI(Wskazniki.RSI(TablicaNotowanZamkniecie, Convert.ToInt32(optrsi)));
                    zyskirsi = optzyski(sygnalyrsi);
                }
                if (optso != 0)
                {
                    double[] sygnalyso = Wskazniki.SygnalySO(Wskazniki.SO(TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin, Convert.ToInt32(optso)));
                    zyskiso = optzyski(sygnalyso);
                }
                if (optcci != 0)
                {
                    double[] sygnalycci = Wskazniki.SygnalyCCI(Wskazniki.CCI(TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin, Convert.ToInt32(optcci)));
                    zyskicci = optzyski(sygnalycci);
                }
                txtInfo.Text = maxsma.ToString() + " " + optsma.ToString() + " SMA " + Math.Round(zyskisma, 2).ToString() + "     ";
                txtInfo.Text += maxroc.ToString() + " " + optroc.ToString() + " ROC " + Math.Round(zyskiroc, 2).ToString() + "     ";
                txtInfo.Text += maxatr.ToString() + " " + optatr.ToString() + " ATR " + Math.Round(zyskiatr, 2).ToString() + "     ";
                txtInfo.Text += maxrsi.ToString() + " " + optrsi.ToString() + " RSI " + Math.Round(zyskirsi, 2).ToString() + "     ";
                txtInfo.Text += maxso.ToString() + " " + optso.ToString() + " SO " + Math.Round(zyskiso, 2).ToString() + "     ";
                txtInfo.Text += maxcci.ToString() + " " + optcci.ToString() + " CCI " + Math.Round(zyskicci, 2).ToString() + "     ";

            }
            catch
            {

                txtInfo.Text = "nieporpawna wartość (format) maksymalnej ilości dni dla optymalizacji";
            }

        }

        private void btnZapiszSygnaly_Click(object sender, EventArgs e)
        {
            txtInfo.Text = ""; sfdProfil.InitialDirectory = "schematy";
            sfdProfil.Filter = "" + cbxNazwaSpolki.SelectedItem + "|*." + cbxNazwaSpolki.SelectedItem + "";
            sfdProfil.Title = "Zapisz profil kup/sprzedaj";
            sfdProfil.ShowDialog();

            double[] Kup = KupnoKlik.ToArray();
            double[] Sprzedaj = SprzedazKlik.ToArray();

            try
            {
                if (sfdProfil.FileName != "")
                {
                    FileStream fsOutput = (FileStream)sfdProfil.OpenFile();
                    StreamWriter srOutput = new StreamWriter(fsOutput);


                    SystemPlikow.ZapiszProfil(Kup, Sprzedaj, srOutput, fsOutput);

                }
            }
            catch
            {
                txtInfo.Text = "Nie ma danych do zapisania";

            }
        }

        private void btnWczytajSygnaly_Click(object sender, EventArgs e)
        {
            txtInfo.Text = ""; opfWczytajProfil.InitialDirectory = "schematy";
            opfWczytajProfil.Filter = "" + cbxNazwaSpolki.SelectedItem + "|*." + cbxNazwaSpolki.SelectedItem + "";
            opfWczytajProfil.Title = "Zapisz profil kup/sprzedaj";
            opfWczytajProfil.ShowDialog();

            KupnoKlik.Clear();
            SprzedazKlik.Clear();
            try
            {
                if (opfWczytajProfil.FileName != "")
                {
                    FileStream fsOutput = (FileStream)opfWczytajProfil.OpenFile();
                    StreamReader srOutput = new StreamReader(fsOutput);
                    SprzedazKlik = SystemPlikow.WczytajProfilSprzedaj(srOutput, fsOutput);
                    fsOutput.Close();
                    srOutput.Close();



                }
                if (opfWczytajProfil.FileName != "")
                {
                    FileStream fsOutput2 = (FileStream)opfWczytajProfil.OpenFile();
                    StreamReader srOutput2 = new StreamReader(fsOutput2);
                    KupnoKlik = SystemPlikow.WczytajProfilKup(srOutput2, fsOutput2);
                    fsOutput2.Close();
                    srOutput2.Close();


                }
            }
            catch
            {
                txtInfo.Text = "Nie wybrales pliku/ plik jest uszkodzony lub pusty";
            }
        }

        private void btnZapiszUczacy_Click(object sender, EventArgs e)
        {
            txtInfo.Text = ""; double[] SygnalyKupSprzedaj = new double[TablicaNotowanZamkniecie.Length];

            if (rbProsteNN.Checked == true)
            {
                SygnalyKupSprzedaj = filtry.SygnalyKupSprzedajKlik(KupnoKlik, SprzedazKlik, TablicaNotowandata);
                if (chbautosygnaly.Checked)
                {

                    SygnalyKupSprzedaj = filtry.SygnalyKupSprzedajAuto(TablicaNotowanZamkniecie);
                    if (chbfiltr.Checked)
                    {

                        SygnalyKupSprzedaj = filtry.filtr(filtry.SygnalyKupSprzedajAuto(TablicaNotowanZamkniecie));
                    }

                }
            }
            
            if (rbSprzedajNN.Checked == true)
            {
                SygnalyKupSprzedaj = filtry.ZamienSprzedajNaDodatnie(filtry.WyrzucKup(filtry.SygnalyKupSprzedajKlik(KupnoKlik, SprzedazKlik, TablicaNotowandata)));
                if (chbautosygnaly.Checked)
                {

                    SygnalyKupSprzedaj = filtry.ZamienSprzedajNaDodatnie(filtry.WyrzucKup(filtry.SygnalyKupSprzedajAuto(TablicaNotowanZamkniecie)));
                    if (chbfiltr.Checked)
                    {

                        SygnalyKupSprzedaj = filtry.ZamienSprzedajNaDodatnie(filtry.WyrzucKup(filtry.filtr(filtry.SygnalyKupSprzedajAuto(TablicaNotowanZamkniecie))));
                    }

                }

            }
            if (rbKupNN.Checked == true)
            {
                SygnalyKupSprzedaj = filtry.WyrzucSprzedaj(filtry.SygnalyKupSprzedajKlik(KupnoKlik, SprzedazKlik, TablicaNotowandata));
                if (chbautosygnaly.Checked)
                {

                    SygnalyKupSprzedaj = filtry.WyrzucSprzedaj(filtry.SygnalyKupSprzedajAuto(TablicaNotowanZamkniecie));
                    if (chbfiltr.Checked)
                    {

                        SygnalyKupSprzedaj = filtry.WyrzucSprzedaj(filtry.filtr(filtry.SygnalyKupSprzedajAuto(TablicaNotowanZamkniecie)));
                    }

                }



            }



            int odciecie = (TablicaNotowanZamkniecie.Length / 100) * Convert.ToInt32(txtOdciecieTrybUczenia.Text);
            int minusodciecie = TablicaNotowanZamkniecie.Length - odciecie;
            int ProcentOgolu = Convert.ToInt32(txtZbiorUczacy.Text);
            double LiczbaZProcentu = (minusodciecie / 100) * ProcentOgolu;


            int ZbiorTestowy = Convert.ToInt32(minusodciecie) - Convert.ToInt32(LiczbaZProcentu);
            int ZbiorUczacy = Convert.ToInt32(minusodciecie) - ZbiorTestowy;

            sfdZapiszSygnaly.Filter = "csv|*.csv";
            sfdZapiszSygnaly.Title = "Zapisz Sygnaly";
            sfdZapiszSygnaly.ShowDialog();

            List<string> SygnalyWejsciaNazwy = new List<string>();
            for (int i = 0; i < lbWybraneWejscia.Items.Count; i++)
            {
                SygnalyWejsciaNazwy.Add(lbWybraneWejscia.Items[i].ToString());

            }

            string[] Naglowki = SygnalyWejsciaNazwy.ToArray();
            try
            {
                if (sfdZapiszSygnaly.FileName != "")
                {
                    FileStream fsOutput = (FileStream)sfdZapiszSygnaly.OpenFile();
                    StreamWriter srOutput = new StreamWriter(fsOutput);
                    double[][] Tablice = SystemPlikow.SygnalyWejscie(TabliceWejcie);
                    SystemPlikow.wspolczynnkikiCSV(Tablice, srOutput, fsOutput, Naglowki, ZbiorUczacy, SygnalyKupSprzedaj, TablicaNotowandata, TablicaNotowanZamkniecie);
                }
            }
            catch
            {
                txtInfo.Text = "Nie ma danych do zapisania";

            }
        }

        private void btnZapiszTestowy_Click(object sender, EventArgs e)
        {
            txtInfo.Text = "";
            int odciecie = (TablicaNotowanZamkniecie.Length / 100) * Convert.ToInt32(txtOdciecieTrybUczenia.Text);
            int minusodciecie = TablicaNotowanZamkniecie.Length - odciecie;
            int ProcentOgolu = Convert.ToInt32(txtZbiorUczacy.Text);
            double LiczbaZProcentu = (minusodciecie / 100) * ProcentOgolu;


            int ZbiorTestowy = Convert.ToInt32(minusodciecie) - Convert.ToInt32(LiczbaZProcentu);
            int ZbiorUczacy = Convert.ToInt32(minusodciecie) - ZbiorTestowy;

            sfdWyniki.Filter = "csv|*.csv";
            sfdWyniki.Title = "Zapisz Wyniki";
            sfdWyniki.ShowDialog();



            List<string> SygnalyWejsciaNazwy = new List<string>();
            for (int i = 0; i < lbWybraneWejscia.Items.Count; i++)
            {
                SygnalyWejsciaNazwy.Add(lbWybraneWejscia.Items[i].ToString());

            }

            string[] Naglowki = SygnalyWejsciaNazwy.ToArray();
            try{
            if (sfdWyniki.FileName != "")
            {
                FileStream fsOutput1 = (FileStream)sfdWyniki.OpenFile();
                StreamWriter srOutput1 = new StreamWriter(fsOutput1);
                double[][] Tablice = SystemPlikow.SygnalyWejscie(TabliceWejcie);
                SystemPlikow.wspolczynnkikiCSVIWyniki(Tablice, srOutput1, fsOutput1, Naglowki, minusodciecie - ZbiorTestowy, minusodciecie, predykcja, TablicaNotowandata, TablicaNotowanZamkniecie);
            }
             
            }
            catch
            {
                txtInfo.Text = "Nie ma danych do zapisania";

            }






        }

        private void btnZapiszWyniki_Click(object sender, EventArgs e)
        {
            txtInfo.Text = ""; int odciecie = (TablicaNotowanZamkniecie.Length / 100) * Convert.ToInt32(txtOdciecieTrybUczenia.Text);
            int minusodciecie = TablicaNotowanZamkniecie.Length - odciecie;
            int ProcentOgolu = Convert.ToInt32(txtZbiorUczacy.Text);
            double LiczbaZProcentu = (minusodciecie / 100) * ProcentOgolu;


            int ZbiorTestowy = Convert.ToInt32(minusodciecie) - Convert.ToInt32(LiczbaZProcentu);
            int ZbiorUczacy = Convert.ToInt32(minusodciecie) - ZbiorTestowy;

            sfdWynikiCaly.Filter = "csv|*.csv";
            sfdWynikiCaly.Title = "Zapisz Wyniki";
            sfdWynikiCaly.ShowDialog();



            List<string> SygnalyWejsciaNazwy = new List<string>();
            for (int i = 0; i < lbWybraneWejscia.Items.Count; i++)
            {
                SygnalyWejsciaNazwy.Add(lbWybraneWejscia.Items[i].ToString());

            }

            string[] Naglowki = SygnalyWejsciaNazwy.ToArray();



            try{
            if (sfdWynikiCaly.FileName != "")
            {
                FileStream fsOutput2 = (FileStream)sfdWynikiCaly.OpenFile();
                StreamWriter srOutput2 = new StreamWriter(fsOutput2);
                double[][] Tablice = SystemPlikow.SygnalyWejscie(TabliceWejcie);
                SystemPlikow.wspolczynnkikiCSVIWyniki(Tablice, srOutput2, fsOutput2, Naglowki, minusodciecie, TablicaNotowanZamkniecie.Length, predykcja, TablicaNotowandata, TablicaNotowanZamkniecie);
            }

             
            }
            catch
            {
                txtInfo.Text = "Nie ma danych do zapisania";

            }










        }

        private void cbxIleWarstw_SelectedIndexChanged(object sender, EventArgs e)
        {
            if(cbxIleWarstw.Text == "1 warstwa ukryta")
            {
                txtLiczbaNeuronow2.Visible = false;

            }

            if (cbxIleWarstw.Text == "2 warstwy ukryte")
            {
                txtLiczbaNeuronow2.Visible = true;

            }
            
        }

        private void btnUcz_Click(object sender, EventArgs e)
        {
             txtInfo.Text = "";txtInfo.Text = "";
            if (TabliceWejcie.Count == 0)
            {
                txtInfo.Text = "Najperw wybierz Wejścia ";
            }
            else
            {
                try
                {

                    
                    int ilewejscdosieci = lbWybraneWejscia.Items.Count;
                    siec.DaneWejscioweUstaw(TabliceWejcie);
                    double[][] ListaTablic = SystemPlikow.SygnalyWejscie(TabliceWejcie);
                    double[] SygnalyKupSprzedaj = new double[ListaTablic.Length];
                    if (Convert.ToInt32(txtLiczbaNeuronow2.Text) == 0 || Convert.ToInt32(txtLiczbaNeuronow1.Text) == 0)
                    {
                       
                            txtInfo.Text = "niepoprawna ilośc neuronów w warstwie 1 lub 2";
                            goto Wyjdz;
                        
                    }
                    if (cbxIleWarstw.Text == "1 warstwa ukryta")
                    {
                        siec.Tworzsiec(ilewejscdosieci, Convert.ToInt32(txtLiczbaNeuronow1.Text), 1);

                    }

                    if (cbxIleWarstw.Text == "2 warstwy ukryte")
                    {
                       
                            siec.Tworzsiec(ilewejscdosieci, Convert.ToInt32(txtLiczbaNeuronow1.Text), Convert.ToInt32(txtLiczbaNeuronow2.Text), 1);
                        
                    }



                    int ProcentOgolu = Convert.ToInt32(txtZbiorUczacy.Text);
                    double LiczbaZProcentu = (Convert.ToInt32(txtIloscPunktowNaWykresie.Text) / 100) * ProcentOgolu;
                    int ZbiorTestowy = Convert.ToInt32(txtIloscPunktowNaWykresie.Text) - Convert.ToInt32(LiczbaZProcentu);
                    int ZbiorUczacy = Convert.ToInt32(txtIloscPunktowNaWykresie.Text) - ZbiorTestowy;

                    if (rbSprzedajNN.Checked == true)
                    {
                        SygnalyKupSprzedaj = filtry.ZamienSprzedajNaDodatnie(filtry.WyrzucKup(filtry.SygnalyKupSprzedajKlik(KupnoKlik, SprzedazKlik, TablicaNotowandata)));
                        if (chbautosygnaly.Checked)
                        {

                            SygnalyKupSprzedaj = filtry.ZamienSprzedajNaDodatnie(filtry.WyrzucKup(filtry.SygnalyKupSprzedajAuto(TablicaNotowanZamkniecie)));
                            if (chbfiltr.Checked)
                            {

                                SygnalyKupSprzedaj = filtry.ZamienSprzedajNaDodatnie(filtry.WyrzucKup(filtry.filtr(filtry.SygnalyKupSprzedajAuto(TablicaNotowanZamkniecie))));
                            }

                        }

                    }
                    if (rbKupNN.Checked == true)
                    {
                        SygnalyKupSprzedaj = filtry.WyrzucSprzedaj(filtry.SygnalyKupSprzedajKlik(KupnoKlik, SprzedazKlik, TablicaNotowandata));
                        if (chbautosygnaly.Checked)
                        {

                            SygnalyKupSprzedaj = filtry.WyrzucSprzedaj(filtry.SygnalyKupSprzedajAuto(TablicaNotowanZamkniecie));
                            if (chbfiltr.Checked)
                            {

                                SygnalyKupSprzedaj = filtry.WyrzucSprzedaj(filtry.filtr(filtry.SygnalyKupSprzedajAuto(TablicaNotowanZamkniecie)));
                            }

                        }


                    }
                    if (rbProsteNN.Checked == true)
                    {
                        SygnalyKupSprzedaj = filtry.SygnalyKupSprzedajKlik(KupnoKlik, SprzedazKlik, TablicaNotowandata);
                        if (chbautosygnaly.Checked)
                        {

                            SygnalyKupSprzedaj = filtry.SygnalyKupSprzedajAuto(TablicaNotowanZamkniecie);
                            if (chbfiltr.Checked)
                            {

                                SygnalyKupSprzedaj = filtry.filtr(filtry.SygnalyKupSprzedajAuto(TablicaNotowanZamkniecie));
                            }

                        }
                    }
                    siec.DaneWyjscioweUstaw(SygnalyKupSprzedaj);
                    errorList = new double[Convert.ToInt32(txtIloscCykliUczenia.Text)];
                    errorListtest = new double[Convert.ToInt32(txtIloscCykliUczenia.Text)];
                    indices = new double[Convert.ToInt32(txtIloscCykliUczenia.Text)];
                    double wspuczenia = Convert.ToDouble(txtWspolczynnikUczenia.Text);
                    bool momentum;
                    if (chbMomentum.Checked == true)
                    {
                        momentum = true;
                    }
                    else
                    {
                        momentum = false;
                    }
                    if (rbonline.Checked == true)
                    {
                        for (int i = 0; i < Convert.ToInt32(txtIloscCykliUczenia.Text); i++)
                        {
                            double blad = 0;
                            for (int j = 0; j < ZbiorUczacy; j++)
                            {
                                siec.PropagacjaOnline(j);
                                siec.WstecznaPropagacjaOnline();
                                siec.PoprawOnline(Convert.ToDouble(wspuczenia), momentum);
                                blad += Math.Pow(siec.Neuron[siec.Ilewarstw - 1][0].Blad, 2);
                                siec.ZerujBledy();

                            }
                            double bladtest = 0;
                            int trafienia = 0;
                            int bledy = 0;
                            for (int t = ZbiorUczacy; t < Convert.ToInt32(txtIloscPunktowNaWykresie.Text) - 2; t++)
                            {
                                siec.PropagacjaOnline(t);
                                if (siec.Neuron[siec.Ilewarstw - 1][0].Wyjscie > 0.9 && SygnalyKupSprzedaj[t] == 1 || siec.Neuron[siec.Ilewarstw - 1][0].Wyjscie > 0.9 && SygnalyKupSprzedaj[t - 1] == 1 || siec.Neuron[siec.Ilewarstw - 1][0].Wyjscie > 0.9 && SygnalyKupSprzedaj[t + 1] == 1 || siec.Neuron[siec.Ilewarstw - 1][0].Wyjscie > 0.9 && SygnalyKupSprzedaj[t - 2] == 1 || siec.Neuron[siec.Ilewarstw - 1][0].Wyjscie > 0.9 && SygnalyKupSprzedaj[t + 2] == 0.9)
                                {
                                    trafienia++;

                                }
                                else
                                {
                                    bledy++;
                                }
                                bladtest += Math.Pow(siec.Neuron[siec.Ilewarstw - 1][0].Blad, 2);
                                siec.ZerujBledy();
                            }
                            errorListtest[i] = trafienia; //bladtest / (Convert.ToInt32(txtIloscPunktowNaWykresie.Text) - ZbiorUczacy);
                            errorList[i] = blad / ZbiorUczacy;
                            indices[i] = i;
                            int target = 0;
                            for (int t = ZbiorUczacy; t < Convert.ToInt32(txtIloscPunktowNaWykresie.Text); t++)
                            {
                                if (SygnalyKupSprzedaj[t] == 1)
                                {
                                    target++;
                                }


                            }



                            if (i > 0)
                            {
                                if (trafienia > target - 3)
                                {

                                    if (errorListtest[i] < errorListtest[i - 1])
                                    {
                                        siec.PrzywrocWagi();
                                        
                                        break;

                                    }
                                }
                            }

                        }





                    }




                    txtWspolczynnikUczenia.Text = wspuczenia.ToString();
                    lblIleTestowych.Text = ZbiorTestowy.ToString();
                    lblIleUczacych.Text = ZbiorUczacy.ToString();
                    //wysylanie danych do wykresu na drugim formie
                    acw_nn nnform = new acw_nn();
                    nnform.indices = indices;
                    nnform.errorList = errorList;
                    nnform.errorListtest = errorListtest;
                    nnform.InitGraphErr();
                    nnform.Visible = true;
                    lblIloscNeuronow.Text = errorListtest[Convert.ToInt32(txtIloscCykliUczenia.Text) - 1].ToString();
                }

                catch
                {
                    txtInfo.Text = "Sprawdź  czy ustawiłeś poprawnie parametry sieci(format liczbowy) oraz wielkości zbiorów";
                }
            Wyjdz: ;
            }
        }

        private void btnTestuj_Click(object sender, EventArgs e)
        {
            txtInfo.Text = "";
            if (siec.Ilewarstw == 0)
            {
                txtInfo.Text = " Najpierw musisz nauczyć sieć lub  ją wczytać ";

            }
            else
            {
                
                double[][] ListaTablic = SystemPlikow.SygnalyWejscie(TabliceWejcie);// SystemPlikow.TabliceSygnalyWejscie(chblzmianat1.Checked, chbzmianat2.Checked, chbzmianat3.Checked, chbSygnalySwiece.Checked, chbSMA1.Checked, chbSMA2.Checked, chbSMA3.Checked, chbROC1.Checked, chbROC2.Checked, chbROC3.Checked, chbCCI1.Checked, chbCCI2.Checked, chbCCI3.Checked, chbATR1.Checked, chbATR2.Checked, chbATR3.Checked, chbRSI1.Checked, chbRSI2.Checked, chbRSI3.Checked, chbSO1.Checked, chbSO2.Checked, chbSO3.Checked, chbN2.Checked, chbN4.Checked, chbN8.Checked, chbN16.Checked, chbN32.Checked, chbN64.Checked, "Zamkniecie", cbxNazwaSpolki.Text, txtSMA1.Text, txtSMA2.Text, txtSMA3.Text, txtROC1.Text, txtROC2.Text, txtROC3.Text, txtCCI1.Text, txtCCI2.Text, txtCCI3.Text, txtATR1.Text, txtATR2.Text, txtATR3.Text, txtRSI1.Text, txtRSI2.Text, txtRSI3.Text, txtSO1.Text, txtSO2.Text, txtSO3.Text, TablicaNotowanOtwarcie, TablicaNotowanMin, TablicaNotowanMax, TablicaNotowanZamkniecie, TablicaNotowanWolumen, TablicaNotowandata);

                int ProcentOgolu = Convert.ToInt32(txtZbiorUczacy.Text);
                // double LiczbaZProcentu = (ListaTablic[0].Length / 100) * ProcentOgolu;
                double LiczbaZProcentu = (Convert.ToInt32(txtIloscPunktowNaWykresie.Text) / 100) * ProcentOgolu;
                int ZbiorTestowy = Convert.ToInt32(txtIloscPunktowNaWykresie.Text) - Convert.ToInt32(LiczbaZProcentu);
                int ZbiorUczacy = Convert.ToInt32(txtIloscPunktowNaWykresie.Text) - ZbiorTestowy;
                // int Dlugosc = ListaTablic[0].Length;
                int IloscPunktowNaWykresie = Convert.ToInt32(txtIloscPunktowNaWykresie.Text);
                double[] liczniktbl = new double[TablicaNotowanZamkniecie.Length];
                // int Start = Dlugosc - IloscPunktowNaWykresie;
                double[] wynikipredykcja = new double[TablicaNotowanZamkniecie.Length];


                for (int j = 0; j < TablicaNotowanZamkniecie.Length; j++)
                {
                    
                    if (rbonline.Checked == true)
                    {
                        siec.PropagacjaOnline(j);
                        wynikipredykcja[j] = siec.Neuron[siec.Ilewarstw - 1][0].Wyjscie;
                    }

                }


                PointPairList Zamkniecie = new PointPairList();
                PointPairList Predykcja = new PointPairList();
                PointPairList Podział = new PointPairList();
                for (int i = 0; i < IloscPunktowNaWykresie; i++)
                {


                    double x = TablicaNotowandata[i];
                    double y1 = TablicaNotowanZamkniecie[i];
                    double y2 = wynikipredykcja[i] * 30;
                    if (i == ZbiorUczacy)
                    {
                        Podział.Add(x, 50);
                    }
                    else
                    {
                        Podział.Add(x, 0);
                    }

                    Zamkniecie.Add(x, y1);
                    Predykcja.Add(x, y2);
                }
                LineItem ZamkniecieLinia = new LineItem("Cena na zamknięciu", Zamkniecie, Color.Blue, SymbolType.None);
                BarItem PredykcjaLinia = new BarItem("Predykcja sygnału", Predykcja, Color.Blue);
                BarItem PodzialLinia = new BarItem("Uczacy/Testowy", Podział, Color.Red);
                
                ZGCwykres.GraphPane.CurveList.Clear();
                ZGCwykres.GraphPane.CurveList.Add(ZamkniecieLinia);
                ZGCwykres.GraphPane.CurveList.Add(PredykcjaLinia);
                ZGCwykres.GraphPane.CurveList.Add(PodzialLinia);
                ZGCwykres.Refresh();
                ZGCwykres.Invalidate();
                ZGCwykres.AxisChange();
              
                predykcja = wynikipredykcja;
            }
        }

        private void btnDoucz_Click(object sender, EventArgs e)
        {
            txtInfo.Text = "";
            if (TabliceWejcie.Count == 0)
            {
                txtInfo.Text = "Najperw musisz nauczyć sieć by ją douczać ";
            }
            else
            {
                

                double[][] ListaTablic = SystemPlikow.SygnalyWejscie(TabliceWejcie);
                double[] SygnalyKupSprzedaj = new double[ListaTablic.Length];
                if (rbSprzedajNN.Checked == true)
                {
                    SygnalyKupSprzedaj = filtry.ZamienSprzedajNaDodatnie(filtry.WyrzucKup(filtry.SygnalyKupSprzedajKlik(KupnoKlik, SprzedazKlik, TablicaNotowandata)));
                    if (chbautosygnaly.Checked)
                    {

                        SygnalyKupSprzedaj = filtry.ZamienSprzedajNaDodatnie(filtry.WyrzucKup(filtry.SygnalyKupSprzedajAuto(TablicaNotowanZamkniecie)));
                        if (chbfiltr.Checked)
                        {

                            SygnalyKupSprzedaj = filtry.ZamienSprzedajNaDodatnie(filtry.WyrzucKup(filtry.filtr(filtry.SygnalyKupSprzedajAuto(TablicaNotowanZamkniecie))));
                        }

                    }

                }
                if (rbKupNN.Checked == true)
                {
                    SygnalyKupSprzedaj = filtry.WyrzucSprzedaj(filtry.SygnalyKupSprzedajKlik(KupnoKlik, SprzedazKlik, TablicaNotowandata));
                    if (chbautosygnaly.Checked)
                    {

                        SygnalyKupSprzedaj = filtry.WyrzucSprzedaj(filtry.SygnalyKupSprzedajAuto(TablicaNotowanZamkniecie));
                        if (chbfiltr.Checked)
                        {

                            SygnalyKupSprzedaj = filtry.WyrzucSprzedaj(filtry.filtr(filtry.SygnalyKupSprzedajAuto(TablicaNotowanZamkniecie)));
                        }

                    }


                }
                if (rbProsteNN.Checked == true)
                {
                    SygnalyKupSprzedaj = filtry.SygnalyKupSprzedajKlik(KupnoKlik, SprzedazKlik, TablicaNotowandata);
                    if (chbautosygnaly.Checked)
                    {

                        SygnalyKupSprzedaj = filtry.SygnalyKupSprzedajAuto(TablicaNotowanZamkniecie);
                        if (chbfiltr.Checked)
                        {

                            SygnalyKupSprzedaj = filtry.filtr(filtry.SygnalyKupSprzedajAuto(TablicaNotowanZamkniecie));
                        }

                    }
                }
                
                //  siec.DaneWyjscioweUstaw(SygnalyKupSprzedaj);

                int ProcentOgolu = Convert.ToInt32(txtZbiorUczacy.Text);
                double LiczbaZProcentu = (Convert.ToInt32(txtIloscPunktowNaWykresie.Text) / 100) * ProcentOgolu;
                int ZbiorTestowy = Convert.ToInt32(txtIloscPunktowNaWykresie.Text) - Convert.ToInt32(LiczbaZProcentu);
                int ZbiorUczacy = Convert.ToInt32(txtIloscPunktowNaWykresie.Text) - ZbiorTestowy;




                errorList = new double[Convert.ToInt32(txtIloscCykliUczenia.Text)];
                indices = new double[Convert.ToInt32(txtIloscCykliUczenia.Text)];
                errorListtest = new double[Convert.ToInt32(txtIloscCykliUczenia.Text)];
                double wspuczenia = Convert.ToDouble(txtWspolczynnikUczenia.Text);
                bool momentum;
                if (chbMomentum.Checked == true)
                {
                    momentum = true;
                }
                else
                {
                    momentum = false;
                }
                if (rbonline.Checked == true)
                {
                    for (int i = 0; i < Convert.ToInt32(txtIloscCykliUczenia.Text); i++)
                    {
                        double blad = 0;
                        for (int j = 0; j < ZbiorUczacy; j++)
                        {
                            siec.PropagacjaOnline(j);
                            siec.WstecznaPropagacjaOnline();
                            siec.PoprawOnline(Convert.ToDouble(wspuczenia), momentum);
                            blad += Math.Pow(siec.Neuron[siec.Ilewarstw - 1][0].Blad, 2);
                            siec.ZerujBledy();

                        }
                        double bladtest = 0;
                        int trafienia = 0;
                        int bledy = 0;
                        for (int t = ZbiorUczacy; t < Convert.ToInt32(txtIloscPunktowNaWykresie.Text) - 2; t++)
                        {
                            siec.PropagacjaOnline(t);
                            if (siec.Neuron[siec.Ilewarstw - 1][0].Wyjscie > 0.9 && SygnalyKupSprzedaj[t] == 1 || siec.Neuron[siec.Ilewarstw - 1][0].Wyjscie > 0.9 && SygnalyKupSprzedaj[t - 1] == 1 || siec.Neuron[siec.Ilewarstw - 1][0].Wyjscie > 0.9 && SygnalyKupSprzedaj[t + 1] == 1 || siec.Neuron[siec.Ilewarstw - 1][0].Wyjscie > 0.9 && SygnalyKupSprzedaj[t - 2] == 1 || siec.Neuron[siec.Ilewarstw - 1][0].Wyjscie > 0.9 && SygnalyKupSprzedaj[t + 2] == 0.9)
                            {
                                trafienia++;

                            }
                            else
                            {
                                bledy++;
                            }
                            bladtest += Math.Pow(siec.Neuron[siec.Ilewarstw - 1][0].Blad, 2);
                            siec.ZerujBledy();
                        }
                        errorListtest[i] = trafienia; //bladtest / (Convert.ToInt32(txtIloscPunktowNaWykresie.Text) - ZbiorUczacy);
                        errorList[i] = blad / ZbiorUczacy;
                        indices[i] = i;
                        int target = 0;
                        for (int t = ZbiorUczacy; t < Convert.ToInt32(txtIloscPunktowNaWykresie.Text); t++)
                        {
                            if (SygnalyKupSprzedaj[t] == 1)
                            {
                                target++;
                            }


                        }



                        if (i > 0)
                        {
                            if (trafienia > target - 3)
                            {

                                if (errorListtest[i] < errorListtest[i - 1])
                                {
                                    siec.PrzywrocWagi();
                                    //wspuczenia = wspuczenia * 0.7;
                                    break;

                                }
                            }
                        }

                    }

                }

                if (rboffline.Checked == true)
                {



                }
                txtWspolczynnikUczenia.Text = wspuczenia.ToString();
                lblIleTestowych.Text = ZbiorTestowy.ToString();
                lblIleUczacych.Text = ZbiorUczacy.ToString();
                //wysylanie danych do wykresu na drugim formie
                acw_nn nnform = new acw_nn();
                nnform.indices = indices;
                nnform.errorList = errorList;
                nnform.errorListtest = errorListtest;
                nnform.InitGraphErr();
                nnform.Visible = true;
                lblIloscNeuronow.Text = errorListtest[Convert.ToInt32(txtIloscCykliUczenia.Text) - 1].ToString();
                
            }
        }

        private void btnCalyZbior_Click(object sender, EventArgs e)
        {
            txtInfo.Text = "";
            if (siec.Ilewarstw == 0)
            {
                txtInfo.Text = " Najpierw musisz nauczyć sieć lub  ją wczytać ";

            }
            else
            {

                double[][] ListaTablic = SystemPlikow.SygnalyWejscie(TabliceWejcie);
                int odciecie = (TablicaNotowanZamkniecie.Length / 100) * Convert.ToInt32(txtOdciecieTrybUczenia.Text);
                int minusodciecie = TablicaNotowanZamkniecie.Length - odciecie;
                int ProcentOgolu = Convert.ToInt32(txtZbiorUczacy.Text);
                double LiczbaZProcentu = (minusodciecie / 100) * ProcentOgolu;
                int ZbiorTestowy = Convert.ToInt32(minusodciecie) - Convert.ToInt32(LiczbaZProcentu);
                int ZbiorUczacy = Convert.ToInt32(minusodciecie) - ZbiorTestowy;
                double[] liczniktbl = new double[TablicaNotowanZamkniecie.Length];
                double[] wynikipredykcja = new double[TablicaNotowanZamkniecie.Length];
                for (int j = 0; j < TablicaNotowanZamkniecie.Length; j++)
                {
                    if (rboffline.Checked == true)
                    {
                      
                    }
                    if (rbonline.Checked == true)
                    {
                        siec.PropagacjaOnline(j);
                        wynikipredykcja[j] = siec.Neuron[siec.Ilewarstw - 1][0].Wyjscie;
                    }
                }

                PointPairList Zamkniecie = new PointPairList();
                PointPairList Predykcja = new PointPairList();
                PointPairList Podział = new PointPairList();
                for (int i = 0; i < TablicaNotowanZamkniecie.Length; i++)
                {
                    double x = TablicaNotowandata[i];
                    double y1 = TablicaNotowanZamkniecie[i];
                    double y2 = wynikipredykcja[i] * 30;
                    if (i == ZbiorUczacy || i == Convert.ToInt32(txtIloscPunktowNaWykresie.Text))
                    {
                        Podział.Add(x, 100);

                    }
                    else
                    {
                        Podział.Add(x, 0);

                    }



                    Zamkniecie.Add(x, y1);
                    Predykcja.Add(x, y2);
                }
                LineItem ZamkniecieLinia = new LineItem("Cena na zamknięciu", Zamkniecie, Color.Blue, SymbolType.None);
                BarItem PredykcjaLinia = new BarItem("Predykcja sygnału", Predykcja, Color.Blue);
                BarItem PodzialLinia = new BarItem("Uczacy/Testowy", Podział, Color.Red);
                ZGCwykres.GraphPane.CurveList.Clear();
                ZGCwykres.GraphPane.CurveList.Add(ZamkniecieLinia);
                ZGCwykres.GraphPane.CurveList.Add(PredykcjaLinia);
                ZGCwykres.GraphPane.CurveList.Add(PodzialLinia);
                ZGCwykres.Refresh();
                ZGCwykres.Invalidate();
                ZGCwykres.AxisChange();
                predykcja = wynikipredykcja;
            }


        }

        private void btnZapiszSiec_Click(object sender, EventArgs e)
        {
            txtInfo.Text = "";
            if (siec.Ilewarstw == 0)
            {
                txtInfo.Text = " Najpierw musisz nauczyć sieć by ją zapisać ";

            }
            else
            {
                int LbWarstw = siec.Ilewarstw;
                int ileNeuronow0 = siec.Neuron[0].Length;
                int ileNeuronow1 = siec.Neuron[1].Length;
                int ileNeuronow2 = siec.Neuron[2].Length;
                int ileNeuronow3 =0;
                 if (cbxIleWarstw.Text == "2 warstwy ukryte")
                {
                    ileNeuronow3 = siec.Neuron[3].Length;

                }
                
                ;
                List<string> SygnalyWejsciaNazwy = new List<string>();
                for (int i = 0; i < lbWybraneWejscia.Items.Count; i++)
                {
                    SygnalyWejsciaNazwy.Add(lbWybraneWejscia.Items[i].ToString());

                }

                string[] WejsciaNazwy = SygnalyWejsciaNazwy.ToArray();

                List<double[]> Wagi1 = new List<double[]>();
                List<double[]> Wagi2 = new List<double[]>();
                List<double[]> Wagi3 = new List<double[]>();


                for (int l = 1; l < LbWarstw; l++)
                {
                    for (int n = 0; n < siec.Neuron[l].Length; n++)
                    {
                        double[] wagi = new double[siec.Neuron[l][n].Waga.Length];
                        for (int w = 0; w < siec.Neuron[l][n].Waga.Length; w++)
                        {
                            wagi[w] = siec.Neuron[l][n].Waga[w];

                        }
                        if (l == 1)
                        {
                            Wagi1.Add(wagi);
                        }
                        if (l == 2)
                        {
                            Wagi2.Add(wagi);
                        }
                        if (l == 3)
                        {
                            Wagi3.Add(wagi);
                        }

                    }
                    double[] biasy = new double[siec.Neuron[l].Length];
                    for (int n = 0; n < siec.Neuron[l].Length; n++)
                    {
                        biasy[n] = siec.Neuron[l][n].Bias;
                    }
                    if (l == 1)
                    {
                        Wagi1.Add(biasy);
                    }
                    if (l == 2)
                    {
                        Wagi2.Add(biasy);
                    }
                    if (l == 3)
                    {
                        Wagi3.Add(biasy);
                    }
                }



                sfdZapiszSiec.Filter = "csv|*.csv";
                sfdZapiszSiec.Title = "Zapisz siec";
                sfdZapiszSiec.ShowDialog();




                if (sfdZapiszSiec.FileName != "")
                {
                    FileStream fsOutput3 = (FileStream)sfdZapiszSiec.OpenFile();
                    StreamWriter srOutput3 = new StreamWriter(fsOutput3);
                    SystemPlikow.ZapiszSiecCSV(LbWarstw, ileNeuronow0, ileNeuronow1, ileNeuronow2, ileNeuronow3, srOutput3, fsOutput3, WejsciaNazwy, Wagi1, Wagi2, Wagi3);
                }

            }
        }

        private void btnWczytajSiec_Click(object sender, EventArgs e)
        {
            txtInfo.Text = "";
            opfWczytajSiec.InitialDirectory = "schematy";
            // opfWczytajSiec.Filter = "" + cbxNazwaSpolki.SelectedItem + "|*." + cbxNazwaSpolki.SelectedItem + "";
            opfWczytajSiec.Title = "Wczytaj siec";
            opfWczytajSiec.FileName = "";
            opfWczytajSiec.ShowDialog();
            List<double[]> W1 = new List<double[]>();
            List<double[]> W2 = new List<double[]>();
            List<double[]> W3 = new List<double[]>();

            try
            {
                if (opfWczytajSiec.FileName != "")
                {
                    FileStream fsInput = (FileStream)opfWczytajSiec.OpenFile();
                    StreamReader srInput = new StreamReader(fsInput);
                    int[] parametry = SystemPlikow.WczytajSiecParametry(srInput, fsInput).ToArray();
                    siec.Tworzsiec(parametry[1], parametry[2], parametry[3], parametry[4]);
                    siec.Ilewarstw = parametry[0];
                    fsInput.Close();
                    srInput.Close();
                    txtLiczbaNeuronow1.Text = parametry[2].ToString();
                    txtLiczbaNeuronow2.Text = parametry[3].ToString();
                }
                else { }

                if (opfWczytajSiec.FileName != "")
                {
                    FileStream fsInput = (FileStream)opfWczytajSiec.OpenFile();
                    StreamReader srInput = new StreamReader(fsInput);
                    string[] NazwyWejsc = SystemPlikow.WczytajSiecNazwyWejsc(srInput, fsInput).ToArray();
                    fsInput.Close();
                    srInput.Close();
                    siec.DaneWejscioweUstaw(TabliceWejcie);
                }
                else { }

                if (opfWczytajSiec.FileName != "")
                {
                    FileStream fsInput2 = (FileStream)opfWczytajSiec.OpenFile();
                    StreamReader srInput2 = new StreamReader(fsInput2);
                    int ilew1 = siec.Neuron[1].Length;
                    int ilew2 = siec.Neuron[2].Length;
                    int ilew3 = siec.Neuron[3].Length;
                    W1 = SystemPlikow.WczytajSiecParametry1Warstwa(srInput2, fsInput2, ilew1);
                    fsInput2.Close();
                    srInput2.Close();
                }
                else { }

                if (opfWczytajSiec.FileName != "")
                {
                    FileStream fsInput2 = (FileStream)opfWczytajSiec.OpenFile();
                    StreamReader srInput2 = new StreamReader(fsInput2);
                    int ilew1 = siec.Neuron[1].Length;
                    int ilew2 = siec.Neuron[2].Length;
                    int ilew3 = siec.Neuron[3].Length;
                    W2 = SystemPlikow.WczytajSiecParametry2Warstwa(srInput2, fsInput2, ilew1, ilew1 + ilew2);
                    fsInput2.Close();
                    srInput2.Close();
                }
                else { }
                if (opfWczytajSiec.FileName != "")
                {
                    FileStream fsInput2 = (FileStream)opfWczytajSiec.OpenFile();
                    StreamReader srInput2 = new StreamReader(fsInput2);

                    int ilew1 = siec.Neuron[1].Length;
                    int ilew2 = siec.Neuron[2].Length;
                    int ilew3 = siec.Neuron[3].Length;
                    W3 = SystemPlikow.WczytajSiecParametry3Warstwa(srInput2, fsInput2, ilew1 + ilew2, ilew1 + ilew2 + ilew3);
                    fsInput2.Close();
                    srInput2.Close();
                }
                else { }
                if (opfWczytajSiec.FileName != "")
                {
                    siec.WczytajWagi(W1, W2, W3);
                }
                else { }

                if (opfWczytajSiec.FileName != "")
                {
                    FileStream fsInput = (FileStream)opfWczytajSiec.OpenFile();
                    StreamReader srInput = new StreamReader(fsInput);
                    string[] NazwyWejsc = SystemPlikow.WczytajSiecNazwyWejsc(srInput, fsInput).ToArray();
                    fsInput.Close();
                    srInput.Close();
                    TabliceWejcie.Clear();
                    lbWybraneWejscia.Items.Clear();
                    for (int i = 0; i < NazwyWejsc.Length; i++)
                    {
                        string temp = NazwyWejsc[i];
                        if (NazwyWejsc[i] == "t-1")
                        {
                            TabliceWejcie.Add(Wskazniki.ZmianaWart(TablicaNotowanZamkniecie, 1));
                            lbWybraneWejscia.Items.Add("t-1"); continue;
                        }
                        if (NazwyWejsc[i] == "t-2")
                        {
                            TabliceWejcie.Add(Wskazniki.ZmianaWart(TablicaNotowanZamkniecie, 2));
                            lbWybraneWejscia.Items.Add("t-2"); continue;
                        }
                        if (NazwyWejsc[i] == "t-3")
                        {
                            TabliceWejcie.Add(Wskazniki.ZmianaWart(TablicaNotowanZamkniecie, 3));
                            lbWybraneWejscia.Items.Add("t-3"); continue;
                        }

                        if (NazwyWejsc[i] == "Świece")
                        {
                            TabliceWejcie.Add(Wskazniki.SygnalySwiece(TablicaNotowanOtwarcie, TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin));
                            lbWybraneWejscia.Items.Add("Świece"); continue;
                        }
                        if (NazwyWejsc[i] == "Otwarcie")
                        {
                            TabliceWejcie.Add(TablicaNotowanOtwarcie);
                            lbWybraneWejscia.Items.Add("Otwarcie"); continue;
                        }
                        if (NazwyWejsc[i] == "Max")
                        {
                            TabliceWejcie.Add(TablicaNotowanMax);
                            lbWybraneWejscia.Items.Add("Max"); continue;
                        }
                        if (NazwyWejsc[i] == "Min")
                        {
                            TabliceWejcie.Add(TablicaNotowanMin);
                            lbWybraneWejscia.Items.Add("Min"); continue;
                        }
                        if (NazwyWejsc[i] == "Zamkniecie")
                        {
                            TabliceWejcie.Add(TablicaNotowanZamkniecie);
                            lbWybraneWejscia.Items.Add("Zamkniecie"); continue;
                        }
                        if (NazwyWejsc[i] == "Wolumen")
                        {
                            TabliceWejcie.Add(TablicaNotowanWolumen);
                            lbWybraneWejscia.Items.Add("Wolumen"); continue;
                        }
                        if (NazwyWejsc[i] == "N2")
                        {

                            TabliceWejcie.Add(Wskazniki.N2(TablicaNotowanZamkniecie));
                            lbWybraneWejscia.Items.Add("N2"); continue;
                        }
                        if (NazwyWejsc[i] == "N4")
                        {
                            TabliceWejcie.Add(Wskazniki.N4(TablicaNotowanZamkniecie));
                            lbWybraneWejscia.Items.Add("N4"); continue;
                        }
                        if (NazwyWejsc[i] == "N8")
                        {
                            TabliceWejcie.Add(Wskazniki.N8(TablicaNotowanZamkniecie));
                            lbWybraneWejscia.Items.Add("N8"); continue;
                        }
                        if (NazwyWejsc[i] == "N16")
                        {
                            TabliceWejcie.Add(Wskazniki.N16(TablicaNotowanZamkniecie));
                            lbWybraneWejscia.Items.Add("N16"); continue;
                        }

                        if (NazwyWejsc[i] == "N32")
                        {
                            TabliceWejcie.Add(Wskazniki.N32(TablicaNotowanZamkniecie));
                            lbWybraneWejscia.Items.Add("N32"); continue;
                        }
                        if (NazwyWejsc[i] == "N64")
                        {
                            TabliceWejcie.Add(Wskazniki.N64(TablicaNotowanZamkniecie));
                            lbWybraneWejscia.Items.Add("N64"); continue;
                        }
                        string poczatek = temp.Substring(0, 4);
                        string poczatekso = temp.Substring(0, 3);
                        string koniec = "";
                        int koniecint = 0;
                        if (poczatekso == "SOs" || poczatekso == "SOw")
                        {
                            koniec = temp.Substring(3);
                            koniecint = Convert.ToInt32(koniec);
                        }
                        else
                        {
                            koniec = temp.Substring(4);
                            koniecint = Convert.ToInt32(koniec);
                        }




                        if (poczatek == "SMAs")
                        {
                            TabliceWejcie.Add(filtry.WaznoscSygnalu(Wskazniki.SygnalySMA2(TablicaNotowanZamkniecie, (Wskazniki.SMA(TablicaNotowanZamkniecie, koniecint))), Convert.ToInt32(txtxTrwaloscSygnalowParametr.Text)));
                            lbWybraneWejscia.Items.Add("SMAs" + koniecint + ""); continue;

                        }
                        if (poczatek == "SMAw")
                        {
                            TabliceWejcie.Add(Wskazniki.SMA(TablicaNotowanZamkniecie, koniecint));
                            lbWybraneWejscia.Items.Add("SMAs" + koniecint + ""); continue;

                        }

                        if (poczatek == "ROCs")
                        {
                            TabliceWejcie.Add(filtry.WaznoscSygnalu(Wskazniki.SygnalyROC((Wskazniki.ROC(TablicaNotowanZamkniecie, Convert.ToInt32(koniecint))), koniecint), Convert.ToInt32(txtxTrwaloscSygnalowParametr.Text)));
                            lbWybraneWejscia.Items.Add("ROCs" + koniecint + ""); continue;

                        }
                        if (poczatek == "ROCw")
                        {
                            TabliceWejcie.Add(Wskazniki.ROC(TablicaNotowanZamkniecie, koniecint));
                            lbWybraneWejscia.Items.Add("ROCs" + koniecint + ""); continue;

                        }
                        if (poczatek == "CCIs")
                        {

                            TabliceWejcie.Add(filtry.WaznoscSygnalu(Wskazniki.SygnalyCCI(Wskazniki.CCI(TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin, koniecint)), Convert.ToInt32(txtxTrwaloscSygnalowParametr.Text)));
                            lbWybraneWejscia.Items.Add("CCIs" + koniecint + ""); continue;

                        }
                        if (poczatek == "CCIw")
                        {
                            TabliceWejcie.Add(Wskazniki.CCI(TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin, koniecint));
                            lbWybraneWejscia.Items.Add("CCIs" + koniecint + ""); continue;

                        }
                        if (poczatek == "ATRs")
                        {
                            TabliceWejcie.Add(filtry.WaznoscSygnalu(Wskazniki.SygnalyATR(Wskazniki.ATR(TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin, koniecint), TablicaNotowanZamkniecie), Convert.ToInt32(txtxTrwaloscSygnalowParametr.Text)));
                            lbWybraneWejscia.Items.Add("ATRs" + koniecint + ""); continue;

                        }
                        if (poczatek == "ATRw")
                        {
                            TabliceWejcie.Add(Wskazniki.ATR(TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin, koniecint));
                            lbWybraneWejscia.Items.Add("ATRs" + koniecint + ""); continue;

                        }
                        if (poczatek == "RSIs")
                        {
                            TabliceWejcie.Add(filtry.WaznoscSygnalu(Wskazniki.SygnalyRSI((Wskazniki.RSI(TablicaNotowanZamkniecie, koniecint))), Convert.ToInt32(txtxTrwaloscSygnalowParametr.Text)));
                            lbWybraneWejscia.Items.Add("RSIs" + koniecint + ""); continue;

                        }
                        if (poczatek == "RSIw")
                        {
                            TabliceWejcie.Add(Wskazniki.RSI(TablicaNotowanZamkniecie, koniecint));
                            lbWybraneWejscia.Items.Add("RSIs" + koniecint + ""); continue;


                        }
                        if (poczatekso == "SOs")
                        {
                            TabliceWejcie.Add(filtry.WaznoscSygnalu(Wskazniki.SygnalySO((Wskazniki.SO(TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin, koniecint))), Convert.ToInt32(txtxTrwaloscSygnalowParametr.Text)));
                            lbWybraneWejscia.Items.Add("SOs" + koniecint + ""); continue;

                        }
                        if (poczatekso == "SOw")
                        {
                            TabliceWejcie.Add(Wskazniki.SO(TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin, koniecint));
                            lbWybraneWejscia.Items.Add("SOs" + koniecint + ""); continue;


                        }


                    }
                    siec.DaneWejscioweUstaw(TabliceWejcie);
                    double[][] ListaTablic = SystemPlikow.SygnalyWejscie(TabliceWejcie);
                    double[] SygnalyKupSprzedaj = new double[ListaTablic.Length];
                    if (rbSprzedajNN.Checked == true)
                    {
                        SygnalyKupSprzedaj = filtry.ZamienSprzedajNaDodatnie(filtry.WyrzucKup(filtry.SygnalyKupSprzedajKlik(KupnoKlik, SprzedazKlik, TablicaNotowandata)));
                    }
                    if (rbKupNN.Checked == true)
                    {
                        SygnalyKupSprzedaj = filtry.WyrzucSprzedaj(filtry.SygnalyKupSprzedajKlik(KupnoKlik, SprzedazKlik, TablicaNotowandata));
                    }
                    if (rbProsteNN.Checked == true)
                    {
                        SygnalyKupSprzedaj = filtry.SygnalyKupSprzedajKlik(KupnoKlik, SprzedazKlik, TablicaNotowandata);
                    }


                    siec.DaneWyjscioweUstaw(SygnalyKupSprzedaj);
                }
                else { }
            }
            catch
            {
                txtInfo.Text = "Plik uszkodzony";

            }
        }

        private void btnSygnalyDoSelekcji_Click(object sender, EventArgs e)
        {
            txtInfo.Text = ""; for (int i = 2; i < 60; i++)
            {
                TabliceWejcie.Add(filtry.WaznoscSygnalu(Wskazniki.SygnalySMA2(TablicaNotowanZamkniecie, (Wskazniki.SMA(TablicaNotowanZamkniecie, Convert.ToInt32(i)))),Convert.ToInt32(txtxTrwaloscSygnalowParametr.Text)));
                lbWybraneWejscia.Items.Add("SMAs" + i + "");
            }
            for (int i = 2; i < 60; i++)
            {
                TabliceWejcie.Add(filtry.WaznoscSygnalu(Wskazniki.SygnalyROC((Wskazniki.ROC(TablicaNotowanZamkniecie, Convert.ToInt32(i))), Convert.ToInt32(i)), Convert.ToInt32(txtxTrwaloscSygnalowParametr.Text)));
                lbWybraneWejscia.Items.Add("ROCs" + i + "");
            }
            for (int i = 2; i < 60; i++)
            {
                TabliceWejcie.Add(filtry.WaznoscSygnalu(Wskazniki.SygnalyCCI(Wskazniki.CCI(TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin, Convert.ToInt32(i))), Convert.ToInt32(txtxTrwaloscSygnalowParametr.Text)));
                lbWybraneWejscia.Items.Add("CCIs" + i + "");
            }
            for (int i = 2; i < 60; i++)
            {

                TabliceWejcie.Add(filtry.WaznoscSygnalu(Wskazniki.SygnalyATR(Wskazniki.ATR(TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin, Convert.ToInt32(i)), TablicaNotowanZamkniecie), Convert.ToInt32(txtxTrwaloscSygnalowParametr.Text)));
                lbWybraneWejscia.Items.Add("ATRs" + i + "");
            }

            for (int i = 2; i < 60; i++)
            {
                TabliceWejcie.Add(filtry.WaznoscSygnalu(Wskazniki.SygnalyRSI((Wskazniki.RSI(TablicaNotowanZamkniecie, Convert.ToInt32(i)))), Convert.ToInt32(txtxTrwaloscSygnalowParametr.Text)));
                lbWybraneWejscia.Items.Add("RSIs" + i + "");
            }
            for (int i = 2; i < 60; i++)
            {
                TabliceWejcie.Add(filtry.WaznoscSygnalu(Wskazniki.SygnalySO((Wskazniki.SO(TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin, Convert.ToInt32(i)))), Convert.ToInt32(txtxTrwaloscSygnalowParametr.Text)));
                lbWybraneWejscia.Items.Add("SOs" + i + "");
            }


            TabliceWejcie.Add(Wskazniki.ZmianaWart(TablicaNotowanZamkniecie, 1));
            lbWybraneWejscia.Items.Add("t-1");
            TabliceWejcie.Add(Wskazniki.ZmianaWart(TablicaNotowanZamkniecie, 2));
            lbWybraneWejscia.Items.Add("t-2");
            TabliceWejcie.Add(Wskazniki.ZmianaWart(TablicaNotowanZamkniecie, 3));
            lbWybraneWejscia.Items.Add("t-3");
            TabliceWejcie.Add(Wskazniki.SygnalySwiece(TablicaNotowanOtwarcie, TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin));
            lbWybraneWejscia.Items.Add("Świece");
            TabliceWejcie.Add(TablicaNotowanOtwarcie);
            lbWybraneWejscia.Items.Add("Otwarcie");
            TabliceWejcie.Add(TablicaNotowanMax);
            lbWybraneWejscia.Items.Add("Max");
            TabliceWejcie.Add(TablicaNotowanMin);
            lbWybraneWejscia.Items.Add("Min");
            TabliceWejcie.Add(TablicaNotowanZamkniecie);
            lbWybraneWejscia.Items.Add("Zamkniecie");
            TabliceWejcie.Add(TablicaNotowanWolumen);
            lbWybraneWejscia.Items.Add("Wolumen");
            TabliceWejcie.Add(Wskazniki.N2(TablicaNotowanZamkniecie));
            lbWybraneWejscia.Items.Add("N2");
            TabliceWejcie.Add(Wskazniki.N4(TablicaNotowanZamkniecie));
            lbWybraneWejscia.Items.Add("N4");
            TabliceWejcie.Add(Wskazniki.N8(TablicaNotowanZamkniecie));
            lbWybraneWejscia.Items.Add("N8");
            TabliceWejcie.Add(Wskazniki.N16(TablicaNotowanZamkniecie));
            lbWybraneWejscia.Items.Add("N16");
            TabliceWejcie.Add(Wskazniki.N32(TablicaNotowanZamkniecie));
            lbWybraneWejscia.Items.Add("N32");
            TabliceWejcie.Add(Wskazniki.N64(TablicaNotowanZamkniecie));
            lbWybraneWejscia.Items.Add("N64");
        }

        private void btnlblWybraneWejsciaUsun_Click(object sender, EventArgs e)
        {
            txtInfo.Text = ""; TabliceWejcie.RemoveAt(lbWybraneWejscia.SelectedIndex);
            lbWybraneWejscia.Items.RemoveAt(lbWybraneWejscia.SelectedIndex);
        }

        private void btnSygnalyDoSelekcji2_Click(object sender, EventArgs e)
        {
            txtInfo.Text = ""; for (int i = 2; i < 60; i++)
            {
                TabliceWejcie.Add(Wskazniki.SygnalySMA2(TablicaNotowanZamkniecie, (Wskazniki.SMA(TablicaNotowanZamkniecie, Convert.ToInt32(i)))));
                lbWybraneWejscia.Items.Add("SMAs" + i + "");
            }
            for (int i = 2; i < 60; i++)
            {
                TabliceWejcie.Add(Wskazniki.SygnalyROC((Wskazniki.ROC(TablicaNotowanZamkniecie, Convert.ToInt32(i))), Convert.ToInt32(i)));
                lbWybraneWejscia.Items.Add("ROCs" + i + "");
            }
            for (int i = 2; i < 60; i++)
            {
                TabliceWejcie.Add(Wskazniki.SygnalyCCI(Wskazniki.CCI(TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin, Convert.ToInt32(i))));
                lbWybraneWejscia.Items.Add("CCIs" + i + "");
            }
            for (int i = 2; i < 60; i++)
            {

                TabliceWejcie.Add(Wskazniki.SygnalyATR(Wskazniki.ATR(TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin, Convert.ToInt32(i)), TablicaNotowanZamkniecie));
                lbWybraneWejscia.Items.Add("ATRs" + i + "");
            }

            for (int i = 2; i < 60; i++)
            {
                TabliceWejcie.Add(Wskazniki.SygnalyRSI((Wskazniki.RSI(TablicaNotowanZamkniecie, Convert.ToInt32(i)))));
                lbWybraneWejscia.Items.Add("RSIs" + i + "");
            }
            for (int i = 2; i < 60; i++)
            {
                TabliceWejcie.Add(Wskazniki.SygnalySO((Wskazniki.SO(TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin, Convert.ToInt32(i)))));
                lbWybraneWejscia.Items.Add("SOs" + i + "");
            }


            TabliceWejcie.Add(Wskazniki.ZmianaWart(TablicaNotowanZamkniecie, 1));
            lbWybraneWejscia.Items.Add("t-1");
            TabliceWejcie.Add(Wskazniki.ZmianaWart(TablicaNotowanZamkniecie, 2));
            lbWybraneWejscia.Items.Add("t-2");
            TabliceWejcie.Add(Wskazniki.ZmianaWart(TablicaNotowanZamkniecie, 3));
            lbWybraneWejscia.Items.Add("t-3");
            TabliceWejcie.Add(Wskazniki.SygnalySwiece(TablicaNotowanOtwarcie, TablicaNotowanZamkniecie, TablicaNotowanMax, TablicaNotowanMin));
            lbWybraneWejscia.Items.Add("Świece");
            TabliceWejcie.Add(TablicaNotowanOtwarcie);
            lbWybraneWejscia.Items.Add("Otwarcie");
            TabliceWejcie.Add(TablicaNotowanMax);
            lbWybraneWejscia.Items.Add("Max");
            TabliceWejcie.Add(TablicaNotowanMin);
            lbWybraneWejscia.Items.Add("Min");
            TabliceWejcie.Add(TablicaNotowanZamkniecie);
            lbWybraneWejscia.Items.Add("Zamkniecie");
            TabliceWejcie.Add(TablicaNotowanWolumen);
            lbWybraneWejscia.Items.Add("Wolumen");
            TabliceWejcie.Add(Wskazniki.N2(TablicaNotowanZamkniecie));
            lbWybraneWejscia.Items.Add("N2");
            TabliceWejcie.Add(Wskazniki.N4(TablicaNotowanZamkniecie));
            lbWybraneWejscia.Items.Add("N4");
            TabliceWejcie.Add(Wskazniki.N8(TablicaNotowanZamkniecie));
            lbWybraneWejscia.Items.Add("N8");
            TabliceWejcie.Add(Wskazniki.N16(TablicaNotowanZamkniecie));
            lbWybraneWejscia.Items.Add("N16");
            TabliceWejcie.Add(Wskazniki.N32(TablicaNotowanZamkniecie));
            lbWybraneWejscia.Items.Add("N32");
            TabliceWejcie.Add(Wskazniki.N64(TablicaNotowanZamkniecie));
            lbWybraneWejscia.Items.Add("N64");



        }

        private void btnDoTestera_Click(object sender, EventArgs e)
        {
            txtInfo.Text = ""; int odciecie = (TablicaNotowanZamkniecie.Length / 100) * Convert.ToInt32(txtOdciecieTrybUczenia.Text);
            int minusodciecie = TablicaNotowanZamkniecie.Length - odciecie;
            int ProcentOgolu = Convert.ToInt32(txtZbiorUczacy.Text);
            double LiczbaZProcentu = (minusodciecie / 100) * ProcentOgolu;


            int ZbiorTestowy = Convert.ToInt32(minusodciecie) - Convert.ToInt32(LiczbaZProcentu);
            int ZbiorUczacy = Convert.ToInt32(minusodciecie) - ZbiorTestowy;

            sfdWynikiCaly.Filter = "csv|*.csv";
            sfdWynikiCaly.Title = "Zapisz Wyniki Tester";
            sfdWynikiCaly.ShowDialog();


            try{

            if (sfdWynikiCaly.FileName != "")
            {
                FileStream fsOutput2 = (FileStream)sfdWynikiCaly.OpenFile();
                StreamWriter srOutput2 = new StreamWriter(fsOutput2);
                SystemPlikow.wspolczynnkikiCSVIWynikiTester(srOutput2, fsOutput2,minusodciecie,TablicaNotowanZamkniecie.Length,predykcja,TablicaNotowanOtwarcie,TablicaNotowanZamkniecie); 
            }
            }
            catch
            {
                txtInfo.Text = "Nie ma danych do zapisania";

            }

        }

        private void button1_Click_1(object sender, EventArgs e)
        {
            txtInfo.Text = ""; int odciecie = (TablicaNotowanZamkniecie.Length / 100) * Convert.ToInt32(txtOdciecieTrybUczenia.Text);
            int minusodciecie = TablicaNotowanZamkniecie.Length - odciecie;
            int ProcentOgolu = Convert.ToInt32(txtZbiorUczacy.Text);
            double LiczbaZProcentu = (minusodciecie / 100) * ProcentOgolu;


            int ZbiorTestowy = Convert.ToInt32(minusodciecie) - Convert.ToInt32(LiczbaZProcentu);
            int ZbiorUczacy = Convert.ToInt32(minusodciecie) - ZbiorTestowy;

            sfdWynikiCaly.Filter = "csv|*.csv";
            sfdWynikiCaly.Title = "Zapisz Wyniki Tester";
            sfdWynikiCaly.ShowDialog();



            try{
            if (sfdWynikiCaly.FileName != "")
            {
                FileStream fsOutput2 = (FileStream)sfdWynikiCaly.OpenFile();
                StreamWriter srOutput2 = new StreamWriter(fsOutput2);
                SystemPlikow.wspolczynnkikiCSVIWynikiTester(srOutput2, fsOutput2, ZbiorUczacy, Convert.ToInt32(txtIloscPunktowNaWykresie.Text), predykcja, TablicaNotowanOtwarcie, TablicaNotowanZamkniecie);
            }
            }
            catch
            {
                txtInfo.Text = "Nie ma danych do zapisania";

            }
        }

    }
}
