/// <summary> /// Action to be executd for calculating indicator /// </summary> /// <returns>for future usage. Must be ignored at this time.</returns> protected override bool TrueAction() { int size = _chartPanel._chartX.RecordCount; if (size == 0) { return(false); } if (ParamDbl(1) <= 0) { ProcessError("Invalid Limit Move Value for indicator " + FullName, IndicatorErrorType.ShowErrorMessage); return(false); } // Get the data Field pOpen = SeriesToField("Open", ParamStr(0) + ".open", size); if (!EnsureField(pOpen, ParamStr(0) + ".open")) { return(false); } Field pHigh = SeriesToField("High", ParamStr(0) + ".high", size); if (!EnsureField(pHigh, ParamStr(0) + ".high")) { return(false); } Field pLow = SeriesToField("Low", ParamStr(0) + ".low", size); if (!EnsureField(pLow, ParamStr(0) + ".low")) { return(false); } Field pClose = SeriesToField("Close", ParamStr(0) + ".close", size); if (!EnsureField(pClose, ParamStr(0) + ".close")) { return(false); } Navigator pNav = new Navigator(); Recordset pRS = new Recordset(); pRS.AddField(pOpen); pRS.AddField(pHigh); pRS.AddField(pLow); pRS.AddField(pClose); pNav.Recordset_ = pRS; // Calculate the indicator Index ta = new Index(); Recordset pInd = ta.AccumulativeSwingIndex(pNav, pRS, ParamDbl(1), FullName); // Output the indicator values Clear(); Series series = _chartPanel._chartX.GetSeriesByName(ParamStr(0) + ".close"); for (int n = 0; n < size; ++n) { double?value = pInd.Value(FullName, n + 1); AppendValue(series[n].TimeStamp, value); } return(_calculateResult = PostCalculate()); }