Untitled
unknown
plain_text
5 months ago
6.1 kB
3
Indexable
using cAlgo.API; using cAlgo.API.Indicators; using cAlgo.API.Internals; using System; namespace cAlgo { [Indicator(IsOverlay = true, TimeZone = TimeZones.CentralEuropeStandardTime, AccessRights = AccessRights.None)] public class NewDayOpening : Indicator { [Parameter("Daily Line Color", DefaultValue = "DodgerBlue")] public string DailyLineColor { get; set; } [Parameter("Previous Day Close Line Color", DefaultValue = "DodgerBlue")] public string PreviousDayCloseLineColor { get; set; } [Parameter("Weekly Line Color", DefaultValue = "Green")] public string WeeklyLineColor { get; set; } [Parameter("Previous Week Close Line Color", DefaultValue = "Green")] public string PreviousWeekCloseLineColor { get; set; } [Parameter("Show NDOG", DefaultValue = true)] public bool IsShowNDOG { get; set; } [Parameter("Line Thickness", DefaultValue = 2)] public int LineThickness { get; set; } [Parameter("Line Style", DefaultValue = LineStyle.Solid)] public LineStyle LineStyle { get; set; } private MarketSeries _dailySeries; private MarketSeries _weeklySeries; protected override void Initialize() { _dailySeries = MarketData.GetSeries(TimeFrame.Daily); _weeklySeries = MarketData.GetSeries(TimeFrame.Weekly); } public override void Calculate(int index) { var currentBarTime = MarketSeries.OpenTime[index]; if (IsShowNDOG) { DrawDailyOpeningLine(index, currentBarTime); DrawNdogLine(index, currentBarTime); } DrawWeeklyOpeningLine(index, currentBarTime); DrawPreviousWeekCloseLine(index, currentBarTime); } private void DrawDailyOpeningLine(int index, DateTime currentBarTime) { var currentDay = currentBarTime.Date; int dailyIndex = _dailySeries.OpenTime.GetIndexByTime(currentDay); if (dailyIndex < 0) return; double dailyOpenPrice = _dailySeries.Open[dailyIndex]; int firstBarIndex = GetFirstBarIndexOfDay(currentDay); int lastBarIndex = index; Chart.DrawTrendLine($"DailyOpen_{currentDay}", MarketSeries.OpenTime[firstBarIndex], dailyOpenPrice, MarketSeries.OpenTime[lastBarIndex], dailyOpenPrice, DailyLineColor, LineThickness, LineStyle); } private void DrawNdogLine(int index, DateTime currentBarTime) { var previousDay = currentBarTime.Date.AddDays(-1); var currentDay = currentBarTime.Date; int firstBarIndex = GetFirstBarIndexOfDay(currentDay); int lastBarIndex = index; int previousDayIndex = _dailySeries.OpenTime.GetIndexByTime(previousDay); int dailyIndex = _dailySeries.OpenTime.GetIndexByTime(currentDay); if (dailyIndex < 0 || previousDayIndex < 0) return; double previousDayClosePrice = _dailySeries.Close[previousDayIndex]; double dailyOpenPrice = _dailySeries.Open[dailyIndex]; double midPrice = (dailyOpenPrice + previousDayClosePrice) / 2; Chart.DrawTrendLine($"PreviousDayClose_{previousDay}", MarketSeries.OpenTime[firstBarIndex], previousDayClosePrice, MarketSeries.OpenTime[lastBarIndex], previousDayClosePrice, PreviousDayCloseLineColor, LineThickness, LineStyle); Chart.DrawTrendLine($"Mid_NDOG_{previousDay}", MarketSeries.OpenTime[firstBarIndex], midPrice, MarketSeries.OpenTime[lastBarIndex], midPrice, PreviousDayCloseLineColor, LineThickness, LineStyle.DotsVeryRare); } private void DrawWeeklyOpeningLine(int index, DateTime currentBarTime) { var currentWeekStart = StartOfWeek(currentBarTime); int weeklyIndex = _weeklySeries.OpenTime.GetIndexByTime(currentWeekStart); if (weeklyIndex < 0) return; double weeklyOpenPrice = _weeklySeries.Open[weeklyIndex]; int firstBarIndex = GetFirstBarIndexOfWeek(currentWeekStart); int lastBarIndex = index; Chart.DrawTrendLine($"WeeklyOpen_{currentWeekStart}", MarketSeries.OpenTime[firstBarIndex], weeklyOpenPrice, MarketSeries.OpenTime[lastBarIndex], weeklyOpenPrice, WeeklyLineColor, LineThickness, LineStyle); } private void DrawPreviousWeekCloseLine(int index, DateTime currentBarTime) { var previousWeekStart = StartOfWeek(currentBarTime).AddDays(-7); int previousWeekIndex = _weeklySeries.OpenTime.GetIndexByTime(previousWeekStart); if (previousWeekIndex < 0) return; double previousWeekClosePrice = _weeklySeries.Close[previousWeekIndex]; int firstBarIndex = GetFirstBarIndexOfWeek(previousWeekStart.AddDays(7)); // Starting from the current week int lastBarIndex = index; Chart.DrawTrendLine($"PreviousWeekClose_{previousWeekStart}", MarketSeries.OpenTime[firstBarIndex], previousWeekClosePrice, MarketSeries.OpenTime[lastBarIndex], previousWeekClosePrice, PreviousWeekCloseLineColor, LineThickness, LineStyle); } private int GetFirstBarIndexOfDay(DateTime day) { for (int i = 0; i < MarketSeries.OpenTime.Count; i++) if (MarketSeries.OpenTime[i].Date == day) return i; return 0; } private int GetFirstBarIndexOfWeek(DateTime weekStart) { for (int i = 0; i < MarketSeries.OpenTime.Count; i++) if (MarketSeries.OpenTime[i].Date >= weekStart) return i; return 0; } private DateTime StartOfWeek(DateTime date) { int diff = date.DayOfWeek - DayOfWeek.Monday; if (diff < 0) diff += 7; return date.AddDays(-diff).Date; } } }
Editor is loading...
Leave a Comment