Esempio n. 1
0
 private static Candlestick KlineToCandlestick(KlineCandleStickResponse c)
 {
     return(new SharpTrader.Candlestick()
     {
         Open = (double)c.Open,
         High = (double)c.High,
         Low = (double)c.Low,
         Close = (double)c.Close,
         OpenTime = c.OpenTime,
         CloseTime = c.OpenTime.AddSeconds(60), //+ c.CloseTime.AddMilliseconds(1),
         QuoteAssetVolume = (double)c.QuoteAssetVolume
     });
 }
Esempio n. 2
0
        public static byte[] Graph(string pair, KlineInterval interval, List <Trendline> trendlines,
                                   List <decimal> smaPoints, List <decimal> volume, List <Resistance> resistances)
        {
            CandleData data = DataManager.GetCandleDataForPairAndInterval(pair, interval);

            List <double>   highs = new List <double>();
            List <double>   lows  = new List <double>();
            List <double>   close = new List <double>();
            List <double>   open  = new List <double>();
            List <DateTime> times = new List <DateTime>();

            var candles = new List <KlineCandleStickResponse>(data.candles);

            for (int i = candles.Count - 100; i < candles.Count; i++)
            {
                KlineCandleStickResponse candle = candles[i];
                highs.Add(Convert.ToDouble(candle.High));
                lows.Add(Convert.ToDouble(candle.Low));
                close.Add(Convert.ToDouble(candle.Close));
                open.Add(Convert.ToDouble(candle.Open));
                times.Add(candle.OpenTime);
            }

            for (int i = 0; i < 5; i++)
            {
                highs.Add(Convert.ToDouble(candles[candles.Count - 1].Close));
                lows.Add(Convert.ToDouble(candles[candles.Count - 1].Close));
                close.Add(Convert.ToDouble(candles[candles.Count - 1].Close));
                open.Add(Convert.ToDouble(candles[candles.Count - 1].Close));
            }

            List <double> volumes = new List <double>();

            foreach (var c in volume)
            {
                volumes.Add(Convert.ToDouble(c));
            }


            var xyChart = new ChartDirector.FinanceChart(1920);

            xyChart.setPlotAreaStyle(0x171b26, 0x232632, 0x232632, 0x232632, 0x232632);
            xyChart.setData(times.ToArray(), highs.ToArray(), lows.ToArray(), open.ToArray(), close.ToArray(),
                            volumes.ToArray(), 0);
            var chart = xyChart.addMainChart(1080);

            chart.xAxis().setLabelStyle("Arial", 8, 0xffffff, 0);
            chart.yAxis().setLabelStyle("Arial", 8, 0xffffff, 0);

            xyChart.setBackground(0x171b26);

            //xyChart.getChart().setColor(Chart.TextColor, 0xFFFFFF);

            //xyChart.getChart().setBackground(0x171b26);
            //xyChart.setPlotArea(50, 25, 1850, 1000).setGridColor(0x232632, 0x232632);
            xyChart.addTitle("TA Trading Bot of Pair " + pair + " and Timeframe " +
                             Enum.GetName(typeof(KlineInterval), interval), "bold", 10, 0xffffff);
            //xyChart.addBarLayer(volumes.ToArray()).setBaseLine(Convert.ToDouble(candles[candles.Count - 1].Close - candles[candles.Count - 1].Close / 10m));
            //var axies = xyChart.addAxis(4, xyChart.getYCoor(35000));
            //xyChart.addBarLayer(volumes.ToArray()).setUseYAxis(axies);

            /*chart.setBackground(0x171b26);
             * chart.setColor(Chart.TextColor, 0x000000);
             */
            var layer = xyChart.addCandleStick(0x00ff00, 0xff0000);

            //layer.setExtraColors(0xffffff, 0xffffff, 0xffffff, 0xffffff);
            layer.setColors(0x00ff00, 0x00ff00, 0xff0000, 0xff0000);

            layer.setLineWidth(2);

            List <double> smaData = new List <double>();

            foreach (var c in smaPoints)
            {
                smaData.Add(Convert.ToDouble(c));
            }

            //xyChart.addVolBars(200, 0x00ff00, 0xff0000, 0x808080);
            //xyChart.addRSI(200, 14, 0xff0000, 80, 0x00ff00, 0xff0000);
            xyChart.addSimpleMovingAvg(14, 0xd8a704);
            //xyChart.addLineLayer(smaData.ToArray(), 0xd8a704).setLineWidth(6);

            xyChart.layout();

            foreach (var tl in trendlines)
            {
                Vector2 start, end;

                ExtendLine(
                    new Vector2(chart.getXCoor((tl.startpoint - 400)),
                                chart.getYCoor(Convert.ToDouble(tl.linePoints[0].value))),
                    new Vector2(chart.getXCoor(tl.linePoints[tl.linePoints.Count - 1].candle - 400),
                                chart.getYCoor(Convert.ToDouble(tl.linePoints[tl.linePoints.Count - 1].value))),
                    400f, out start, out end
                    );

                xyChart.addLine(Convert.ToInt32(start.X), Convert.ToInt32(start.Y), Convert.ToInt32(end.X),
                                Convert.ToInt32(end.Y), 0xFFC300).setWidth(4);
            }

            foreach (var resistance in resistances)
            {
                var y = Convert.ToDouble(resistance.Value);
                xyChart.addLine(chart.getXCoor(0), chart.getYCoor(y), chart.getXCoor(100), chart.getYCoor(y), 0x00ff00)
                .setWidth(3);
            }

            xyChart.makeChart(pair + "_" + Enum.GetName(typeof(KlineInterval), interval) + ".jpg");
            return(xyChart.makeChart2(0));
        }