Untitled
unknown
csharp
9 months ago
5.0 kB
8
Indexable
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using System;
namespace cAlgo
{
[Indicator(IsOverlay = true, TimeZone = TimeZones.EasternStandardTime, AccessRights = AccessRights.None)]
public class TimeRangeBox : Indicator
{
[Parameter("From Time (HH:mm)", DefaultValue = "07:00")]
public string FromTime { get; set; }
[Parameter("To Time (HH:mm)", DefaultValue = "08:30")]
public string ToTime { get; set; }
[Parameter("Trendline Start Time (HH:mm)", DefaultValue = "09:30")]
public string TrendlineStartTime { get; set; }
[Parameter("Trendline End Time (HH:mm)", DefaultValue = "10:00")]
public string TrendlineEndTime { get; set; }
[Parameter("Box Name", DefaultValue = "Time Box")]
public string BoxName { get; set; }
[Parameter("Box Color", DefaultValue = "DodgerBlue")]
public string BoxColor { get; set; }
[Parameter("Box Opacity (0-100)", DefaultValue = 50)]
public int BoxOpacity { get; set; }
[Parameter("Trendline Color", DefaultValue = "Red")]
public string TrendlineColor { get; set; }
private TimeSpan fromTimeSpan;
private TimeSpan toTimeSpan;
private TimeSpan trendlineStartTimeSpan;
private TimeSpan trendlineEndTimeSpan;
private DateTime lastDrawnDate = DateTime.MinValue;
protected override void Initialize()
{
fromTimeSpan = TimeSpan.Parse(FromTime);
toTimeSpan = TimeSpan.Parse(ToTime);
trendlineStartTimeSpan = TimeSpan.Parse(TrendlineStartTime);
trendlineEndTimeSpan = TimeSpan.Parse(TrendlineEndTime);
}
public override void Calculate(int index)
{
var currentTime = MarketSeries.OpenTime[index];
DateTime today = currentTime.Date;
DateTime fromDateTime = today + fromTimeSpan;
DateTime toDateTime = today + toTimeSpan;
DateTime trendlineStartDateTime = today + trendlineStartTimeSpan;
DateTime trendlineEndDateTime = today + trendlineEndTimeSpan;
if (currentTime < toDateTime || lastDrawnDate == today)
return;
lastDrawnDate = today;
double highestHigh = double.MinValue;
double lowestLow = double.MaxValue;
for (int i = index; i >= 0; i--)
{
DateTime barTime = MarketSeries.OpenTime[i];
if (barTime >= fromDateTime && barTime <= toDateTime)
{
if (MarketSeries.High[i] > highestHigh)
highestHigh = MarketSeries.High[i];
if (MarketSeries.Low[i] < lowestLow)
lowestLow = MarketSeries.Low[i];
}
if (barTime < fromDateTime) break;
}
if (highestHigh > double.MinValue && lowestLow < double.MaxValue)
{
double pipSize = Symbol.PipSize;
double pipsRange = (highestHigh - lowestLow) / pipSize;
Chart.DrawRectangle(
$"TimeBox_{today}",
fromDateTime,
highestHigh,
toDateTime,
lowestLow,
Color.FromName(BoxColor),
BoxOpacity
);
Chart.DrawText(
$"Label_{today}",
$"{BoxName} {pipsRange:F1} pips",
fromDateTime.AddSeconds((toDateTime - fromDateTime).TotalSeconds / 2),
lowestLow + (highestHigh - lowestLow) / 2,
Color.FromName(BoxColor)
);
Chart.DrawTrendLine(
$"Trendline_High_{today}",
trendlineStartDateTime, highestHigh,
trendlineEndDateTime, highestHigh,
Color.FromName(TrendlineColor),
1,
LineStyle.LinesDots
);
Chart.DrawTrendLine(
$"Trendline_50p_{today}",
trendlineStartDateTime,lowestLow + (highestHigh - lowestLow) / 2,
trendlineEndDateTime, lowestLow + (highestHigh - lowestLow) / 2,
Color.FromName(TrendlineColor),
1,
LineStyle.DotsRare
);
Chart.DrawTrendLine(
$"Trendline_Low_{today}",
trendlineStartDateTime, lowestLow,
trendlineEndDateTime, lowestLow,
Color.FromName(TrendlineColor),
1,
LineStyle.LinesDots
);
}
}
}
}
Editor is loading...
Leave a Comment