protected override void OnBarUpdate() { PatternFound[0] = (logic.Evaluate(Pattern) ? 1 : 0); if (PatternFound[0] == 1) { bool isBearish = false; string text = string.Empty; switch (Pattern) { case ChartPattern.BearishBeltHold: text = "Bearish Belt Hold"; isBearish = true; break; case ChartPattern.BearishEngulfing: text = "Bearish Engulfing"; isBearish = true; break; case ChartPattern.BearishHarami: text = "Bearish Harami"; isBearish = true; break; case ChartPattern.BearishHaramiCross: text = "Bearish Harami Cross"; isBearish = true; break; case ChartPattern.BullishBeltHold: text = "Bullish Belt Hold"; break; case ChartPattern.BullishEngulfing: text = "Bullish Engulfing"; break; case ChartPattern.BullishHarami: text = "Bullish Harami"; break; case ChartPattern.BullishHaramiCross: text = "Bullish Harami Cross"; break; } if (!string.IsNullOrEmpty(text)) { BarBrushes[1] = isBearish ? upBrush : downBrush; BarBrushes[0] = isBearish ? downBrush : upBrush; CandleOutlineBrushes[1] = Pattern == ChartPattern.BearishBeltHold ? downBrush : CandleOutlineBrushes[1]; CandleOutlineBrushes[0] = !isBearish ? downBrush : CandleOutlineBrushes[0]; DrawText(text, 0, isBearish ? Math.Max(High[0], High[1]) : Math.Min(Low[0], Low[1]), isBearish ? 40 : 10); } switch (Pattern) { case ChartPattern.DarkCloudCover: BarBrushes[1] = upBrush; BarBrushes[0] = downBrush; CandleOutlineBrushes[1] = downBrush; DrawText("Dark Cloud Cover", 1, Math.Max(High[0], High[1]), 50); break; case ChartPattern.Doji: BarBrushes[0] = upBrush; CandleOutlineBrushes[0] = downBrush; int yOffset = Close[0] > Close[Math.Min(1, CurrentBar)] ? 20 : -20; DrawText("Doji", 0, (yOffset > 0 ? High[0] : Low[0]), yOffset); break; case ChartPattern.DownsideTasukiGap: BarBrushes[2] = downBrush; BarBrushes[1] = downBrush; BarBrushes[0] = upBrush; CandleOutlineBrushes[0] = downBrush; DrawText("Downside Tasuki Gap", 1, MAX(High, 3)[0], 10); break; case ChartPattern.EveningStar: BarBrushes[2] = Close[2] > Open[2] ? upBrush : downBrush; BarBrushes[1] = Close[1] > Open[1] ? upBrush : downBrush; BarBrushes[0] = Close[0] > Open[0] ? upBrush : downBrush; CandleOutlineBrushes[2] = Close[2] > Open[2] ? downBrush : CandleOutlineBrushes[2]; CandleOutlineBrushes[1] = Close[1] > Open[1] ? downBrush : CandleOutlineBrushes[1]; CandleOutlineBrushes[0] = Close[0] > Open[0] ? downBrush : CandleOutlineBrushes[0]; DrawText("Evening Star", 1, MAX(High, 3)[0], 40); break; case ChartPattern.FallingThreeMethods: BarBrushes[4] = downBrush; BarBrushes[0] = downBrush; for (int i = 1; i < 4; i++) { BarBrushes[i] = Close[i] > Open[i] ? upBrush : downBrush; CandleOutlineBrushes[i] = Close[i] > Open[i] ? downBrush : CandleOutlineBrushes[i]; } DrawText("Falling Three Methods", 2, Math.Max(High[0], High[4]), 40); break; case ChartPattern.Hammer: BarBrushes[0] = Close[0] > Open[0] ? upBrush : downBrush; CandleOutlineBrushes[0] = Close[0] > Open[0] ? downBrush : CandleOutlineBrushes[0]; DrawText("Hammer", 0, Low[0], -20); break; case ChartPattern.HangingMan: BarBrushes[0] = Close[0] > Open[0] ? upBrush : downBrush; CandleOutlineBrushes[0] = Close[0] > Open[0] ? downBrush : CandleOutlineBrushes[0]; DrawText("Hanging Man", 0, Low[0], -20); break; case ChartPattern.InvertedHammer: BarBrushes[0] = Close[0] > Open[0] ? upBrush : downBrush; CandleOutlineBrushes[0] = Close[0] > Open[0] ? downBrush : CandleOutlineBrushes[0]; DrawText("Inverted Hammer", 0, Low[0] - 2 * TickSize, 20); break; case ChartPattern.MorningStar: BarBrushes[2] = Close[2] > Open[2] ? upBrush : downBrush; BarBrushes[1] = Close[1] > Open[1] ? upBrush : downBrush; BarBrushes[0] = Close[0] > Open[0] ? upBrush : downBrush; CandleOutlineBrushes[2] = Close[2] > Open[2] ? downBrush : CandleOutlineBrushes[2]; CandleOutlineBrushes[1] = Close[1] > Open[1] ? downBrush : CandleOutlineBrushes[1]; CandleOutlineBrushes[0] = Close[0] > Open[0] ? downBrush : CandleOutlineBrushes[0]; DrawText("Morning Star", 1, MIN(Low, 3)[0], -20); break; case ChartPattern.PiercingLine: BarBrushes[1] = upBrush; BarBrushes[0] = downBrush; CandleOutlineBrushes[1] = downBrush; DrawText("Piercing Line", 1, Low[0], -10); break; case ChartPattern.RisingThreeMethods: BarBrushes[4] = upBrush; BarBrushes[0] = upBrush; CandleOutlineBrushes[4] = downBrush; CandleOutlineBrushes[0] = downBrush; for (int i = 1; i < 4; i++) { BarBrushes[i] = Close[i] > Open[i] ? upBrush : downBrush; CandleOutlineBrushes[i] = Close[i] > Open[i] ? downBrush : CandleOutlineBrushes[i]; } DrawText("Rising Three Methods", 2, MIN(Low, 5)[0], -10); break; case ChartPattern.ShootingStar: BarBrushes[0] = downBrush; DrawText("Shooting Star", 0, High[0], 30); break; case ChartPattern.StickSandwich: BarBrushes[2] = downBrush; BarBrushes[1] = upBrush; BarBrushes[0] = downBrush; CandleOutlineBrushes[1] = downBrush; DrawText("Stick Sandwich", 1, MAX(High, 3)[0], 50); break; case ChartPattern.ThreeBlackCrows: BarBrushes[2] = downBrush; BarBrushes[1] = downBrush; BarBrushes[0] = downBrush; DrawText("Three Black Crows", 1, MAX(High, 3)[0], 50); break; case ChartPattern.ThreeWhiteSoldiers: BarBrushes[2] = upBrush; BarBrushes[1] = upBrush; BarBrushes[0] = upBrush; CandleOutlineBrushes[2] = downBrush; CandleOutlineBrushes[1] = downBrush; CandleOutlineBrushes[0] = downBrush; DrawText("Three White Soldiers", 1, Low[2], -10); break; case ChartPattern.UpsideGapTwoCrows: BarBrushes[2] = upBrush; BarBrushes[1] = downBrush; BarBrushes[0] = downBrush; CandleOutlineBrushes[2] = downBrush; DrawText("Upside Gap Two Crows", 1, Math.Max(High[0], High[1]), 10); break; case ChartPattern.UpsideTasukiGap: BarBrushes[2] = upBrush; BarBrushes[1] = upBrush; BarBrushes[0] = downBrush; CandleOutlineBrushes[2] = downBrush; CandleOutlineBrushes[1] = downBrush; DrawText("Upide Tasuki Gap", 1, MIN(Low, 3)[0], -20); break; } if (ShowAlerts) { Alert("myAlert", Priority.Low, string.Format("Pattern(s) found: {0} {1} on {2} {3} {4} Chart", numPatternsFound, Pattern, Instrument.FullName, BarsPeriod.Value, BarsPeriod.BarsPeriodType), "Alert3.wav", 10, Brushes.DimGray, Brushes.DimGray); } } if (ShowPatternCount) { Draw.TextFixed(this, "Count", string.Format("{0} {1}\n patterns found", numPatternsFound, Pattern), textBoxPosition, textBrush, TextFont, Brushes.Transparent, Brushes.Transparent, 0); } }
protected override void OnBarUpdate() { PatternFound[0] = (logic.Evaluate(Pattern) ? 1 : 0); switch (Pattern) { case ChartPattern.BearishBeltHold: { #region Bearish Belt Hold if (PatternFound[0] == 1) { if (ChartBars != null) { BarBrushes[1] = upColor; CandleOutlineBrushes[1] = downColor; BarBrush = downColor; } Draw.Text(this, "Bearish Belt Hold" + CurrentBar, false, " Bearish Belt\nHold # " + ++numPatternsFound, 0, Math.Max(High[0], High[1]), 40, textColor, TextFont, TextAlignment.Center, Brushes.Transparent, Brushes.Transparent, 0); } #endregion break; } case ChartPattern.BearishEngulfing: { #region Bearish Engulfing if (PatternFound[0] == 1) { BarBrushes[1] = upColor; BarBrush = downColor; Draw.Text(this, "Bearish Engulfing" + CurrentBar, false, " Bearish\nEngulfing # " + ++numPatternsFound, 0, Math.Max(High[0], High[1]), 50, textColor, TextFont, TextAlignment.Center, Brushes.Transparent, Brushes.Transparent, 0); } #endregion break; } case ChartPattern.BearishHarami: { #region Bearish Harami if (PatternFound[0] == 1) { BarBrushes[1] = upColor; BarBrush = downColor; Draw.Text(this, "Bearish Harami" + CurrentBar, false, "Bearish\nHarami # " + ++numPatternsFound, 0, Math.Max(High[0], High[1]), 40, textColor, TextFont, TextAlignment.Center, Brushes.Transparent, Brushes.Transparent, 0); } #endregion break; } case ChartPattern.BearishHaramiCross: { #region Bearish Harami Cross if (PatternFound[0] == 1) { BarBrush = downColor; BarBrushes[1] = upColor; Draw.Text(this, "Bearish Harami Cross" + CurrentBar, false, "Bearish Harami\nCross # " + ++numPatternsFound, 0, Math.Max(High[0], High[1]), 40, textColor, TextFont, TextAlignment.Center, Brushes.Transparent, Brushes.Transparent, 0); } #endregion break; } case ChartPattern.BullishBeltHold: { #region Bullish Belt Hold if (PatternFound[0] == 1) { if (ChartBars != null) { BarBrushes[1] = downColor; BarBrush = upColor; CandleOutlineBrushes[0] = downColor; } Draw.Text(this, "Bullish Belt Hold" + CurrentBar, false, "Bullish Belt\nHold # " + ++numPatternsFound, 0, Math.Min(Low[0], Low[1]), -10, textColor, TextFont, TextAlignment.Center, Brushes.Transparent, Brushes.Transparent, 0); } #endregion break; } case ChartPattern.BullishEngulfing: { #region Bullish Engulfing if (PatternFound[0] == 1) { if (ChartBars != null) { BarBrushes[1] = downColor; BarBrush = upColor; CandleOutlineBrushes[0] = downColor; } Draw.Text(this, "Bullish Engulfing" + CurrentBar, false, "Bullish\nEngulfing # " + ++numPatternsFound, 0, Math.Min(Low[0], Low[1]), -10, textColor, TextFont, TextAlignment.Center, Brushes.Transparent, Brushes.Transparent, 0); } #endregion break; } case ChartPattern.BullishHarami: { #region Bullish Harami if (PatternFound[0] == 1) { if (ChartBars != null) { BarBrushes[1] = downColor; BarBrush = upColor; CandleOutlineBrushes[0] = downColor; } Draw.Text(this, "Bullish Harami" + CurrentBar, false, "Bullish\nHarami # " + ++numPatternsFound, 0, Math.Min(Low[0], Low[1]), -10, textColor, TextFont, TextAlignment.Center, Brushes.Transparent, Brushes.Transparent, 0); } #endregion break; } case ChartPattern.BullishHaramiCross: { #region Bullish Harami Cross if (PatternFound[0] == 1) { if (ChartBars != null) { BarBrushes[1] = downColor; BarBrush = upColor; CandleOutlineBrushes[0] = downColor; } Draw.Text(this, "Bullish Harami Cross" + CurrentBar, false, "Bullish\nHarami\nCross # " + ++numPatternsFound, 0, Math.Min(Low[0], Low[1]), -10, textColor, TextFont, TextAlignment.Center, Brushes.Transparent, Brushes.Transparent, 0); } #endregion break; } case ChartPattern.DarkCloudCover: { #region Dark Cloud Cover if (PatternFound[0] == 1) { if (ChartBars != null) { BarBrushes[1] = upColor; CandleOutlineBrushes[1] = downColor; BarBrush = downColor; } Draw.Text(this, "Dark Cloud Cover" + CurrentBar, false, "Dark Cloud\nCover # " + ++numPatternsFound, 1, Math.Max(High[0], High[1]), 50, textColor, TextFont, TextAlignment.Center, Brushes.Transparent, Brushes.Transparent, 0); } #endregion break; } case ChartPattern.Doji: { #region Doji if (PatternFound[0] == 1) { if (ChartBars != null) { BarBrush = upColor; CandleOutlineBrushes[0] = downColor; } int yOffset = Close[0] > Close[Math.Min(1, CurrentBar)] ? 20 : -20; Draw.Text(this, "Doji Text" + CurrentBar, true, "Doji\n# " + ++numPatternsFound, 0, (yOffset > 0 ? High[0] : Low[0]), yOffset, textColor, TextFont, TextAlignment.Center, Brushes.Transparent, Brushes.Transparent, 0); } #endregion break; } case ChartPattern.DownsideTasukiGap: { #region Downside Tasuki Gap if (PatternFound[0] == 1) { if (ChartBars != null) { BarBrush = upColor; CandleOutlineBrushes[0] = downColor; BarBrushes[1] = downColor; BarBrushes[2] = downColor; } Draw.Text(this, "Downside Tasuki Gap" + CurrentBar, false, "Downside Tasuki\n Gap # " + ++numPatternsFound, 1, MAX(High, 3)[0], 10, textColor, TextFont, TextAlignment.Center, Brushes.Transparent, Brushes.Transparent, 0); } #endregion break; } case ChartPattern.EveningStar: { #region Evening Star if (PatternFound[0] == 1) { if (ChartBars != null) { if (Close[0] > Open[0]) { BarBrush = upColor; CandleOutlineBrushes[0] = downColor; } else { BarBrush = downColor; } if (Close[1] > Open[1]) { BarBrushes[1] = upColor; CandleOutlineBrushes[1] = downColor; } else { BarBrushes[1] = downColor; } if (Close[2] > Open[2]) { BarBrushes[2] = upColor; CandleOutlineBrushes[2] = downColor; } else { BarBrushes[2] = downColor; } } Draw.Text(this, "Evening Star Text" + CurrentBar, false, "Evening\nStar # " + ++numPatternsFound, 1, MAX(High, 3)[0], 40, textColor, TextFont, TextAlignment.Center, Brushes.Transparent, Brushes.Transparent, 0); } #endregion break; } case ChartPattern.FallingThreeMethods: { #region Falling Three Methods if (PatternFound[0] == 1) { if (ChartBars != null) { BarBrush = downColor; BarBrushes[4] = downColor; int x = 1; while (x < 4) { if (Close[x] > Open[x]) { BarBrushes[x] = upColor; CandleOutlineBrushes[x] = downColor; } else { BarBrushes[x] = downColor; } x++; } } Draw.Text(this, "Falling Three Methods" + CurrentBar, false, "Falling Three\nMethods # " + ++numPatternsFound, 2, Math.Max(High[0], High[4]), 40, textColor, TextFont, TextAlignment.Center, Brushes.Transparent, Brushes.Transparent, 0); } #endregion break; } case ChartPattern.Hammer: { #region Hammer if (PatternFound[0] == 1) { if (ChartBars != null) { if (Close[0] > Open[0]) { BarBrush = upColor; CandleOutlineBrushes[0] = downColor; } else { BarBrush = downColor; } } Draw.Text(this, "Hammer" + CurrentBar, false, "Hammer\n # " + ++numPatternsFound, 0, Low[0], -20, textColor, TextFont, TextAlignment.Center, Brushes.Transparent, Brushes.Transparent, 0); } #endregion break; } case ChartPattern.HangingMan: { #region Hanging Man if (PatternFound[0] == 1) { if (ChartBars != null) { if (Close[0] > Open[0]) { BarBrush = upColor; CandleOutlineBrushes[0] = downColor; } else { BarBrush = downColor; } } Draw.Text(this, "Hanging Man" + CurrentBar, false, "Hanging\nMan # " + ++numPatternsFound, 0, Low[0], -20, textColor, TextFont, TextAlignment.Center, Brushes.Transparent, Brushes.Transparent, 0); } #endregion break; } case ChartPattern.InvertedHammer: { #region Inverted Hammer if (PatternFound[0] == 1) { if (ChartBars != null) { if (Close[0] > Open[0]) { BarBrush = upColor; CandleOutlineBrushes[0] = downColor; } else { BarBrush = downColor; } } Draw.Text(this, "Inverted Hammer" + CurrentBar, false, "Inverted\nHammer\n # " + ++numPatternsFound, 0, Low[0] - 2 * TickSize, 20, textColor, TextFont, TextAlignment.Center, Brushes.Transparent, Brushes.Transparent, 0); } #endregion break; } case ChartPattern.MorningStar: { #region Morning Star if (PatternFound[0] == 1) { if (ChartBars != null) { if (Close[0] > Open[0]) { BarBrush = upColor; CandleOutlineBrushes[0] = downColor; } else { BarBrush = downColor; } if (Close[1] > Open[1]) { BarBrushes[1] = upColor; CandleOutlineBrushes[1] = downColor; } else { BarBrushes[1] = downColor; } if (Close[2] > Open[2]) { BarBrushes[2] = upColor; CandleOutlineBrushes[2] = downColor; } else { BarBrushes[2] = downColor; } } Draw.Text(this, "Morning Star Text" + CurrentBar, false, "Morning\nStar # " + ++numPatternsFound, 1, MIN(Low, 3)[0], -20, textColor, TextFont, TextAlignment.Center, Brushes.Transparent, Brushes.Transparent, 0); } #endregion break; } case ChartPattern.PiercingLine: { #region Piercing Line if (PatternFound[0] == 1) { if (ChartBars != null) { CandleOutlineBrushes[1] = downColor; BarBrushes[1] = upColor; BarBrush = downColor; } Draw.Text(this, "Piercing Line" + CurrentBar, false, "Piercing\nLine # " + ++numPatternsFound, 1, Low[0], -10, textColor, TextFont, TextAlignment.Center, Brushes.Transparent, Brushes.Transparent, 0); } #endregion break; } case ChartPattern.RisingThreeMethods: { #region Rising Three Methods if (PatternFound[0] == 1) { if (ChartBars != null) { BarBrush = upColor; CandleOutlineBrushes[0] = downColor; BarBrushes[4] = upColor; CandleOutlineBrushes[4] = downColor; int x = 1; while (x < 4) { if (Close[x] > Open[x]) { BarBrushes[x] = upColor; CandleOutlineBrushes[x] = downColor; } else { BarBrushes[x] = downColor; } x++; } } Draw.Text(this, "Rising Three Methods" + CurrentBar, false, " Rising Three\nMethods #" + ++numPatternsFound, 2, MIN(Low, 5)[0], -10, textColor, TextFont, TextAlignment.Center, Brushes.Transparent, Brushes.Transparent, 0); } #endregion break; } case ChartPattern.ShootingStar: { #region Shooting Star if (PatternFound[0] == 1) { if (ChartBars != null) { BarBrush = downColor; } Draw.Text(this, "Shooting Star" + CurrentBar, false, "Shooting\nStar # " + ++numPatternsFound, 0, High[0], 30, textColor, TextFont, TextAlignment.Center, Brushes.Transparent, Brushes.Transparent, 0); } #endregion break; } case ChartPattern.StickSandwich: { #region Stick Sandwich if (PatternFound[0] == 1) { if (ChartBars != null) { BarBrush = downColor; BarBrushes[1] = upColor; CandleOutlineBrushes[1] = downColor; BarBrushes[2] = downColor; } Draw.Text(this, "Stick Sandwich" + CurrentBar, false, "Stick\nSandwich\n # " + ++numPatternsFound, 1, MAX(High, 3)[0], 50, textColor, TextFont, TextAlignment.Center, Brushes.Transparent, Brushes.Transparent, 0); } #endregion break; } case ChartPattern.ThreeBlackCrows: { #region Three Black Crows if (PatternFound[0] == 1) { if (ChartBars != null) { BarBrush = downColor; BarBrushes[1] = downColor; BarBrushes[2] = downColor; } Draw.Text(this, "Three Black Crows" + CurrentBar, false, "Three Black\nCrows # " + ++numPatternsFound, 1, MAX(High, 3)[0], 50, textColor, TextFont, TextAlignment.Center, Brushes.Transparent, Brushes.Transparent, 0); } #endregion break; } case ChartPattern.ThreeWhiteSoldiers: { #region Three White Soldiers if (PatternFound[0] == 1) { if (ChartBars != null) { BarBrush = upColor; CandleOutlineBrushes[0] = downColor; BarBrushes[1] = upColor; CandleOutlineBrushes[1] = downColor; BarBrushes[2] = upColor; CandleOutlineBrushes[2] = downColor; } Draw.Text(this, "Three White Soldiers" + CurrentBar, false, "Three White\nSoldiers # " + ++numPatternsFound, 1, Low[2], -10, textColor, TextFont, TextAlignment.Center, Brushes.Transparent, Brushes.Transparent, 0); } #endregion break; } case ChartPattern.UpsideGapTwoCrows: { #region Upside Gap Two Crows if (PatternFound[0] == 1) { if (ChartBars != null) { BarBrush = downColor; BarBrushes[1] = downColor; BarBrushes[2] = upColor; CandleOutlineBrushes[2] = downColor; } Draw.Text(this, "Upside Gap Two Crows" + CurrentBar, false, "Upside Gap\nTwo Crows # " + ++numPatternsFound, 1, Math.Max(High[0], High[1]), 10, textColor, TextFont, TextAlignment.Center, Brushes.Transparent, Brushes.Transparent, 0); } #endregion break; } case ChartPattern.UpsideTasukiGap: { #region Upside Tasuki Gap if (PatternFound[0] == 1) { if (ChartBars != null) { BarBrush = downColor; BarBrushes[1] = upColor; CandleOutlineBrushes[1] = downColor; BarBrushes[2] = upColor; CandleOutlineBrushes[2] = downColor; } Draw.Text(this, "Upside Tasuki Gap" + CurrentBar, false, "Upside\nTasuki\nGap # " + ++numPatternsFound, 1, MIN(Low, 3)[0], -20, textColor, TextFont, TextAlignment.Center, Brushes.Transparent, Brushes.Transparent, 0); } #endregion break; } } if (ShowPatternCount) { Draw.TextFixed(this, "Count", numPatternsFound + " " + Pattern + "\n patterns found", textBoxPosition, textColor, TextFont, Brushes.Transparent, Brushes.Transparent, 0); } if (PatternFound[0] == 1 && ShowAlerts) { Alert("myAlert", Priority.Low, "Pattern(s) found: " + numPatternsFound + " " + Pattern + " on " + Instrument.FullName + " " + BarsPeriod.Value + " " + BarsPeriod.BarsPeriodType + " Chart", "Alert3.wav", 10, Brushes.DimGray, Brushes.DimGray); } }