Login Page - Create Account

Support Board


Date/Time: Mon, 24 Feb 2025 18:40:35 +0000



Post From: ACSIL not detecting last bar on a friday

[2021-03-16 15:45:27]
grantx - Posts: 244
This code prints an arrow above the first bar of the day and last bar of the day. Works for all days of the week but Friday.
Why does it not pick up the last bar on Friday? The arrow that should be on Fridays bar gets printed on Mondays first bar.


SCSFExport scsf_Indicate_Day_Start_End_Bars(SCStudyInterfaceRef sc)
{
  SCSubgraphRef ArrowDown = sc.Subgraph[0];
  SCSubgraphRef ArrowUp = sc.Subgraph[1];
  if (sc.SetDefaults)
  {
    sc.GraphName = "Highlight start and end bars";
    sc.GraphRegion = 0;
    sc.DisplayStudyName = 0;
    sc.DisplayStudyInputValues = 0;
    sc.Subgraph[0].DisplayNameValueInDataLine = false;
    sc.Subgraph[1].DisplayNameValueInDataLine = false;
    sc.Subgraph[2].DisplayNameValueInDataLine = false;
    sc.AutoLoop = 0; //No automatic looping

    ArrowUp.Name = "End";
    ArrowUp.DrawStyle = DRAWSTYLE_ARROW_DOWN;
    ArrowUp.PrimaryColor = RGB(255, 255, 255);  // red
    ArrowUp.LineWidth = 2; //Width of arrow
    ArrowUp.DrawZeros = 0;

    ArrowDown.Name = "Start";
    ArrowDown.DrawStyle = DRAWSTYLE_ARROW_DOWN;
    ArrowDown.PrimaryColor = RGB(255, 0, 0);  // red
    ArrowDown.LineWidth = 2; //Width of arrow
    ArrowDown.DrawZeros = 0;
  }
  SCDateTimeMS InStartTime;
  SCDateTimeMS InEndTime;
  InStartTime = sc.StartTime1;
  InEndTime = sc.StartTime2;
  
  for (int BarIndex = sc.UpdateStartIndex; BarIndex < sc.ArraySize - 1; ++BarIndex)
  {    
    //Wait for the last bar to close
    if (sc.GetBarHasClosedStatus(BarIndex) != BHCS_BAR_HAS_CLOSED)
      return;

    int StartIndex;
    int EndIndex;
    if (BarIndex != 0)
    {
      SCDateTime startTime;
      SCDateTime EndDateTime;

      startTime.SetTime(sc.StartTime1);
      EndDateTime.SetTime(sc.EndTime1);
      SCDateTime timeDifference = EndDateTime - startTime - 1;

      SCDateTime TradingDayStartDateTime = sc.GetTradingDayStartDateTimeOfBar(sc.BaseDateTimeIn[BarIndex]);
      SCDateTime CurrentBarTradingDayEndDateTime = TradingDayStartDateTime + timeDifference;

      if (CurrentBarTradingDayEndDateTime.IsMonday())
      {
        CurrentBarTradingDayEndDateTime.SubtractDays(3);
      }
      
      EndIndex = sc.GetNearestMatchForSCDateTime(sc.ChartNumber, CurrentBarTradingDayEndDateTime);
      StartIndex = sc.GetFirstIndexForDate(sc.ChartNumber, TradingDayStartDateTime.GetDate());

      ArrowDown[StartIndex] = sc.High[StartIndex];
      ArrowUp[EndIndex] = sc.High[EndIndex];

    }
  }
}

Date Time Of Last Edit: 2021-03-16 15:46:18