Exemplo n.º 1
0
        public async Task <IActionResult> SourcesSecurityAddNewSecurity(BrokerRepositorySecurity security)
        {
            security.Decp = "-1";
            //Тип вводимого инструмента "вручную"
            security.SourceSecurityId = 1;

            var g = await _db.UpdateOneBrokerRepositorySecurity(security);

            return(View("SourcesSecurity"));
        }
Exemplo n.º 2
0
        /// <summary>
        /// take trade for period
        /// взять трейды за период
        /// </summary>
        /// <param name="timeStart"></param>
        /// <param name="timeEnd"></param>
        /// <returns></returns>
        public static string GetTrades(BrokerRepositorySecurity security, DateTime nowDate)
        {
            /*
             *  market, em, code – об этих параметрах, упоминал ранее, при обращении к функции их значения будут приниматься из файла.
             *  df, mf, yf, from, dt, mt, yt, to – это параметры времени.
             *  p — период котировок (тики, 1 мин., 5 мин., 10 мин., 15 мин., 30 мин., 1 час, 1 день, 1 неделя, 1 месяц)
             *  e – расширение получаемого файла; возможны варианты — .txt либо .csv
             *  dtf — формат даты (1 — ггггммдд, 2 — ггммдд, 3 — ддммгг, 4 — дд/мм/гг, 5 — мм/дд/гг)
             *  tmf — формат времени (1 — ччммсс, 2 — ччмм, 3 — чч: мм: сс, 4 — чч: мм)
             *  MSOR — выдавать время (0 — начала свечи, 1 — окончания свечи)
             *  mstimever — выдавать время (НЕ московское — mstimever=0; московское — mstime='on', mstimever='1')
             *  sep — параметр разделитель полей (1 — запятая (,), 2 — точка (.), 3 — точка с запятой (;), 4 — табуляция (»), 5 — пробел ( ))
             *  sep2 — параметр разделитель разрядов (1 — нет, 2 — точка (.), 3 — запятая (,), 4 — пробел ( ), 5 — кавычка ('))
             *  datf — Перечень получаемых данных (#1 — TICKER, PER, DATE, TIME, OPEN, HIGH, LOW, CLOSE, VOL; #2 — TICKER, PER, DATE, TIME, OPEN, HIGH, LOW, CLOSE; #3 — TICKER, PER, DATE, TIME, CLOSE, VOL; #4 — TICKER, PER, DATE, TIME, CLOSE; #5 — DATE, TIME, OPEN, HIGH, LOW, CLOSE, VOL; #6 — DATE, TIME, LAST, VOL, ID, OPER).
             *  at — добавлять заголовок в файл (0 — нет, 1 — да)
             */

            if (security == null || nowDate == null)
            {
                return("Ошибка определения инструмента");
            }

            //формат даты год - последние 2 цифры (1998 -> 98)
            string year_short = nowDate.ToString("yyyy").Substring(2);

            //формат даты год - последние 2 цифры (1998 -> 98)
            string year_full = nowDate.ToString("yyyy");

            //месяц начиная с 1, то есть если май, то 5, если декабрь то 12
            string month_original = nowDate.Month.ToString();

            //месяц начиная с 0, то есть если май, то 4, если декабрь то 11
            string month_minus_one = (nowDate.Month - 1).ToString();

            //день месяца
            string day = nowDate.Day.ToString();

            StringBuilder sb = new StringBuilder();

            //дата запроса котировок 27.05.2020
            //http://export.finam.ru/export9.out
            sb.Append("http://export.finam.ru/export9.out");
            //?market=17
            sb.Append($"?market={security.MarketId}");
            //&em=496222
            sb.Append($"&em={security.IdString}");
            //&token=03AGdBq24TWv3xEpwJgauNVQpUInHX2dKUht0HMCagbdRO7wRLJHYCknzeqw8jxMHzz6yFXqFPEY-vSC7L1tB8W5BYAXP4wPwHbE3pEMe7G7yNRh1ySC6WojEoIRSuzNHpaU90zdzrbwQaB5w0LWpxOwgXaNvxv14Mvbd260ucowqBYYzAO6PySWCBu9B051rRD8Nlbw6ZHvg2VtAEH_EC2rs4bBGPhhgswnIDdf4kkUOtkrXk0-MGGERh5ewNNA6muHAjS0nbNxJ6REHIDoVthxLZ0pUWUOaRUxtmqy6eDWOLgUyo5SUIg9onjmOfVD4pLgzCDoBeEAGF37mZKqeL-af2y2YKRJrezNmret4Yo27hi1wPDtzkYArMTT-49gv2OO15ofs1D0Jh
            sb.Append($"&token=03AGdBq24TWv3xEpwJgauNVQpUInHX2dKUht0HMCagbdRO7wRLJHYCknzeqw8jxMHzz6yFXqFPEY-vSC7L1tB8W5BYAXP4wPwHbE3pEMe7G7yNRh1ySC6WojEoIRSuzNHpaU90zdzrbwQaB5w0LWpxOwgXaNvxv14Mvbd260ucowqBYYzAO6PySWCBu9B051rRD8Nlbw6ZHvg2VtAEH_EC2rs4bBGPhhgswnIDdf4kkUOtkrXk0-MGGERh5ewNNA6muHAjS0nbNxJ6REHIDoVthxLZ0pUWUOaRUxtmqy6eDWOLgUyo5SUIg9onjmOfVD4pLgzCDoBeEAGF37mZKqeL-af2y2YKRJrezNmret4Yo27hi1wPDtzkYArMTT-49gv2OO15ofs1D0Jh");
            //&code=SPFB.Si-6.20
            sb.Append($"&code={security.Code}");
            //&apply=0
            sb.Append($"&apply=0");
            //&df=27
            sb.Append($"&df={day}");
            //&mf=4
            sb.Append($"&mf={month_minus_one}");
            //&yf=2020
            sb.Append($"&yf={year_full}");
            //&from=27.05.2020
            sb.Append($"&from={day}.{month_original}.{year_full}");
            //&dt=27
            sb.Append($"&dt={day}");
            //&mt=4
            sb.Append($"&mt={month_minus_one}");
            //&yt=2020
            sb.Append($"&yt={year_full}");
            //&to=27.05.2020
            sb.Append($"&to={day}.{month_original}.{year_full}");
            //&p=1            --  p — период котировок (тики, 1 мин., 5 мин., 10 мин., 15 мин., 30 мин., 1 час, 1 день, 1 неделя, 1 месяц)
            sb.Append($"&p=1");
            //&f=SPFB.Si-6.20_200527_200527
            sb.Append($"&f={security.Code}_{year_short}{nowDate.Month:D2}{nowDate.Day:D2}_{year_short}{nowDate.Month:D2}{nowDate.Day:D2}");
            //&e=.txt
            sb.Append($"&e=.txt");
            //&cn=SPFB.Si-6.20
            sb.Append($"&cn={security.Code}");
            //&dtf=1          --  dtf — формат даты (1 — ггггммдд, 2 — ггммдд, 3 — ддммгг, 4 — дд/мм/гг, 5 — мм/дд/гг)
            sb.Append($"&dtf=4");
            //&tmf=1          -- tmf — формат времени (1 — ччммсс, 2 — ччмм, 3 — чч: мм: сс, 4 — чч: мм)
            sb.Append($"&tmf=3");
            //&MSOR=1&        -- MSOR — выдавать время (0 — начала свечи, 1 — окончания свечи)
            sb.Append($"&MSOR=1");
            //mstime=on
            sb.Append($"&mstime=on");
            //&mstimever=1    -- mstimever — выдавать время (НЕ московское — mstimever=0; московское — mstime='on', mstimever='1')
            sb.Append($"&mstimever=1");
            //&sep=1          -- sep — параметр разделитель полей (1 — запятая (,), 2 — точка (.), 3 — точка с запятой (;), 4 — табуляция (»), 5 — пробел ( ))
            sb.Append($"&sep=1");
            //&sep2=1         -- sep2 — параметр разделитель разрядов (1 — нет, 2 — точка (.), 3 — запятая (,), 4 — пробел ( ), 5 — кавычка ('))
            sb.Append($"&sep2=1");
            //&datf=12        -- datf — Перечень получаемых данных (#1 — TICKER, PER, DATE, TIME, OPEN, HIGH, LOW, CLOSE, VOL; #2 — TICKER, PER, DATE, TIME, OPEN, HIGH, LOW, CLOSE; #3 — TICKER, PER, DATE, TIME, CLOSE, VOL; #4 — TICKER, PER, DATE, TIME, CLOSE; #5 — DATE, TIME, OPEN, HIGH, LOW, CLOSE, VOL; #6 — DATE, TIME, LAST, VOL, ID, OPER).
            sb.Append($"&datf=12");
            //&at=1 - добавлять заголовок
            sb.Append($"&at=1");

            return(sb.ToString());
        }
Exemplo n.º 3
0
        /// <summary>
        /// Метод получает все записи об инструментах из репозитория Финам
        ///
        /// </summary>
        /// <param name="db"></param>
        /// <param name="source_id"></param>
        /// <returns></returns>
        public static async Task <List <BrokerRepositorySecurity> > InspectSecuritiesInDb(MyDbContext db, int source_id)
        {
            //Словарь - как результат поиска нужного инструмента
            List <BrokerRepositorySecurity> result = new List <BrokerRepositorySecurity>();

            //если не определен ресурс скачивания или он не финам
            if (source_id != 2)
            {
                return(result);
            }

            var response = await GetPage("https://www.finam.ru/cache/icharts/icharts.js");

            List <BrokerRepositorySecurity> _finamSecurities = new List <BrokerRepositorySecurity>();

            string[] arraySets = response.Split('=');
            string[] arrayIds  = arraySets[1].Split('[')[1].Split(']')[0].Split(',');

            string names = arraySets[2].Split('[')[1].Split(']')[0];

            List <string> arrayNames = new List <string>();

            string name = "";

            for (int i = 1; i < names.Length; i++)
            {
                if ((names[i] == '\'' && i + 1 == names.Length)
                    ||
                    (names[i] == '\'' && names[i + 1] == ',' && names[i + 2] == '\''))
                {
                    arrayNames.Add(name);
                    name = "";
                    i   += 2;
                }
                else
                {
                    name += names[i];
                }
            }
            string[] arrayCodes        = arraySets[3].Split('[')[1].Split(']')[0].Split(',');
            string[] arrayMarkets      = arraySets[4].Split('[')[1].Split(']')[0].Split(',');
            string[] arrayDecp         = arraySets[5].Split('{')[1].Split('}')[0].Split(',');
            string[] arrayFormatStrs   = arraySets[6].Split('[')[1].Split(']')[0].Split(',');
            string[] arrayEmitentChild = arraySets[7].Split('[')[1].Split(']')[0].Split(',');
            string[] arrayEmitentUrls  = arraySets[8].Split('{')[1].Split('}')[0].Split(',');

            _finamSecurities = new List <BrokerRepositorySecurity>();

            for (int i = 0; i < arrayIds.Length; i++)
            {
                var tt = arrayEmitentUrls[i].Split(':')[1];

                bool parseInId = Int32.TryParse(arrayIds[i], out int secIntId);

                BrokerRepositorySecurity sec2 = new BrokerRepositorySecurity()
                {
                    Code             = arrayCodes[i],
                    Decp             = arrayDecp[i].Split(':')[1],
                    EmitentChild     = arrayEmitentChild[i],
                    SourceSecurityId = source_id,
                    IdString         = arrayIds[i],
                    IdInt            = parseInId ? secIntId : -1,
                    Name             = arrayNames[i],
                    Url      = arrayEmitentUrls[i].Split(':')[1],
                    MarketId = arrayMarkets[i],
                    Market   = FinamSecurityDecoder.FinamCodeToString(arrayMarkets[i])
                };

                result.Add(sec2);
            }

            return(result);
        }