You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

58 lines
1.6 KiB

8 years ago
'''
'''
from .trade import Trade
class Executor(object):
'''
'''
def __init__(self, series):
'''
Constructor
'''
self.series = series
self.max_hold_bars = 1
def execute(self, signals, long=True):
8 years ago
self.trades = []
sig_vectors = []
vec_length = 0
for signal in signals:
vec = signal.calculate(self.series)
sig_vectors.append(vec)
if vec_length == 0:
vec_length = len(vec)
else:
assert(vec_length == len(vec))
in_trade = False
current_entry_price = None
bar_counter = 0
entry_bar = 0
8 years ago
for i in range(0, vec_length):
if not in_trade:
has_signal = True
for vec in sig_vectors:
if vec[i] is None or vec[i] == False:
has_signal = False
break
if has_signal and i + 1 < vec_length:
in_trade = True
current_entry_price = self.series.get_open(i + 1)
entry_bar = i + 1
8 years ago
bar_counter = 0
else:
bar_counter += 1
if bar_counter >= self.max_hold_bars:
in_trade = False
if long:
trade_dir = Trade.LONG
else:
trade_dir = Trade.SHORT
self.trades.append(Trade(current_entry_price, self.series.get_close(i), entry_bar, i, trade_dir))
8 years ago
return self.trades