Example #1
0
 /// <summary>
 /// Данные фин. инструмента по ID
 /// </summary>
 /// <param name="insID">ID инструмента</param>
 /// <returns>Фин. инструмент (новый, если 0 или отрицательное)</returns>
 public CommonData.Instrum GetInstrumByID(int insID)
 {
     if (insID > 0)
     {
         return(_instrumDA.GetInstrum(insID));
     }
     else
     {
         return(NewInstrum("", "", "", 1, 0, 0));
     }
 }
Example #2
0
        public PositionTest()
        {
            DbContextOptionsBuilder <DaContext> builder = new DbContextOptionsBuilder <DaContext>();

            builder.UseNpgsql("Username=postgres;Password=123;Host=localhost;Port=5432;Database=pulxer_test");
            _options = builder.Options;

            _insDA      = new InstrumDA(_options);
            _accountDA  = new AccountDA(_options);
            _positionDA = new PositionDA(_options);

            // создание
            var gazp = _insDA.GetInstrum(0, "GAZP");

            if (gazp == null)
            {
                _gazpID = _insDA.InsertInstrum("GAZP", "Газпром", "Газпром", 10, 2, 1);
            }
            else
            {
                _gazpID = gazp.InsID;
            }

            var lkoh = _insDA.GetInstrum(0, "LKOH");

            if (lkoh == null)
            {
                _lkohID = _insDA.InsertInstrum("LKOH", "Лукойл", "Лукойл", 1, 0, 0);
            }
            else
            {
                _lkohID = lkoh.InsID;
            }

            _accountID = _accountDA.CreateAccount("", "", 0, false, Common.Data.AccountTypes.Test).AccountID;
        }
Example #3
0
 /// <summary>
 /// Синхронизировать фин. инструмент (изменить или создать новый)
 /// </summary>
 /// <param name="ticker">Тикер</param>
 /// <param name="shortname">Краткое наименование</param>
 /// <param name="name">Полное наименование</param>
 /// <param name="lotsize">Размер лота</param>
 /// <param name="decimals">Кол-во десятичных знаков после запятой в цене</param>
 /// <param name="pricestep">Шаг цены</param>
 /// <returns>Фин. инструмент после синхронизации</returns>
 public Instrum SyncInstrum(string ticker, string shortname, string name, int lotsize, int decimals, decimal pricestep)
 {
     if (!_ticker_instrum.ContainsKey(ticker))
     {
         Instrum db_ins = _da.GetInstrum(0, ticker);
         if (db_ins == null)
         {
             var ins = new Instrum
             {
                 InsID     = 0,
                 Ticker    = ticker,
                 ShortName = shortname,
                 Name      = name,
                 LotSize   = lotsize,
                 Decimals  = decimals,
                 PriceStep = pricestep
             };
             _da.InsertInstrum(ins);
             _ticker_instrum.Add(ticker, ins);
             _insID_instrum.Add(ins.InsID, ins);
             return(ins);
         }
         else
         {
             UpdateInstrum(db_ins, shortname, name, lotsize, decimals, pricestep);
             _ticker_instrum.Add(ticker, db_ins);
             _insID_instrum.Add(db_ins.InsID, db_ins);
             return(db_ins);
         }
     }
     else
     {
         var ins = _ticker_instrum[ticker];
         UpdateInstrum(ins, shortname, name, lotsize, decimals, pricestep);
         return(ins);
     }
 }
Example #4
0
        public async Task SyncAllTradesAsync()
        {
            var dbPath   = _config.GetLeechDataPath();
            var dateDirs = Directory.GetDirectories(dbPath);

            foreach (var dateDir in dateDirs)
            {
                int year, month, day;
                var ymd = Path.GetFileName(dateDir).Split('-');
                if (ymd.Length < 3)
                {
                    continue;
                }
                if (!int.TryParse(ymd[0], out year))
                {
                    continue;
                }
                if (!int.TryParse(ymd[1], out month))
                {
                    continue;
                }
                if (!int.TryParse(ymd[2], out day))
                {
                    continue;
                }
                if (year < 1900 || year > 2999)
                {
                    continue;
                }
                if (month < 1 || month > 12)
                {
                    continue;
                }
                if (day < 1 || day > 31)
                {
                    continue;
                }

                var allTradesPath = Path.Combine(dateDir, "AllTrades");
                if (!Directory.Exists(allTradesPath))
                {
                    continue;                                   // нет каталога AllTrades
                }
                var date       = new DateTime(year, month, day);
                var instrumIDs = _tickHistoryDA.GetInstrums(date);
                var tickers    = Directory.GetFiles(allTradesPath).Select(f => Path.GetFileName(f)).ToList();

                foreach (var ticker in tickers)
                {
                    var instrum = _instrumDA.GetInstrum(0, ticker);
                    if (instrum == null)
                    {
                        continue;                  // не найден тикер
                    }
                    if (instrumIDs.Contains(instrum.InsID))
                    {
                        continue;                                     // данные уже есть на нужную дату и тикер
                    }
                    var bytes = await File.ReadAllBytesAsync(Path.Combine(allTradesPath, ticker));

                    _tickHistoryDA.InsertData(instrum.InsID, date, bytes);
                }
            }
        }