Problem z print()

0

Witam. Mam tu program na temat inwestycji. Wczytuje dane oraz znajduję daty, kiedy odbył się "stop loss" i "take profit".

Otrzymuję:

Entered on 11/16/2007 at: 225.25, exited on 12/18/2007 at 201.51 for -10.54%
Entered on 12/16/2007 at: 208.63, exited on 01/18/2008 at 187.21 for -10.27%
Entered on 01/16/2008 at: 197.50, exited on 02/14/2008 at 176.56 for -10.60%
Entered on 02/16/2008 at: 173.80, exited on 03/10/2008 at 155.58 for -10.48%
Entered on 03/16/2008 at: 151.02, exited on 03/18/2008 at 175.59 for 16.27%
...

Pytanie:

Jak zmodyfikować dany program (chyba te dwa ostatnie wersy), aby wydrukował mi takie dane dla każdego dnia z moich danych w GC.csv (lata 2007-2018).
Dane umieszczam w załączniku.


import pandas as pd
import numpy as np
from datetime import datetime, timedelta
from dateutil.relativedelta import relativedelta

data_pd = pd.read_csv('GS.csv')
format = '%m/%d/%Y'
data_pd['Date'] = pd.to_datetime(data_pd['Date'], format=format)
data_pd = data_pd.set_index(data_pd['Date'])
data_pd = data_pd.drop(columns=['Date'])

#take profit, stop loss posistemes

prices = data_pd['Close']

def get_pnl(prices, start_date, holding_period=90, profit_goal=0.10, cut_loss=.10):
    end_date = start_date + timedelta(days=holding_period)
    data = prices[start_date: end_date]

    start_price = data.iloc[0]
    take_profit = start_price * (1 + profit_goal)
    cut_loss = start_price * (1 - cut_loss)
    exit_date = end_date

    if (data > take_profit).any():
        exit_date = data[data > take_profit].index[0]
    if (data[:exit_date] < cut_loss).any():
        exit_date = data[data < cut_loss].index[0]

    exit_price = data.loc[exit_date]
    print('Entered on {0} at: {1:.2f}, exited on {2} at {3:.2f} for {4:.2f}%'.format(start_date.strftime('%m/%d/%Y'), start_price, exit_date.strftime('%m/%d/%Y'), exit_price, (exit_price/start_price-1)*100))

for start_date in [datetime(2007, 11, 16) + relativedelta(months=i) for i in range(12)]:
    get_pnl(prices, start_date)


0

https://dateutil.readthedocs.io/en/stable/_modules/dateutil/relativedelta.html
W przedostatniej linii months=i na days=i ?
No i w range, ilość dni które cię interesują.

Strzelam, nie testowałem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1