Создание столбца P / L в Pandas from и цены открытия и закрытия в зависимости от того, длинная или короткая позиция

#python-3.x #pandas #finance

#python-3.x #pandas #финансы

Вопрос:

Это беспокоило меня некоторое время. У меня есть все части (я думаю), которые работают индивидуально для создания результата, который я ищу (вычислить прибыль и убыток для акции), но когда они собраны вместе, они ничего не возвращают.

Сам фрейм данных довольно понятен, поэтому я не включил пример. В основном серия включает в себя биржевой символ, время открытия, цену открытия, время закрытия, цену закрытия и была ли это длинная или короткая позиция.

Вот мой код для вычисления P-L для длинной позиции:

 import pandas as pd
from yahoo_fin import stock_info as si
from datetime import datetime, timedelta, date
import time

def create_df3():
    return pd.read_excel('Base_Sheet.xlsx', sheet_name="Closed_Pos", header=0)

def update_price(sym):
    return si.get_live_price(sym)

long_pl_calc = ((df3['Close_Price']) / (df3['Entry_Price'])) - 1

close_long_pl = df3['P-L'].isnull and (df3['Long_Short'] == 'Long')

for row in df3.iterrows():
     if close_long_pl is True:
         return df3['P-L'].apply(long_pl_calc)
  

Если я напечатаю long_pl_calc или close_long_pl, я получу именно то, что я ожидаю. Однако, когда я перебираю ряд, чтобы вернуть вычисление, я все равно получаю значение ‘NaN’ (но не ошибку).

Любая помощь будет оценена! Я уже знаю, что решение, к которому я пришел, ужасно, но я также попробовал по крайней мере дюжину других итераций, но тоже безуспешно.

Комментарии:

1. Вот еще одна попытка, которую я предпринял сегодня:

2. Сегодня я попробовал другую стратегию, которая также не сработала (предоставил расчет как для длинных, так и для коротких позиций): ‘ls_col = df3[‘Long_Short’] long_cond = ls_col == ‘Long’ для строки в long_cond: df3[‘P-L’] = df3[‘P-L’].fillna((df3[‘Close_Price’])/ (df3[‘Entry_Price’])-1)’

Ответ №1:

Создайте столбец df3['Long'] с 1 для даты, на которую у вас длинная позиция, и 0 для остальных, затем, чтобы получить свой длинный отчет о прибылях и убытках (вы могли бы сделать то же самое для короткой, но не забудьте взять противоположный знак дневной доходности), вы можете сделать :

 df['Pamp;L Long'] = ((df3['Close_Price'] / df3['Entry_Price']) - 1) * df['Long']
  

Тогда для вашего df3['P-L'] это будет:

 df['P-L'] = df['Pamp;L Long']   df['Pamp;L Short']