Merge pull request #1601 from hroff-1902/no-recursion-edge
eliminate recursion in Edge
This commit is contained in:
commit
4e291795a6
@ -351,7 +351,7 @@ class Edge():
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
def _detect_next_stop_or_sell_point(self, buy_column, sell_column, date_column,
|
def _detect_next_stop_or_sell_point(self, buy_column, sell_column, date_column,
|
||||||
ohlc_columns, stoploss, pair, start_point=0):
|
ohlc_columns, stoploss, pair):
|
||||||
"""
|
"""
|
||||||
Iterate through ohlc_columns recursively in order to find the next trade
|
Iterate through ohlc_columns recursively in order to find the next trade
|
||||||
Next trade opens from the first buy signal noticed to
|
Next trade opens from the first buy signal noticed to
|
||||||
@ -362,12 +362,15 @@ class Edge():
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
result: list = []
|
result: list = []
|
||||||
|
start_point = 0
|
||||||
|
|
||||||
|
while True:
|
||||||
open_trade_index = utf1st.find_1st(buy_column, 1, utf1st.cmp_equal)
|
open_trade_index = utf1st.find_1st(buy_column, 1, utf1st.cmp_equal)
|
||||||
|
|
||||||
# return empty if we don't find trade entry (i.e. buy==1) or
|
# return empty if we don't find trade entry (i.e. buy==1) or
|
||||||
# we find a buy but at the of array
|
# we find a buy but at the of array
|
||||||
if open_trade_index == -1 or open_trade_index == len(buy_column) - 1:
|
if open_trade_index == -1 or open_trade_index == len(buy_column) - 1:
|
||||||
return []
|
break
|
||||||
else:
|
else:
|
||||||
open_trade_index += 1 # when a buy signal is seen,
|
open_trade_index += 1 # when a buy signal is seen,
|
||||||
# trade opens in reality on the next candle
|
# trade opens in reality on the next candle
|
||||||
@ -395,7 +398,7 @@ class Edge():
|
|||||||
# It is not interesting for Edge to consider it so we simply ignore the trade
|
# It is not interesting for Edge to consider it so we simply ignore the trade
|
||||||
# And stop iterating there is no more entry
|
# And stop iterating there is no more entry
|
||||||
if stop_index == sell_index == float('inf'):
|
if stop_index == sell_index == float('inf'):
|
||||||
return []
|
break
|
||||||
|
|
||||||
if stop_index <= sell_index:
|
if stop_index <= sell_index:
|
||||||
exit_index = open_trade_index + stop_index
|
exit_index = open_trade_index + stop_index
|
||||||
@ -407,7 +410,7 @@ class Edge():
|
|||||||
|
|
||||||
# check if we have the next candle
|
# check if we have the next candle
|
||||||
if len(ohlc_columns) - 1 < exit_index:
|
if len(ohlc_columns) - 1 < exit_index:
|
||||||
return []
|
break
|
||||||
|
|
||||||
exit_type = SellType.SELL_SIGNAL
|
exit_type = SellType.SELL_SIGNAL
|
||||||
exit_price = ohlc_columns[exit_index, 0]
|
exit_price = ohlc_columns[exit_index, 0]
|
||||||
@ -428,14 +431,11 @@ class Edge():
|
|||||||
|
|
||||||
result.append(trade)
|
result.append(trade)
|
||||||
|
|
||||||
# Calling again the same function recursively but giving
|
# giving a view of exit_index till the end of array
|
||||||
# it a view of exit_index till the end of array
|
buy_column = buy_column[exit_index:]
|
||||||
return result + self._detect_next_stop_or_sell_point(
|
sell_column = sell_column[exit_index:]
|
||||||
buy_column[exit_index:],
|
date_column = date_column[exit_index:]
|
||||||
sell_column[exit_index:],
|
ohlc_columns = ohlc_columns[exit_index:]
|
||||||
date_column[exit_index:],
|
start_point += exit_index
|
||||||
ohlc_columns[exit_index:],
|
|
||||||
stoploss,
|
return result
|
||||||
pair,
|
|
||||||
(start_point + exit_index)
|
|
||||||
)
|
|
||||||
|
Loading…
Reference in New Issue
Block a user