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 }
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]); } }
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; }
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); }
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"); }