public iBars(IBarsData barsData) { _barsData = barsData; ISession session = barsData as ISession; if (session == null) { throw (new ArgumentException("Parameter is not a ISession", "barsData")); } _sessionSource = new SessionSource(session.Session); int bLenght = Math.Min(Math.Max(300, _barsData.Count), 2000); _buffer = new Bar[bLenght]; Trace.WriteLine(string.Format("Initialize bars buffer: size={0}", bLenght)); _fxClose = new FxClose(this); _fxHigh = new FxHigh(this); _fxLow = new FxLow(this); _fxOpen = new FxOpen(this); _fxMedian = new FxMedian(this); _fxTypical = new FxTypical(this); _fxWeighted = new FxWeighted(this); }
internal RateData(iBars ibars, ValueType valueType) { _barsData = ibars._barsData; _owner = ibars; _items = new ItemCollection(this, ibars.BarsData, valueType); _valueType = valueType; }
/// <summary> /// Пример: /// iMACD macd = new i /// /// </summary> /// <param name="barsData"></param> public void CreateInstance(IBarsData barsData) { // iMACD macd = new iMACD( if (this.Constructors.Length == 0) { throw(new Exception(string.Format("Public constructor in {0} not found", this.ClassType.FullName))); } // ClassConstructor constructor = Constructors[if]; }
public void CreateInstance(IBarsData data) { object[] parameters = CreateParameters(_parameters, data); _currentInstance = Activator.CreateInstance(_indicatorType, parameters) as Indicator; foreach (IndFunctionInfo finfo in _functions) { finfo.JoinFunction(_currentInstance); } }
public IFunction CreateInstance(IBarsData data) { IFunction instance = null; //if (_type == typeof(Close)) { // instance = new Close(data); //} else { // object[] parameters = IndicatorInfo.CreateParameters(_parameters, data); // instance = Activator.CreateInstance(_type, parameters) as IFunction; //} return(instance); }
protected override void OnCalculateScale() { int countTick = this.Owner.Owner.Symbol.Ticks.Count; int beginIndex = this.Owner.HorizontalScale.Position; if (_savedCountTick == countTick && _savedPosition == beginIndex && _savedWidth == this.Owner.Width) { return; } _savedCountTick = countTick; _savedPosition = beginIndex; _savedWidth = this.Owner.Width; int endIndex = beginIndex + this.Owner.HorizontalScale.CountBarView; IBarsData bars = this.Owner.Owner.Bars; int countBar = bars.Count; endIndex = Math.Min(endIndex, countBar); if (endIndex - beginIndex == 0) { return; } iBars ibars = this.Owner.Owner.iBars; float min = float.MaxValue; float max = float.MinValue; for (int i = beginIndex; i < endIndex; i++) { Bar bar = ibars.GetBar(i); min = Math.Min(bar.Low, min); max = Math.Max(bar.High, max); } this.Owner.VerticalScale.SetScaleValue(min, max, this.Owner.Owner.Symbol.Digits); }
protected override void OnCalculateScale() { IBarsData bars = this.Owner.Owner.Bars; if (_currentIV == null || _currentIV.TimeFrame.Second != this.Owner.Owner.Bars.TimeFrame.Second) { _views.TryGetValue(bars.TimeFrame.Second, out _currentIV); if (_currentIV == null) { ParameterCollection inputs = new ParameterCollection(); inputs.AddRange(_classBuilder.Parameters); Parameter iBarsParam = inputs["iBars"]; if (iBarsParam == null) { iBarsParam = new Parameter(this.iBars, "iBars"); inputs.Add(iBarsParam); } iBarsParam.Value = this.iBars; Indicator indicator = _classBuilder.CreateInstance(inputs.ToArray()) as Indicator; PropertyInfo[] properties = _classBuilder.ClassType.GetProperties(); List <FunctionViewInfo> functions = new List <FunctionViewInfo>(); foreach (PropertyInfo property in properties) { FunctionViewInfo fview = new FunctionViewInfo(property); if ((int)fview.Error == -1) { functions.Add(fview); fview.Join(indicator); } } _currentIV = new IndicatorView(bars.TimeFrame, indicator, functions.ToArray()); _views.Add(bars.TimeFrame.Second, _currentIV); } _savedCountTick = -1; } int countTick = this.Owner.Owner.Symbol.Ticks.Count; int beginIndex = this.Owner.HorizontalScale.Position; if (_savedCountTick == countTick && _savedPosition == beginIndex && _savedWidth == this.Owner.Width) { return; } _savedCountTick = countTick; _savedPosition = beginIndex; _savedWidth = this.Owner.Width; int cntBarW = this.Owner.HorizontalScale.CountBarView; int endIndex = beginIndex + cntBarW; int countBar = bars.Count; this.iBars.Limit = this.LimitCompute; this.iBars.SetLimit(beginIndex, cntBarW); endIndex = Math.Min(endIndex, countBar); if (endIndex - beginIndex == 0) { return; } float min = float.MaxValue; float max = float.MinValue; FunctionViewInfo[] fvs = _currentIV.FunctionsView; float val = float.NaN; for (int j = 0; j < fvs.Length; j++) { Function f = fvs[j].Function as Function; f.NativeCompute(); for (int i = beginIndex; i < endIndex; i++) { val = f.NativeGetItem(i); if (!float.IsNaN(val)) { min = Math.Min(min, val); max = Math.Max(max, val); } } } this.Owner.VerticalScale.SetScaleValue(min, max, this.Owner.Owner.Symbol.Digits); }
public ItemCollection(RateData owner, IBarsData bars, ValueType valueType) { _owner = owner; _bars = bars; _valueType = valueType; }
protected override void OnPaint(ChartGraphics g) { int beginIndex = this.Owner.HorizontalScale.Position; int endIndex = beginIndex + this.Owner.HorizontalScale.CountBarView; IBarsData bars = this.Owner.Owner.Bars; int countBar = bars.Count; endIndex = Math.Min(endIndex, countBar); g.SelectPen(this.Color); GdiBrush brushUp = g.SelectBrush(ColorUp); GdiBrush brushDown = g.SelectBrush(ColorDown); int barWidth = 0; switch (this.Owner.HorizontalScale.Zoom) { case ChartBox.ChartHorizontalScale.HorizontalZoom.Smaller: case ChartBox.ChartHorizontalScale.HorizontalZoom.Small: barWidth = 0; break; case ChartBox.ChartHorizontalScale.HorizontalZoom.Medium: barWidth = 2; break; case ChartBox.ChartHorizontalScale.HorizontalZoom.Larger: barWidth = 4; break; case ChartBox.ChartHorizontalScale.HorizontalZoom.Large: barWidth = 10; break; case ChartBox.ChartHorizontalScale.HorizontalZoom.BigLarge: barWidth = 24; break; } iBars ibars = this.Owner.Owner.iBars; for (int i = beginIndex; i < endIndex; i++) { Bar bar = ibars.GetBar(i); int x = this.Owner.HorizontalScale.GetX(i); int yLow = this.GetY(bar.Low); int yHigh = this.GetY(bar.High); if (_barsStyle != FigureBarsStyle.Line) { g.DrawLine(x, yLow, x, yHigh); if (barWidth == 0) { continue; } int yClose = this.GetY(bar.Close); int yOpen = this.GetY(bar.Open); int barWD = barWidth / 2; int x1 = x - barWD, h = 0, y = 0; if (bar.Close > bar.Open) { h = yOpen - yClose; y = yClose; g.FillRectangleExt(brushUp, x1, y, barWidth, h); } else if (bar.Close < bar.Open) { h = yClose - yOpen; y = yOpen; g.FillRectangleExt(brushDown, x1, y, barWidth, h); } if (h > 0) { g.DrawRectangle(x1, y, barWidth, h); } } else { } } }
public static object[] CreateParameters(ParameterCollection parameterInfoCollection, IBarsData data) { object[] retParameters = new object[parameterInfoCollection.Count]; int i = 0; foreach (Parameter param in parameterInfoCollection) { //if (param.FunctionDataType != null) { // FunctionInfo fi = new FunctionInfo(param.FunctionDataType); // retParameters[i] = fi.CreateInstance(data); //} else { // retParameters[i] = param.Value; //} i++; } return(retParameters); }