private void _OnBarUpdateRealTime() { if (FirstTickOfBar) { _curBarVol = 0; } //now we empty the tick queue used in OnMarketData int queueCount = _tickQueue.Count; // if COBC=true then last tick belongs to next bar if (CalculateOnBarClose) { queueCount--; } GMarketDataType tcTemp; for (int i = 0; i < queueCount; i++) { _mktData = _tickQueue.Dequeue(); //not the same process if we have to split volume or not. //if we don't, we send all volume //we only split on volume chart, if volume is too high, if it is the last tick of the queue and if we asked for splitting if ((BarsPeriod.Id != PeriodType.Volume) || ((_curBarVol + _mktData.volume) <= _maxVolume) || (i < (queueCount - 1)) || !_splitVolume) { _vol2Send = _mktData.volume; _SendMarketData(); } else { //split volume _vol2Send = Math.Max(_maxVolume - _curBarVol, 0); _SendMarketData();//Math.Max(MaxVolume - curBarVol, 0), FirstTickOfBar); //requeue remaining volume //if COBC=true we have to remove the last tick or we will have an ordering problem if (CalculateOnBarClose) { tcTemp = _tickQueue.Dequeue(); _tickQueue.Enqueue(_mktData); _tickQueue.Enqueue(tcTemp); } else { _tickQueue.Enqueue(_mktData); } } } }
protected virtual void GOnMarketData(GMarketDataType e) { }
protected int CalcDelta(GMarketDataType e) { return(_CalcDelta(e.tickType, e.price, e.volume, _calcMode, _backupMode, _filterSize, _filterMode)); }