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 +4 -4
- data/lib/ish/ameritrade.rb +83 -0
- data/lib/ish/input_error.rb +3 -0
- data/lib/ish_models.rb +2 -0
- metadata +7 -6
- data/lib/gallery2.rb-trash +0 -101
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9ddb473d3919f9fbd1f3776bac2dbee971c7191428d5bc18fb31c3a3412a73eb
|
4
|
+
data.tar.gz: 52aea5b794ff6a8f9dae484a7b364aa72df71bcbfb012ab43492d743d4a4badd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
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.
|
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.
|
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: []
|
data/lib/gallery2.rb-trash
DELETED
@@ -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
|
-
|