Beispiel #1
0
 public BarRow(Timeframes tf, ITickSource tickSrc, int insID)
     : this(tf, insID)
 {
     _tSource         = tickSrc;
     _tSource.OnTick += TSource_Tick;
     _insID           = insID;
 }
Beispiel #2
0
 public BarRow(Timeframes tf, ITickDispatcher tickDisp, int insID)
     : this(tf, insID)
 {
     _tDisp = tickDisp;
     _insID = insID;
     _tDisp.Subscribe(this, insID, Td_Tick);
 }
Beispiel #3
0
        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();
        }
Beispiel #4
0
 /// <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);
     }
 }
Beispiel #5
0
        /// <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);
        }
Beispiel #6
0
        /// <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);
        }
Beispiel #7
0
 public TimeframeItem(Timeframes tf)
 {
     this.Tf = tf;
     string[] names = TfHelper.GetTimeframeNames(tf);
     this.ShortName = names[0];
     this.Name      = names[1];
 }
Beispiel #8
0
 /// <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));
     }
 }
Beispiel #9
0
        /// <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
            });
        }
Beispiel #10
0
        /// <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);
        }
Beispiel #11
0
        /// <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);
        }
Beispiel #12
0
        /// <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);
        }
Beispiel #13
0
        public Bar(DateTime time, Timeframes tf)
            : this()
        {
            var dates = TfHelper.GetDates(time, tf);

            this.Time        = dates[0];
            this.NextBarTime = dates[1];
        }
Beispiel #14
0
        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);
            }
        }
Beispiel #15
0
        /// <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));
        }
Beispiel #16
0
        //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();
        }
Beispiel #17
0
        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);
        }
Beispiel #18
0
        /// <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);
        }
Beispiel #19
0
        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]);
        }
Beispiel #20
0
        /// <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);
        }
Beispiel #21
0
 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;
 }
Beispiel #22
0
        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();
        }
Beispiel #24
0
        /// <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);
        }
Beispiel #25
0
        /// <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);
        }
Beispiel #26
0
        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);
        }
Beispiel #27
0
        /// <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
            });
        }
Beispiel #28
0
        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();
        }
Beispiel #29
0
        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));
        }
Beispiel #30
0
        /// <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);
        }