Esempio n. 1
0
        public void UpdateLastSDD()
        {
            Debug.Assert(canvas != null);

            Data.SymbolDayData lastSdd = drawingInfo.sddList[0];

            int       cbgFound = -1; // CandleBodyGeom
            int       csgFound = -1; // CandleShadowGeom
            CandleTag ct       = new CandleTag();

            for (int i = 0; i < canvas.Children.Count; i++)
            {
                if (canvas.Children[i] is CandleBodyGeom &&
                    ((CandleTag)((CandleBodyGeom)canvas.Children[i]).Tag).first)
                {
                    cbgFound = i;
                    ct       = (CandleTag)((CandleBodyGeom)canvas.Children[i]).Tag;
                    canvas.Children.RemoveAt(cbgFound);
                    break;
                }
            }

            for (int i = 0; i < canvas.Children.Count; i++)
            {
                if (canvas.Children[i] is CandleShadowGeom &&
                    ((CandleTag)((CandleShadowGeom)canvas.Children[i]).Tag).first)
                {
                    csgFound = i;
                    canvas.Children.RemoveAt(csgFound);
                    break;
                }
            }

            CreateCandle(canvas, ct.offset, lastSdd, ct.first);
        }
Esempio n. 2
0
        public void CreateCandle(Canvas canvas, int offset, Data.SymbolDayData sdd, bool first)
        {
            double[] sortedVals =
            {
                sdd.Hi,
                sdd.Open >= sdd.Close ? sdd.Open : sdd.Close,
                sdd.Open > sdd.Close ? sdd.Close : sdd.Open,
                sdd.Low
            };

            if (drawingInfo.viewAutoScale)
            {
                sortedVals[0] = Misc.RemapRangeValToPix(sortedVals[0], drawingInfo);
                sortedVals[1] = Misc.RemapRangeValToPix(sortedVals[1], drawingInfo);
                sortedVals[2] = Misc.RemapRangeValToPix(sortedVals[2], drawingInfo);
                sortedVals[3] = Misc.RemapRangeValToPix(sortedVals[3], drawingInfo);
            }

            bool upDir = sdd.Open > sdd.Close ? false : true;

            var candle = new CandleBodyGeom(drawingInfo, offset, sortedVals, first, upDir);
            var shadow = new CandleShadowGeom(drawingInfo, offset, sortedVals, first, upDir);

            canvas.Children.Add(candle);
            canvas.Children.Add(shadow);
        }
Esempio n. 3
0
        public static bool LineValueOnSdd(ChartLine line, Data.SymbolDayData sdd)
        {
            DrawingInfo di = line.GetDrawingInfo();

            double PDR = DateToPixel(di, sdd.Date, 0);

            double PVRLO = Math.Round(RemapRangeValToPix(sdd.Low, di), 6);
            double PVRHI = Math.Round(RemapRangeValToPix(sdd.Hi, di), 6);

            Point pLO = new Point(PDR, PVRLO);
            Point pHI = new Point(PDR, PVRHI);

            return(DoIntersect(line.getP1(), line.getP2(), pLO, pHI));
        }
Esempio n. 4
0
        public static Data.SymbolDayData GetSdd(Data.SymbolInfo si, out string time)
        {
            time = "";
            Console.WriteLine("GetSdd: {0}", si.FullName);

            try
            {
                HtmlWeb      web = new HtmlWeb();
                HtmlDocument doc = new HtmlDocument();

                string data = "http://stooq.pl/q/?s=" + si.ShortName;
                doc = web.Load(data);

                HtmlNodeCollection symbolNodes  = doc.DocumentNode.SelectNodes("//*/font[@id=\"f18\"]");
                string             currentPrice = symbolNodes[1].InnerText;
                HtmlNodeCollection hiCol        = doc.DocumentNode.SelectNodes("//*/span[@id='aq_"
                                                                               + si.ShortName.ToLower(CultureInfo.InvariantCulture) + "_h']");
                string             hi     = hiCol[0].InnerText;
                HtmlNodeCollection lowCol = doc.DocumentNode.SelectNodes("//*/span[@id='aq_"
                                                                         + si.ShortName.ToLower(CultureInfo.InvariantCulture) + "_l']");
                string             low     = lowCol[0].InnerText;
                HtmlNodeCollection openCol = doc.DocumentNode.SelectNodes("//*/span[@id='aq_"
                                                                          + si.ShortName.ToLower(CultureInfo.InvariantCulture) + "_o']");
                string open = openCol[0].InnerText;

                HtmlNodeCollection timeCol = doc.DocumentNode.SelectNodes("//*/span[@id='aqdat']");
                time = timeCol[0].InnerText.Remove(timeCol[0].InnerText.IndexOf("CET") + 3);

                Data.SymbolDayData sdd = new Data.SymbolDayData(DateTime.Today,
                                                                float.Parse(open, CultureInfo.InvariantCulture),
                                                                float.Parse(hi, CultureInfo.InvariantCulture),
                                                                float.Parse(low, CultureInfo.InvariantCulture),
                                                                float.Parse(currentPrice, CultureInfo.InvariantCulture),
                                                                0); //TODO vol maybe in future
                return(sdd);
            }
            catch (Exception)
            {
                Debug.Assert(false);
            }

            return(null);
        }
Esempio n. 5
0
        public static Type Check(Chart.ChartLine line, Data.SymbolDayData sdd)
        {
            bool cross = Misc.LineValueOnSdd(line, sdd);

            bool upCandle   = sdd.Open < sdd.Close;
            bool downCandle = !upCandle;

            bool upLine = line.getP1().X > line.getP2().X ?
                          line.getP1().Y <line.getP2().Y : line.getP1().Y> line.getP2().Y;

            bool downLine = !upLine;

            if (cross && upCandle && upLine)
            {
                return(Type.CrossUpLineWithTrend);
            }
            else if (cross && downCandle && downLine)
            {
                return(Type.CrossDownLineWithTrend);
            }

            return(Type.Nothing);
        }
Esempio n. 6
0
        public static List <Data.SymbolDayData> GetSymbolData(Dictionary <string, List <Data.SymbolDayData> > sdds, Data.SymbolInfo si)
        {
            string symbolName = si.ShortName;

            if (sdds.ContainsKey(symbolName))
            {
                return(sdds[symbolName]);
            }

            string csv      = "";
            string today    = DateTime.Today.ToString("dd-MM-yyyy");
            string filename = "stocker_" + today + "_" + symbolName + ".csv";

            if (MainWindow.testMode)
            {
                filename = "stocker_00-00-0000_AAA.csv";
            }

            string fileId = Drive.GetFileId(filename);

            if (fileId != "")
            {
                csv = Drive.DownloadFile(fileId, filename);
            }
            else
            {
                csv = Sources.GetHtml(symbolName);

                string folderId = Drive.CreateDirectory("temp");
                Drive.UploadFile(folderId, filename, csv);
            }

            if (csv == "Przekroczony dzienny limit wywolan")
            {
                MessageBox.Show(csv, "ERROR");
            }

            List <Data.SymbolDayData> result = new List <Data.SymbolDayData>();

            foreach (string line in csv.Split('\n'))
            {
                if (line.Length == 0)
                {
                    continue;
                }
                if (line[0] == 'D')
                {
                    continue;
                }

                string[] data = line.Split(',');
                Debug.Assert(data.Count() >= 5);

                DateTime date = DateTime.ParseExact(data[0], "yyyy-MM-dd", CultureInfo.InvariantCulture);

                // discard old data for perf
                if (date.Year < 2016)
                {
                    continue;
                }

                float open   = float.Parse(data[1], CultureInfo.InvariantCulture);
                float hi     = float.Parse(data[2], CultureInfo.InvariantCulture);
                float low    = float.Parse(data[3], CultureInfo.InvariantCulture);
                float close  = float.Parse(data[4], CultureInfo.InvariantCulture);
                uint  volume = 0;
                if (data.Length == 6)
                {
                    volume = uint.Parse(data[5]);
                }

                Data.SymbolDayData sdd = new Data.SymbolDayData(date, open, hi, low, close, volume);

                result.Add(sdd);
            }

            result.Reverse();
            sdds.Add(symbolName, result);

            return(result);
        }