@ Damon A
You asked "I guess the question I really mean to ask is: Is there anyway I can make this talib.EMA function use the last 19 or so points of data (15m bars) from the previous trading day to immediately start to produce numerical values that can be used for entry triggers instead of wasting time to wait for the first 19 points?"
Yes. Your algorithm already does this (as explained previously).
Let's take a look at the actual data from the first trade of the algorithm. Below is the data which is being used by the talib.EMA function as of 13:45 UTC (ie 9:45 EDT) 15 minutes after the market opens on 2017-06-12 (ie the first day of the backtest).
closes_15m.dropna(): Series
Timestamp('2017-06-09 14:00:00+0000', tz='UTC'): 34.8478
Timestamp('2017-06-09 14:15:00+0000', tz='UTC'): 34.9386666667
Timestamp('2017-06-09 14:30:00+0000', tz='UTC'): 35.0237333333
Timestamp('2017-06-09 14:45:00+0000', tz='UTC'): 35.0624666667
Timestamp('2017-06-09 15:00:00+0000', tz='UTC'): 35.0512
Timestamp('2017-06-09 15:15:00+0000', tz='UTC'): 35.0779285714
Timestamp('2017-06-09 15:30:00+0000', tz='UTC'): 35.0482
Timestamp('2017-06-09 15:45:00+0000', tz='UTC'): 35.0217857143
Timestamp('2017-06-09 16:00:00+0000', tz='UTC'): 35.0204545455
Timestamp('2017-06-09 16:15:00+0000', tz='UTC'): 34.9867142857
Timestamp('2017-06-09 16:30:00+0000', tz='UTC'): 34.862
Timestamp('2017-06-09 16:45:00+0000', tz='UTC'): 34.7551428571
Timestamp('2017-06-09 17:00:00+0000', tz='UTC'): 34.7873846154
Timestamp('2017-06-09 17:15:00+0000', tz='UTC'): 34.7462142857
Timestamp('2017-06-09 17:30:00+0000', tz='UTC'): 34.6747333333
Timestamp('2017-06-09 17:45:00+0000', tz='UTC'): 34.6173333333
Timestamp('2017-06-09 18:00:00+0000', tz='UTC'): 34.4894
Timestamp('2017-06-09 18:15:00+0000', tz='UTC'): 34.4739333333
Timestamp('2017-06-09 18:30:00+0000', tz='UTC'): 34.5053076923
Timestamp('2017-06-09 18:45:00+0000', tz='UTC'): 34.2976666667
Timestamp('2017-06-09 19:00:00+0000', tz='UTC'): 34.0244666667
Timestamp('2017-06-09 19:15:00+0000', tz='UTC'): 34.2133333333
Timestamp('2017-06-09 19:30:00+0000', tz='UTC'): 34.3479333333
Timestamp('2017-06-09 19:45:00+0000', tz='UTC'): 34.2852666667
Timestamp('2017-06-09 20:00:00+0000', tz='UTC'): 34.3806666667
Timestamp('2017-06-12 13:45:00+0000', tz='UTC'): 34.3113333333
Notice that the last value (34.3113333333) is the the value from the first 15 minutes of the current trading day (2017-06-12) and the other 25 values are data from the previous trading day (2017-06-09). The talib.EMA function uses these values you pass and calculates a series of exponentially moving averages. The output series length of the talib functions always equals the input series length. In this case the input has length of 26 so the output has length of 26. Here is the 'ema_20' output from this input.
ema_20: ndarray
0: nan
1: nan
2: nan
3: nan
4: nan
5: nan
6: nan
7: nan
8: nan
9: nan
10: nan
11: nan
12: nan
13: nan
14: nan
15: nan
16: nan
17: nan
18: nan
19: 34.814403295
20: 34.7391712352
21: 34.689091435
22: 34.6566001872
23: 34.62123509
24: 34.5983238116
25: 34.5709913851
The talib.EMA function, with a timeperiod of 20, uses exactly 20 data points for each calculation. Because of this, the first 19 points in the ema_20 output series don't have enough data to calculate and therefore returns NaN. However starting at the 20th point (ie index 19) and for each subsequent group of 20 prices it computes the ema. The last ema in the series (ema_20[25] or ema_20[-1]) is the ema of the first 15 minutes of the current trading day (2017-06-12) and the last 19 values from the previous day. This I believe is exactly what you asked for?
Not sure if you realize, but all backtest variables can be inspected real time using the debug features of the backtester. Take a look here https://www.quantopian.com/help#debugger. The above numbers were simply cut and pasted from the debugger window. It's a great way to see what's going on.
Good luck.