Exemplo n.º 1
0
        private void ButtonRemove_Click(object sender, RoutedEventArgs e)
        {
            remove = true;

            selectedSymbol   = SymbolsCb.SelectedItem as Data.SymbolInfo;
            selectedDateTime = DatePicker.SelectedDate ?? DateTime.Today;
            type             = TypeCb.SelectedItem as string;
            price            = double.Parse(Price.Text.ToString(), Data.numberFormat);

            Close();
        }
Exemplo n.º 2
0
        private void ButtonAddEdit_Click(object sender, RoutedEventArgs e)
        {
            if (fromList)
            {
                edit = true;
            }
            else
            {
                add = true;
            }

            selectedSymbol   = SymbolsCb.SelectedItem as Data.SymbolInfo;
            selectedDateTime = DatePicker.SelectedDate ?? DateTime.Today;
            type             = TypeCb.SelectedItem as string;
            price            = double.Parse(Price.Text.ToString().Replace(",", "."), Data.numberFormat);

            Close();
        }
Exemplo n.º 3
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);
        }
Exemplo n.º 4
0
            public DrawingInfo(Data.SymbolInfo symInfo, int width, int height)
            {
                viewHeight       = height;
                viewWidth        = width;
                viewMarginTop    = 3;
                viewMarginBottom = 30 /* TODO: status bar h */ + 20;
                viewMarginLeft   = 3;
                viewMarginRight  = 100;
                viewAutoScale    = true;
                crossMargin      = 15;
                candleWidth      = 5;
                candleMargin     = 1;
                maxNoVertLines   = 15; // should be max PIXELS height

                maxVal         = minVal = 0;
                minViewport    = maxViewport = 0;
                refDateStart   = DateTime.Now;
                refPixelXStart = 0;
                sddList        = null;

                currentPriceTime = "";

                si = symInfo;
            }
Exemplo n.º 5
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);
        }
Exemplo n.º 6
0
        // NOTE: this function is adapted to be run in a thread
        static retData CreateOneReport(Dictionary <string, List <Data.SymbolDayData> > sdds, Data.SymbolInfo symbolInfo)
        {
            string report = "";

            if (SymbolsDrawingsToSerialize.ContainsKey(symbolInfo.FullName) == false)
            {
                return(new retData());
            }

            var sdd = GetSymbolData(sdds, symbolInfo);

            foreach (var line in SymbolsDrawingsToSerialize[symbolInfo.FullName].chartLines)
            {
                if (line.Color != "Lime" && line.Color != "Red")
                {
                    continue;
                }

                DateTime lineStartDate = DateTime.ParseExact(line.StartPointDV.Split('+')[0],
                                                             Data.dateTimeFormat, CultureInfo.InvariantCulture);
                DateTime lineEndDate = DateTime.ParseExact(line.EndPointDV.Split('+')[0],
                                                           Data.dateTimeFormat, CultureInfo.InvariantCulture);
                double extraDaysFromStart = double.Parse(line.StartPointDV.Split('+')[1].Split(';')[0],
                                                         Data.numberFormat);
                double extraDaysToEnd = double.Parse(line.EndPointDV.Split('+')[1].Split(';')[0],
                                                     Data.numberFormat);

                if (lineEndDate.AddDays(extraDaysToEnd) < sdd[0].Date)
                {
                    continue;
                }

                // find sdd at start of line
                var sddIt = 0;
                while (sdd[sddIt].Date > lineStartDate)
                {
                    sddIt++;
                }

                double numDays = sddIt - extraDaysFromStart + extraDaysToEnd;

                double startVal = double.Parse(line.StartPointDV.Split(';')[1],
                                               Data.numberFormat);
                double endVal = double.Parse(line.EndPointDV.Split(';')[1],
                                             Data.numberFormat);
                double step = (endVal - startVal) / numDays;

                double lineValAtSdd0 = startVal + step * sddIt;

                if (sdd[0].Low < lineValAtSdd0 && lineValAtSdd0 < sdd[0].Hi)
                {
                    string e = "";

                    report += "NAME: " + symbolInfo.FullName + " with ";
                    if (step > 0)
                    {
                        e += "ASCENDING line ";
                    }
                    else
                    {
                        e += "DESCENDING line ";
                    }
                    e += "crossed at value " + lineValAtSdd0.ToString("F2", Data.numberFormat);

                    ReportItem ri = new ReportItem();
                    ri.Symbol = symbolInfo.FullName;
                    ri.Date   = sdd[0].Date;
                    ri.Event  = e;
                    ReportItems.Add(ri);

                    report += e + "\n";
                }
            }

            var rd = new retData();

            rd.reportString = report;
            return(rd);
        }
Exemplo n.º 7
0
        public static List <Data.SymbolInfo> GetSymbolsFromWeb()
        {
            List <Data.SymbolInfo> symbols = new List <Data.SymbolInfo>();

            HtmlWeb      web   = new HtmlWeb();
            HtmlDocument doc   = new HtmlDocument();
            int          page  = 1;
            int          added = 0;

            Console.WriteLine("GetSymbolsFromWeb()");

            while (true)
            {
                string data = "http://stooq.pl/t/?i=513&v=1&l=" + page.ToString();
                doc = web.Load(data);

                // XPath of symbol name
                // *[@id="f10"]
                HtmlNodeCollection symbolNodes = doc.DocumentNode.SelectNodes("//*/td[@id=\"f10\"]");
                foreach (HtmlNode node in symbolNodes.Skip(2))
                {
                    string          fullName  = node.InnerText;
                    string          shortName = node.ParentNode.FirstChild.FirstChild.InnerText;
                    Data.SymbolInfo si        = new Data.SymbolInfo(fullName, shortName);
                    symbols.Add(si);
                }

                if (symbols.Count <= added)
                {
                    throw new Exception("assert");
                }
                added = symbols.Count;

                // check if this is a last page
                string numOfItemsStr = doc.DocumentNode.SelectNodes("//*[@id=\"f13\"]/text()[1]")[0].InnerText;
                Regex  reNumOfItems  = new Regex(@".*?(\d+) z (\d+).*");
                Match  m             = reNumOfItems.Match(numOfItemsStr);
                if (m.Groups[1].ToString() == m.Groups[2].ToString())
                {
                    if (symbols.Count.ToString() != m.Groups[2].ToString())
                    {
                        throw new Exception("assert");
                    }
                    break;
                }

                page += 1;
            }

            // manually added
            {
                Data.SymbolInfo intel = new Data.SymbolInfo("_US_INTEL", "INTC.US");
                symbols.Add(intel);

                Data.SymbolInfo wig = new Data.SymbolInfo("_WIG", "WIG");
                symbols.Add(wig);
                Data.SymbolInfo wig20 = new Data.SymbolInfo("_WIG20", "WIG20");
                symbols.Add(wig20);

                Data.SymbolInfo usdpln = new Data.SymbolInfo("_FX_USDPLN", "USDPLN");
                symbols.Add(usdpln);
                Data.SymbolInfo eurpln = new Data.SymbolInfo("_FX_EURPLN", "EURPLN");
                symbols.Add(eurpln);
                Data.SymbolInfo chfpln = new Data.SymbolInfo("_FX_CHFPLN", "CHFPLN");
                symbols.Add(chfpln);
                Data.SymbolInfo gbppln = new Data.SymbolInfo("_FX_GBPPLN", "GBPPLN");
                symbols.Add(gbppln);
            }

            return(symbols);
        }