Its frustrating you cannot set an end time.
I take it you have a number of Apps that you want to run on this schedule hence your search for a easier way to trigger.
May I suggest you have an app that you reload using the manual way you've suggested. Then have the rest of your Apps trigger on successful load of that app. Its not perfect but it will mimic what you are trying to do with less reload steps.
Another way you could achive this is using Sub Routines in your script.
So you would wrap each part of your script in a Sub Routine
Then at the end of the script you can add an if statement to check that the houra matche your desired time else exit script.
IF LEFT(RIGHT(NOW(),8),2) = 06
Basically LEFT(RIGHT(NOW(),8),2) will return the Current hour and if it is equal to 06 it will run your sub routines else it will just exit.
So if build on the above if statement with a match statement or an OR to inculde the other hours and then set up a task to run every hour then it should do what you want with no manual work.
you can schedule a task to run every 3 hours and check for current time in script:
If(Frac(Now())<0.25 OR Frac(Now())>0.75) then Exit Scrip; EndIf
This will of course clear all data from your data model, so I suggest you implement this for the QVD layer and then attach a task reloading the presentation app based on those QVDs.
Hope this helps.