private void RWTAddExtDat(DateTime tm, double close, long volume) { curdat = new rwt.ExtendedData(tm, curdat); extdat.Add(curdat); if (volume > 0) { RWTUpdateCurdat(close, volume); } }
/// <summary> /// </summary> public RichDelta() : base(PeriodType.Custom5) { extdat = new List <rwt.ExtendedData>(); uptick = true; prevClose = 0; curdat = null; prices = new double[2]; lastMoveUp = false; tickSize = 0; }
/// <summary> /// </summary> public VolDensType() : base(PeriodType.Custom7) { uptick = true; prevClose = -1; curdat = null; extdat = new List <rwt.ExtendedData>(); prices = new double[2]; lastMoveUp = false; tickSize = 0; }
/// <summary> /// </summary> public RichMinute() : base(PeriodType.Custom6) { extdat = new List <rwt.ExtendedData>(); uptick = true; prevClose = 0; curdat = null; prices = new double[2]; lastMoveUp = false; tickSize = 0; tlb = DateTime.Now; }
private void addExtendedData(rwt.ExtendedData ed, double highPrice, double lowPrice) { long put, pdt; for (double p = highPrice; p >= lowPrice; p -= TickSize) { ed.getUpDnTicksAtPrice(TickSize, p, out put, out pdt); var idx = vprofIndex(p); //Print("Added extradata... "+(put+pdt)+" at price "+p+" idx "+idx); // DEBUG vprofile[idx] += (put + pdt); } }
/// <summary> /// </summary> /// <param name="bars"></param> /// <param name="open"></param> /// <param name="high"></param> /// <param name="low"></param> /// <param name="close"></param> /// <param name="time"></param> /// <param name="volume"></param> /// <param name="isRealtime"></param> public override void Add(Bars bars, double open, double high, double low, double close, DateTime time, long volume, bool isRealtime) { if ((curdat == null) || (time < curdat.dt)) { extdat.Clear(); extdat.TrimExcess(); curdat = null; tickSize = bars.Instrument.MasterInstrument.TickSize; } if (bars.Count == 0) { AddBar(bars, open, high, low, close, time.Date, volume, isRealtime); RWTAddExtDat(time, close, volume); } else { if (curdat == null) { RWTAddExtDat(time, close, 0); } Bar bar = (Bar)bars.Get(bars.Count - 1); double tall = 1 + ((bar.High - bar.Low) / bars.Instrument.MasterInstrument.TickSize); double denom = tall; if (tall < 2) { denom += 99999; } if (tall > 10) { denom -= ((tall - 10) / 2.0); } if (tall > 20) { denom -= ((tall - 20) / 3.0); } if (((double)(bar.Volume + volume)) / denom >= ((double)(bars.Period.Value))) { AddBar(bars, close, close, close, close, time, volume, isRealtime); RWTAddExtDat(time, close, volume); } else { UpdateBar(bars, open, high, low, close, time, volume, isRealtime); curdat.dt = time; RWTUpdateCurdat(close, volume); } } bars.LastPrice = close; prevClose = close; }
/// <summary> /// </summary> public RichRange() : base(PeriodType.Final4) { extdat = new List <rwt.ExtendedData>(); uptick = true; prevClose = 0; curdat = null; prices = new double[2]; lastMoveUp = false; tickSize = 0; lastBarUP = true; lastBarTime = DateTime.Now; }
/// <summary> /// </summary> /// <param name="bars"></param> /// <param name="open"></param> /// <param name="high"></param> /// <param name="low"></param> /// <param name="close"></param> /// <param name="time"></param> /// <param name="volume"></param> /// <param name="isRealtime"></param> public override void Add(Data.Bars bars, double open, double high, double low, double close, DateTime time, long volume, bool isRealtime) { if ((curdat == null) || (time < curdat.dt)) { extdat.Clear(); extdat.TrimExcess(); curdat = null; tickSize = bars.Instrument.MasterInstrument.TickSize; } if (bars.Count == 0) { while (volume > 0) { AddBar(bars, open, high, low, close, time, Math.Min(bars.Period.Value, volume), isRealtime); RWTAddExtDat(time, close, Math.Min(bars.Period.Value, volume)); volume -= bars.Period.Value; } } else { long volTemp = 0; if (!bars.IsNewSession(time, isRealtime)) { volTemp = Math.Min(bars.Period.Value - bars.GetVolume(bars.Count - 1), volume); if (volTemp > 0) { UpdateBar(bars, open, high, low, close, time, volTemp, isRealtime); if (curdat == null) { RWTAddExtDat(time, close, 0); } else { curdat.dt = time; } RWTUpdateCounts(close); RWTUpdateCurdat(close, volTemp); } } volTemp = volume - volTemp; while (volTemp > 0) { AddBar(bars, open, high, low, close, time, Math.Min(bars.Period.Value, volTemp), isRealtime); RWTAddExtDat(time, close, Math.Min(bars.Period.Value, volTemp)); volTemp -= bars.Period.Value; } } prevClose = close; }
/// <summary> /// </summary> public PointEauxType() : base(PeriodType.Custom9) { extdat = new List <rwt.ExtendedData>(); uptick = true; prevClose = 0; curdat = null; prices = new double[2]; lastMoveUp = false; tickSize = 0; lastBarUP = true; lastBarTime = DateTime.Now; tlb = false; period = -1; }
/// <summary> /// </summary> /// <param name="bars"></param> /// <param name="open"></param> /// <param name="high"></param> /// <param name="low"></param> /// <param name="close"></param> /// <param name="time"></param> /// <param name="volume"></param> /// <param name="isRealtime"></param> public override void Add(Data.Bars bars, double open, double high, double low, double close, DateTime time, long volume, bool isRealtime) { if ((curdat == null) || (time < curdat.dt)) { extdat.Clear(); extdat.TrimExcess(); curdat = null; tickSize = bars.Instrument.MasterInstrument.TickSize; } if (bars.Count == 0) { while (volume > 0) { AddBar(bars, open, high, low, close, time, Math.Min(volume, bars.Period.Value), isRealtime); RWTAddExtDat(time, close, Math.Min(bars.Period.Value, volume)); volume -= bars.Period.Value; } } else { if (!bars.IsNewSession(time, isRealtime)) { if (curdat == null) { RWTAddExtDat(time, close, 0); } else { curdat.dt = time; } UpdateBar(bars, open, high, low, close, time, volume, isRealtime); RWTUpdateCounts(close); RWTUpdateCurdat(close, volume); volume = 0; } while ((volume > 0) || (Math.Abs(curdat.dClose - curdat.dOpen) >= bars.Period.Value)) { AddBar(bars, close, close, close, close, time, volume, isRealtime); RWTAddExtDat(time, close, volume); volume = 0; } } prevClose = close; }
/// <summary> /// </summary> /// <param name="bars"></param> /// <param name="open"></param> /// <param name="high"></param> /// <param name="low"></param> /// <param name="close"></param> /// <param name="time"></param> /// <param name="volume"></param> /// <param name="isRealtime"></param> public override void Add(Bars bars, double open, double high, double low, double close, DateTime time, long volume, bool isRealtime) { if ((curdat == null) || (time < curdat.dt)) { extdat.Clear(); extdat.TrimExcess(); curdat = null; tickSize = bars.Instrument.MasterInstrument.TickSize; } if (bars.Count == 0) { AddBar(bars, open, high, low, close, time, volume, isRealtime); RWTAddExtDat(time, close, volume); } else { Data.Bar bar = (Bar)bars.Get(bars.Count - 1); if (curdat == null) { RWTAddExtDat(time, close, 0); } curdat.dt = time; if (upbar && ((curdat.dHigh - curdat.dClose) >= bars.Period.Value)) { AddBar(bars, close, close, close, close, time, volume, isRealtime); RWTAddExtDat(time, close, volume); upbar = false; } else if (!upbar && ((curdat.dClose - curdat.dLow) >= bars.Period.Value)) { AddBar(bars, close, close, close, close, time, volume, isRealtime); RWTAddExtDat(time, close, volume); upbar = true; } else { UpdateBar(bars, open, high, low, close, time, volume, isRealtime); // regular update... RWTUpdateCounts(close); RWTUpdateCurdat(close, volume); } } bars.LastPrice = close; // update the extended data... prevClose = close; }
/// <summary> /// </summary> /// <param name="bars"></param> /// <param name="open"></param> /// <param name="high"></param> /// <param name="low"></param> /// <param name="close"></param> /// <param name="time"></param> /// <param name="volume"></param> /// <param name="isRealtime"></param> public override void Add(Data.Bars bars, double open, double high, double low, double close, DateTime time, long volume, bool isRealtime) { if ((curdat == null) || (time < curdat.dt)) { extdat.Clear(); extdat.TrimExcess(); curdat = null; tickSize = bars.Instrument.MasterInstrument.TickSize; tlb = time; } if (bars.Count == 0) { RWTAddExtDat(time, close, volume); tlb = TimeToBarTime(bars, time, bars.Session.NextBeginTime, bars.Period.Value, isRealtime); AddBar(bars, open, high, low, close, time, volume, isRealtime); } else { if (curdat == null) { RWTAddExtDat(time, close, 0); } curdat.dt = time; if (time < tlb) { UpdateBar(bars, open, high, low, close, time, volume, isRealtime); RWTUpdateCounts(close); RWTUpdateCurdat(close, volume); } else { Bar bar = (Bar)bars.Get(bars.Count - 1); UpdateBar(bars, bar.Open, bar.High, bar.Low, bar.Close, tlb, 0, isRealtime); curdat.dt = tlb; RWTAddExtDat(time, close, volume); tlb = TimeToBarTime(bars, time, bars.Session.NextBeginTime, bars.Period.Value, isRealtime); AddBar(bars, open, high, low, close, time, volume, isRealtime); } } prevClose = close; }
/// <summary> /// </summary> /// <param name="bars"></param> /// <param name="open"></param> /// <param name="high"></param> /// <param name="low"></param> /// <param name="close"></param> /// <param name="time"></param> /// <param name="volume"></param> /// <param name="isRealtime"></param> public override void Add(Data.Bars bars, double open, double high, double low, double close, DateTime time, long volume, bool isRealtime) { if ((curdat == null) || (time < curdat.dt)) { extdat.Clear(); extdat.TrimExcess(); curdat = null; tickSize = bars.Instrument.MasterInstrument.TickSize; } if (bars.Count == 0 || bars.IsNewSession(time, isRealtime)) { AddBar(bars, open, high, low, close, time, volume, isRealtime); lastBarTime = time; RWTAddExtDat(time, close, volume); } else { Data.Bar bar = (Bar)bars.Get(bars.Count - 1); //double tickSize = bars.Instrument.MasterInstrument.TickSize; double rangeValue = Math.Floor(10000000.0 * (double)bars.Period.Value * tickSize) / 10000000.0; if (curdat == null) { RWTAddExtDat(time, close, 0); } curdat.dt = time; if ((bars.Instrument.MasterInstrument.Compare(close, bar.Low + rangeValue) > 0) && (lastBarUP || ((time.Ticks - lastBarTime.Ticks) > 10000000L))) { bool isFirstNewBar = true; double newClose = bar.Low + rangeValue; // every bar closes either with high or low UpdateBar(bars, bar.Open, newClose, bar.Low, newClose, time, 0, isRealtime); curdat.addLevel(1); // if still gap, fill with phantom bars double newBarOpen = newClose + tickSize; while (bars.Instrument.MasterInstrument.Compare(close, newClose) > 0) { newClose = Math.Min(close, newBarOpen + rangeValue); AddBar(bars, newBarOpen, newClose, newBarOpen, newClose, time, isFirstNewBar ? volume : 1, isRealtime); RWTAddExtDat(time, newClose, (isFirstNewBar?volume:0)); newBarOpen = newClose + tickSize; isFirstNewBar = false; } prices[1] = newClose; lastMoveUp = true; lastBarUP = true; lastBarTime = time; } else if ((bars.Instrument.MasterInstrument.Compare(bar.High - rangeValue, close) > 0) && ((!lastBarUP) || ((time.Ticks - lastBarTime.Ticks) > 10000000L))) { bool isFirstNewBar = true; double newClose = bar.High - rangeValue; // every bar closes either with high or low UpdateBar(bars, bar.Open, bar.High, newClose, newClose, time, 0, isRealtime); curdat.addLevel(-1); // if still gap, fill with phantom bars double newBarOpen = newClose - tickSize; while (bars.Instrument.MasterInstrument.Compare(newClose, close) > 0) { newClose = Math.Max(close, newBarOpen - rangeValue); AddBar(bars, newBarOpen, newBarOpen, newClose, newClose, time, isFirstNewBar ? volume : 1, isRealtime); RWTAddExtDat(time, newClose, (isFirstNewBar?volume:0)); newBarOpen = newClose - tickSize; isFirstNewBar = false; } prices[0] = newClose; lastMoveUp = false; lastBarUP = false; lastBarTime = time; } else { UpdateBar(bars, open, (close > bar.High ? close : bar.High), (close < bar.Low ? close : bar.Low), close, time, volume, isRealtime); RWTUpdateCounts(close); RWTUpdateCurdat(close, volume); } } bars.LastPrice = close; // update the extended data... prevClose = close; }
/// <summary> /// </summary> /// <param name="bars"></param> /// <param name="open"></param> /// <param name="high"></param> /// <param name="low"></param> /// <param name="close"></param> /// <param name="time"></param> /// <param name="volume"></param> /// <param name="isRealtime"></param> public override void Add(Data.Bars bars, double open, double high, double low, double close, DateTime time, long volume, bool isRealtime) { if ((curdat == null) || (time < curdat.dt)) { extdat.Clear(); extdat.TrimExcess(); curdat = null; tickSize = bars.Instrument.MasterInstrument.TickSize; if (bars.Period.Value > 100) { tlb = true; period = bars.Period.Value - 100; } else { tlb = false; period = bars.Period.Value; } } if (bars.Count == 0 || bars.IsNewSession(time, isRealtime)) { AddBar(bars, open, high, low, close, time, volume, isRealtime); lastBarTime = time; RWTAddExtDat(time, close, volume); } else { Data.Bar bar = (Bar)bars.Get(bars.Count - 1); double rangeValue = Math.Floor(10000000.0 * period * tickSize) / 10000000.0; if (curdat == null) { RWTAddExtDat(time, close, 0); } curdat.dt = time; double reverseRange = rangeValue * (tlb?3.0:1.0); if ((bars.Instrument.MasterInstrument.Compare(close, bar.Open + (lastBarUP?rangeValue:reverseRange)) > 0) && (lastBarUP || ((time.Ticks - lastBarTime.Ticks) > 10000000L))) { bool isFirstNewBar = true; double newBarOpen = bar.Open + (lastBarUP?rangeValue:reverseRange); double newClose = Math.Min(close, newBarOpen + rangeValue); UpdateBar(bars, bar.Open, newBarOpen, bar.Low, newBarOpen, time, 0, isRealtime); curdat.addLevel(1); do { AddBar(bars, newBarOpen, newClose, newBarOpen, newClose, time, isFirstNewBar ? volume : 0, isRealtime); RWTAddExtDat(time, newClose, (isFirstNewBar ? volume : 0)); if (bars.Instrument.MasterInstrument.Compare(close, newClose) == 0) { break; } newBarOpen = newClose; newClose = Math.Min(close, newBarOpen + rangeValue); isFirstNewBar = false; }while (true); prices[1] = newClose; lastMoveUp = true; lastBarUP = true; lastBarTime = time; } else if ((bars.Instrument.MasterInstrument.Compare(bar.Open - (lastBarUP?reverseRange:rangeValue), close) > 0) && ((!lastBarUP) || ((time.Ticks - lastBarTime.Ticks) > 10000000L))) { bool isFirstNewBar = true; double newBarOpen = bar.Open - (lastBarUP?reverseRange:rangeValue); double newClose = Math.Max(close, newBarOpen - rangeValue); UpdateBar(bars, bar.Open, bar.High, newBarOpen, newBarOpen, time, 0, isRealtime); curdat.addLevel(-1); do { AddBar(bars, newBarOpen, newBarOpen, newClose, newClose, time, isFirstNewBar ? volume : 0, isRealtime); RWTAddExtDat(time, newClose, (isFirstNewBar ? volume : 0)); if (bars.Instrument.MasterInstrument.Compare(close, newClose) == 0) { break; } newBarOpen = newClose; newClose = Math.Max(close, newBarOpen - rangeValue); isFirstNewBar = false; }while (true); prices[0] = newClose; lastMoveUp = false; lastBarUP = false; lastBarTime = time; } else { UpdateBar(bars, bar.Open, Math.Max(bar.High, close), Math.Min(bar.Low, close), close, time, volume, isRealtime); RWTUpdateCounts(close); RWTUpdateCurdat(close, volume); } } bars.LastPrice = close; // update the extended data... prevClose = close; }