Barry --
You were perfectly clear the first time.
Code for BEMAD and BEMAN, EMAs for day and night respectively:

|// Barry's day and night EMAs
BPD = 50; // period of 50 bars for daytime
BKD = 2/(1+BPD);
BEMAD[0] = *Close*[0]; // best guess for start

BPN = 70; // period of 70 bars for nighttime
BKN = 2/(1+BPD);
BEMAN[0] = *Close*[0];

||TM = TimeNum();
*for*(i=1; i<*BarCount*; i++){
*if*(TM[i]>=93000 *AND* TM[i]<=161500){
      BEMAD[i] = BEMAD[i-1]*(1-BKD) + *Close*[i]*BKD;
      BEMAN[i] = BEMAN[i-1];
   }*else*{
      BEMAN[i] = BEMAN[i-1]*(1-BKN) + *Close*[i]*BKN;
      BEMAD[i] = BEMAD[i-1];
   }
}
||
|
The MA is a little more difficult, but simplified a little if you can calculate precise number of bars to look back for the value to subtract (which bar is C[i-p]?).
MA[i] = MA[i-1] + C[i]/p - C[i-p]/p;
And for MA, you might also need to use SetBarsRequired().
-- Keith

On 2/25/2010 17:31, Barry wrote:

Maybe I did not explain this well enough. I define day as
daytime = TimeNum() >= 093000 AND TimeNum() <= 161500;
Then I want to do an MA on only day time bars or not-day time bars. This will produce voids in the arrays. For instance there will be 27 15 minute day time bars and 69 15 minute off hours bars. If I do a simple MA(V, 50) it will average the last 50 bars regardless of whether they are day or night time bars. The data I average will span day and night volume numbers giving an inaccurate MA. I would have to use a loop and use the value of the last 50 day only or night only bars. I can't figure out how to do that.

The code would be a lot easier in a DLL since I could have two arrays and store the correct data contiguously in one of two arrays. But I don't know how that would match up with AFL arrays or even if would have to. I have not written a DLL but I know MS C++ foundation classes.

Anyway, if it is a simple matter in AFL it escapes me how to manage the arrays. Maybe I am making it harder than it needs to be.

Thanks,
Barry

--- In [email protected] <mailto:amibroker%40yahoogroups.com>, Keith McCombs <kmcco...@...> wrote:
>
> Barry --
> Calculating EMAs and MAs should be possible, and of only intermediate
> difficulty, using AFL. EMAs will be a bit easier than MAs. The reason
> being that calculating an EMA requires only 2 pieces of data, previous
> bar's EMA and this bar's data. Of course, you will have to construct
> your own EMA because you will need to stop calculating each EMA at the
> end of its time period and then continue when its time period begins again.
>
> As for MAs, they really require only 3 pieces of data, previous bars MA,
> this bars data, and data of one bar, P bars ago (in the correct time
> period), where P is MA period.
>
> One problem you may run into, especially with off hours data, is what to
> do if volume is zero. Is a bar created in this case? If not, what are
> you going to do about it?
>
> BTW, AB&IB seems to create zero volume bars when backfills are complete,
> though 180days are problematic. Some other data providers, PItrading
> for example, just leave zero volume bars out.
>
> -- Keith
>
>
>
> On 2/25/2010 12:06, Barry wrote:
> >
> > I am trying to create two moving averages, one for normal trading
> > hours volume and the other for the off hours volume. When futures are
> > trading during the day the volume is much higher than off hours. Using
> > an MA of say 50 bars gives an incorrect look at the volume until 50
> > bars into the new time period. However, if one were using hour or 15
> > minute charts the MA could span days. It would be clearer or more
> > accurate if one could only use the applicable volume when calculating
> > the MA for normal hours vs off hours trading.
> >
> > Has this been done in AFL? Can it be done in AFL? Is there an AFL
> > function that can separate the day and night session data? Can it be
> > done in the context of AFL or would one have to use a DLL to build
> > separate arrays that only contain values from the two time periods?
> >
> > I have tried a number of methods in AFL but none work correctly.
> > Managing the arrays in AFL and trying to ignore spans of bars is
> > blowing my mind.
> >
> > Thanks,
> > Barry
> >
> >
>


Reply via email to