Thanks for suggesting the TimeFrameGetPrice function. I had not tried that in any of my code yet. Looks like is does have a lot of potential uses. My first question would be how you can calculate a daily moving average using this function. Example: TimeFrameGetPrice(MA(C,10), inDaily, 0);
It is one thing to go and retrieve the desired price element, but then to start doing things like moving averages or even more complex things like stochastics? I'm afraid we would be right back to using the compress/expand statements. Gong back to the setup for a moment. I'm embarrased to admit it but up until now I have not tried setting the intraday menu to 'Show Day Session Only (RTH)". I think I'll give that a try and see if I can get it to calcualte a moving average without jumping through all of these time hoops. thanks again for your input. I'll let you know if that last bit works out. Pete :-) --- In [email protected], "brian_z111" <brian_z...@...> wrote: > > Pete, > > Initially I was just thinking to eliminate the possibility that it is anything to do with DatabaseSettings. It looks like we have done that (it seems that we are agreed that the settings are not the issue and we can focus on the code)? > > Yes, let's see what others have to say. > > In the meantime ... to eliminate another step ... have you looked at TimeFrameGetPrice? > It is the one step reference to the DailyH etc, from within an intraday database. Tomasz said it is 2* faster than the equivalent nested compress/expnand statements. > > > --- In [email protected], "Pete" dryheat3@ wrote: > > > > Brian, thank you for the very thorough response and examples. > > I have included below a section of code which demonstrates the very different results computed using two different techniques. > > > > One uses TimeFrameSet() and TimeFrameRestore(). > > The other uses TimeFrameCompress() and TimeFrameExpand(). > > > > Now matter how I setup the database market hours the time frame set/restore method gives inaccurate results, as compared to values calculated manually in an excel spread sheet. > > > > The time frame compress/expand is the only method I've found which produces accurate results. However, when you have to call these functions dozens of times in a AFL code it drastically slows the processing time of backtests and optimizations. > > > > It is a multi-stage process. First determine values during market hours, then compress the result into daily time frame. Once in the daily time frame it is now possible to perform operations involving multiple days, like calculating moving averages. Once the values are calculated you must then expand the variable before it can be used in the intra-day time frame. > > > > This is the reason I am searching for a better solution. If I could nest all of my calculations within a single time frame set/restore statement I could drastically reduce processing time. > > > > If someone has a solution to this I would be very grateful to know it. > > > > Thanks. > > > > Pete :-) > > > > > > _Section_Begin("Time Frame Test"); > > MrktOpn = TimeNum() == 093000; > > MrktCls = TimeNum() == 160000; > > > > TimeBar = TimeNum() >= 160000; > > TimeBar2 = TimeNum() < 160000; > > EOSTimeBar = TimeBar == 1 AND Ref(Timebar2,-1) == 1; > > > > //the only way I've found to calculate the true difference > > //between daily H and L which are only taken during market hours > > DlyHighest = HighestSince(MrktOpn , H); > > HighAtClose = ValueWhen(EOSTimeBar , Ref(DlyHighest,-1)); > > DlyLowest = LowestSince(MrktOpn , L); > > LowAtClose = ValueWhen(EOSTimeBar , Ref(DlyLowest,-1)); > > TRUE_DlyDiff = HighAtClose - LowAtClose ; > > //then it needs to be compressed before using it to calculate > > //a daily moving average of the difference between H and L > > tfc_DlyDiff = TimeFrameCompress(TRUE_DlyDiff, inDaily, compressLast); > > TRUE_DlyMA = MA(tfc_DlyDiff,10); > > //then it gets expanded for use in Ploting to other method of > > //display > > tfeDlyMA = TimeFrameExpand(TRUE_DlyMA,inDaily); > > > > //What I would prefer to use is the timeframeset, use it once > > //and perform various calcluations like the one above and have > > //it accurately produce results. If you check the values calculated > > //using the timeframeset section below against values manually > > //calculated in a spread sheet you will see they are including > > //data from outside of market trading hours. > > TimeFrameSet(inDaily); > > FALSE_DlyDiff = H-L; > > FALSE_DlyMA = MA(HighAtClose - LowAtClose, 10); > > /* > > it does not work no matter what you try here: > > FALSE_DlyMA = MA(H - L, 10); > > FALSE_DlyMA = MA(FALSE_DlyDiff, 10); > > */ > > TimeFrameRestore(inDaily); > > > > //plot to compare false results to true. > > Plot(TimeFrameExpand(FALSE_DlyDiff,inDaily), "FALSE Daily Diff", colorBlue, styleDashed); > > Plot(TRUE_DlyDiff, "TRUE Daily Diff", colorBlack, styleDots); > > > > Plot(TimeFrameExpand(FALSE_DlyMA,inDaily), "FALSE Dly MA", colorRed, styleDashed); > > Plot(tfeDlyMA , "TRUE Dly MA", colorRed, styleLine); > > _Section_End(); > > >
