Я пытаюсь протестировать торговую стратегию фондового рынка.Я хотел бы купить 100 акций каждый раз cf_net > 0
и закрывать позицию, когда cf_net < 0
.Этот цикл - каждые 5 минут.
У меня есть фрейм данных pandas, называемый cf_slice
, который содержит ('1. open', cf_now, cf_then, cf_net, long)
.Набор данных имеет длину 100.Когда cf_net > 0
, я хотел бы добавить 100 общих ресурсов в новый фрейм данных с именем current_pos
.Кроме того, я хотел бы вычислить ('1. open' x current_pos)
и вставить в кадр данных с именем value
.В идеале я хотел бы подсчитать 100 акций для каждого истинного и закрыть всю позицию, если ложно.Я хотел бы установить это на короткой стороне, но если вы можете помочь мне с длинной стороной, я могу справиться с короткой стороной.
Open = 282.91, 282.95, 282.87, 282.90, 283.02
cf_net = 1047, -1894, -2214, 3122, 3649
long = True, False, False, True, True
Я пробовал numpy массивы и итерацию по пандам, используя цикл for.Я могу выделить длинные / короткие данные, но я борюсь с тем, чтобы добавить и закрыть всю позицию.
cf_slice = (data.loc[:, ['1. open', 'cf_now', 'cf_then', 'cf_net', 'long']])
current_pos = 0
shares = 0
long_cost = 0
long_credit = 0
short_cost = 0
short_credit = 0
net_profit = 0
for cf in cf_slice.cf_net:
# open long
if cf > 0 and current_pos >= 0:
current_pos += 1
shares += 100
# close long
elif cf < 0 and current_pos > 0:
current_pos = 0
shares = 0
# open short
elif cf < 0 and current_pos <= 0:
current_pos -= 1
shares -= 100
# close short
elif cf > 0 and current_pos < 0:
current_pos = 0
shares = 0
print(cf, current_pos, shares)
Этот код отображается для правильного отсчета вверх и вниз по акциям и текущей позиции.Тем не менее, как мне включить вычисление 1. open
x текущей позиции?
Мне нужно знать значение позиции по мере того, как позиция увеличивается и в конечном итоге закрывается.
данные