.positions--table
%h5 Positions
%table.bordered
%thead
%tr
%th
%th
.status
Status
%br
Expires on
%br
Strategy
%th.ticker
.a Stock
%th.strikes
.a outer_strike, inner_strike
%th.begin_price
.a Begin outer price, delta
%th.max-loss Max Loss
%th.max-gain Max Gain
%th
.end_price End Price, delta
%th
.net Net Amount (%)
%th
.breakeven Breakeven
%th.should_rollp
.a should_rollp
%th.next_position
.a
next_symbol
%br
next_delta
%br
next_outcome
-# wtf caching issue?!
- positions.map &:id
%tbody
- positions.each_with_index do |position, idx|
- pos = position
- if idx > 0
- prev_position = positions[idx-1]
- if prev_position && position.expires_on != prev_position.expires_on
%tr
%td{ colspan: 18 }
-# %hr
.h-50px
%tr{ class: [ position.strategy.kind, position.strategy.long_or_short ] }
%td.actions
.flex-row
= button_to 'x', position_path(position), method: :delete, data: { confirm: 'Are you sure?' }
= link_to '[~]', edit_position_path(position)
= link_to '[refresh]', refresh_position_path(pos)
- if position.next_reasons.present? && position.should_rollp && position.should_rollp > 0.5
= button_to 'Roll', roll_position_path(position)
- if position.next_reasons.present?
.collapse-expand{ id: "ce-p-#{position.id}" } [Reasons]
= render '/iro/positions/reasons', reasons: position.next_reasons
%td.status.strategy.w-200px
= position.status
%br
= position.expires_on.to_datetime.strftime("%b %d")
[#{ ( position.expires_on.to_date - Time.now.to_date ).to_i } DTE]
%br
%i.fa.fa-compress.collapse-expand{ id: "ce-pos-reasons-#{position.id}" }
#{position.strategy}
= render '/iro/strategies/show', strategy: position.strategy
%td.ticker
= position.stock.ticker
(#{position.quantity})
%br
= pp_amount position.stock.last
%td.strikes
.long-or-short-item
.outer-strike= pp_amount position.outer_strike
.inner-strike= pp_amount position.inner_strike
%td.begin_price
.long-or-short-item
.begin-outer-price
= pp_amount position.begin_outer_price
D #{pp_delta position.begin_outer_delta}
.begin-inner-price
= pp_amount position.begin_inner_price
D #{pp_delta position.begin_inner_delta}
%td
.max-loss= pp_amount position.max_loss * pos.q, precision: 0
%td
.max-gain= pp_amount position.max_gain * pos.q, precision: 0
.max-gainp
-# = pp_percent( -1 * position.max_gain / position.max_loss ) rescue '-' # undef. for covered calls
%td.end_price
.long-or-short-item
.end-outer-price
= pp_amount position.end_outer_price
D #{pp_delta position.end_outer_delta}
.end-inner-price
= pp_amount position.end_inner_price
D #{pp_delta position.end_inner_delta}
%td.net
.a= pp_amount position.net_amount * pos.q, precision: 0 rescue '@TODO'
.a #{pp_percent position.net_amount / position.max_gain rescue '@TODO'}
%td.breakeven
= pp_amount pos.breakeven rescue '@TODO'
%td.should_rollp
#{pp_percent position.should_rollp rescue '?'}
%td.next_position.mini
.a= position.next_symbol
.a= position.next_delta
.a
= pp_amount position.next_mark
\=>
= pp_amount position.next_outcome * 100 * position.quantity rescue nil