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); }
/* 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; }
/// <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 override bool SupportsDynamicUpdate(BarScale scale) { return(true); }
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;*/ }
// Должен вернуть True, если данный scale поддерживается // Вызывается, когда меняешь таймфрэйм через интерфейс у существующего символа public override bool SupportsDynamicUpdate(BarScale scale) { return true; }
// Должен вернуть 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("не может того быть!"); }