There is code in this script that can change the behavior that was not previously posted.
You are adding a secondary data series to your script. This means that the code will process once for each series. I would expect there to be more than the expected text boxes on each hour.
If you are wanting to only plot on one time frame, then you will need to prevent the code from executing on the secondary time frame.
For example:
if (BarsInProgress == 1)
return;
Comment