The table below shows an example of a strategy where a signal is generated in row 2
and then an opposite signal is generated in row 5
.
row open_signal close_signal live
1 0 0 0
2 1 0 1
3 0 0 1
4 0 0 1
5 0 1 0
6 0 0 0
I want to optimise the calculation of the live
column.
Is there a way to vectorise this problem in either Pandas or Numpy for improved performance, generating the same result as the for loop example below?
import pandas as pd
from datetime import datetime
example = {'date': [str(datetime(2017,1,1)), str(datetime(2017,1,2)),str(datetime(2017,1,3)),str(datetime(2017,1,4)),str(datetime(2017,1,5)),str(datetime(2017,1,6)),
str(datetime(2017,1,7)), str(datetime(2017,1,8)),str(datetime(2017,1,9)), str(datetime(2017,1,10)),str(datetime(2017,1,11)), str(datetime(2017,1,12)),
str(datetime(2017,1,13)),str(datetime(2017,1,14))],
'open': [142.11, 142.87, 141.87, 142.11, 142.00, 142.41, 142.50, 142.75, 140.87, 141.25, 141.10, 141.15, 142.55, 142.75],
'close': [142.87, 141.87, 142.11, 142.00, 142.41, 142.50, 142.75, 140.87, 141.25, 141.10, 141.15, 142.55, 142.75, 142.11],
'open_signal': [False, False, False, False, False, True, False, False, False, False, False, False, False, False],
'close_signal':[False, False, False, False, False, False, False, False, False, True, False, False, False, False]
}
data = pd.DataFrame(example)
in_trade = False
for i in data.iterrows():
if i[1].open_signal:
in_trade = True
if i[1].close_signal:
in_trade = False
data.loc[i[0],'in_trade'] = in_trade