#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']