Handle a buy on the last candle

We will never see this, as buy is on close which is the end of backtest
e.g there is no next candle OPEN to buy at, or on
This commit is contained in:
creslinux 2018-07-16 18:59:48 +00:00
parent 357c8c0ba0
commit a313917347

View File

@ -89,10 +89,10 @@ class Backtesting(object):
self.np_stop: int = 6 self.np_stop: int = 6
self.np_bto: int = self.np_close # buys_triggered_on - should be close self.np_bto: int = self.np_close # buys_triggered_on - should be close
self.np_bco: int = self.np_open # buys calculated on - open of the next candle. self.np_bco: int = self.np_open # buys calculated on - open of the next candle.
self.np_sto: int = self.np_low # stops_triggered_on - Should be low, FT uses close #self.np_sto: int = self.np_low # stops_triggered_on - Should be low, FT uses close
self.np_sco: int = self.np_stop # stops_calculated_on - Should be stop, FT uses close #self.np_sco: int = self.np_stop # stops_calculated_on - Should be stop, FT uses close
#self.np_sto: int = self.np_close # stops_triggered_on - Should be low, FT uses close self.np_sto: int = self.np_close # stops_triggered_on - Should be low, FT uses close
#self.np_sco: int = self.np_close # stops_calculated_on - Should be stop, FT uses close self.np_sco: int = self.np_close # stops_calculated_on - Should be stop, FT uses close
self.use_backslap = True # Enable backslap - if false Orginal code is executed. self.use_backslap = True # Enable backslap - if false Orginal code is executed.
self.debug = False # Main debug enable, very print heavy, enable 2 loops recommended self.debug = False # Main debug enable, very print heavy, enable 2 loops recommended
@ -437,7 +437,7 @@ class Backtesting(object):
return bslap_results_df return bslap_results_df
def np_get_t_open_ind(self, np_buy_arr, t_exit_ind: int): def np_get_t_open_ind(self, np_buy_arr, t_exit_ind: int, np_buy_arr_len: int):
import utils_find_1st as utf1st import utils_find_1st as utf1st
""" """
The purpose of this def is to return the next "buy" = 1 The purpose of this def is to return the next "buy" = 1
@ -469,6 +469,9 @@ class Backtesting(object):
if t_open_ind != -1: # send back the -1 if no buys found. otherwise update index if t_open_ind != -1: # send back the -1 if no buys found. otherwise update index
t_open_ind = t_open_ind + t_exit_ind # Align numpy index t_open_ind = t_open_ind + t_exit_ind # Align numpy index
if t_open_ind == np_buy_arr_len -1 : # If buy found on last candle ignore, there is no OPEN in next to use
t_open_ind = -1 # -1 ends the loop
return t_open_ind return t_open_ind
def backslap_pair(self, ticker_data, pair): def backslap_pair(self, ticker_data, pair):
@ -606,11 +609,12 @@ class Backtesting(object):
Requires: np_buy_arr - a 1D array of the 'buy' column. To find next "1" Requires: np_buy_arr - a 1D array of the 'buy' column. To find next "1"
Required: t_exit_ind - Either 0, first loop. Or The index we last exited on Required: t_exit_ind - Either 0, first loop. Or The index we last exited on
Requires: np_buy_arr_len - length of pair array.
Provides: The next "buy" index after t_exit_ind Provides: The next "buy" index after t_exit_ind
If -1 is returned no buy has been found in remainder of array, skip to exit loop If -1 is returned no buy has been found in remainder of array, skip to exit loop
''' '''
t_open_ind = self.np_get_t_open_ind(np_buy_arr, t_exit_ind) t_open_ind = self.np_get_t_open_ind(np_buy_arr, t_exit_ind, np_buy_arr_len)
if debug: if debug:
print("\n(0) numpy debug \nnp_get_t_open, has returned the next valid buy index as", t_open_ind) print("\n(0) numpy debug \nnp_get_t_open, has returned the next valid buy index as", t_open_ind)