I noticed in the manual that if BarZone is set to the local time, that hour() and lhour() are equivalent. I don't think this is the case. I think that hour() actually always refers to the UTC hour.

The following script:

Code:
function run()
{
	StartDate = 20150101;
	BarZone = ET;
	BarPeriod = 1440;
	BarOffset = 9*60;
	vars Close = series(priceClose());
	printf("\nhour: %d, lhour: %d, Close: %f", hour(), lhour(ET), Close[0]);
}



generates the following example output:

Code:
hour: 13, lhour: 9, Close: 1.109865
hour: 13, lhour: 9, Close: 1.115435
hour: 13, lhour: 9, Close: 1.116505
hour: 13, lhour: 9, Close: 1.120315
hour: 13, lhour: 9, Close: 1.119425
hour: 13, lhour: 9, Close: 1.114395
hour: 13, lhour: 9, Close: 1.108410
hour: 13, lhour: 9, Close: 1.108720
hour: 13, lhour: 9, Close: 1.107920
hour: 13, lhour: 9, Close: 1.118925
hour: 13, lhour: 9, Close: 1.118165
Chart... ok



which to me suggests that hour() is returning the UTC hour, while lhour(ET) is returning the ET hour, even though BarZone is set.