/// <summary> /// Signal buy or sell on pullback off RSI on 3 MAs /// </summary> /// <returns></returns> public ZZRSIPullback ZZRSIPullback(Data.IDataSeries input, int alertOn, int longMA, int medMA, int rSIThres, int shortMA) { if (cacheZZRSIPullback != null) { for (int idx = 0; idx < cacheZZRSIPullback.Length; idx++) { if (cacheZZRSIPullback[idx].AlertOn == alertOn && cacheZZRSIPullback[idx].LongMA == longMA && cacheZZRSIPullback[idx].MedMA == medMA && cacheZZRSIPullback[idx].RSIThres == rSIThres && cacheZZRSIPullback[idx].ShortMA == shortMA && cacheZZRSIPullback[idx].EqualsInput(input)) { return(cacheZZRSIPullback[idx]); } } } lock (checkZZRSIPullback) { checkZZRSIPullback.AlertOn = alertOn; alertOn = checkZZRSIPullback.AlertOn; checkZZRSIPullback.LongMA = longMA; longMA = checkZZRSIPullback.LongMA; checkZZRSIPullback.MedMA = medMA; medMA = checkZZRSIPullback.MedMA; checkZZRSIPullback.RSIThres = rSIThres; rSIThres = checkZZRSIPullback.RSIThres; checkZZRSIPullback.ShortMA = shortMA; shortMA = checkZZRSIPullback.ShortMA; if (cacheZZRSIPullback != null) { for (int idx = 0; idx < cacheZZRSIPullback.Length; idx++) { if (cacheZZRSIPullback[idx].AlertOn == alertOn && cacheZZRSIPullback[idx].LongMA == longMA && cacheZZRSIPullback[idx].MedMA == medMA && cacheZZRSIPullback[idx].RSIThres == rSIThres && cacheZZRSIPullback[idx].ShortMA == shortMA && cacheZZRSIPullback[idx].EqualsInput(input)) { return(cacheZZRSIPullback[idx]); } } } ZZRSIPullback indicator = new ZZRSIPullback(); indicator.BarsRequired = BarsRequired; indicator.CalculateOnBarClose = CalculateOnBarClose; #if NT7 indicator.ForceMaximumBarsLookBack256 = ForceMaximumBarsLookBack256; indicator.MaximumBarsLookBack = MaximumBarsLookBack; #endif indicator.Input = input; indicator.AlertOn = alertOn; indicator.LongMA = longMA; indicator.MedMA = medMA; indicator.RSIThres = rSIThres; indicator.ShortMA = shortMA; Indicators.Add(indicator); indicator.SetUp(); ZZRSIPullback[] tmp = new ZZRSIPullback[cacheZZRSIPullback == null ? 1 : cacheZZRSIPullback.Length + 1]; if (cacheZZRSIPullback != null) { cacheZZRSIPullback.CopyTo(tmp, 0); } tmp[tmp.Length - 1] = indicator; cacheZZRSIPullback = tmp; return(indicator); } }
/// <summary> /// Signal buy or sell on pullback off RSI on 3 MAs /// </summary> /// <returns></returns> public ZZRSIPullback ZZRSIPullback(Data.IDataSeries input, int alertOn, int longMA, int medMA, int rSIThres, int shortMA) { if (cacheZZRSIPullback != null) for (int idx = 0; idx < cacheZZRSIPullback.Length; idx++) if (cacheZZRSIPullback[idx].AlertOn == alertOn && cacheZZRSIPullback[idx].LongMA == longMA && cacheZZRSIPullback[idx].MedMA == medMA && cacheZZRSIPullback[idx].RSIThres == rSIThres && cacheZZRSIPullback[idx].ShortMA == shortMA && cacheZZRSIPullback[idx].EqualsInput(input)) return cacheZZRSIPullback[idx]; lock (checkZZRSIPullback) { checkZZRSIPullback.AlertOn = alertOn; alertOn = checkZZRSIPullback.AlertOn; checkZZRSIPullback.LongMA = longMA; longMA = checkZZRSIPullback.LongMA; checkZZRSIPullback.MedMA = medMA; medMA = checkZZRSIPullback.MedMA; checkZZRSIPullback.RSIThres = rSIThres; rSIThres = checkZZRSIPullback.RSIThres; checkZZRSIPullback.ShortMA = shortMA; shortMA = checkZZRSIPullback.ShortMA; if (cacheZZRSIPullback != null) for (int idx = 0; idx < cacheZZRSIPullback.Length; idx++) if (cacheZZRSIPullback[idx].AlertOn == alertOn && cacheZZRSIPullback[idx].LongMA == longMA && cacheZZRSIPullback[idx].MedMA == medMA && cacheZZRSIPullback[idx].RSIThres == rSIThres && cacheZZRSIPullback[idx].ShortMA == shortMA && cacheZZRSIPullback[idx].EqualsInput(input)) return cacheZZRSIPullback[idx]; ZZRSIPullback indicator = new ZZRSIPullback(); indicator.BarsRequired = BarsRequired; indicator.CalculateOnBarClose = CalculateOnBarClose; #if NT7 indicator.ForceMaximumBarsLookBack256 = ForceMaximumBarsLookBack256; indicator.MaximumBarsLookBack = MaximumBarsLookBack; #endif indicator.Input = input; indicator.AlertOn = alertOn; indicator.LongMA = longMA; indicator.MedMA = medMA; indicator.RSIThres = rSIThres; indicator.ShortMA = shortMA; Indicators.Add(indicator); indicator.SetUp(); ZZRSIPullback[] tmp = new ZZRSIPullback[cacheZZRSIPullback == null ? 1 : cacheZZRSIPullback.Length + 1]; if (cacheZZRSIPullback != null) cacheZZRSIPullback.CopyTo(tmp, 0); tmp[tmp.Length - 1] = indicator; cacheZZRSIPullback = tmp; return indicator; } }