Example #1
0
 private void RWTAddExtDat(DateTime tm, double close, long volume)
 {
     curdat = new rwt.ExtendedData(tm, curdat);
     extdat.Add(curdat);
     if (volume > 0)
     {
         RWTUpdateCurdat(close, volume);
     }
 }
Example #2
0
 /// <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;
 }
Example #3
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;
 }
Example #4
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);
            }
        }
Example #6
0
        /// <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;
        }
Example #7
0
 /// <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;
 }
Example #8
0
        /// <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;
        }
Example #9
0
 /// <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;
 }
Example #10
0
        /// <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;
        }
Example #12
0
 /// <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;
 }
Example #13
0
        /// <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;
        }
Example #14
0
        /// <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;
        }