Using Multiple Time Frames in a Strategy

I have been working on a project where the strategy combined daily and weekly bars.  Keeping track of the two time frames was, at one time, not that easy.  However, with TradeStation’s Data Aliasing it is no problem at all.  We all know that Data 1 is the highest resolution time frame and is the one used for trade execution.   Data 2 can be a different market or a different time from of the same market.  TradeStation allows for multiple data streams.  Take a look at the following output in table 1.  Wavg is a nine period moving average of weekly crude data.  Wavg[1] is the prior value of the moving average.  If you wanted to make a trading decision on a daily bar basis by looking at the slope of the Wavg you couldn’t.  The Wavg and Wavg[1] only changes at the beginning of the next week.  Most traders want to be able to make a trading decision intra-week by examining the current values of the Davg1, Davg2 and the slope of Wavg.  During the week the slope of Wavg is ZERO.

table 1
Date    Davg1 Davg2 Wavg Wavg[1]
1151019 46.94 46.38 46.17 46.17
1151020 47.01 46.54 46.17 46.17
1151021 47.00 46.69 46.17 46.17
1151022 46.95 46.74 46.17 46.17
1151023 46.93 46.70 46.54 46.17<< changed here
1151026 46.83 46.55 46.54 46.54
1151027 46.71 46.47 46.54 46.54
1151028 46.74 46.44 46.54 46.54
1151029 46.74 46.40 46.54 46.54
1151030 46.73 46.39 46.60 46.54
1151102 46.57 46.37 46.60 46.60
1151103 46.55 46.45 46.60 46.60
1151104 46.36 46.44 46.60 46.60

Now look at table 2.   The Wavg is not being updated on a daily  basis but on a weekly basis.  The current Wavg doesn’t become the prior Wavg on each daily bar.  Wavg[1] stays the same until a new weekly bar occurs.  You can now make a trading decision intra-week by examining the slope of the Wavg.  Each time frame update should only occur when a new bar of that same time frame is generated.  This feature is really cool and is easy to implement.  

table2
Date      Davg1 Davg2 Wavg Wavg[1]
1151019 46.94 46.38 46.17 45.75 < notice how the Wavg and Wavg[1] are always different
1151020 47.01 46.54 46.17 45.75
1151021 47.00 46.69 46.17 45.75
1151022 46.95 46.74 46.17 45.75
1151023 46.93 46.70 46.54 46.17
1151026 46.83 46.55 46.54 46.17
1151027 46.71 46.47 46.54 46.17
1151028 46.74 46.44 46.54 46.17
1151029 46.74 46.40 46.54 46.17
1151030 46.73 46.39 46.60 46.54
1151102 46.57 46.37 46.60 46.54
1151103 46.55 46.45 46.60 46.54
1151104 46.36 46.44 46.60 46.54

 

Here is the code that utilizes Data Aliasing. All I did was declare the weekly avg variable and tied it to data2.

vars: mavShortDaily(0),mavLongDaily(0);
vars: mavWeekly(0,data2);

mavShortDaily = average(c,19);
mavLongDaily = average(c,39);

mavWeekly = average(C of data2, 9);

If mavShortDaily > mavLongDaily and mavWeekly > mavWeekly[1] then buy this bar on close;
If mavShortDaily < mavLongDaily and mavWeekly < mavWeekly[1] then sellshort this bar on close;

print(date," ",mavShortDaily," ",mavLongDaily," ",mavWeekly," ",mavWeekly[1]);

Notice how the variable mavWeekly was tied to data2. When you delcare a variable that is tied to another data other than data1 you can put the data stream right in the variable delcaration : mavWeekly(0,data2).