The drawing script draws a series of five horizontal lines that divide the highest and lowest values of an underlying symbol price during a specified range, into four equal sections.

1. Top Line - The highest high visualizes the highest price.
2. Bottom Line - The lowest low visualizes the lowest price.
3. Center Line - The mean price visualized the mean price.

#region Namespaces using System; #endregion namespace ScriptCode { /// <summary> /// Drawing scripts are used for drawing a visual object. /// /// This script can be used in several ways: /// (1) It can be used on a chart by clicking the chart in order to set the drawing's anchor points. /// (2) It can be used from another script by having that script set the drawing's anchor points. /// </summary> public partial class MyDrawing : DrawingScriptBase // NEVER CHANGE THE CLASS NAME { #region Variables // The underlying symbol index for the drawing. private int _symbolIndex; #endregion #region OnInitialize /// <summary> /// This function is called when a new drawing instance is created. /// </summary> /// -------------------------------------------------------------------------------------------------- /// THIS FUNCTION MUST ACCEPT THE SYMBOL INDEX PARAMETER AND SHOULD NOT ACCEPT ANY OTHER PARAMETERS. /// -------------------------------------------------------------------------------------------------- /// <param name="symbolIndex" type="Symbol" default="">The underlying symbol index for the drawing.</param> public void OnInitialize(int symbolIndex) { // Initialize the drawing for the symbol to accept 2 anchor points. DrawingInitialize(symbolIndex, 2); // Set the symbol index. _symbolIndex = symbolIndex; } #endregion #region OnChartSetup /// <summary> /// This function is used for setting up the drawing on the chart and registering its pens (see the DrawingRegisterPen function). /// </summary> public override void OnChartSetup() { // Register the pen with which to draw the quadrant lines. DrawingRegisterPen("Line Pen", new byte[] { 5, 110, 180, 255 }, AT_DashStyle.SOLID, 2); } #endregion #region OnDraw /// <summary> /// This function is used to draw the drawing by setting all of its anchor points, lines and labels on a virtual canvas. /// The canvas x-axis values are the date and time of the underlying symbol bars and its y-axis values are the symbol prices. /// /// The location of the drawing on the canvas is specified by the drawing anchor points, which can either be specified by /// clicking on a chart or from another script (see the Drawing functions). /// </summary> public override void OnDraw() { // Get the X value of anchor point 0. int x1 = DrawingAnchorPointBarShift(0); // Get the Y value of anchor point 0. double y1 = 0; // Get the X value of anchor point 1. int x2 = DrawingAnchorPointBarShift(1); // Get the Y value of anchor point 1. double y2 = 0; // Find the maximum X. int maxX = Math.Max(x1, x2); // Find the minimum X. int minX = Math.Min(x1, x2); // Use for the number of bars to include in the calculation. int length = Math.Abs(x2 - x1); // Find the highest high and lowest low. double highest = 0; double lowest = 10000000; // Iterate over all of the highs and all of the lows for (int i = 0; i < length; i++) { // Check whether a new high was found. if (DataHigh(minX + i) > highest) { highest = DataHigh(minX + i); } // Check whether a new low was found. if (DataLow(minX + i) < lowest) { lowest = DataLow(minX + i); } } int index = 0; // Calculate the range between the lines. double range = (highest - lowest) / 4; double y = lowest; // Draw the four ranges. for (int i = 0; i <= 4; i++) { DrawingSetLine("Line Pen", minX, y, "", maxX, y, ""); y += range; } // Fix the anchor point to position itself on the drawing. DrawingSetAnchorPoint(0, x1, lowest); // Fix the anchor point to position itself on the drawing. DrawingSetAnchorPoint(1, x2, lowest); } #endregion } }

The Algorithmic Trading Software for Hedge Funds and Quants