public static Barline CreateBarline(BarlineProperties bi) { ObjectFactory factory = new ObjectFactory(); Barline barline = factory.createBarline(); //create an ending if (bi.EndingValue != "") { Ending ending = factory.createEnding(); ending.setType(StartStopDiscontinue.fromValue(bi.EndingType)); ending.setValue(bi.EndingValue); barline.setEnding(ending); } //create a repeat if (bi.RepeatTimes != "") { Repeat repeat = factory.createRepeat(); repeat.setTimes(new BigInteger(bi.RepeatTimes)); repeat.setDirection(BackwardForward.fromValue(bi.RepeatDirection)); barline.setRepeat(repeat); } //set bar line location if (bi.Location != "") { barline.setLocation(RightLeftMiddle.fromValue(bi.Location)); } return(barline); }
public void Add(List <DataType> dataPoints, DateTime?startDate = null, DateTime?endDate = null) { if (dataPoints == null) { Debug.WriteLine("MarketSeriesBase Add - NULL dataPoints - FIXME !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); return; } var lastDataEndDate = this[LastIndex].Time; // TODO: Fill range from startDate to endDate with "NoData" and if a range is loaded that creates a gap with existing ranges, fill that with "MissingData" //if (bars.Count == 0) return; var resultsStartDate = dataPoints.Count == 0 ? default(DateTime) : dataPoints[0].Time; var resultsEndDate = dataPoints.Count == 0 ? default(DateTime) : dataPoints[dataPoints.Count - 1].Time; if (!startDate.HasValue) { startDate = resultsStartDate; Debug.WriteLine("WARN -!startDate.HasValue in MarketSeries.Add"); } if (!endDate.HasValue) { endDate = resultsEndDate; Debug.WriteLine("WARN -!endDate.HasValue in MarketSeries.Add"); } #if DEBUG_BARSCOPIED int dataPointsCopied = 0; #endif if (this.Count == 0 && DataEndDate == default(DateTime) && DataStartDate == default(DateTime)) { foreach (var b in dataPoints) { Add(b); //Add(b.Time,b.Open,b.High,b.Low,b.Close,b.Volume); //this.openTime.Add(b.Time); //this.open.Add(b.Open); //this.high.Add(b.High); //this.low.Add(b.Low); //this.close.Add(b.Close); //this.tickVolume.Add(b.Volume); } } else { if (startDate <= DataStartDate) // prepending data { int lastIndexToCopy; for (lastIndexToCopy = dataPoints.Count - 1; lastIndexToCopy >= 0 && dataPoints[lastIndexToCopy].Time >= DataStartDate; lastIndexToCopy--) { ; // OPTIMIZE? } for (int dataIndex = OpenTime.Count == 0 ? 0 : OpenTime.FirstIndex - 1; lastIndexToCopy >= 0; dataIndex--, lastIndexToCopy--) { //var bar = bars[lastIndexToCopy] as TimedBar; //if (bar == null) //{ // bar = new TimedBar(bars[lastIndexToCopy]); //} this[dataIndex] = dataPoints[lastIndexToCopy]; #if DEBUG_BARSCOPIED dataPointsCopied++; #endif } if (DataStartDate != default(DateTime) && endDate.Value + TimeFrame.TimeSpan < DataStartDate) { Debug.WriteLine($"[DATA GAP] endDate: {endDate.Value}, DataStartDate: {DataStartDate}"); throw new NotImplementedException("TODO REVIEW this gap length"); //AddGap(endDate.Value + TimeFrame.TimeSpan, DataStartDate - TimeSpanApproximation.TimeSpan); } } // Both above and below may get run if (endDate >= DataEndDate) // append data { int lastIndexToCopy; for (lastIndexToCopy = 0; lastIndexToCopy < dataPoints.Count && dataPoints[lastIndexToCopy].Time <= DataEndDate; lastIndexToCopy++) { ; // OPTIMIZE? } for (int dataIndex = OpenTime.LastIndex + 1; lastIndexToCopy < dataPoints.Count; dataIndex++, lastIndexToCopy++) { //var bar = bars[lastIndexToCopy] as TimedBar; //if (bar == null) //{ // bar = new TimedBar(bars[lastIndexToCopy]); //} this[dataIndex] = dataPoints[lastIndexToCopy]; #if DEBUG_BARSCOPIED dataPointsCopied++; #endif } if (DataEndDate != default(DateTime) && startDate.Value - TimeFrame.TimeSpan > DataEndDate) { Debug.WriteLine($"[DATA GAP] startDate: {startDate.Value}, DataEndDate: {DataEndDate}"); throw new NotImplementedException("TODO REVIEW this gap length"); //AddGap(DataEndDate + TimeFrame.TimeSpan, startDate.Value - TimeSpanApproximation.TimeSpan); } } } var oldEnd = DataEndDate; var oldStart = DataStartDate; if (DataEndDate == default(DateTime) || startDate.Value - TimeFrame.TimeSpan <= DataEndDate && endDate.Value > DataEndDate) { DataEndDate = endDate.Value; } if (DataStartDate == default(DateTime) || endDate.Value + TimeFrame.TimeSpan >= DataStartDate && startDate.Value < DataStartDate) { DataStartDate = startDate.Value; } var addedSpan = this[LastIndex].Time - (lastDataEndDate == default(DateTime) ? this[FirstIndex].Time : lastDataEndDate); if (addedSpan > TimeSpan.Zero) { BackwardForward bf = BackwardForward.None; if (oldEnd != DataEndDate) { bf |= BackwardForward.Forward; } if (oldStart != DataStartDate) { bf |= BackwardForward.Backward; } Debug.WriteLine($"[{this}] ADDED DATA: {addedSpan} {bf} "); DataAdded?.Invoke(bf); } //Debug.WriteLine($"[{this} - new range] {DataStartDate} - {DataEndDate} (last data: {this[LastIndex].Time}) (was {oldStart} - {oldEnd} (last data: {lastDataEndDate}))"); #if DEBUG_BARSCOPIED Debug.WriteLine($"{SymbolCode}-{TimeFrame.Name} Imported {dataPointsCopied} bars"); #endif EraseGap(startDate.Value, endDate.Value); }