public BarRow(Timeframes tf, ITickSource tickSrc, int insID) : this(tf, insID) { _tSource = tickSrc; _tSource.OnTick += TSource_Tick; _insID = insID; }
public BarRow(Timeframes tf, ITickDispatcher tickDisp, int insID) : this(tf, insID) { _tDisp = tickDisp; _insID = insID; _tDisp.Subscribe(this, insID, Td_Tick); }
private void Edit(List <string> args) { if (args.Count < 3) { _console.WriteError("Неверное число аргументов"); return; } DateTime start; if (DateTime.TryParse(args[0], out start)) { _tickSource.StartDate = start; } DateTime end; if (DateTime.TryParse(args[1], out end)) { _tickSource.EndDate = end; } Timeframes tf; if (Timeframes.TryParse(args[2], out tf)) { _tickSource.Timeframe = tf; } View(); }
/// <summary> /// Создание потоков исторических данных по тикерам /// </summary> /// <param name="tickers">Список тикеров</param> /// <param name="tf">Таймфрейм</param> public void CreateInsStores(IEnumerable <string> tickers, Timeframes tf) { foreach (var ticker in tickers) { CreateInsStore(ticker, tf); } }
/// <summary> /// Оптимальная начальная дата исторических данных /// </summary> /// <param name="endHistoryDate">Последняя дата исторических данных</param> /// <param name="tf">Таймфрейм</param> /// <returns>В зависимости от таймфрейма вычисляется оптимальный размер исторических данных и вычисляется их начальная дата</returns> public DateTime GetDefaultStartHistoryDate(DateTime endHistoryDate, Timeframes tf) { DateTime hist = endHistoryDate; switch (tf) { case Timeframes.Tick: hist = endHistoryDate.AddDays(-10); break; case Timeframes.Min: hist = endHistoryDate.AddMonths(-1); break; case Timeframes.Min5: hist = endHistoryDate.AddMonths(-2); break; case Timeframes.Min10: hist = endHistoryDate.AddMonths(-3); break; case Timeframes.Min15: hist = endHistoryDate.AddMonths(-4); break; case Timeframes.Min20: hist = endHistoryDate.AddMonths(-5); break; case Timeframes.Min30: hist = endHistoryDate.AddMonths(-6); break; case Timeframes.Hour: hist = endHistoryDate.AddYears(-1); break; case Timeframes.Day: hist = endHistoryDate.AddYears(-5); break; case Timeframes.Week: hist = endHistoryDate.AddYears(-5); break; } return(hist); }
/// <summary> /// Оптимальная конечная дата для работы симулятора /// </summary> /// <param name="startDate">Начальная дата работы симулятора</param> /// <param name="tf">Таймфрейм</param> /// <returns>В зависимости от таймфрейма вычисляется оптимальная конечная дата работы симулятора. Перед запуском симулятора данные по конечную дату должны быть загружены с сервера.</returns> public DateTime GetDefaultEndForwardDate(DateTime startDate, Timeframes tf) { DateTime hist = startDate; switch (tf) { case Timeframes.Tick: hist = startDate.AddDays(10); break; case Timeframes.Min: hist = startDate.AddMonths(1); break; case Timeframes.Min5: hist = startDate.AddMonths(2); break; case Timeframes.Min10: hist = startDate.AddMonths(3); break; case Timeframes.Min15: hist = startDate.AddMonths(4); break; case Timeframes.Min20: hist = startDate.AddMonths(5); break; case Timeframes.Min30: hist = startDate.AddMonths(6); break; case Timeframes.Hour: hist = startDate.AddYears(1); break; case Timeframes.Day: hist = startDate.AddYears(5); break; case Timeframes.Week: hist = startDate.AddYears(5); break; } return(hist); }
public TimeframeItem(Timeframes tf) { this.Tf = tf; string[] names = TfHelper.GetTimeframeNames(tf); this.ShortName = names[0]; this.Name = names[1]; }
/// <summary> /// Get InsStore by instrument and timeframe /// </summary> /// <param name="insID"></param> /// <param name="tf"></param> /// <returns></returns> public CommonData.InsStore GetInsStore(int insID, Timeframes tf) { using (var db = new DaContext(_options)) { return(db.InsStore.FirstOrDefault(s => s.InsID == insID && s.Tf == tf)); } }
/// <summary> /// Get Chart object by account, instrument and timeframe (single chart) /// </summary> /// <param name="accountID"></param> /// <param name="insID"></param> /// <param name="tf"></param> /// <returns></returns> public CommonData.Chart GetChart(int accountID, int insID, Timeframes tf) { return(null); //????????????????????? DbChart chart = null; using (var db = new DaContext(_options)) { chart = db.Chart.FirstOrDefault(r => r.AccountID == accountID && r.InsID == insID && r.Tf == (byte)tf); if (chart == null) { return(null); } } var xd = new XDocument(); if (!string.IsNullOrEmpty(chart.Data)) { xd = XDocument.Parse(chart.Data); } return(new CommonData.Chart() { ChartID = chart.ChartID, InsID = chart.InsID, Tf = (Timeframes)chart.Tf, AccountID = chart.AccountID, XmlData = xd }); }
/// <summary> /// Считать файл из кэша /// </summary> /// <param name="ticker">Тикер</param> /// <param name="tf">Таймфрейм</param> /// <param name="date1">Дата1</param> /// <param name="date2">Дата2</param> /// <returns>Чситанные данные или null</returns> private byte[] ReadCache(string ticker, Timeframes tf, DateTime date1, DateTime date2) { string cachePath = _config.GetHistoryProviderCache(); if (string.IsNullOrEmpty(cachePath)) { return(null); } string filename = string.Format("{0}_{1}.txt", date1.ToString("yyyy-MM-dd"), date2.ToString("yyyy-MM-dd")); string path = Path.Combine(cachePath, ticker, tf.ToString(), filename); byte[] data = null; try { data = File.ReadAllBytes(path); } catch { } return(data); }
/// <summary> /// Подстановка значений параметров в строку /// </summary> /// <param name="isStr">Исходная строка</param> /// <param name="ticker"></param> /// <param name="tf"></param> /// <param name="date1"></param> /// <param name="date2"></param> /// <returns>Результат</returns> private string ReplParams(string inStr, string ticker, Timeframes tf, DateTime date1, DateTime date2) { string outStr = inStr; TickerData tickerData = _tickers.FirstOrDefault(t => t.Ticker == ticker); TimeframeData tfData = _tfds.FirstOrDefault(t => t.Tf == tf); outStr = outStr.Replace("{TICKER}", ticker); outStr = outStr.Replace("{ID}", tickerData.ID); outStr = outStr.Replace("{Market}", tickerData.Market); outStr = outStr.Replace("{TfParam}", tfData.TfParam); outStr = outStr.Replace("{TFKey}", tfData.TfKey); outStr = outStr.Replace("{DATF}", tfData.Datf); outStr = outStr.Replace("{YYF}", date1.Date.Year.ToString().Substring(2, 2)); outStr = outStr.Replace("{MMF}", date1.Date.Month.ToString("0#")); outStr = outStr.Replace("{DDF}", date1.Date.Day.ToString("0#")); outStr = outStr.Replace("{YYT}", date2.Date.Year.ToString().Substring(2, 2)); outStr = outStr.Replace("{MMT}", date2.Date.Month.ToString("0#")); outStr = outStr.Replace("{DDT}", date2.Date.Day.ToString("0#")); outStr = outStr.Replace("{DF}", date1.Date.Day.ToString()); outStr = outStr.Replace("{MF}", date1.Date.Month.ToString()); outStr = outStr.Replace("{MF-1}", (date1.Date.Month - 1).ToString()); outStr = outStr.Replace("{DF-1}", (date1.Date.Day - 1).ToString()); outStr = outStr.Replace("{YYYYF}", date1.Date.Year.ToString()); outStr = outStr.Replace("{DT}", date2.Date.Day.ToString()); outStr = outStr.Replace("{MT}", date2.Date.Month.ToString()); outStr = outStr.Replace("{MT-1}", (date2.Date.Month - 1).ToString()); outStr = outStr.Replace("{DT-1}", (date2.Date.Day - 1).ToString()); outStr = outStr.Replace("{YYYYT}", date2.Date.Year.ToString()); return(outStr); }
/// <summary> /// Get time period for date and timeframe /// </summary> /// <param name="date">Date</param> /// <param name="tf">Timeframe</param> /// <returns>Begin time of interval, begin time of the next interval</returns> public static DateTime[] GetDates(DateTime date, Timeframes tf) { DateTime d1 = DateTime.MinValue; DateTime d2 = DateTime.MinValue; switch (tf) { case Timeframes.Tick: d1 = date; d2 = date; break; case Timeframes.Min: d1 = new DateTime(date.Year, date.Month, date.Day, date.Hour, date.Minute, 0); d2 = d1.AddMinutes(1); break; case Timeframes.Min5: d1 = new DateTime(date.Year, date.Month, date.Day, date.Hour, (date.Minute / 5) * 5, 0); d2 = d1.AddMinutes(5); break; case Timeframes.Min10: d1 = new DateTime(date.Year, date.Month, date.Day, date.Hour, (date.Minute / 10) * 10, 0); d2 = d1.AddMinutes(10); break; case Timeframes.Min15: d1 = new DateTime(date.Year, date.Month, date.Day, date.Hour, (date.Minute / 15) * 15, 0); d2 = d1.AddMinutes(15); break; case Timeframes.Min20: d1 = new DateTime(date.Year, date.Month, date.Day, date.Hour, (date.Minute / 20) * 20, 0); d2 = d1.AddMinutes(20); break; case Timeframes.Min30: d1 = new DateTime(date.Year, date.Month, date.Day, date.Hour, (date.Minute / 30) * 30, 0); d2 = d1.AddMinutes(30); break; case Timeframes.Hour: d1 = new DateTime(date.Year, date.Month, date.Day, date.Hour, 0, 0); d2 = d1.AddHours(1); break; case Timeframes.Day: d1 = new DateTime(date.Year, date.Month, date.Day, 0, 0, 0); d2 = d1.AddDays(1); break; case Timeframes.Week: d1 = ToStartWeek(date); d2 = ToStartNextWeek(date); break; } DateTime[] dates = { d1, d2 }; return(dates); }
public Bar(DateTime time, Timeframes tf) : this() { var dates = TfHelper.GetDates(time, tf); this.Time = dates[0]; this.NextBarTime = dates[1]; }
public ChartManager GetChartManager(int accountID, int insID, Timeframes tf) { lock (_cmCache) { ChartManager cm = _cmCache.GetChartManager(accountID, insID, tf); if (cm != null) { return(cm); } var account = _accountDA.GetAccountByID(accountID); if (account == null) { return(null); } if (account.AccountType == AccountTypes.Real) { cm = new ChartManager(_instrumBL, _insStoreBL, _accountDA, _tickDisp); } else { DateTime end = DateTime.Today; DateTime start = end.AddDays(-1); var json = _reposBL.GetStringParam(TestRun.ACCOUNT_META + accountID.ToString()); try { var meta = JsonConvert.DeserializeObject <AccountMeta>(json); if (meta != null) { start = meta.TickSource_StartDate; end = meta.TickSource_EndDate; } } catch { } cm = new ChartManager(_instrumBL, _insStoreBL, _accountDA, start, end); } var chart = _chartDA.GetChart(accountID, insID, tf); if (chart != null) { cm.Initialize(chart.XmlData); } else { cm.Initialize(); cm.CreatePrices(insID, tf); } cm.LoadHistoryAsync().Wait(); // нехорошо ждать внутри лока _cmCache.AddChartManager(accountID, insID, tf, cm); return(cm); } }
/// <summary> /// Получить объект InsStore /// Объект InsStore используется для хранения исторических данных по фин. инструменту. /// Исторические данные храняться в указанном таймфрейме. /// </summary> /// <param name="ticker">Инструмент</param> /// <param name="tf">ТФ</param> /// <returns>InsStore, null - тикер не найден либо InsStore не найден</returns> public CommonData.InsStore GetInsStore(string ticker, Timeframes tf) { var instrum = _instrumBL.GetInstrum(ticker); if (instrum == null) { return(null); } return(_insStoreDA.GetInsStore(instrum.InsID, tf)); }
//public event EventHandler Load; public Form1() { currencypairs = new CurrencyPairs(); login = new Login(); timeframes = new Timeframes(); this.Load += new EventHandler(Form1_Load); this.Load += Form1_Load; InitializeComponent(); }
public async Task <IBarRow> CreateBarRow(int insId, Timeframes tf, int historyDays) { BarRow bars = new BarRow(tf, _tickDisp, insId); DateTime curDate = DateTime.Today; var endHistoryDate = curDate.AddDays(-1); var startHistoryDate = endHistoryDate.AddDays(-historyDays); await _insStoreBL.LoadHistoryAsync(bars, insId, startHistoryDate, endHistoryDate); _barRows.Add(bars); return(bars); }
/// <summary> /// Создать объект InsStore, если не существует /// </summary> /// <param name="insID">Инструмент</param> /// <param name="tf">ТФ</param> /// <returns>InsStore</returns> public CommonData.InsStore CreateInsStore(int insID, Timeframes tf) { var insStore = _insStoreDA.GetInsStore(insID, tf); if (insStore == null) { int insStoreID = _insStoreDA.CreateInsStore(insID, tf, true); insStore = _insStoreDA.GetInsStoreByID(insStoreID); } return(insStore); }
public ChartManager GetChartManager(int accountID, int insID, Timeframes tf) { string key = accountID.ToString() + ":" + insID.ToString() + ":" + ((byte)tf).ToString(); if (!_key_chartManager.ContainsKey(key)) { return(null); } return(_key_chartManager[key]); }
/// <summary> /// Добавить в chart график цены /// </summary> /// <param name="insID">Инструмент</param> /// <param name="tf">Таймфрейм</param> public void CreatePrices(int insID, Timeframes tf) { var ins = _instrumBL.GetInstrumByID(insID); if (ins == null) { return; } string guid = Guid.NewGuid().ToString(); CreateBarRowSource(ins, tf, guid); }
public BarRow(Timeframes tf, int insID) { _bars = new List <Bar>(); _timeline = new Timeline(tf); _openVR = new ValueRow(); _closeVR = new ValueRow(); _highVR = new ValueRow(); _lowVR = new ValueRow(); _medianVR = new ValueRow(); _typicalVR = new ValueRow(); _nextBarTime = DateTime.MinValue; _insID = insID; }
public bool AddChartManager(int accountID, int insID, Timeframes tf, ChartManager cm) { string key = accountID.ToString() + ":" + insID.ToString() + ":" + ((byte)tf).ToString(); if (_key_chartManager.ContainsKey(key)) { return(false); } _key_chartManager.Add(key, cm); return(true); }
public ChartServiceLiveCharts(Dispatcher dispatcher) { this.dispatcher = dispatcher; OhclValues = new ChartValues <OhlcPoint>(); LabelsX = new List <string>(); Timeframes = KlineType.Intervals; SelectedInterval = Timeframes.First(); PairSelecteds = PairsMy.Pairs; Series = new SeriesCollection(); CreateCandleSeries(); }
/// <summary> /// Create InsStore (array of fin. instrument quotes) /// </summary> /// <param name="insID">Instrument</param> /// <param name="tf">Timeframe</param> /// <param name="isEnable">Active for sync</param> /// <returns></returns> public int CreateInsStore(int insID, Timeframes tf, bool isEnable) { int id = 0; var db_InsStore = new DBModel.InsStore() { InsID = insID, Tf = (byte)tf, IsEnable = isEnable }; _da.DbContext.Insert(db_InsStore); id = db_InsStore.InsStoreID; return(id); }
/// <summary> /// Create InsStore (array of fin. instrument quotes) /// </summary> /// <param name="insID">Instrument</param> /// <param name="tf">Timeframe</param> /// <param name="isEnable">Active for sync</param> /// <returns></returns> public int CreateInsStore(int insID, Timeframes tf, bool isEnable) { var insStore = new CommonData.InsStore() { InsID = insID, Tf = tf, IsEnable = isEnable }; using (var db = new DaContext(_options)) { db.InsStore.Add(insStore); db.SaveChanges(); } return(insStore.InsStoreID); }
private void AddBarRowSource2Xml(XDocument xdChart, string guid, int insID, Timeframes tf) { var xnSources = xdChart.Root.Element("Sources"); if (xnSources == null) { xnSources = new XElement("Sources"); xdChart.Root.Add(xnSources); } var xnBarRow = new XElement("BarRow", new XAttribute("Id", guid), new XAttribute("InsID", insID.ToString()), new XAttribute("Tf", ((int)tf).ToString())); xnSources.Add(xnBarRow); }
/// <summary> /// Get InsStore by instrument and timeframe /// </summary> /// <param name="insID"></param> /// <param name="tf"></param> /// <returns></returns> public CommonData.InsStore GetInsStore(int insID, Timeframes tf) { DBModel.InsStore ss = null; ss = _da.DbContext.Table <InsStore>().FirstOrDefault(s => s.InsID == insID && s.Tf == (byte)tf); if (ss == null) { return(null); } return(new CommonData.InsStore() { InsStoreID = ss.InsStoreID, InsID = ss.InsID, Tf = (Timeframes)ss.Tf, IsEnable = ss.IsEnable }); }
public ChartService(Dispatcher dispatcher, double gridHeight, double gridWidth) { this.dispatcher = dispatcher; GridHeight = gridHeight; GridWidth = gridWidth; candlestick = new Candlestick(); ChartServ = new Charts.Services.ChartService(candlestick); candles = new List <Charts.Models.Candle>(); Timeframes = KlineType.Intervals; SelectedInterval = Timeframes.First(); timer = new Timer(2000); timer.Elapsed += Timer_Elapsed; timer.Start(); }
public async Task <IEnumerable <Bar> > GetDataAsync(string ticker, Timeframes tf, DateTime date1, DateTime date2) { if (_requester == null) { return(null); } if (_tickers.All(td => td.Ticker != ticker)) { return(null); } if (_tfds.All(t => t.Tf != tf)) { return(null); } byte[] data = ReadCache(ticker, tf, date1, date2); if (data == null) { string url = ReplParams(_baseUrl, ticker, tf, date1, date2); data = await _requester.RequestAsync(url); if (data != null) { WriteCache(ticker, tf, date1, date2, data); } } ParserSettings ps = new ParserSettings(); ps.SkipLinesCount = 1; if (tf == Timeframes.Tick) { ps.OpenPriceIndex = ps.HighPriceIndex = ps.LowPriceIndex = ps.ClosePriceIndex = ps.VolumeIndex = -1; ps.FieldCount = 6; } else { ps.TickPriceIndex = ps.TickVolumeIndex = -1; ps.FieldCount = 9; } Parser parser = new Parser(ps); return(await parser.ParseAsync(data)); }
/// <summary> /// Create new chart /// </summary> /// <param name="accountID">Account Id</param> /// <param name="insID">Instrum Id</param> /// <param name="tf">Timeframe</param> /// <param name="xData">Chart data</param> /// <returns></returns> public int CreateChart(int accountID, int insID, Timeframes tf, XDocument xData) { DbChart db_chart = new DbChart() { ChartID = 0, InsID = insID, Tf = (byte)tf, AccountID = accountID, Data = xData.ToString() }; using (var db = new DaContext(_options)) { db.Chart.Add(db_chart); db.SaveChanges(); } return(db_chart.ChartID); }