Я начинающий / средний программист Python, но я не написал приложение, только сценарии.В настоящее время я не использую много объектно-ориентированного дизайна, поэтому мне бы хотелось, чтобы этот проект помог мне развить навыки OOD.Проблема в том, что я не знаю, с чего начать с точки зрения дизайна (я знаю, как создавать объекты и все такое).Что бы это ни стоило, я тоже самоучка, без формального образования в области CS.
Я хотел бы попробовать написать программу для отслеживания позиций портфеля акций / опционов.
У меня есть приблизительное представление о том, что было бы хорошим кандидатом на объект (портфолио, акции, опцион и т. Д.) И методах (покупка, продажа, обновление данных и т. Д.).
Длинная позиция будет покупать-открывать и продавать-закрываться, в то время как короткая позиция будет продавать-открывать и покупать-закрываться.
portfolio.PlaceOrder(type="BUY", symbol="ABC", date="01/02/2009", price=50.00, qty=100)
portfolio.PlaceOrder(type="SELL", symbol="ABC", date="12/31/2009", price=100.00, qty=25)
portfolio.PlaceOrder(type="SELLSHORT", symbol="XYZ", date="1/2/2009", price=30.00, qty=50)
portfolio.PlaceOrder(type="BUY", symbol="XYZ", date="2/1/2009", price=10.00, qty=50)
ТогдаКак только этот метод называется, как я могу хранить информацию?Сначала я думал, что у меня будет объект Position с такими атрибутами, как Symbol, OpenDate, OpenPrice и т. Д., Но задуматься об обновлении позиции для учета продаж становится непросто, поскольку покупки и продажи происходят в разное время и в разном количестве.
- Купите 100 акций, чтобы открыть, 1 раз, 1 цена.Продавайте 4 разных раза, 4 разных цены.
- Купите 100 акций.Продайте 1 акцию в день на 100 дней.
- Купите 4 разных раза, 4 разных цены.Продайте всю позицию за 1 раз, по одной цене.
Возможным решением будет создание объекта для каждой акции, таким образом, каждая акция будет иметь разные даты и цены.Это было бы слишком много накладных расходов?В портфолио могут быть тысячи или миллионы маленьких объектов Share.Если вы хотите узнать общую рыночную стоимость позиции, вам понадобится что-то вроде:
sum([trade.last_price for trade in portfolio.positions if trade.symbol == "ABC"])
Если бы у вас был объект позиции, расчет был бы простым:
position.last * position.qty
Заранее спасибо за помощь.Глядя на другие посты, очевидно, что ТАК для «помощи», а не для «написания вашей программы для вас»Я чувствую, что мне просто нужно какое-то направление, указывающее на правильный путь.
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ ПО ОТРАЖЕНИЮ Цель Программа будет отслеживать все позиции, обе открытыеи закрыто;с возможностью просмотра подробных прибылей и убытков.
Когда я думаю о подробных отчетах о прибылях и убытках, я хочу видеть ... - все даты открытия (и даты закрытия) - время удержания - цена открытия (дата закрытия)- P & L с момента открытия - P & L в день
@ Senderle
Я думаю, что, возможно, вы слишком буквально воспринимаете метафору «объект», и поэтому пытаетесь сделать акцию, котораяв некотором смысле кажется очень похожим на объект в виде объекта в смысле программирования.Если это так, то это ошибка, которую я принимаю за точку соприкосновения.
Это моя ошибка.Думая об «объектах», объект share
кажется естественным кандидатом.Только до тех пор, пока не появятся миллионы, идея кажется безумной.У меня будет свободное время для кодирования в эти выходные, и я постараюсь создать объект с количеством.