Оптимизация возврата корзины акций Python для панд - PullRequest
0 голосов
/ 06 декабря 2018

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

Например, скажем,эта акция 1 имеет самую высокую доходность 8%, если я покупаю в день 2 и продаю в день 12, акция 2 имеет самую высокую доходность 4%, если я покупаю в день 9 и продаю в день 15, а акция 3 имеет самую высокую доходность-1%, если я куплю в 1-й день и продам в 20-й. Мой вопрос заключается в том, как написать сценарий, который бы рассматривал все возможности возврата для всех трех акций и придумал выход, который дает наибольшую доходность для всей корзины.акций, если мне пришлось купить все три акции в один и тот же день и продать в один и тот же день.

Например, самая высокая доходность для всех трех акций может быть покупка в 4-й день и продажа в 17-й день, когдаобщий доход на доллар, вложенный по всем направлениям, составляет 7% для акций 1, 3,5% для акций 2 и -1,25% для акций 3. Это основано на том факте, что мы не сможемo получить наиболее оптимальный доход для каждой акции, если все три должны были быть куплены и проданы в один и тот же день.

enter image description here

1 Ответ

0 голосов
/ 06 декабря 2018

сортировка df по дате.

df = df.sort_values(by ='Date', ascending=True)

затем суммируйте все акции, ежедневно

df['total'] = df[['TSLA Price', 'NVDA Price', 'AAPL Price']].sum(axis=1)

, затем используйте следующую функцию

def max_profit(li):
    max_profit, purchase_on, sell_on = 0, 0, 0
    for i, buy in enumerate(li):
        for j, sell in enumerate(li[i+1:]):
            if sell-buy > max_profit:
                max_profit, purchase_on, sell_on = sell-buy, i, i+j+1
    return max_profit, purchase_on, sell_on

max_profit, purchase_on, sell_on = max_profit(df['total'].tolist())

Даты покупки / продажи будут ...

buy_date, sell_date = df['Date'].iloc[purchase_on], df['Date'].iloc[sell_on ]

Чтобы по-разному взвешивать, просто умножьте акции на веса и затем сложите сумму.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...