【发布时间】:2019-06-01 02:10:21
【问题描述】:
我有一个模型 PortStock,其架构如下所示:
# == Schema Information
#
# Table name: port_stocks
#
# id :bigint(8) not null, primary key
# portfolio_id :integer
# stock_id :integer
# volume :integer
# transaction_price :float
# current_price :float
# percent_change :float
# created_at :datetime not null
# updated_at :datetime not null
# current_value :float
# dollar_change :float
# total_spend :float
# transaction_date :datetime
# action :integer
# position :integer default("open")
# ticker :string
# slug :string
#
当有人购买股票时,该应用会创建一个 port_stock,在其 portfolio 中包含 position: "open", action: :buy。
当他们 sell 那个位置时,基本上发生的事情是他们创建另一个 port_stock 但它只有 position: "closed", action: :sell。
我有几个问题:
- 这真的是最优化的结构吗?我看到的一个直接问题是我必须
closebuy位置。所以本质上,完整的completed position将是两个closedbuy和sellport_stock记录。如果只有一个,则该职位被认为是开放的。但这有意义吗? - 我应该在我的模型中创建一个方法来平仓和开仓吗?我最初只是在我的控制器中执行此操作,但现在我正在编写单元测试,我没有一个干净的方法来关闭现有的未平仓头寸。
我应该以不同的方式处理port_stock 的买卖吗?
想法?
【问题讨论】:
-
我认为最好维护单个实例并根据操作更新
position并维护position_bought_date和position_sold_date以便于维护和验证它。 -
@uday 好吧,我需要跟踪每笔交易,包括买卖。例如,假设您购买了 100 股 Acme Inc 的股票,并且想在以后出售 20 股……您并没有结束整个交易,只是 20 股。所以我需要记录 100 到 80 的减少以及 20 被出售的价格、日期和时间等,以反映在投资组合价值中。所以我必须在两个不同的交易中跟踪它。
标签: ruby-on-rails architecture ruby-on-rails-5 software-design