iron_warbler 2.0.7.18 → 2.0.7.20
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascript/iron_warbler/application.js +2 -0
- data/app/assets/javascript/iron_warbler/gameui.js +9 -0
- data/app/assets/stylesheets/iron_warbler/application.css +13 -3
- data/app/assets/stylesheets/iron_warbler/positions.scss +9 -1
- data/app/assets/stylesheets/iron_warbler/purses_gameui.scss +191 -0
- data/app/assets/stylesheets/iron_warbler/purses_gameui.scss-bk +112 -0
- data/app/assets/stylesheets/iron_warbler/utils.scss +82 -0
- data/app/controllers/iro/api/stocks_controller.rb +87 -0
- data/app/controllers/iro/api_controller.rb +19 -0
- data/app/controllers/iro/positions_controller.rb +16 -4
- data/app/controllers/iro/purses_controller.rb +8 -3
- data/app/controllers/iro/strategies_controller.rb +7 -7
- data/app/helpers/iro/application_helper.rb +5 -2
- data/app/models/iro/alert.rb +2 -1
- data/app/models/iro/datapoint.rb +48 -8
- data/app/models/iro/position.rb +55 -14
- data/app/models/iro/position_covered_call.rb +4 -0
- data/app/models/iro/position_debit_spread.rb +251 -0
- data/app/models/iro/price_item.rb +51 -1
- data/app/models/iro/stock.rb +5 -2
- data/app/models/iro/strategy.rb +76 -10
- data/app/models/tda/stock.rb +3 -0
- data/app/views/iro/_main_header.haml +18 -17
- data/app/views/iro/api/stocks/show.jbuilder +11 -0
- data/app/views/iro/positions/_form.haml +11 -38
- data/app/views/iro/positions/_formpart_4data.haml +46 -0
- data/app/views/iro/positions/_gameui_covered_call.haml +36 -0
- data/app/views/iro/positions/_gameui_covered_call.haml-bk +59 -0
- data/app/views/iro/positions/_gameui_long_debit_call_spread.haml +37 -0
- data/app/views/iro/positions/_gameui_short_debit_put_spread.haml +39 -0
- data/app/views/iro/positions/_header.haml +6 -0
- data/app/views/iro/positions/_header_covered_call.haml +6 -0
- data/app/views/iro/positions/_header_long_debit_call_spread.haml +14 -0
- data/app/views/iro/positions/_header_short_debit_put_spread.haml +1 -0
- data/app/views/iro/positions/_table.haml +118 -123
- data/app/views/iro/positions/roll.haml +83 -0
- data/app/views/iro/positions/trash/_header_short_debit_put_spread.haml +9 -0
- data/app/views/iro/purses/_header.haml +18 -0
- data/app/views/iro/purses/gameui.haml +18 -0
- data/app/views/iro/purses/gameui.haml-bk +44 -0
- data/app/views/iro/purses/gameui.haml-bk2 +89 -0
- data/app/views/iro/purses/show.haml +1 -7
- data/app/views/iro/stocks/_grid_is_long.haml +13 -0
- data/app/views/iro/stocks/_grid_is_short.haml +13 -0
- data/app/views/iro/strategies/_form.haml +12 -5
- data/app/views/iro/strategies/_show.haml +3 -2
- data/app/views/iro/strategies/_table.haml +16 -10
- data/app/views/iro/strategies/index.haml +8 -0
- data/app/views/layouts/iro/application.haml +1 -1
- data/config/routes.rb +14 -1
- data/lib/tasks/db_tasks.rake +9 -3
- metadata +29 -8
- data/app/assets/stylesheets/iron_warbler/alerts.css +0 -8
- data/app/assets/stylesheets/iron_warbler/datapoints.css +0 -0
- data/app/assets/stylesheets/iron_warbler/profiles.css +0 -4
- data/app/assets/stylesheets/iron_warbler/strategies.scss +0 -0
- data/app/assets/stylesheets/iron_warbler/utils.css +0 -44
- data/app/jobs/iro/application_job.rb-trash +0 -4
@@ -0,0 +1,83 @@
|
|
1
|
+
|
2
|
+
- unit = u = 50 # pixels per dollar
|
3
|
+
- grid_size = 100 # dollars to each side of origin
|
4
|
+
- strategy = @position.strategy
|
5
|
+
.purses-gameui.padded
|
6
|
+
= render '/iro/purses/header', purse: @position.purse
|
7
|
+
|
8
|
+
.a
|
9
|
+
- position = @position
|
10
|
+
- stock = position.stock
|
11
|
+
%h4= stock
|
12
|
+
|
13
|
+
.header
|
14
|
+
= position.quantity
|
15
|
+
= stock
|
16
|
+
= position.expires_on.to_datetime.strftime("%b %d")
|
17
|
+
= link_to '[roll]', roll_position_path(position)
|
18
|
+
= link_to '[~]', edit_position_path(position)
|
19
|
+
|
20
|
+
- nearest_strike = stock.last.round
|
21
|
+
.StockCoordinatesW
|
22
|
+
|
23
|
+
.StockCoordinates
|
24
|
+
.grid-mark.mark0
|
25
|
+
.label= nearest_strike
|
26
|
+
- (1...grid_size).each_with_index do |idx|
|
27
|
+
.grid-mark{ class: "mark#{idx}", style: "left: -#{idx * u}px" }
|
28
|
+
.label
|
29
|
+
= nearest_strike + idx
|
30
|
+
.grid-mark{ class: "mark-#{idx}", style: "left: #{idx * u}px" }
|
31
|
+
.label
|
32
|
+
= nearest_strike - idx
|
33
|
+
.Origin{ style: "left: #{ ( nearest_strike - stock.last )* u}px" }
|
34
|
+
.label
|
35
|
+
Last:
|
36
|
+
= stock.last
|
37
|
+
|
38
|
+
|
39
|
+
.PositionW{ style: "width: #{ position.begin_inner_price * u}px; left: #{ (stock.last - position.inner_strike - position.begin_inner_price) * u}px" }
|
40
|
+
|
41
|
+
.Position
|
42
|
+
- if position.net_amount >= 0
|
43
|
+
.Net.NetPositive{ style: "width: #{ (position.net_amount / 100) * u }px; right: 0" }
|
44
|
+
.label
|
45
|
+
net
|
46
|
+
= pp_amount position.net_amount
|
47
|
+
- else
|
48
|
+
.Net.NetNegative{ style: "width: #{ (-1 * position.net_amount / 100) * u }px; left: 100%" }
|
49
|
+
.label
|
50
|
+
net
|
51
|
+
= pp_amount position.net_amount
|
52
|
+
.c
|
53
|
+
|
54
|
+
- @positions.each do |position|
|
55
|
+
.reviewing
|
56
|
+
- stock = position.stock
|
57
|
+
- nearest_strike = stock.last.round
|
58
|
+
.StockCoordinatesW
|
59
|
+
.StockCoordinates
|
60
|
+
.grid-mark.mark0
|
61
|
+
.label= nearest_strike
|
62
|
+
- (1...grid_size).each_with_index do |idx|
|
63
|
+
.grid-mark{ class: "mark#{idx}", style: "left: -#{idx * u}px" }
|
64
|
+
.label
|
65
|
+
= nearest_strike + idx
|
66
|
+
.grid-mark{ class: "mark-#{idx}", style: "left: #{idx * u}px" }
|
67
|
+
.label
|
68
|
+
= nearest_strike - idx
|
69
|
+
.Origin{ style: "left: #{ ( nearest_strike - stock.last )* u}px" }
|
70
|
+
.label
|
71
|
+
Last:
|
72
|
+
= stock.last
|
73
|
+
- amnt = position.gain_loss_amount
|
74
|
+
- border = amnt >= 0 ? "#{amnt * u}px solid green" : "#{amnt * -1 * u}px solid red"
|
75
|
+
.PositionW{ style: "width: #{ position.begin_inner_price * u}px; left: #{ (stock.last - position.inner_strike - position.begin_inner_price) * u}px; border: #{border}; border-bottom-width: 2px" }
|
76
|
+
.Position
|
77
|
+
.c
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
|
82
|
+
%br
|
83
|
+
%br
|
@@ -0,0 +1,9 @@
|
|
1
|
+
|
2
|
+
.maxwidth
|
3
|
+
%ul.m-0.p-0
|
4
|
+
%li <b>outer,inner_strike:</b> #{pp_amount pos.outer_strike} -> #{pp_amount pos.inner_strike}
|
5
|
+
%li
|
6
|
+
<b>begin_outer,inner_price:</b> #{pp_amount pos.begin_outer_price} -> #{pp_amount pos.begin_inner_price}
|
7
|
+
|
8
|
+
<b>max gain:</b> #{pp_amount pos.max_gain}
|
9
|
+
%li <b>Net:</b> #{pp_amount pos.net_amount} <i>#{pp_percent pos.net_percent}</i>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
|
2
|
+
- purse ||= @purse
|
3
|
+
.maxwidth
|
4
|
+
.header
|
5
|
+
%h5.title
|
6
|
+
Purse `#{purse.slug}`
|
7
|
+
= link_to '[~]', edit_purse_path(purse)
|
8
|
+
= link_to '[view GameUI]', gameui_purse_path(purse)
|
9
|
+
= link_to '[view]', purse_path(purse)
|
10
|
+
(#{purse.positions.length})
|
11
|
+
|
12
|
+
|
13
|
+
|
14
|
+
= link_to '[+position]', new_position_path({ purse_id: purse.id })
|
15
|
+
= link_to '[+long]', new_position_path({ purse_id: purse.id, long_or_short: Iro::Strategy::LONG })
|
16
|
+
= link_to '[+short]', new_position_path({ purse_id: purse.id, long_or_short: Iro::Strategy::SHORT })
|
17
|
+
%br
|
18
|
+
%br
|
@@ -0,0 +1,18 @@
|
|
1
|
+
|
2
|
+
= render '/iro/purses/header', purse: @purse
|
3
|
+
|
4
|
+
- u = @unit
|
5
|
+
.purses-gameuiW{ data: { margin: { left: u*@grid_size } } }
|
6
|
+
.purses-gameui
|
7
|
+
.a
|
8
|
+
|
9
|
+
%div{ style: "margin-left: #{u*@grid_size}px; width: 100% " }
|
10
|
+
- @positions.each_with_index do |pos, idx|
|
11
|
+
- if idx == 0
|
12
|
+
%h4.maxwidth= pos.stock
|
13
|
+
- else
|
14
|
+
- prev_ = @positions[idx-1]
|
15
|
+
- if pos.stock != prev_.stock
|
16
|
+
%hr
|
17
|
+
%h4.maxwidth= pos.stock
|
18
|
+
= render "/iro/positions/gameui_#{pos.strategy.kind}", position: pos
|
@@ -0,0 +1,44 @@
|
|
1
|
+
|
2
|
+
- unit = u = 50 # pixels per dollar
|
3
|
+
- grid_size = 100 # dollars to each side of origin
|
4
|
+
.purses-gameui.padded
|
5
|
+
= render '/iro/purses/header', purse: @purse
|
6
|
+
|
7
|
+
|
8
|
+
- @positions.each_with_index do |position, idx|
|
9
|
+
.CoordinatesW
|
10
|
+
.Origin
|
11
|
+
.Coordinates
|
12
|
+
-# .Coordinates{ style: "left: #{ (position.inner_strike - position.stock.last) * u }px" }
|
13
|
+
.grid-mark.mark0.origin
|
14
|
+
.label
|
15
|
+
Begin strike:
|
16
|
+
= position.inner_strike
|
17
|
+
|
18
|
+
- (1...grid_size).each_with_index do |idx|
|
19
|
+
.grid-mark{ class: "mark#{idx}", style: "left: #{idx * u}px" }
|
20
|
+
.label
|
21
|
+
= position.inner_strike + idx
|
22
|
+
.grid-mark{ class: "mark-#{idx}", style: "left: -#{idx * u}px" }
|
23
|
+
.label
|
24
|
+
= position.inner_strike - idx
|
25
|
+
|
26
|
+
.Net{ style: "width: #{ (position.net_amount / 100) * u }px" }
|
27
|
+
.label
|
28
|
+
Net:
|
29
|
+
= pp_amount position.net_amount
|
30
|
+
|
31
|
+
.marker.sprite-bottom.Breakeven{ style: "width: #{ (position.begin_inner_price) * u }px" }
|
32
|
+
.half-circle
|
33
|
+
.label.hide
|
34
|
+
Breakeven:
|
35
|
+
= position.inner_strike + position.begin_inner_price
|
36
|
+
|
37
|
+
.marker.Last{ style: "left: #{ (position.stock.last - position.inner_strike) * u }px" }
|
38
|
+
.label
|
39
|
+
Last:
|
40
|
+
= position.stock.last
|
41
|
+
|
42
|
+
|
43
|
+
%br
|
44
|
+
%br
|
@@ -0,0 +1,89 @@
|
|
1
|
+
|
2
|
+
- unit = u = 50 # pixels per dollar
|
3
|
+
- grid_size = 100 # dollars to each side of origin
|
4
|
+
.purses-gameui.padded
|
5
|
+
= render '/iro/purses/header', purse: @purse
|
6
|
+
|
7
|
+
|
8
|
+
-# - @positions.map &:id
|
9
|
+
- @positions.each_with_index do |position, idx|
|
10
|
+
- stock = position.stock
|
11
|
+
- if idx == 0
|
12
|
+
%h4= stock
|
13
|
+
- else
|
14
|
+
- prev_ = @positions[idx-1]
|
15
|
+
- if stock != prev_.stock
|
16
|
+
%hr
|
17
|
+
%h4= stock
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
.header
|
23
|
+
= position.quantity
|
24
|
+
= stock
|
25
|
+
= position.expires_on.to_datetime.strftime("%b %d")
|
26
|
+
= link_to '[roll]', roll_position_path(position)
|
27
|
+
= link_to '[~]', edit_position_path(position)
|
28
|
+
|
29
|
+
- nearest_strike = stock.last.round
|
30
|
+
- # for Mu ( positions in one stock )
|
31
|
+
.StockCoordinatesW
|
32
|
+
|
33
|
+
.StockCoordinates
|
34
|
+
.grid-mark.mark0
|
35
|
+
.label= nearest_strike
|
36
|
+
- (1...grid_size).each_with_index do |idx|
|
37
|
+
.grid-mark{ class: "mark#{idx}", style: "left: -#{idx * u}px" }
|
38
|
+
.label
|
39
|
+
= nearest_strike + idx
|
40
|
+
.grid-mark{ class: "mark-#{idx}", style: "left: #{idx * u}px" }
|
41
|
+
.label
|
42
|
+
= nearest_strike - idx
|
43
|
+
.Origin{ style: "left: #{ ( nearest_strike - stock.last )* u}px" }
|
44
|
+
.label
|
45
|
+
Last:
|
46
|
+
= stock.last
|
47
|
+
|
48
|
+
|
49
|
+
.PositionW{ style: "width: #{ position.begin_inner_price * u}px; left: #{ (stock.last - position.inner_strike - position.begin_inner_price) * u}px" }
|
50
|
+
|
51
|
+
.Position
|
52
|
+
-# .label
|
53
|
+
-# BeginStrike:
|
54
|
+
-# = position.inner_strike
|
55
|
+
-# .label
|
56
|
+
-# begin inner price:
|
57
|
+
-# = position.begin_inner_price
|
58
|
+
- if position.net_amount >= 0
|
59
|
+
.Net.NetPositive{ style: "width: #{ (position.net_amount / 100) * u }px; right: 0" }
|
60
|
+
.label
|
61
|
+
net
|
62
|
+
= pp_amount position.net_amount
|
63
|
+
- else
|
64
|
+
.Net.NetNegative{ style: "width: #{ (-1 * position.net_amount / 100) * u }px; left: 100%" }
|
65
|
+
.label
|
66
|
+
net
|
67
|
+
= pp_amount position.net_amount
|
68
|
+
|
69
|
+
|
70
|
+
-# .label
|
71
|
+
-# net:
|
72
|
+
-# = pp_amount position.net_amount
|
73
|
+
|
74
|
+
-# .BeginInnerPrice
|
75
|
+
-# .label
|
76
|
+
-# Begin Inner Price:
|
77
|
+
-# = pp_amount position.begin_inner_price
|
78
|
+
|
79
|
+
-# .marker.sprite-bottom.Breakeven{ style: "width: #{ (position.begin_inner_price) * u }px" }
|
80
|
+
-# .half-circle
|
81
|
+
-# .label.hide
|
82
|
+
-# Breakeven:
|
83
|
+
-# = position.inner_strike + position.begin_inner_price
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
|
88
|
+
%br
|
89
|
+
%br
|
@@ -1,10 +1,4 @@
|
|
1
1
|
|
2
2
|
.purses-show.padded
|
3
|
-
|
4
|
-
.maxwidth
|
5
|
-
.header
|
6
|
-
%h5.title Purse `#{@purse.slug}` (#{@purse.positions.length})
|
7
|
-
%ul.menu-secondary
|
8
|
-
%li= link_to '[+position]', new_position_path({ purse_id: @purse.id })
|
9
|
-
|
3
|
+
= render '/iro/purses/header', purse: @purse
|
10
4
|
= render '/iro/positions/table', positions: @purse.positions
|
@@ -0,0 +1,13 @@
|
|
1
|
+
|
2
|
+
- nearest_strike = stock.last.round
|
3
|
+
- u = @unit
|
4
|
+
|
5
|
+
.grid-mark.mark0
|
6
|
+
.label= nearest_strike
|
7
|
+
- (1...@grid_size).each_with_index do |idx|
|
8
|
+
.grid-mark{ class: "mark#{idx}", style: "left: #{idx * u}px" }
|
9
|
+
.label
|
10
|
+
= nearest_strike + idx
|
11
|
+
.grid-mark{ class: "mark-#{idx}", style: "left: -#{idx * u}px" }
|
12
|
+
.label
|
13
|
+
= nearest_strike - idx
|
@@ -0,0 +1,13 @@
|
|
1
|
+
|
2
|
+
- nearest_strike = stock.last.round
|
3
|
+
- u = @unit
|
4
|
+
|
5
|
+
.grid-mark.mark0
|
6
|
+
.label= nearest_strike
|
7
|
+
- (1...@grid_size).each_with_index do |idx|
|
8
|
+
.grid-mark{ class: "mark#{idx}", style: "left: -#{idx * u}px" }
|
9
|
+
.label
|
10
|
+
= nearest_strike + idx
|
11
|
+
.grid-mark{ class: "mark-#{idx}", style: "left: #{idx * u}px" }
|
12
|
+
.label
|
13
|
+
= nearest_strike - idx
|
@@ -4,20 +4,27 @@
|
|
4
4
|
.actions
|
5
5
|
= f.submit
|
6
6
|
|
7
|
-
.field
|
8
|
-
%label Ticker
|
9
|
-
= f.select :ticker, options_for_select( @tickers_list, selected: strategy.ticker )
|
10
7
|
|
8
|
+
.field
|
9
|
+
%label Kind
|
10
|
+
= f.select :kind, options_for_select( Iro::Strategy::KINDS, selected: strategy.kind )
|
11
11
|
.field
|
12
12
|
%label slug
|
13
13
|
= f.text_field :slug
|
14
|
+
.field
|
15
|
+
%label long or short?
|
16
|
+
= f.select :long_or_short, options_for_select([nil, Iro::Strategy::LONG, Iro::Strategy::SHORT], selected: strategy.long_or_short)
|
17
|
+
|
14
18
|
|
15
19
|
.field
|
16
20
|
= f.label :buffer_above_water
|
17
21
|
= f.number_field :buffer_above_water, placeholder: "0.49", step: 0.01
|
18
22
|
.field
|
19
|
-
= f.label :
|
20
|
-
= f.number_field :
|
23
|
+
= f.label :next_max_outer_delta
|
24
|
+
= f.number_field :next_max_outer_delta, placeholder: "0.25", step: 0.01
|
25
|
+
.field
|
26
|
+
= f.label :next_max_inner_delta
|
27
|
+
= f.number_field :next_max_inner_delta, placeholder: "0.25", step: 0.01
|
21
28
|
.field
|
22
29
|
= f.label :next_min_strike
|
23
30
|
= f.number_field :next_min_strike, placeholder: "20.0", step: 0.01
|
@@ -5,12 +5,13 @@
|
|
5
5
|
= link_to '[~]', edit_strategy_path(strategy)
|
6
6
|
= strategy
|
7
7
|
%ul
|
8
|
-
%li <b>ticker:</b> #{strategy.ticker}
|
8
|
+
-# %li <b>ticker:</b> #{strategy.ticker}
|
9
9
|
%li <b>slug:</b> #{strategy.slug}
|
10
10
|
|
11
11
|
%li <b>buffer_above_water:</b> #{strategy.buffer_above_water}
|
12
12
|
|
13
|
-
%li <b>
|
13
|
+
%li <b>next_max_inner_delta:</b> #{strategy.next_max_inner_delta}
|
14
|
+
%li <b>next_max_outer_delta:</b> #{strategy.next_max_outer_delta}
|
14
15
|
%li <b>next_min_strike:</b> #{strategy.next_min_strike}
|
15
16
|
|
16
17
|
%li <b>threshold_delta:</b> #{strategy.threshold_delta}
|
@@ -4,15 +4,21 @@
|
|
4
4
|
.strategies--table
|
5
5
|
|
6
6
|
%table.bordered
|
7
|
-
%
|
8
|
-
%th
|
9
|
-
%th ticker
|
10
|
-
%th slug
|
11
|
-
%th next_max_delta
|
12
|
-
- strategies.each do |sss|
|
7
|
+
%thead
|
13
8
|
%tr
|
14
|
-
%
|
15
|
-
%
|
16
|
-
%
|
17
|
-
%
|
9
|
+
%th.actions
|
10
|
+
%th kind
|
11
|
+
%th slug
|
12
|
+
%th next_max_inner_delta
|
13
|
+
%tbody
|
14
|
+
- strategies.each do |sss|
|
15
|
+
%tr
|
16
|
+
%td.actions.d-flex
|
17
|
+
= link_to '[~]', edit_strategy_path(sss)
|
18
|
+
= button_to 'x', strategy_path(sss), method: :delete, data: { confirm: 'Are you sure?' }
|
19
|
+
%td= sss.kind
|
20
|
+
%td= sss.slug
|
21
|
+
%td= sss.next_max_inner_delta
|
22
|
+
|
23
|
+
.h-50px
|
18
24
|
|
data/config/routes.rb
CHANGED
@@ -9,12 +9,25 @@ Iro::Engine.routes.draw do
|
|
9
9
|
|
10
10
|
resources :option_watches
|
11
11
|
|
12
|
-
|
12
|
+
get 'positions/:id/roll', to: 'positions#roll', as: :roll_position
|
13
|
+
post 'positions/:id/roll', to: 'positions#do_roll'
|
13
14
|
resources :positions
|
14
15
|
resources :profiles
|
16
|
+
|
17
|
+
get 'purses/:id/gameui', to: 'purses#show', as: :gameui_purse, defaults: { template: 'gameui' }
|
18
|
+
get 'purses/:id', to: 'purses#show', as: :purse, defaults: { template: 'show' }
|
15
19
|
resources :purses
|
16
20
|
|
17
21
|
resources :stocks
|
18
22
|
resources :strategies
|
19
23
|
|
24
|
+
namespace :api do
|
25
|
+
# resources :stocks
|
26
|
+
get 'stocks/:ticker/period/:period', to: 'stocks#show'
|
27
|
+
get 'stocks/:ticker/from/:begin_on', to: 'stocks#show'
|
28
|
+
get 'stocks/:ticker/begin_on/:begin_on', to: 'stocks#show'
|
29
|
+
get 'stocks/:ticker/from/:begin_on/to/:end_on', to: 'stocks#show'
|
30
|
+
get 'stocks/:ticker/begin_on/:begin_on/end_on/:end_on', to: 'stocks#show'
|
31
|
+
end
|
32
|
+
|
20
33
|
end
|
data/lib/tasks/db_tasks.rake
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
|
2
2
|
namespace :db do
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
## date, volume, open, high, low, close
|
5
|
+
desc 'import_stock symbol=GME path=./data/GME-test.csv'
|
6
|
+
task import_stock: :environment do
|
7
|
+
Iro::Datapoint.import_stock( symbol: ENV['symbol'], path: ENV['path'] )
|
7
8
|
end
|
8
9
|
|
9
10
|
desc 'create calendar mdb'
|
@@ -77,4 +78,9 @@ namespace :db do
|
|
77
78
|
})
|
78
79
|
end
|
79
80
|
|
81
|
+
desc 'test'
|
82
|
+
task test: :environment do
|
83
|
+
Iro::Datapoint.test
|
84
|
+
end
|
85
|
+
|
80
86
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iron_warbler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.7.
|
4
|
+
version: 2.0.7.20
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Victor Pudeyev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-03-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: business_time
|
@@ -201,14 +201,15 @@ files:
|
|
201
201
|
- Rakefile
|
202
202
|
- app/assets/config/iron_warbler_manifest.js
|
203
203
|
- app/assets/javascript/iron_warbler/application.js
|
204
|
-
- app/assets/
|
204
|
+
- app/assets/javascript/iron_warbler/gameui.js
|
205
205
|
- app/assets/stylesheets/iron_warbler/application.css
|
206
|
-
- app/assets/stylesheets/iron_warbler/datapoints.css
|
207
206
|
- app/assets/stylesheets/iron_warbler/positions.scss
|
208
|
-
- app/assets/stylesheets/iron_warbler/
|
209
|
-
- app/assets/stylesheets/iron_warbler/
|
210
|
-
- app/assets/stylesheets/iron_warbler/utils.
|
207
|
+
- app/assets/stylesheets/iron_warbler/purses_gameui.scss
|
208
|
+
- app/assets/stylesheets/iron_warbler/purses_gameui.scss-bk
|
209
|
+
- app/assets/stylesheets/iron_warbler/utils.scss
|
211
210
|
- app/controllers/iro/alerts_controller.rb
|
211
|
+
- app/controllers/iro/api/stocks_controller.rb
|
212
|
+
- app/controllers/iro/api_controller.rb
|
212
213
|
- app/controllers/iro/application_controller.rb
|
213
214
|
- app/controllers/iro/datapoints_controller.rb
|
214
215
|
- app/controllers/iro/positions_controller.rb
|
@@ -217,7 +218,6 @@ files:
|
|
217
218
|
- app/controllers/iro/stocks_controller.rb
|
218
219
|
- app/controllers/iro/strategies_controller.rb
|
219
220
|
- app/helpers/iro/application_helper.rb
|
220
|
-
- app/jobs/iro/application_job.rb-trash
|
221
221
|
- app/mailers/iro/alert_mailer.rb
|
222
222
|
- app/mailers/iro/application_mailer.rb
|
223
223
|
- app/models/iro/alert.rb
|
@@ -225,6 +225,8 @@ files:
|
|
225
225
|
- app/models/iro/date.rb
|
226
226
|
- app/models/iro/option.rb
|
227
227
|
- app/models/iro/position.rb
|
228
|
+
- app/models/iro/position_covered_call.rb
|
229
|
+
- app/models/iro/position_debit_spread.rb
|
228
230
|
- app/models/iro/price_item.rb
|
229
231
|
- app/models/iro/purse.rb
|
230
232
|
- app/models/iro/stock.rb
|
@@ -236,23 +238,42 @@ files:
|
|
236
238
|
- app/views/iro/alert_mailer/stock_alert.haml
|
237
239
|
- app/views/iro/alerts/_form.haml
|
238
240
|
- app/views/iro/alerts/index.haml
|
241
|
+
- app/views/iro/api/stocks/show.jbuilder
|
239
242
|
- app/views/iro/application/home.haml
|
240
243
|
- app/views/iro/positions/_form.haml
|
244
|
+
- app/views/iro/positions/_formpart_4data.haml
|
245
|
+
- app/views/iro/positions/_gameui_covered_call.haml
|
246
|
+
- app/views/iro/positions/_gameui_covered_call.haml-bk
|
247
|
+
- app/views/iro/positions/_gameui_long_debit_call_spread.haml
|
248
|
+
- app/views/iro/positions/_gameui_short_debit_put_spread.haml
|
249
|
+
- app/views/iro/positions/_header.haml
|
250
|
+
- app/views/iro/positions/_header_covered_call.haml
|
251
|
+
- app/views/iro/positions/_header_long_debit_call_spread.haml
|
252
|
+
- app/views/iro/positions/_header_short_debit_put_spread.haml
|
241
253
|
- app/views/iro/positions/_reasons.haml
|
242
254
|
- app/views/iro/positions/_table.haml
|
243
255
|
- app/views/iro/positions/edit.haml
|
244
256
|
- app/views/iro/positions/new.haml
|
257
|
+
- app/views/iro/positions/roll.haml
|
258
|
+
- app/views/iro/positions/trash/_header_short_debit_put_spread.haml
|
245
259
|
- app/views/iro/purses/_form.haml
|
260
|
+
- app/views/iro/purses/_header.haml
|
246
261
|
- app/views/iro/purses/edit.haml
|
262
|
+
- app/views/iro/purses/gameui.haml
|
263
|
+
- app/views/iro/purses/gameui.haml-bk
|
264
|
+
- app/views/iro/purses/gameui.haml-bk2
|
247
265
|
- app/views/iro/purses/index.haml
|
248
266
|
- app/views/iro/purses/show.haml
|
249
267
|
- app/views/iro/stocks/_form.haml
|
268
|
+
- app/views/iro/stocks/_grid_is_long.haml
|
269
|
+
- app/views/iro/stocks/_grid_is_short.haml
|
250
270
|
- app/views/iro/stocks/index.haml
|
251
271
|
- app/views/iro/strategies/_form.haml
|
252
272
|
- app/views/iro/strategies/_header.haml
|
253
273
|
- app/views/iro/strategies/_show.haml
|
254
274
|
- app/views/iro/strategies/_table.haml
|
255
275
|
- app/views/iro/strategies/edit.haml
|
276
|
+
- app/views/iro/strategies/index.haml
|
256
277
|
- app/views/iro/strategies/new.haml
|
257
278
|
- app/views/layouts/iro/application.haml
|
258
279
|
- config/initializers/assets.rb
|
File without changes
|
File without changes
|
@@ -1,44 +0,0 @@
|
|
1
|
-
|
2
|
-
/* F */
|
3
|
-
|
4
|
-
.flex-row {
|
5
|
-
display: flex;
|
6
|
-
margin-bottom: 0.4em;
|
7
|
-
}
|
8
|
-
.field {
|
9
|
-
min-width: 100px;
|
10
|
-
margin-right: 1em;
|
11
|
-
}
|
12
|
-
|
13
|
-
/* M */
|
14
|
-
|
15
|
-
.modal-absolute {
|
16
|
-
border: 1px solid green;
|
17
|
-
border-radius: 5px;
|
18
|
-
box-shadow: 2px 2px;
|
19
|
-
|
20
|
-
padding: 0.5em;
|
21
|
-
|
22
|
-
position: absolute;
|
23
|
-
|
24
|
-
min-width: 200px;
|
25
|
-
width: 400px;
|
26
|
-
|
27
|
-
min-height: 200px;
|
28
|
-
height: 300px;
|
29
|
-
/* overflow: auto; */
|
30
|
-
|
31
|
-
background: white;
|
32
|
-
|
33
|
-
z-index: 2;
|
34
|
-
|
35
|
-
}
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
/* W */
|
40
|
-
|
41
|
-
.w-min-50px {
|
42
|
-
min-width: 50px;
|
43
|
-
}
|
44
|
-
|