Заранее приносим извинения за длинное сообщение (пожалуйста, сообщите, если эти длинные сообщения плохо оформлены). :(
Попытка закодировать простую торговую стратегию, чтобы узнать, как рассчитать ожидаемую доходность и финансовые методы торговли.
Я загрузил здесь данные S&P 500 из Yahoo Finance, используя yfinance
. Затем я загрузил данные и хотел, чтобы пользователь мог указать, как далеко назад идут данные.
Здесь уже начинается моя проблема. Мой фрейм данных загружается таким образом, что список «close_price» имеет даты в качестве столбца индекса (это также можно увидеть на прикрепленном изображении). Это не самая большая проблема, поскольку я могу назвать все даты и цены закрытия для выбранных мною акций.
Отсюда я пытаюсь рассчитать ожидаемую доходность на основе двух стратегий:
- Купить $x на первом свидании. После этого покупайте $x каждый месяц. Рассчитайте стоимость портфеля (или доход от каждой инвестиции/общий доход) на указанную дату.
- Купить $x на первом свидании. Купите $x снова, если цена упадет на 10%. Продайте 0,5 * $ x, если цена вырастет на 10%. Купить $x, если прошло 30 дней и не было сделано ни одного ордера на покупку/продажу.
Изображение моей таблицы данных
import pandas as pd
import matplotlib.pyplot as plt
import yfinance as yf
from pandas_datareader import data as web
# Load stock data
stock_ticker = '^GSPC'
df = yf.download(stock_ticker)
# Allows user to input number of days to trackback prior to today (excluding weekends) for analysis
timescale = int(input("Enter No. of days prior to today (excluding weekends):"))
# List arrays for close price and dates
close_price = df["Adj Close"][-timescale:]
dates = df.index.tolist()[-timescale:]
# Returns
daily_returns = close_price.pct_change(fill_method='pad')
monthly_returns = close_price.resample('M').ffill().pct_change(fill_method='pad')
Что я пробовал:
-- Написание цикла for, вычисляющего умножение моего месячного дохода на акции (значения месячного дохода порядка 0,01 и цены акций порядка 4000 долларов) на мои инвестиции в месяц. Таким образом, инвестиции в размере 1000 долларов США, доходность через месяц составляет 0,04, поэтому доходность равна 40, стоимость портфеля = 1040 долларов США
-- Напишите цикл while, который имеет значение True, пока цены акций от начального значения превышают 0,90% от него. Если это не так: вложите в акции 1000 долларов. Если акции вырастут на 10% (или если цена последнего ордера на покупку/продажу <1,1x), тогда продайте 50%.
Я перепробовал много способов реализовать это в коде, но безрезультатно. Буду рада вашей помощи, ребята!
Спасибо!
Попробуйте разбить свою проблему на более управляемые части, например: 1. отследить, какие активы/количество удерживаются, 2. какова стоимость текущих активов и 3.
should security X be a buy/sell today
. Как только вы сможете точно покупать/продавать [вручную] и рассчитывать стоимость портфеля с течением времени, переходите к пункту 3.