Exemplo n.º 1
0
        private void CreateGraph(ZedGraphControl zgc, int iDayChart)
        {
            // get a reference to the GraphPane
            GraphPane myPane = zgc.GraphPane;
            myPane.CurveList.Clear();
            DiaNegocio diaChart = new DiaNegocio();

            myPane.Title.Text = "Japanese Candlestick Chart Demo";
            myPane.XAxis.Title.Text = "Trading Date";
            myPane.YAxis.Title.Text = "Share Price, $US";

            StockPointList spl = new StockPointList();
            Random rand = new Random();

            // First day is jan 1st
            XDate xDate = new XDate(2006, 1, 1);

            for (int i = 0; dia[iDayChart].Ticker[i] != null; i++)
            {
                CriarPontodeEntradaDia(iDayChart);

                diaChart = dia[iDayChart];

                myPane.Title.Text = "WINFUT " + diaChart.dtData.ToString();

                double x = diaChart.Ticker[i].dtData.ToOADate();//xDate.XLDate;
                double open = diaChart.Ticker[i].iAbertura;
                double close = diaChart.Ticker[i].iFechamento;//open + rand.NextDouble() * 10.0 - 5.0;
                double hi = diaChart.Ticker[i].iMaximo;// Math.Max(open, close) + rand.NextDouble() * 5.0;
                double low = diaChart.Ticker[i].iMinimo;// Math.Min(open, close) - rand.NextDouble() * 5.0;

                StockPt pt = new StockPt(x, hi, low, open, close, 100000);
                spl.Add(pt);

                //open = close;
                // Advance one day
                //xDate.AddDays(1.0);
                // but skip the weekends
                //if (XDate.XLDateToDayOfWeek(xDate.XLDate) == 6)
                //  xDate.AddDays(2.0);
            }

            JapaneseCandleStickItem myCurve = myPane.AddJapaneseCandleStick("trades", spl);
            myCurve.Stick.IsAutoSize = true;
            myCurve.Stick.Color = Color.Blue;

            double[] dbentradavenda = new double[500];
            for( int i = 0; i < 500; i++)
                dbentradavenda[i] = (double)diaChart.iEntradaVenda;

            LineItem entradaVenda = myPane.AddCurve("Venda", null, dbentradavenda, Color.Red,SymbolType.None);

            double[] dbentradacompra = new double[500];
            for (int i = 0; i < 500; i++)
                dbentradacompra[i] = (double)diaChart.iEntradaCompra;

            LineItem entradaCompra = myPane.AddCurve("Compra", null, dbentradacompra, Color.Green, SymbolType.None);

            // Use DateAsOrdinal to skip weekend gaps
            myPane.XAxis.Type = AxisType.DateAsOrdinal;

            // pretty it up a little
            myPane.Chart.Fill = new Fill(Color.White, Color.LightGoldenrodYellow, 45.0f);
            myPane.Fill = new Fill(Color.White, Color.FromArgb(220, 220, 255), 45.0f);

            // Tell ZedGraph to refigure the
            // axes since the data have changed
            zgc.AxisChange();
            zgc.Invalidate();

            //ATENÇÃO, OBSERVAR QUE QUANDO RETORNA À PRIMEIRA ENTRADA COMUMENTE EMBARCA NO SENTIDO CONTRÁRIO!!! VERIFICAR SE COMPORTAMENTO SE
            //REPETE SEGUIDAS VEZES PRO ÍNDICE, PODE SER UMA FORMA DE GANHO COM UM ALVO MENOR DE ~300, 400 PTOS
        }
Exemplo n.º 2
0
        private void CarregarDadosHistorico()
        {
            StreamReader readFile = new StreamReader(fiOpenFile.FullName);
            string line;
            string[] lineCampos = new string[7];
            readFile.ReadLine();
            //Ticker [] dados = new Ticker[10000];
            dia = new DiaNegocio[300*4];
            DateTime data = new DateTime(1, 1, 1, 0, 0, 0);
            tsInicioTrade = TimeSpan.Parse(cbHorarioEntrada.SelectedItem.ToString());
            tsSaidaTrade = TimeSpan.Parse(cbHorarioSaida.SelectedItem.ToString());

            for (int i = 0, d = -1, t = 0; (line = readFile.ReadLine()) != null; i++)
            {
                lineCampos = line.Split(';');

                if (data.DayOfYear != DateTime.Parse(lineCampos[0]).DayOfYear)
                {
                    data = DateTime.Parse(lineCampos[0] + " " + lineCampos[1]);
                    dia[++d] = new DiaNegocio();
                    i = 0;
                    t = 0;
                    dia[d].dtData = data;
                    if (dia[d].dtData.Hour == 10)
                    {
                        dia[d].bHorariodeVerao = true;
                        dia[d].tsInicioTrade = tsInicioTrade.Add(TimeSpan.FromHours(1));
                        dia[d].tsSaidaTrade = tsSaidaTrade.Add(TimeSpan.FromHours(1));
                    }
                    else
                    {
                        dia[d].tsInicioTrade = tsInicioTrade;
                        dia[d].tsSaidaTrade = tsSaidaTrade;
                    }

                }

                dia[d].Ticker[i] = new Ticker();
                //dia[d].Ticker[i].sAtivo = lineCampos[0];
                dia[d].Ticker[i].dtData = DateTime.Parse(lineCampos[0] + " " + lineCampos[1]);
                //dia[d].Ticker[i].dtData.Date = DateTime.Parse(lineCampos[0]);
                //dia[d].Ticker[i].dtData.TimeOfDay = DateTime.Parse(lineCampos[1]);
                dia[d].Ticker[i].iAbertura = Convert.ToInt32(lineCampos[2]);
                dia[d].Ticker[i].iMaximo = Convert.ToInt32(lineCampos[3]);
                dia[d].Ticker[i].iMinimo = Convert.ToInt32(lineCampos[4]);
                dia[d].Ticker[i].iFechamento = Convert.ToInt32(lineCampos[5]);
                //dia[d].Ticker[i].dtData = DateTime.Parse(lineCampos[5]);
            }
        }
Exemplo n.º 3
0
 private void ExecutaEntrada( ref DiaNegocio dia, ref BlackFin dadosBF, int i )
 {
     if (dadosBF.iAMPDA < 500)
         return;
     //ver melhor maneira de testar a última hora
     //filtro de compra
     if (dia.Ticker[i].iFechamento < dadosBF.iFDCPA)
         dadosBF.sAbaixoFDCPA++;
     //filtro de venda
     if (dia.Ticker[i].iFechamento > dadosBF.iFDVDA)
         dadosBF.sAcimaFDVDA++;
     if (i < 15)
         return;
     if (dadosBF.sAcimaFDVDA > 1 && dia.Ticker[i].iFechamento < dadosBF.iMAXDA && !dia.bNoMercado)
     {
         int iTradeNoDia = 0;
         while (dia.TradesDiaBF[iTradeNoDia] != null) iTradeNoDia++;
         dia.TradesDiaBF[iTradeNoDia] = new TradeBF(dia.Ticker[i].iFechamento, TradeBF.tipoTrade.venda, dadosBF.iMAXDC + 50);
         dia.bNoMercado = true;
         dadosBF.iMINDO = dia.Ticker[i].iFechamento;
         //entrar no trade VENDA
     }
     if (dadosBF.sAbaixoFDCPA > 1 && dia.Ticker[i].iFechamento > dadosBF.iMINDA && !dia.bNoMercado)
     {
         int iTradeNoDia = 0;
         while (dia.TradesDiaBF[iTradeNoDia] != null) iTradeNoDia++;
         dia.TradesDiaBF[iTradeNoDia] = new TradeBF(dia.Ticker[i].iFechamento, TradeBF.tipoTrade.compra, dadosBF.iMINDC - 50);
         dia.bNoMercado = true;
         dadosBF.iMAXDO = dia.Ticker[i].iFechamento;
         //entrar no trade COMPRA
     }
     return;
 }
Exemplo n.º 4
0
 private void button1_Click(object sender, EventArgs e)
 {
     StreamReader readFile = new StreamReader(@"C:\Users\Pedro\Investimentos\winm12_0512.csv");
     string line;
     string[] lineCampos = new string[7];
     readFile.ReadLine();
     //Ticker [] dados = new Ticker[10000];
     DiaNegocio[] dia = new DiaNegocio[31];
     DateTime data = new DateTime(1, 1, 1, 0, 0, 0);
 }
Exemplo n.º 5
0
        private void button1_Click(object sender, EventArgs e)
        {
            StreamReader readFile = new StreamReader(@"C:\Users\Pedro\Investimentos\winm12_original.csv");
            string line;
            string [] lineCampos = new string[7];
            readFile.ReadLine();
            //Ticker [] dados = new Ticker[10000];
            DiaNegocio[] dia = new DiaNegocio[31];
            DateTime data = new DateTime(1, 1, 1, 0, 0, 0);

            for (int i = 0, d=0, t=0; (line = readFile.ReadLine()) != null; i++ )
            {
                lineCampos = line.Split(';');

                if (data.DayOfYear != DateTime.Parse(lineCampos[5]).DayOfYear)
                {
                    data = DateTime.Parse(lineCampos[5]);
                    dia[d++] = new DiaNegocio();
                    i = 0;
                    t = 0;
                    dia[d-1].dtData = data;

                }

                dia[d-1].Ticker[i] = new Ticker();
                dia[d-1].Ticker[i].sAtivo  = lineCampos[0];
                dia[d-1].Ticker[i].iAbertura = Convert.ToInt32(lineCampos[1]);
                dia[d-1].Ticker[i].iMaximo = Convert.ToInt32(lineCampos[2]);
                dia[d-1].Ticker[i].iMinimo = Convert.ToInt32(lineCampos[3]);
                dia[d-1].Ticker[i].iFechamento = Convert.ToInt32(lineCampos[4]);
                dia[d-1].Ticker[i].dtData = DateTime.Parse(lineCampos[5]);
                if((dia[d-1].Ticker[i].dtData.Hour == 9) || (dia[d-1].Ticker[i].dtData.Hour == 10 && dia[d-1].Ticker[i].dtData.Minute <= 30))
                //if ((dia[d - 1].Ticker[i].dtData.Hour == 9) || (dia[d - 1].Ticker[i].dtData.Hour == 10 && dia[d - 1].Ticker[i].dtData.Minute == 00))
                {
                    if (dia[d - 1].Ticker[i].dtData.Day == 31)
                        i = i;

                    if(dia[d-1].Ticker[i].iMinimo < dia[d-1].iMinChegou)
                    {
                        dia[d-1].iMinChegou = dia[d-1].Ticker[i].iMinimo;
                        //dia[d-1].iEntradaVenda = dia[d-1].Ticker[i].iMinimo - 5;
                        dia[d - 1].iEntradaVenda = dia[d - 1].Ticker[i].iMinimo - 20;
                    }
                    if(dia[d-1].Ticker[i].iMaximo > dia[d-1].iMaximoChegou)
                    {
                        dia[d-1].iMaximoChegou = dia[d-1].Ticker[i].iMaximo;
                        //dia[d - 1].iEntradaCompra = dia[d - 1].Ticker[i].iMaximo + 5;
                        dia[d - 1].iEntradaCompra = dia[d - 1].Ticker[i].iMaximo + 20;
                    }

                }
                if (((dia[d - 1].Ticker[i].dtData.Hour >= 10 && dia[d - 1].Ticker[i].dtData.Minute > 30) || dia[d - 1].Ticker[i].dtData.Hour >= 10)&&

                //if ((dia[d - 1].Ticker[i].dtData.Hour >= 10 && dia[d - 1].Ticker[i].dtData.Minute >= 0) &&
                    (dia[d - 1].Ticker[i].dtData.Hour < 17))/*||
                    (dia[d - 1].Ticker[i].dtData.Hour == 17 && dia[d - 1].Ticker[i].dtData.Minute < 29)) */
                {
                    //verifica stop/gain
                    if (dia[d - 1].bNoMercado)
                    {
                        //gain 200 ptos compra
                        if (dia[d - 1].TradesDia[t].tttipoTrade == Trade.tipoTrade.compra)
                        {
                            //gain 200 ptos compra
                            if (dia[d - 1].TradesDia[t].iAtingiu200 == 0 && (dia[d - 1].Ticker[i].iMinimo <= dia[d - 1].TradesDia[t].iValorEntrada + 200 && dia[d - 1].Ticker[i].iMaximo >= dia[d - 1].TradesDia[t].iValorEntrada + 200))
                                dia[d - 1].TradesDia[t].iAtingiu200 = 200;

                            //gain 400 ptos compra
                            if (dia[d - 1].TradesDia[t].iAtingiu400 == 0 && (dia[d - 1].Ticker[i].iMinimo <= dia[d - 1].TradesDia[t].iValorEntrada + 400 && dia[d - 1].Ticker[i].iMaximo >= dia[d - 1].TradesDia[t].iValorEntrada + 400))
                                dia[d - 1].TradesDia[t].iAtingiu400 = 400;

                            //gain 1000 ptos compra
                            if (dia[d - 1].TradesDia[t].iAtingiu1000 == 0 && (dia[d - 1].Ticker[i].iMinimo <= dia[d - 1].TradesDia[t].iValorEntrada + 1000 && dia[d - 1].Ticker[i].iMaximo >= dia[d - 1].TradesDia[t].iValorEntrada + 1000))
                                dia[d - 1].TradesDia[t].iAtingiu1000 = 1000;

                            //stop compra
                            if (dia[d - 1].Ticker[i].iMaximo >= dia[d - 1].TradesDia[t].iValorStop && dia[d - 1].Ticker[i].iMinimo <= dia[d - 1].TradesDia[t].iValorStop)
                            {
                                dia[d - 1].TradesDia[t].iAtingiu200 = dia[d - 1].TradesDia[t].iAtingiu200 != 0 ? dia[d - 1].TradesDia[t].iAtingiu200 : dia[d - 1].iSaidaCompra - dia[d - 1].TradesDia[t].iValorEntrada;
                                dia[d - 1].TradesDia[t].iAtingiu400 = dia[d - 1].TradesDia[t].iAtingiu400 != 0 ? dia[d - 1].TradesDia[t].iAtingiu400 : dia[d - 1].iSaidaCompra - dia[d - 1].TradesDia[t].iValorEntrada;
                                dia[d - 1].TradesDia[t].iAtingiu1000 = dia[d - 1].TradesDia[t].iAtingiu1000 != 0 ? dia[d - 1].TradesDia[t].iAtingiu1000 : dia[d - 1].iSaidaCompra - dia[d - 1].TradesDia[t].iValorEntrada;
                                dia[d - 1].TradesDia[t].iFechamento = dia[d - 1].TradesDia[t].iFechamento != 0 ? dia[d - 1].TradesDia[t].iFechamento : dia[d - 1].iSaidaCompra - dia[d - 1].TradesDia[t].iValorEntrada;
                                dia[d - 1].TradesDia[t++].bStop = true;
                                dia[d - 1].bNoMercado = false;
                            }
                        }
                        if (dia[d - 1].bNoMercado && dia[d - 1].TradesDia[t].tttipoTrade == Trade.tipoTrade.venda)
                        {
                            //gain 200 ptos venda
                            if (dia[d - 1].TradesDia[t].iAtingiu200 == 0 && (dia[d - 1].Ticker[i].iMaximo >= dia[d - 1].TradesDia[t].iValorEntrada - 200 && dia[d - 1].Ticker[i].iMinimo <= dia[d - 1].TradesDia[t].iValorEntrada - 200))
                                dia[d - 1].TradesDia[t].iAtingiu200 = 200;

                            //gain 400 ptos venda
                            if (dia[d - 1].TradesDia[t].iAtingiu400 == 0 && (dia[d - 1].Ticker[i].iMaximo >= dia[d - 1].TradesDia[t].iValorEntrada - 400 && dia[d - 1].Ticker[i].iMinimo <= dia[d - 1].TradesDia[t].iValorEntrada - 400))
                                dia[d - 1].TradesDia[t].iAtingiu400 = 400;

                            //gain 1000 ptos venda
                            if (dia[d - 1].TradesDia[t].iAtingiu1000 == 0 && (dia[d - 1].Ticker[i].iMaximo >= dia[d - 1].TradesDia[t].iValorEntrada - 1000 && dia[d - 1].Ticker[i].iMinimo <= dia[d - 1].TradesDia[t].iValorEntrada - 1000))
                                dia[d - 1].TradesDia[t].iAtingiu1000 = 1000;

                            //stop venda
                            if (dia[d - 1].Ticker[i].iMinimo <= dia[d - 1].TradesDia[t].iValorStop && dia[d - 1].Ticker[i].iMaximo >= dia[d - 1].TradesDia[t].iValorStop)
                            {
                                dia[d - 1].TradesDia[t].iAtingiu200 = dia[d - 1].TradesDia[t].iAtingiu200 != 0 ? dia[d - 1].TradesDia[t].iAtingiu200 : dia[d - 1].TradesDia[t].iValorEntrada - dia[d - 1].iSaidaVenda;
                                dia[d - 1].TradesDia[t].iAtingiu400 = dia[d - 1].TradesDia[t].iAtingiu400 != 0 ? dia[d - 1].TradesDia[t].iAtingiu400 : dia[d - 1].TradesDia[t].iValorEntrada - dia[d - 1].iSaidaVenda;
                                dia[d - 1].TradesDia[t].iAtingiu1000 = dia[d - 1].TradesDia[t].iAtingiu1000 != 0 ? dia[d - 1].TradesDia[t].iAtingiu1000 : dia[d - 1].TradesDia[t].iValorEntrada - dia[d - 1].iSaidaVenda;
                                dia[d - 1].TradesDia[t].iFechamento = dia[d - 1].TradesDia[t].iFechamento != 0 ? dia[d - 1].TradesDia[t].iFechamento : dia[d - 1].TradesDia[t].iValorEntrada - dia[d - 1].iSaidaVenda;
                                dia[d - 1].TradesDia[t++].bStop = true;
                                dia[d - 1].bNoMercado = false;
                            }
                        }
                    }
                    if (dia[d - 1].TradesDia[t] == null)
                        dia[d - 1].TradesDia[t] = new Trade();
                    //entrada compra
                    if (!dia[d - 1].bNoMercado && (t==0 || (t>0 && dia[d - 1].TradesDia[t-1].tttipoTrade == Trade.tipoTrade.venda)) && ((dia[d - 1].Ticker[i].iMinimo <= dia[d - 1].iEntradaCompra && dia[d - 1].Ticker[i].iMaximo >= dia[d - 1].iEntradaCompra)))
                    {
                        if (dia[d - 1].TradesDia[t] == null)
                            dia[d - 1].TradesDia[t] = new Trade();
                        dia[d - 1].TradesDia[t].dtHoraEntrada = dia[d - 1].Ticker[i].dtData;
                        dia[d - 1].TradesDia[t].iValorEntrada = dia[d - 1].iEntradaCompra;
                        dia[d - 1].bNoMercado = true;
                        dia[d - 1].iSaidaCompra = (dia[d - 1].iEntradaCompra - dia[d - 1].iEntradaVenda) < 420 ? dia[d - 1].iEntradaVenda : dia[d - 1].iEntradaCompra - 420;
                        //dia[d - 1].iSaidaCompra = (dia[d - 1].iEntradaCompra - dia[d - 1].iEntradaVenda) < 400 ? dia[d - 1].iEntradaVenda : dia[d - 1].iEntradaCompra - 400;
                        dia[d - 1].TradesDia[t].iValorStop = dia[d - 1].iSaidaCompra;
                        dia[d - 1].TradesDia[t].tttipoTrade = Trade.tipoTrade.compra;
                    }
                    //entrada venda
                    if (!dia[d - 1].bNoMercado && (t==0 || (t > 0 && dia[d - 1].TradesDia[t - 1].tttipoTrade == Trade.tipoTrade.compra)) && ((dia[d - 1].Ticker[i].iMaximo >= dia[d - 1].iEntradaVenda && dia[d - 1].Ticker[i].iMinimo <= dia[d - 1].iEntradaVenda)))
                    {
                        if (dia[d - 1].TradesDia[t] == null)
                            dia[d - 1].TradesDia[t] = new Trade();
                        dia[d - 1].TradesDia[t].dtHoraEntrada = dia[d - 1].Ticker[i].dtData;
                        dia[d - 1].TradesDia[t].iValorEntrada = dia[d - 1].iEntradaVenda;
                        dia[d - 1].bNoMercado = true;
                        dia[d - 1].iSaidaVenda = (dia[d - 1].iEntradaCompra - dia[d - 1].iEntradaVenda) < 420 ? dia[d - 1].iEntradaCompra : dia[d - 1].iEntradaVenda + 420;
                        //dia[d - 1].iSaidaVenda = (dia[d - 1].iEntradaCompra - dia[d - 1].iEntradaVenda) < 400 ? dia[d - 1].iEntradaCompra : dia[d - 1].iEntradaVenda + 400;
                        dia[d - 1].TradesDia[t].iValorStop = dia[d - 1].iSaidaVenda;
                        dia[d - 1].TradesDia[t].tttipoTrade = Trade.tipoTrade.venda;
                    }
                }
                else if (dia[d - 1].bNoMercado)
                {
                    dia[d - 1].bNoMercado = false;
                    if (dia[d - 1].TradesDia[t].tttipoTrade == Trade.tipoTrade.compra)
                    {
                        dia[d - 1].TradesDia[t].iAtingiu200 = dia[d - 1].TradesDia[t].iAtingiu200 != 0 ? dia[d - 1].TradesDia[t].iAtingiu200 : dia[d - 1].Ticker[i].iFechamento - dia[d - 1].TradesDia[t].iValorEntrada;
                        dia[d - 1].TradesDia[t].iAtingiu400 = dia[d - 1].TradesDia[t].iAtingiu400 != 0 ? dia[d - 1].TradesDia[t].iAtingiu400 : dia[d - 1].Ticker[i].iFechamento - dia[d - 1].TradesDia[t].iValorEntrada;
                        dia[d - 1].TradesDia[t].iAtingiu1000 = dia[d - 1].TradesDia[t].iAtingiu1000 != 0 ? dia[d - 1].TradesDia[t].iAtingiu1000 : dia[d - 1].Ticker[i].iFechamento - dia[d - 1].TradesDia[t].iValorEntrada;
                        dia[d - 1].TradesDia[t].iFechamento = dia[d - 1].Ticker[i].iFechamento - dia[d - 1].TradesDia[t].iValorEntrada;
                    }
                    if (dia[d - 1].TradesDia[t].tttipoTrade == Trade.tipoTrade.venda)
                    {
                        dia[d - 1].TradesDia[t].iAtingiu200 = dia[d - 1].TradesDia[t].iAtingiu200 != 0 ? dia[d - 1].TradesDia[t].iAtingiu200 : dia[d - 1].TradesDia[t].iValorEntrada - dia[d - 1].Ticker[i].iFechamento;
                        dia[d - 1].TradesDia[t].iAtingiu400 = dia[d - 1].TradesDia[t].iAtingiu400 != 0 ? dia[d - 1].TradesDia[t].iAtingiu400 : dia[d - 1].TradesDia[t].iValorEntrada - dia[d - 1].Ticker[i].iFechamento;
                        dia[d - 1].TradesDia[t].iAtingiu1000 = dia[d - 1].TradesDia[t].iAtingiu1000 != 0 ? dia[d - 1].TradesDia[t].iAtingiu1000 : dia[d - 1].TradesDia[t].iValorEntrada - dia[d - 1].Ticker[i].iFechamento;
                        dia[d - 1].TradesDia[t].iFechamento = dia[d - 1].TradesDia[t].iValorEntrada - dia[d - 1].Ticker[i].iFechamento;
                    }

                }
            }

            StreamWriter writeFile = new StreamWriter(@"C:\Users\Pedro\Investimentos\teste_result_correto.csv");
            writeFile.WriteLine("{0};{1};{2};{3};{4};{5};{6};{7};{8}","DATA","TIPO","ENTRADA","STOP","CHEGOU","ALVO A","ALVO B","ALVO C","FECHAMENTO");
            for (int d = 0; dia[d] != null; d++)
                for (int t = 0; dia[d].TradesDia[t] != null; t++)
                    writeFile.WriteLine("{0};{1};{2};{3};{4};{5};{6};{7};{8}", dia[d].TradesDia[t].dtHoraEntrada, dia[d].TradesDia[t].tttipoTrade, dia[d].TradesDia[t].iValorEntrada,
                        dia[d].TradesDia[t].bStop, dia[d].TradesDia[t].iMaxTrade, dia[d].TradesDia[t].iAtingiu200, dia[d].TradesDia[t].iAtingiu400, dia[d].TradesDia[t].iAtingiu1000,
                        dia[d].TradesDia[t].iFechamento);
            writeFile.Flush();
            writeFile.Close();

            MessageBox.Show("Backtest calculado");
        }