public static IStockViewableSeries CreateInitialisedFrom(IStockViewableSeries aViewableSerie, StockSerie stockSerie)
        {
            if (!stockSerie.Initialise()) return null;

             IStockViewableSeries viewableSerie = null;
             switch (aViewableSerie.Type)
             {
            case ViewableItemType.Indicator:
               viewableSerie = stockSerie.GetIndicator(aViewableSerie.Name);
               break;
            case ViewableItemType.Decorator:
               viewableSerie = stockSerie.GetDecorator(aViewableSerie.Name, ((IStockDecorator)aViewableSerie).DecoratedItem);
               break;
            case ViewableItemType.PaintBar:
               viewableSerie = stockSerie.GetPaintBar(aViewableSerie.Name);
               break;
            case ViewableItemType.TrailStop:
               viewableSerie = stockSerie.GetTrailStop(aViewableSerie.Name);
               break;
            case ViewableItemType.Trail:
               viewableSerie = stockSerie.GetTrail(aViewableSerie.Name, ((IStockTrail)aViewableSerie).TrailedItem);
               break;
            default:
               break;
             }
             return viewableSerie;
        }
Exemplo n.º 2
0
        public override void Initialise(StockSerie stockSerie, StockOrder lastBuyOrder, bool supportShortSelling)
        {
            base.Initialise(stockSerie, lastBuyOrder, supportShortSelling);
             this.SRTrailStop = stockSerie.GetTrailStop(trailName);

             this.adxDecorator = stockSerie.GetDecorator("DIV(1)", ((IStockIndicator)TriggerIndicator).Name);
        }
        public static IStockViewableSeries GetViewableItem(string fullString, StockSerie stockSerie)
        {
            IStockViewableSeries viewableSerie = null;
             string[] fields = fullString.Split('|');
             int offset = 2;
             switch (fields[0].ToUpper())
             {
            case "INDICATOR":
               if (stockSerie == null)
               {
                  viewableSerie = StockIndicatorManager.CreateIndicator(fields[1]);
               }
               else
               {
                  viewableSerie = stockSerie.GetIndicator(fields[1]);
               }
               offset = 2;
               break;
            case "PAINTBAR":
               if (stockSerie == null)
               {
                  viewableSerie = StockPaintBarManager.CreatePaintBar(fields[1]);
               }
               else
               {
                  viewableSerie = stockSerie.GetPaintBar(fields[1]);
               }
               offset = 2;
               break;
            case "TRAILSTOP":
               if (stockSerie == null)
               {
                  viewableSerie = StockTrailStopManager.CreateTrailStop(fields[1]);
               }
               else
               {
                  viewableSerie = stockSerie.GetTrailStop(fields[1]);
               }
               offset = 2;
               break;
            case "DECORATOR":
               if (stockSerie == null)
               {
                  viewableSerie = StockDecoratorManager.CreateDecorator(fields[1], fields[2]);
               }
               else
               {
                  viewableSerie = stockSerie.GetDecorator(fields[1], fields[2]);
               }
               offset = 3;
               break;
            case "TRAIL":
               if (stockSerie == null)
               {
                  viewableSerie = StockTrailManager.CreateTrail(fields[1], fields[2]);
               }
               else
               {
                  viewableSerie = stockSerie.GetTrail(fields[1], fields[2]);
               }
               offset = 3;
               break;
            default:
               return null;
             }

             if (viewableSerie != null)
             {
            for (int i = 0; i < viewableSerie.SeriesCount; i++)
            {
               int index = 2 * i + offset;
               if (index < fields.Length)
               {
                  viewableSerie.SeriePens[i] = GraphCurveType.PenFromString(fields[index]);
                  viewableSerie.SerieVisibility[i] = bool.Parse(fields[index + 1]);
               }
               else
               {
                  viewableSerie.SerieVisibility[i] = true;
               }
            }
            if (fields[0].ToUpper() == "DECORATOR")
            {
               offset += viewableSerie.SeriesCount*2;
               IStockDecorator decorator = viewableSerie as IStockDecorator;
               for (int i = 0; i < decorator.EventCount; i++)
               {
                  int index = 2 * i + offset;
                  if (index < fields.Length)
                  {
                     decorator.EventPens[i] = GraphCurveType.PenFromString(fields[index]);
                     decorator.EventVisibility[i] = bool.Parse(fields[index + 1]);
                  }
                  else
                  {
                     decorator.EventVisibility[i] = true;
                  }
               }
            }
             }
             return viewableSerie;
        }
        public override void ApplyTo(StockSerie stockSerie)
        {
            Queue<float> resistanceQueue = new Queue<float>(new float[] { float.MinValue, float.MinValue });
            Queue<float> supportQueue = new Queue<float>(new float[] { float.MaxValue, float.MaxValue });

            FloatSerie lowSerie = stockSerie.GetSerie(StockDataType.LOW);
            FloatSerie highSerie = stockSerie.GetSerie(StockDataType.HIGH);
            FloatSerie closeSerie = stockSerie.GetSerie(StockDataType.CLOSE);
            int period = (int)this.Parameters[0];

            IStockTrailStop trailStop = stockSerie.GetTrailStop("TRAILHL(" + period + ")");

            FloatSerie longStopSerie = trailStop.Series[0];
            FloatSerie shortStopSerie = trailStop.Series[1];

            BoolSerie brokenUpSerie = trailStop.Events[2];
            BoolSerie brokenDownSerie = trailStop.Events[3];

            FloatSerie supportSerie = new FloatSerie(stockSerie.Count, "TRAILHL.S"); supportSerie.Reset(float.NaN);
            FloatSerie resistanceSerie = new FloatSerie(stockSerie.Count, "TRAILHL.R"); resistanceSerie.Reset(float.NaN);

            this.Series[0] = supportSerie;
            this.Series[1] = resistanceSerie;

            // Detecting events
            this.CreateEventSeries(stockSerie.Count);
            this.Events[0] = brokenUpSerie;
            this.Events[1] = brokenDownSerie;

            // Begin Sequence

            // Calculate Support/Resistance
            float extremum = lowSerie[0];
            bool waitingForEndOfTrend = false;
            int i = 0;
            for (; i < stockSerie.Count && (!brokenUpSerie[i] && !brokenDownSerie[i]); i++)
            {
                //if (float.IsNaN(longStopSerie[i]))
                //{
                //    this.UpDownState[i] = StockSerie.Trend.DownTrend; // Down trend
                //    supportSerie[i] = float.NaN;
                //    resistanceSerie[i] = highSerie.GetMax(0, i);
                //    resistanceQueue.Dequeue();
                //    resistanceQueue.Enqueue(resistanceSerie[i]);
                //    extremum = highSerie.GetMax(0, i);
                //}
                //else
                //{
                //    this.UpDownState[i] = StockSerie.Trend.UpTrend; // Up trend

                //    supportSerie[i] = lowSerie.GetMin(0, i);
                //    supportQueue.Dequeue();
                //    supportQueue.Enqueue(supportSerie[i]);
                //    resistanceSerie[i] = float.NaN;
                //    extremum = lowSerie.GetMin(0, i);
                //}
            }
            if (i < stockSerie.Count)
            {
                if (brokenUpSerie[i])
                {
                    this.UpDownState[i] = StockSerie.Trend.UpTrend;
                    extremum = lowSerie.GetMin(0, i);
                }
                if (brokenDownSerie[i])
                {
                    this.UpDownState[i] = StockSerie.Trend.DownTrend;
                    extremum = highSerie.GetMax(0, i);
                }
            }

            for (; i < stockSerie.Count; i++)
            {
                bool upSwing = float.IsNaN(shortStopSerie[i]);
                this.UpDownState[i] = StockUpDownIndicatorBase.BoolToTrend(upSwing);

                this.Events[8][i] = upSwing;
                this.Events[9][i] = !upSwing;

                if (brokenUpSerie[i])
                {
                    supportSerie[i] = extremum;
                    supportQueue.Dequeue();
                    supportQueue.Enqueue(extremum);
                    resistanceSerie[i] = float.NaN;

                    if (waitingForEndOfTrend)
                    {// Detect EndOfUptrend
                        waitingForEndOfTrend = false;
                        this.Events[3][i] = true;
                    }
                    else if (extremum > resistanceQueue.ElementAt(0))
                    {// Detect if pullback in uptrend
                        this.Events[2][i] = true;
                        waitingForEndOfTrend = true;
                    }

                    if (extremum > supportQueue.ElementAt(0))
                    {
                        // Higher Low detected
                        this.Events[4][i] = true;
                    }
                    else
                    {
                        // Lower Low
                        this.Events[11][i] = true;
                    }

                    extremum = highSerie[i];
                }
                else if (brokenDownSerie[i])
                {
                    supportSerie[i] = float.NaN;
                    resistanceSerie[i] = extremum;
                    resistanceQueue.Dequeue();
                    resistanceQueue.Enqueue(extremum);

                    if (waitingForEndOfTrend)
                    {// Detect EndOfUptrend
                        waitingForEndOfTrend = false;
                        this.Events[3][i] = true;
                    }
                    else if (extremum < supportQueue.ElementAt(0))
                    {// Detect if pullback in downTrend
                        this.Events[2][i] = true;
                        waitingForEndOfTrend = true;
                    }

                    if (extremum < resistanceQueue.ElementAt(0))
                    {
                        // Lower high detected
                        this.Events[5][i] = true;
                    }
                    else
                    {
                        // Higher high detected
                        this.Events[10][i] = true;
                    }

                    extremum = lowSerie[i];
                }
                else
                {
                    supportSerie[i] = supportSerie[i - 1];
                    resistanceSerie[i] = resistanceSerie[i - 1];
                    if (float.IsNaN(supportSerie[i])) // Down trend
                    {
                        extremum = Math.Min(extremum, lowSerie[i]);
                        if (closeSerie[i - 1] >= supportQueue.ElementAt(1) && closeSerie[i] < supportQueue.ElementAt(1))
                        {
                            // Previous support broken
                            this.Events[7][i] = true;
                        }
                    }
                    else
                    {
                        extremum = Math.Max(extremum, highSerie[i]);
                        if (closeSerie[i - 1] <= resistanceQueue.ElementAt(1) && closeSerie[i] > resistanceQueue.ElementAt(1))
                        {
                            // Previous resistance broken
                            this.Events[6][i] = true;
                        }
                    }
                }
            }
        }
        public override void ApplyTo(StockSerie stockSerie)
        {
            using (MethodLogger ml = new MethodLogger(this))
             {
            CreateEventSeries(stockSerie.Count);

            IStockDecorator originalDecorator = stockSerie.GetDecorator(this.Name.Replace("WAIT", ""), this.DecoratedItem);

            this.Series[0] = originalDecorator.Series[0];
            this.Series[1] = originalDecorator.Series[1];
            this.Series[2] = originalDecorator.Series[2];

            IStockTrailStop trailIndicator = stockSerie.GetTrailStop("TRAILHL(1)");

            FloatSerie highSerie = stockSerie.GetSerie(StockDataType.HIGH);
            FloatSerie lowSerie = stockSerie.GetSerie(StockDataType.LOW);

            int exhaustionTopIndex =0;
            int exhaustionBottomIndex = 1;
            int bearishDivergenceIndex = 2;
            int bullishDivergenceIndex = 3;

            int upTrendIndex = 0;

            bool waitExhaustionTop = false;
            bool waitExhaustionBottom = false;
            bool waitBearishDivergence = false;
            bool waitBullishDivergence = false;

            for (int i = 10; i < stockSerie.Count; i++)
            {
               if (waitExhaustionTop)
               {
                  if (!trailIndicator.Events[upTrendIndex][i])// (highSerie[i - 1] > highSerie[i])
                  {
                     waitExhaustionTop = false;
                     this.eventSeries[exhaustionTopIndex][i] = true;
                  }
               }
               else
               {
                  if (originalDecorator.Events[exhaustionTopIndex][i])
                  {
                     if (!trailIndicator.Events[upTrendIndex][i])// (highSerie[i - 1] > highSerie[i])
                     {
                        this.eventSeries[exhaustionTopIndex][i] = true;
                     }
                     else
                     {
                        waitExhaustionTop = true;
                     }
                  }
               }

               if (waitBearishDivergence)
               {
                  if (!trailIndicator.Events[upTrendIndex][i])// (highSerie[i - 1] > highSerie[i])
                  {
                     waitBearishDivergence = false;
                     this.eventSeries[bearishDivergenceIndex][i] = true;
                  }
               }
               else
               {
                  if (originalDecorator.Events[bearishDivergenceIndex][i])
                  {
                     if (!trailIndicator.Events[upTrendIndex][i])// (highSerie[i - 1] > highSerie[i])
                     {
                        this.eventSeries[bearishDivergenceIndex][i] = true;
                     }
                     else
                     {
                        waitBearishDivergence = true;
                     }
                  }
               }
               if (waitExhaustionBottom)
               {
                  if (trailIndicator.Events[upTrendIndex][i]) // (lowSerie[i - 1] < lowSerie[i])
                  {
                     waitExhaustionBottom = false;
                     this.eventSeries[exhaustionBottomIndex][i] = true;
                  }
               }
               else
               {
                  if (originalDecorator.Events[exhaustionBottomIndex][i])
                  {
                     if (trailIndicator.Events[upTrendIndex][i]) // (lowSerie[i - 1] < lowSerie[i])
                     {
                        this.eventSeries[exhaustionBottomIndex][i] = true;
                     }
                     else
                     {
                        waitExhaustionBottom = true;
                     }
                  }
               }

               if (waitBullishDivergence)
               {
                  if (trailIndicator.Events[upTrendIndex][i]) // (lowSerie[i - 1] < lowSerie[i])
                  {
                     waitBullishDivergence = false;
                     this.eventSeries[bullishDivergenceIndex][i] = true;
                  }
               }
               else
               {
                  if (originalDecorator.Events[bullishDivergenceIndex][i])
                  {
                     if (trailIndicator.Events[upTrendIndex][i]) // (lowSerie[i - 1] < lowSerie[i])
                     {
                        this.eventSeries[bullishDivergenceIndex][i] = true;
                     }
                     else
                     {
                        waitBullishDivergence = true;
                     }
                  }
               }
            }
             }
        }
Exemplo n.º 6
0
        public bool TrailHL(int i, StockSerie stockSerie, ref string eventName)
        {
            eventName = "UpBreak_TRAILHL(4)";
            BoolSerie upTrend = stockSerie.GetTrailStop("TRAILHL(1)").Events[0];
            BoolSerie upBar = stockSerie.GetPaintBar("HIGHLOWDAYS(6)").Events[0];

            FloatSerie roc = stockSerie.GetIndicator("ROCEX3(200,100,50,10,20)").Series[0];

            return upTrend[i] && roc[i] > 0 && (upBar[i] && !upBar[i - 1]);
        }
Exemplo n.º 7
0
        public bool TrailBB(int i, StockSerie stockSerie, ref string eventName)
        {
            eventName = "UpBreak_TRAILBB(6,2,-2)";
            BoolSerie upTrend = stockSerie.GetTrailStop("TRAILBB(6,2,-2)").Events[0];

            return !upTrend[i - 1] && upTrend[i];
        }
Exemplo n.º 8
0
        public bool EMAUp(int i, StockSerie stockSerie)
        {
            FloatSerie ema6 = stockSerie.GetIndicator("EMA(6)").Series[0];
            FloatSerie ema12 = stockSerie.GetIndicator("EMA(12)").Series[0];
            FloatSerie ema50 = stockSerie.GetIndicator("EMA(50)").Series[0];
            FloatSerie longStop = stockSerie.GetTrailStop("TRAILHL(3)").Series[0];

            FloatSerie closeSerie = stockSerie.GetSerie(StockDataType.CLOSE);

            return (!float.IsNaN(longStop[i - 1]) && !float.IsNaN(longStop[i]) && closeSerie[i] < ema50[i]);
        }
        public override void ApplyTo(StockSerie stockSerie)
        {
            int period = (int)this.parameters[0];
             int smoothing = (int)this.parameters[1];

             IStockTrailStop trail = stockSerie.GetTrailStop("TRAILHLS(" + period + "," + smoothing + ")");
             FloatSerie longStop = trail.Series[0];
             FloatSerie shortStop = trail.Series[1];

             FloatSerie closeSerie = stockSerie.GetSerie(StockDataType.CLOSE).CalculateEMA(smoothing);

             FloatSerie distSerie = new FloatSerie(stockSerie.Count);
             for (int i = period + smoothing; i < stockSerie.Count; i++)
             {
            distSerie[i] = float.IsNaN(longStop[i]) ? closeSerie[i] - shortStop[i] : closeSerie[i] - longStop[i];
             }
             //cciSerie = cciSerie.CalculateSigmoid(100f, 0.02f).CalculateEMA((int)Math.Sqrt();
             //FloatSerie closeSerie = stockSerie.GetSerie(StockDataType.CLOSE);
             //for (int i = 10; i < cciSerie.Count; i++)
             //{
             //    if (cciSerie[i] > overbought && cciSerie[i] <= cciSerie[i - 1] && closeSerie[i] >= closeSerie[i-1])
             //    {
             //        cciSerie[i] = cciSerie[i - 1] + (100 - cciSerie[i - 1]) / 4f;
             //    }
             //    else if (cciSerie[i] < oversold && cciSerie[i] >= cciSerie[i - 1] && closeSerie[i] <= closeSerie[i-1])
             //    {
             //        cciSerie[i] = cciSerie[i - 1] *0.75f;
             //    }
             //}

             this.series[0] = distSerie;
             this.series[0].Name = this.Name;
        }