#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
#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("Fibonacci Extensions");
}
#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 0.0 line.
DrawingRegisterPen("0.0", new int[] {
150, 150, 150, 255
}, C_DashStyle.SOLID, 2);
// Register the pen with which to draw the 23.6 line.
DrawingRegisterPen("23.6", new int[] {
35, 145, 255, 255
}, C_DashStyle.SOLID, 2);
// Register the pen with which to draw the 38.2 line.
DrawingRegisterPen("38.2", new int[] {
100, 150, 235, 255
}, C_DashStyle.SOLID, 2);
// Register the pen with which to draw the 50.0 line.
DrawingRegisterPen("50.0", new int[] {
75, 135, 185, 255
}, C_DashStyle.SOLID, 2);
// Register the pen with which to draw the 61.8 line.
DrawingRegisterPen("61.8", new int[] {
10, 140, 145, 255
}, C_DashStyle.SOLID, 2);
// Register the pen with which to draw the 76.4 line.
DrawingRegisterPen("76.4", new int[] {
50, 140, 90, 255
}, C_DashStyle.SOLID, 2);
// Register the pen with which to draw the 100.0 line.
DrawingRegisterPen("100.0", new int[] {
150, 150, 150, 255
}, C_DashStyle.SOLID, 2);
// Register the pen with which to draw the 161.8 line.
DrawingRegisterPen("161.8", new int[] {
150, 150, 150, 255
}, C_DashStyle.SOLID, 2);
// Register the pen with which to draw the 261.8 line.
DrawingRegisterPen("261.8", new int[] {
150, 150, 150, 255
}, C_DashStyle.SOLID, 2);
// Register the pen with which to draw the 423.6 line.
DrawingRegisterPen("423.6", new int[] {
150, 150, 150, 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 = DrawingAnchorPointValue(0);
// Get the X value of anchor point 1.
int x2 = DrawingAnchorPointBarShift(1);
// Get the Y value of anchor point 1.
double y2 = DrawingAnchorPointValue(1);
// Check whether x1 is larger than x2.
if (x1 > x2) {
int tempX = x1;
x1 = x2;
x2 = tempX;
}
// Draw the Fibonacci Extensions lines.
DrawingSetLine("0.0", x1, y1, "", x2, y1, "0.0");
DrawingSetLine("23.6", x1, y1 + 236d / 1000 * (y2 - y1), "", x2, y1 + 236d / 1000 * (y2 - y1), "23.6");
DrawingSetLine("38.2", x1, y1 + 382d / 1000 * (y2 - y1), "", x2, y1 + 382d / 1000 * (y2 - y1), "38.2");
DrawingSetLine("50.0", x1, y1 + 500d / 1000 * (y2 - y1), "", x2, y1 + 500d / 1000 * (y2 - y1), "50.0");
DrawingSetLine("61.8", x1, y1 + 618d / 1000 * (y2 - y1), "", x2, y1 + 618d / 1000 * (y2 - y1), "61.8");
DrawingSetLine("76.4", x1, y1 + 764d / 1000 * (y2 - y1), "", x2, y1 + 764d / 1000 * (y2 - y1), "76.4");
DrawingSetLine("100.0", x1, y2, "", x2, y2, "100.0");
DrawingSetLine("161.8", x1, y1 + 1618d / 1000 * (y2 - y1), "", x2, y1 + 1618d / 1000 * (y2 - y1), "161.8");
DrawingSetLine("261.8", x1, y1 + 2618d / 1000 * (y2 - y1), "", x2, y1 + 2618d / 1000 * (y2 - y1), "261.8");
DrawingSetLine("423.6", x1, y1 + 4236d / 1000 * (y2 - y1), "", x2, y1 + 4236d / 1000 * (y2 - y1), "423.6");
}
#endregion
}
}