public BarScaleInterval(BarScale scale, int barInterval) : this()
 {
     if (scale != BarScale.Unknown && barInterval <= 0)
     {
         throw new Exception("please mention barInterval for scale[" + scale + "]");
     }
     this.Scale    = scale;
     this.Interval = barInterval;
 }
        // Only Daily bar scale is supported
        public override bool SupportsDynamicUpdate(BarScale scale)
        {
            Trace.WriteLine("SupportsDynamicUpdate property");
            return(true);

            /*            if (scale == BarScale.Daily)
             *              return true;
             *          else
             *              return false;*/
        }
        public Bars BarsLoadAll()
        {
            string     msig       = " BarsLoadAll(this.Abspath=[" + this.Abspath + "]): ";
            Bars       bars       = null;
            DateTime   dateTime   = DateTime.Now;
            FileStream fileStream = null;

            try {
                fileStream = File.Open(this.Abspath, FileMode.Open, FileAccess.Read, FileShare.Read);
                BinaryReader binaryReader = new BinaryReader(fileStream);

                double version = binaryReader.ReadDouble();
                //Assembler.PopupException("LoadBars[" + this.Relpath + "]: version[" + version + "]");
                string           symbol = binaryReader.ReadString();
                string           symbolHumanReadable = binaryReader.ReadString();
                BarScale         barScale            = (BarScale)binaryReader.ReadInt32();
                int              barInterval         = binaryReader.ReadInt32();
                BarScaleInterval scaleInterval       = new BarScaleInterval(barScale, barInterval);
                //string shortFnameIneedMorePathParts = Path.GetFileName(this.Abspath);
                //string shortFname = this.Abspath.Substring(this.Abspath.IndexOf("" + Path.DirectorySeparatorChar + "Data" + Path.DirectorySeparatorChar + "") + 6);
                string shortFname = this.Relpath;
                bars = new Bars(symbol, scaleInterval, shortFname);
                int barsStored = binaryReader.ReadInt32();
                //int securityType = binaryReader.ReadInt32();
                //bars.SymbolInfo.SecurityType = (SecurityType)securityType;
                for (int barsRead = 0; barsRead < barsStored; barsRead++)
                {
                    DateTime dateTimeOpen = new DateTime(binaryReader.ReadInt64());
                    double   open         = binaryReader.ReadDouble();
                    double   high         = binaryReader.ReadDouble();
                    double   low          = binaryReader.ReadDouble();
                    double   close        = binaryReader.ReadDouble();
                    double   volume       = binaryReader.ReadDouble();
                    Bar      barAdded     = bars.BarCreateAppendBindStatic(dateTimeOpen, open, high, low, close, volume);
                }
            } catch (EndOfStreamException ex) {
                Assembler.PopupException(ex.Message + msig, ex);
            } finally {
                if (fileStream != null)
                {
                    fileStream.Close();
                }
            }
            return(bars);
        }
Exemple #4
0
        /* void bars_NewBarEvent(object sender, BarsEventArgs e)
         * {
         *  // Получаю IBars, в который был добавлен бар
         *  OpenWealth.IBars owBars = sender as OpenWealth.IBars;
         *  if (owBars == null)
         *  {
         *      l.Error("bars_NewBarEvent owBars == null");
         *      return;
         *  }
         *
         *  l.Debug("bars_NewBarEvent " + owBars);
         *
         *  // Достаю из кэша WealthLab.Bars, в который эти изменения должны быть внесены
         *  WealthLab.Bars wlBars = null;
         *  lock (barsCache)
         *  {
         *      if (barsCache.ContainsKey(owBars))
         *          wlBars = barsCache[owBars].Target as WealthLab.Bars;
         *  }
         *
         *  if (wlBars == null)
         *  {
         *      l.Debug("wlBars не найден в barsCache");
         *      //owBars.ChangeBarEvent -= bars_ChangeBarEvent;
         *      owBars.NewBarEvent -= bars_NewBarEvent;
         *      return;
         *  }
         *
         *  IBar bar = owBars.GetPrevious(e.bar);
         *  if (bar != null)
         *  {
         *      int idx = wlBars.Date.IndexOf(bar.dt);
         *      if (idx < 0)
         *      {
         *          if (wlBars.Count>0)
         *              l.Debug("bars_NewBarEvent бар не найден " + e.bar.dt + " " + wlBars.Date[wlBars.Count-1]);
         *          else
         *              l.Debug("bars_NewBarEvent бар не найден wlBars.Count==0");
         *          wlBars.Add(bar.dt, bar.open, bar.high, bar.low, bar.close, bar.volume);
         *      }
         *      else
         *      {
         *          l.Debug("предыдущий бар уже содержется в wlBars");
         *          wlBars.Open[idx] = bar.open;
         *          wlBars.High[idx] = bar.high;
         *          wlBars.Low[idx] = bar.low;
         *          wlBars.Close[idx] = bar.close;
         *          wlBars.Volume[idx] = bar.volume;
         *      }
         *  }
         *  else
         *      l.Debug("не найден предыдущий бар");
         *
         * }
         */

        IScale WLScale2Scale(BarScale barScale, int barInterval)
        {
            l.Debug("WLScale2Scale");

            int multiplier = barInterval;

            if (multiplier == 0)
            {
                multiplier = 1;
            }
            switch (barScale)
            {
            case BarScale.Daily:
                return(data.GetScale(ScaleEnum.sec, multiplier * 60 * 60 * 24));

            case BarScale.Minute:
                return(data.GetScale(ScaleEnum.sec, multiplier * 60));

            case BarScale.Monthly:
                return(data.GetScale(ScaleEnum.month, multiplier));

            case BarScale.Quarterly:
                return(data.GetScale(ScaleEnum.undefined, multiplier));   //TODO определить таймфрейм

            case BarScale.Second:
                return(data.GetScale(ScaleEnum.sec, multiplier));

            case BarScale.Tick:
                return(data.GetScale(ScaleEnum.tick, multiplier));

            case BarScale.Weekly:
                return(data.GetScale(ScaleEnum.undefined, multiplier));   //TODO определить таймфрейм

            case BarScale.Yearly:
                return(data.GetScale(ScaleEnum.undefined, multiplier));   //TODO определить таймфрейм

            default:
                throw new Exception("Не известный BarScale ");
            }
            throw new Exception("не может того быть!");
        }
 public BarScaleInterval()
 {
     this.Scale    = BarScale.Unknown;
     this.Interval = 0;
 }
Exemple #6
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="symbol"></param>
 /// <param name="scale"></param>
 /// <param name="interval"></param>
 public BarsAndDom(string symbol, BarScale scale, int interval)
     : base(symbol, scale, interval)
 {
     Level2History = new Level2History(Symbol);
 }
Exemple #7
0
 public override bool SupportsDynamicUpdate(BarScale scale)
 {
     return(true);
 }
Exemple #8
0
        public override void RequestUpdates(List <string> symbols, DateTime startDate, DateTime endDate, BarScale scale, int barInterval, IUpdateRequestCompleted requestCompleted)
        {
            List <Task> tasks = new List <Task>();

            BarDataScale dataScale = new BarDataScale(scale, barInterval);

            foreach (string updSymbol in symbols)
            {
                SymbolDescription symbolDescription = GetSymbolDescription(updSymbol);

                if (symbolDescription != null)
                {
                    tasks.Add(Task.Factory.StartNew((object updateRequiredSymbol) =>
                    {
                        string symbol = (string)updateRequiredSymbol;

                        DateTime currentDate = DateTime.Now;

                        Bars bars = new Bars(symbol, scale, barInterval);

                        try
                        {
                            string suffix = GetSuffix(dataScale);

                            int corrections = 0;
                            bars.AppendWithCorrections(GetHistory(dataScale, symbol, suffix), out corrections);

                            if (bars.Count > 0 && bars.Date[bars.Count - 1] > currentDate)
                            {
                                bars.Delete(bars.Count - 1);
                            }

                            requestCompleted.UpdateCompleted(bars);
                        }
                        catch (Exception exception)
                        {
                            logger.Error(exception);
                            requestCompleted.UpdateError(symbol, exception);
                        }
                    }, updSymbol));
                }
                else
                {
                    requestCompleted.UpdateError(updSymbol, new Exception("В формате имени инструмента была допущена ошибка"));
                }
            }

            if (tasks.Count > 0)
            {
                Task.WaitAll(tasks.ToArray());
            }

            requestCompleted.ProcessingCompleted();
        }
 /// <summary>
 /// Load External Symbol
 /// </summary>
 /// <param name="symbol"></param>
 /// <param name="scale"></param>
 /// <param name="barInterval"></param>
 /// <param name="includePartialBar"></param>
 /// <returns></returns>
 public static Bars LoadExternalSymbol(string symbol, BarScale scale, int barInterval, bool includePartialBar)
 {
     return((Bars)_loadExternalSymbolWith4Args.Invoke(_instance, new object[] { symbol, scale, barInterval, includePartialBar }));
 }
		public BarScaleInterval(BarScale scale, int barInterval) : this() {
			if (scale != BarScale.Unknown && barInterval <= 0) throw new Exception("please mention barInterval for scale[" + scale + "]");
			this.Scale = scale;
			this.Interval = barInterval;
		}
 // Должен вернуть True, если данный scale поддерживается
 // Вызывается, когда меняешь таймфрэйм через интерфейс у существующего символа
 // Если вернуть False, то WL не даст переключиться на данный таймфрейм
 public override bool SupportsDynamicUpdate(BarScale scale)
 {
     l.Debug("SupportsDynamicUpdate");
     return true;
 }
 // Only Daily bar scale is supported
 public override bool SupportsDynamicUpdate(BarScale scale)
 {
     Trace.WriteLine("SupportsDynamicUpdate property");
     return true;
     /*            if (scale == BarScale.Daily)
                     return true;
                 else
                     return false;*/
 }
Exemple #13
0
 // Должен вернуть True, если данный scale поддерживается
 // Вызывается, когда меняешь таймфрэйм через интерфейс у существующего символа
 public override bool SupportsDynamicUpdate(BarScale scale)
 {
     return true;
 }
Exemple #14
0
 // Должен вернуть True, если данный scale поддерживается
 // Вызывается, когда меняешь таймфрэйм через интерфейс у существующего символа
 // Если вернуть False, то WL не даст переключиться на данный таймфрейм
 public override bool SupportsDynamicUpdate(BarScale scale)
 {
     l.Debug("SupportsDynamicUpdate");
     return(true);
 }
        /* void bars_NewBarEvent(object sender, BarsEventArgs e)
        {
            // Получаю IBars, в который был добавлен бар
            OpenWealth.IBars owBars = sender as OpenWealth.IBars;
            if (owBars == null)
            {
                l.Error("bars_NewBarEvent owBars == null");
                return;
            }

            l.Debug("bars_NewBarEvent " + owBars);

            // Достаю из кэша WealthLab.Bars, в который эти изменения должны быть внесены
            WealthLab.Bars wlBars = null;
            lock (barsCache)
            {
                if (barsCache.ContainsKey(owBars))
                    wlBars = barsCache[owBars].Target as WealthLab.Bars;
            }

            if (wlBars == null)
            {
                l.Debug("wlBars не найден в barsCache");
                //owBars.ChangeBarEvent -= bars_ChangeBarEvent;
                owBars.NewBarEvent -= bars_NewBarEvent;
                return;
            }

            IBar bar = owBars.GetPrevious(e.bar);
            if (bar != null)
            {
                int idx = wlBars.Date.IndexOf(bar.dt);
                if (idx < 0)
                {
                    if (wlBars.Count>0)
                        l.Debug("bars_NewBarEvent бар не найден " + e.bar.dt + " " + wlBars.Date[wlBars.Count-1]);
                    else
                        l.Debug("bars_NewBarEvent бар не найден wlBars.Count==0");
                    wlBars.Add(bar.dt, bar.open, bar.high, bar.low, bar.close, bar.volume);
                }
                else
                {
                    l.Debug("предыдущий бар уже содержется в wlBars");
                    wlBars.Open[idx] = bar.open;
                    wlBars.High[idx] = bar.high;
                    wlBars.Low[idx] = bar.low;
                    wlBars.Close[idx] = bar.close;
                    wlBars.Volume[idx] = bar.volume;
                }
            }
            else
                l.Debug("не найден предыдущий бар");

        }
        */
        IScale WLScale2Scale(BarScale barScale, int barInterval)
        {
            l.Debug("WLScale2Scale");

            int multiplier = barInterval;
            if (multiplier ==0)
                multiplier = 1;
            switch (barScale)
            {
                case BarScale.Daily:
                    return data.GetScale(ScaleEnum.sec, multiplier*60*60*24);
                case BarScale.Minute:
                    return data.GetScale(ScaleEnum.sec, multiplier*60);
                case BarScale.Monthly:
                    return data.GetScale(ScaleEnum.month, multiplier);
                case BarScale.Quarterly:
                    return data.GetScale(ScaleEnum.undefined, multiplier);//TODO определить таймфрейм
                case BarScale.Second:
                    return data.GetScale(ScaleEnum.sec, multiplier);
                case BarScale.Tick:
                    return data.GetScale(ScaleEnum.tick, multiplier);
                case BarScale.Weekly:
                    return data.GetScale(ScaleEnum.undefined, multiplier);//TODO определить таймфрейм
                case BarScale.Yearly:
                    return data.GetScale(ScaleEnum.undefined, multiplier);//TODO определить таймфрейм
                default:
                    throw new Exception("Не известный BarScale ");
            }
            throw new Exception("не может того быть!");
        }
Exemple #16
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="symbol"></param>
 /// <param name="scale"></param>
 /// <param name="interval"></param>
 public BarsAndDom(string symbol, BarScale scale, int interval) : base(symbol, scale, interval)
 {
     Level2History = new Level2History(Symbol);
 }
		public BarScaleInterval() {
			this.Scale = BarScale.Unknown;
			this.Interval = 0;
		}