/// <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)); } }
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; }
/// <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); } }
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); } } }