#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 icon for the drawing tool.
DrawingSetIcon("Quadrant Line");
// 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 int[] {
22 ,81, 238, 255
}, C_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);
// 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
}
}