ish_models 0.0.33.123 → 0.0.33.129

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 31fd282b0a6e6d8e604f690ae7e230611b68ab921ffc0b9add930579d73b2cac
4
- data.tar.gz: 58cb6133640e47a728b62c83c1da29c6645b5bc4a61243908ebe22b58ff70533
3
+ metadata.gz: 9ddb473d3919f9fbd1f3776bac2dbee971c7191428d5bc18fb31c3a3412a73eb
4
+ data.tar.gz: 52aea5b794ff6a8f9dae484a7b364aa72df71bcbfb012ab43492d743d4a4badd
5
5
  SHA512:
6
- metadata.gz: 6d3abd305b8fa9f0698d8f7c9e19c0d6fcd3e7de95763f890b17f8a491c69b9aedec6a83af0d4df2786471422b045fa82a640afd2c79543062667414ab234403
7
- data.tar.gz: bdf186500c42e3e8f2104c3a571706ab1a0fdce813b7cdfda42dc625f9a8938f2aeecb5f42357d67dc08194ed2d6d6405727fa0640b563c0794c5179ecb68621
6
+ metadata.gz: cd05ef3be3aa54a2bf92e33aa9404dc654ecb25c288ed728836184d68a53adee5ecc9dc279a3c35b771fa0178f2ae10a9f89006a18c7dd9a50154c332fa34034
7
+ data.tar.gz: 9cb96337052e622e4ea2545724fe32241d0949849dd3e09ad79186f3ba3c46bb1df328ec4c8acb5d6a5fc00ed4ec2f7d3390783edcba5a5e0792f0d1506db707
@@ -0,0 +1,83 @@
1
+
2
+ #
3
+ # * make calls every once in a while
4
+ # * If the option price dips below a threshold, close the position (create the order to buy back the option)
5
+ #
6
+
7
+ # cron job or service? Well, I've historically done service. Cron is easier tho. The wiring should be for both.
8
+
9
+ # https://developer.tdameritrade.com/option-chains/apis/get/marketdata/chains
10
+ # FVRR_082021P200
11
+
12
+ require 'httparty'
13
+
14
+ module Ish::Ameritrade
15
+
16
+ CONFIG = {
17
+ underlying_downprice_tolerance: 0.14,
18
+ }
19
+
20
+ # def self.main_fvrr_1
21
+ # query_hash = {
22
+ # apikey: ::TD_AME[:apiKey],
23
+ # symbol: 'FVRR',
24
+ # contractType: 'PUT',
25
+ # strike: 200,
26
+ # fromDate: '2021-08-20',
27
+ # toDate: '2021-08-20',
28
+ # }
29
+ # response = ::Ish::Ameritrade::Api.get_option_chain(query_hash)
30
+ # puts! response, 'ze repsonse'
31
+ # end
32
+
33
+ ## AKA stop loss
34
+ def self.main_fvrr_2
35
+ # response = ::Ish::Ameritrade::Api.get_quote({ symbol: 'FVRR_082021P200' })
36
+
37
+ # @TODO: pass the info on the position in here.
38
+ strike_price = 200
39
+
40
+ # What is my risk tolerance here? 14% down movement of the underlying
41
+ response = ::Ish::Ameritrade::Api.get_quote({ symbol: 'FVRR' })
42
+ last_price = response[:lastPrice]
43
+ tolerable_price = ( strike_price * (1-CONFIG[:underlying_downprice_tolerance]) )
44
+
45
+ if last_price < tolerable_price
46
+ puts! 'LIMIT TRIGGERED, LETS EXIT' # @TODO: send an email
47
+ end
48
+ end
49
+
50
+ end
51
+
52
+ class Ish::Ameritrade::Api
53
+ include ::HTTParty
54
+ base_uri 'https://api.tdameritrade.com'
55
+
56
+ def self.get_quote opts
57
+ # validate input
58
+ %i| symbol |.each do |s|
59
+ if !opts[s]
60
+ raise Ish::InputError.new("invalid input, missing #{s}")
61
+ end
62
+ end
63
+
64
+ path = "/v1/marketdata/#{opts[:symbol]}/quotes"
65
+ out = self.get path, { query: { apikey: ::TD_AME[:apiKey] } }
66
+ out = out.parsed_response[out.parsed_response.keys[0]].symbolize_keys
67
+ out
68
+ end
69
+
70
+ def self.get_option_chain opts
71
+ # validate input
72
+ %i| apikey symbol contractType strike fromDate toDate |.each do |s|
73
+ if !opts[s]
74
+ raise Ish::InputError.new("invalid input, missing #{s}")
75
+ end
76
+ end
77
+
78
+ path = '/v1/marketdata/chains'
79
+ out = self.get path, { query: opts }
80
+ out
81
+ end
82
+
83
+ end
@@ -0,0 +1,3 @@
1
+
2
+ class Ish::InputError < RuntimeError
3
+ end
data/lib/ish_models.rb CHANGED
@@ -33,9 +33,11 @@ require 'gameui/map.rb'
33
33
  require 'gameui/marker.rb'
34
34
  require 'gameui/premium_purchase.rb'
35
35
 
36
+ require 'ish/ameritrade'
36
37
  require 'ish/covered_call'
37
38
  require 'ish/crawler.rb'
38
39
  require 'ish/gallery_name.rb'
40
+ require 'ish/input_error.rb'
39
41
  require 'ish/iron_condor.rb'
40
42
  require 'ish/iron_condor_watcher.rb'
41
43
  require 'ish/payment.rb'
metadata CHANGED
@@ -1,11 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ish_models
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.33.123
4
+ version: 0.0.33.129
5
5
  platform: ruby
6
6
  authors:
7
7
  - piousbox
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
  date: 2017-05-10 00:00:00.000000000 Z
@@ -114,17 +114,18 @@ files:
114
114
  - lib/event.rb
115
115
  - lib/feature.rb
116
116
  - lib/gallery.rb
117
- - lib/gallery2.rb-trash
118
117
  - lib/gameui.rb
119
118
  - lib/gameui/map.rb
120
119
  - lib/gameui/marker.rb
121
120
  - lib/gameui/premium_purchase.rb
122
121
  - lib/ish/alphavantage_stockwatcher.rb
122
+ - lib/ish/ameritrade.rb
123
123
  - lib/ish/campaign.rb
124
124
  - lib/ish/covered_call.rb
125
125
  - lib/ish/covered_call_watcher.rb
126
126
  - lib/ish/crawler.rb
127
127
  - lib/ish/gallery_name.rb
128
+ - lib/ish/input_error.rb
128
129
  - lib/ish/invoice.rb
129
130
  - lib/ish/iron_condor.rb
130
131
  - lib/ish/iron_condor_watcher.rb
@@ -154,7 +155,7 @@ homepage: http://wasya.co
154
155
  licenses:
155
156
  - MIT
156
157
  metadata: {}
157
- post_install_message:
158
+ post_install_message:
158
159
  rdoc_options: []
159
160
  require_paths:
160
161
  - lib
@@ -169,8 +170,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
169
170
  - !ruby/object:Gem::Version
170
171
  version: '0'
171
172
  requirements: []
172
- rubygems_version: 3.0.6
173
- signing_key:
173
+ rubygems_version: 3.2.25
174
+ signing_key:
174
175
  specification_version: 4
175
176
  summary: models of ish
176
177
  test_files: []
@@ -1,101 +0,0 @@
1
-
2
- class Gallery2
3
- include ::Mongoid::Document
4
- include ::Mongoid::Timestamps
5
- store_in :collection => 'galleries'
6
-
7
- field :is_feature, :type => Boolean, :default => false
8
- field :is_public, :type => Boolean, :default => false
9
- field :is_done, :type => Boolean, :default => false
10
- field :is_trash, :type => Boolean, :default => false
11
-
12
- default_scope ->{ where({ :is_public => true, :is_trash => false }).order_by({ :created_at => :desc }) }
13
- index({ :is_public => 1, :is_trash => -1, :order_by => 1 })
14
-
15
- field :x, :type => Float
16
- field :y, :type => Float
17
-
18
- def self.list conditions = { :is_trash => false }
19
- out = self.where( conditions ).order_by( :created_at => :desc )
20
- [['', nil]] + out.map { |item| [ "#{item.created_at.strftime('%Y%m%d')} #{item.name}", item.id ] }
21
- end
22
-
23
- belongs_to :site
24
- validates :site, :presence => true
25
-
26
- belongs_to :user_profile, :optional => true, :class_name => 'IshModels::UserProfile'
27
- field :username, :type => String
28
-
29
- field :name, :type => String
30
- validates :name, :uniqueness => true # , :allow_nil => false
31
-
32
- field :galleryname, :type => String
33
- index({ :galleryname => -1 }, { :unique => true })
34
- embeds_many :gallery_names, :class_name => 'Ish::GalleryName'
35
-
36
- field :subhead, :type => String
37
- field :descr, :type => String, :as => :description
38
- field :lang, :type => String, :default => 'en'
39
-
40
- has_many :photos
41
-
42
- belongs_to :tag, :optional => true
43
- belongs_to :city, :optional => true
44
- belongs_to :venue, :optional => true
45
-
46
- has_many :newsitems
47
-
48
- set_callback(:create, :before) do |doc|
49
- if doc.user_profile && doc.user_profile.username
50
- doc.username = doc.user_profile.username
51
- end
52
- doc.galleryname ||= doc.id.to_s
53
-
54
- #
55
- # newsitems
56
- #
57
- if doc.is_public
58
- # for the sites
59
- if doc.site
60
- sites = Site.where( :domain => doc.site.domain )
61
- sites.each do |site|
62
- n = Newsitem.new {}
63
- n.gallery = doc
64
- n.username = doc.username
65
- site.newsitems << n
66
- flag = site.save
67
- if !flag
68
- puts! site.errors
69
- end
70
- end
71
- end
72
- # for the city
73
- if doc.city
74
- n = Newsitem.new {}
75
- n.gallery = doc
76
- n.city = doc.city
77
- n.username = doc.username
78
- n.save
79
- end
80
- end
81
-
82
- #
83
- # cache
84
- #
85
- if doc.site
86
- doc.site.touch
87
- end
88
- if doc.city
89
- doc.city.touch
90
- end
91
-
92
- end
93
-
94
- # @deprecated, use Gallery::ACTIONS
95
- def self.actions
96
- [ 'show_mini', 'show_long', 'show' ]
97
- end
98
- ACTIONS = [ 'show_mini', 'show_long', 'show' ]
99
-
100
- end
101
-