Ejemplo n.º 1
0
            ///<summary>
            /// Variable Moving Average
            ///</summary>
            ///<param name="pNav">Navigator</param>
            ///<param name="pSource">Field Source</param>
            ///<param name="periods">Periods</param>
            ///<param name="Alias">Alias</param>
            ///<returns>Recordset</returns>
            public Recordset VariableMovingAverage(Navigator pNav, Field pSource, int periods, string Alias)
            {
                Oscillator OS = new Oscillator();
                int        Record;

                int   RecordCount = pNav.RecordCount;
                Field Field1      = new Field(RecordCount, Alias);

                //CMO must be overwritten
                Recordset Results = OS.ChandeMomentumOscillator(pNav, pSource, 9, "CMO");

                const int Start = 2;

                pNav.Position = Start;
                for (Record = Start; Record < RecordCount + 1; Record++)
                {
                    pNav.MovePrevious();
                    double PrevVMA = Field1.ValueEx(pNav.Position);
                    pNav.MoveNext();
                    double CMO   = Results.ValueEx("CMO", pNav.Position) / 100;
                    double Price = pSource.ValueEx(pNav.Position);
                    if (CMO < 0)
                    {
                        CMO = -1 * CMO;
                    }
                    double VMA = (CMO * Price) + (1 - CMO) * PrevVMA;
                    Field1.Value(pNav.Position, VMA);
                    pNav.MoveNext();
                }//Record

                pNav.MoveFirst();
                Results.AddField(Field1);

                return(Results);
            }
Ejemplo n.º 2
0
        /// <summary>
        /// Action to be executd for calculating indicator
        /// </summary>
        /// <returns>for future usage. Must be ignored at this time.</returns>
        protected override bool TrueAction()
        {
// Validate
            int size = _chartPanel._chartX.RecordCount;

            if (size == 0)
            {
                return(false);
            }

            int paramInt1 = ParamInt(1);

            if (paramInt1 < 1 || paramInt1 > size / 2)
            {
                ProcessError("Invalid Periods for indicator " + FullName, IndicatorErrorType.ShowErrorMessage);
                return(false);
            }

            // Get the data
            string paramStr0 = ParamStr(0);
            Field  pSource   = SeriesToField("Source", paramStr0, size);

            if (!EnsureField(pSource, paramStr0))
            {
                return(false);
            }

            Navigator pNav = new Navigator();
            Recordset pRS  = new Recordset();

            pRS.AddField(pSource);

            pNav.Recordset_ = pRS;


            // Calculate the indicator
            Oscillator ta   = new Oscillator();
            Recordset  pInd = ta.ChandeMomentumOscillator(pNav, pSource, paramInt1, FullName);


            // Output the indicator values
            Clear();
            for (int n = 0; n < size; ++n)
            {
                AppendValue(DM.GetTimeStampByIndex(n), n < paramInt1 ? null : pInd.Value(FullName, n + 1));
            }

            return(_calculateResult = PostCalculate());
        }