вернуть значения из оператора elif - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь протестировать торговую стратегию фондового рынка.Я хотел бы купить 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 текущей позиции?

Мне нужно знать значение позиции по мере того, как позиция увеличивается и в конечном итоге закрывается.

данные

...