mytradewizard 0.0.7 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MmFjYjM5ZGE0Zjc3YWQ2ODIzNTkwNjNhZGYxZDg2OTdkYjllMDQ4Yg==
4
+ NmY1MTVlYTg1Mjc1ZGVjMDRjM2U5Yjk4MDEzZmJlZjliMmZjNGY2ZA==
5
5
  data.tar.gz: !binary |-
6
- ODk3N2JiZWZlY2ZkYTU5NDM5NzJjODE3ODliMWI4YzQ2OWRiMTUyMQ==
6
+ MDNkNDIwNjY3MzM4ZTQyZjIyN2Y1YWI5NGM5Yzg3ZTg5ZjU2ZWFhYQ==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- MmU2ZTQ0OGFlMTgzMjVjNmU4ZGM1MzM0NTZmOGQzNWMwYzdhMzQ0MjVkYTI3
10
- ZjAzZGNjMDE4NDMxYjFmZTY5YmRmYzg0ZTYzZWRmMzcyNzBhZTBhOWEyNTVh
11
- Y2E2YWU2MTMyYzhlYTI2YWZjZWE4OWQ5N2I5NzQ2ZWVkNWM5ZDA=
9
+ YWE2MzQ1ZDJkNjEyZjhjZjBkMTdjMWNhNThiZDdhYWFhOWYzOTJmZDBjNjE5
10
+ MmI1ZWZlYzdlMmU1YjMxMjRjMjNhZjMyMWE5M2MyNzE5ZGFlOGFkNjg1Nzc0
11
+ OTAxM2I4NTUxN2I5MWFhYjlkZmI5ZTZjZjFhOGI2MzQwODE1OGI=
12
12
  data.tar.gz: !binary |-
13
- YTM1Y2I3YjQzNjMzY2JiNzhmODVmMWE5MWI0NjIwMzUyNWExMmY2OWM4YjZm
14
- ZDUyNzg5YWUxZWZkYjVjMzlmNmQ3OGM3MTQzNGFhZjBhZTg1YTk0OTgwZTdk
15
- YmQ1NjFjNDdjOTkzNGYyNzNiODRlOWUxMmQ1NTIwZjFmZWY1YmM=
13
+ YjYyMWNhM2E0MDhlNjU2NTJhN2M5OWExZmE3YWYyZDRjYTA4NmE1NWQ4NWI0
14
+ YTM5MmUxNWQ5ZTM0NzE1NDY1YTZjYzhjNmE4NGUwMzQzZTcwYzRjZTQyNDNk
15
+ MDFmOTM5NGNmODg3NzNlYThjN2FjNTczNDA2YWRhYjlkOTFkZjU=
@@ -15,6 +15,7 @@ require 'mytradewizard/future_trading_system'
15
15
  require 'mytradewizard/action'
16
16
  require 'mytradewizard/position'
17
17
  require 'mytradewizard/order'
18
+ require 'mytradewizard/email'
18
19
  begin
19
20
  require "#{Dir.pwd}/config/mytradewizard"
20
21
  rescue LoadError
@@ -5,19 +5,21 @@ require 'mytradewizard/generators/mytradewizard'
5
5
  module MyTradeWizard
6
6
  class CLI < Thor
7
7
 
8
- desc "configure [-- env ENV] [-- email EMAIL] [-- host HOST] [-- port PORT] [-- account ACCOUNT]", "Generate Interactive Brokers configuration"
9
- method_options :env => :string, :email => :string, :host => :string, :port => :numeric, :account => :string
8
+ desc "configure [--environment ENVIRONMENT] [--host HOST] [--port PORT] [--account ACCOUNT] [--email_to EMAIL_TO] [--gmail_username GMAIL_USERNAME] [--gmail_password GMAIL_PASSWORD]", "Generate Interactive Brokers configuration"
9
+ method_options :environment => :string, :host => :string, :port => :numeric, :account => :string, :email_to => :string, :gmail_username => :string, :gmail_password => :string
10
10
  def configure
11
- MyTradeWizard::Generators::MyTradeWizard.start([options[:env] || "local", options[:email] || "", options[:host] || "localhost", options[:port] || 7496, options[:account] || ""])
11
+ MyTradeWizard::Generators::MyTradeWizard.start([options[:environment] || "local", options[:host] || "localhost", options[:port] || 7496, options[:account] || "", options[:email_to] || "", options[:gmail_username] || "", options[:gmail_password] || ""])
12
12
  end
13
13
 
14
14
  desc "config", "Display Interactive Brokers configuration"
15
15
  def config
16
- puts "Env: " + MyTradeWizard::Configuration::ENV
17
- puts "Email: " + MyTradeWizard::Configuration::EMAIL
16
+ puts "Environment: " + MyTradeWizard::Configuration::ENVIRONMENT
18
17
  puts "Host: " + MyTradeWizard::Configuration::InteractiveBrokers::HOST
19
18
  puts "Port: " + MyTradeWizard::Configuration::InteractiveBrokers::PORT.to_s
20
19
  puts "Account: " + MyTradeWizard::Configuration::InteractiveBrokers::ACCOUNT
20
+ puts "Email To: " + MyTradeWizard::Configuration::Email::TO
21
+ puts "Gmail Username: " + MyTradeWizard::Configuration::Email::GMAIL_USERNAME
22
+ puts "Gmail Password: " + MyTradeWizard::Configuration::Email::GMAIL_PASSWORD
21
23
  end
22
24
 
23
25
  desc "connect", "Connects to Interactive Brokers"
@@ -4,7 +4,7 @@ module MyTradeWizard
4
4
  HR = 360
5
5
 
6
6
  def at(hour, minute)
7
- unless MyTradeWizard::Configuration::ENV == 'local'
7
+ unless MyTradeWizard::Configuration::ENVIRONMENT == 'local'
8
8
  print "Waiting until #{hour}:#{minute} ..."
9
9
  until time_is(hour, minute)
10
10
  sleep 60
@@ -14,7 +14,7 @@ module MyTradeWizard
14
14
  end
15
15
 
16
16
  def idle(seconds)
17
- sleep(seconds) unless MyTradeWizard::Configuration::ENV == 'local'
17
+ sleep(seconds) unless MyTradeWizard::Configuration::ENVIRONMENT == 'local'
18
18
  end
19
19
 
20
20
  def friday
@@ -0,0 +1,31 @@
1
+ require 'gmail'
2
+
3
+ module MyTradeWizard
4
+ class Email
5
+
6
+ attr_accessor :subject
7
+ attr_accessor :body
8
+
9
+ def <<(msg)
10
+ @body << msg << "\n"
11
+ end
12
+
13
+ def send
14
+ to = MyTradeWizard::Configuration::Email::TO
15
+ subject = @subject
16
+ body = @body
17
+ username = MyTradeWizard::Configuration::Email::GMAIL_USERNAME
18
+ password = MyTradeWizard::Configuration::Email::GMAIL_PASSWORD
19
+ unless to.empty? || username.empty? || password.empty?
20
+ Gmail.connect!(username, password) do |gmail|
21
+ gmail.deliver! do
22
+ to(to)
23
+ subject(subject)
24
+ body(body)
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ end
31
+ end
@@ -1,11 +1,15 @@
1
1
  module MyTradeWizard
2
2
  module Configuration
3
- ENV = "<%= env %>"
4
- EMAIL = "<%= email %>"
3
+ ENVIRONMENT = "<%= environment %>"
5
4
  module InteractiveBrokers
6
5
  HOST = "<%= host %>"
7
6
  PORT = <%= port %>
8
7
  ACCOUNT = "<%= account %>"
9
8
  end
9
+ module Email
10
+ TO = "<%= email_to %>"
11
+ GMAIL_USERNAME = "<%= gmail_username %>"
12
+ GMAIL_PASSWORD = "<%= gmail_password %>"
13
+ end
10
14
  end
11
15
  end
@@ -6,11 +6,13 @@ module MyTradeWizard
6
6
 
7
7
  include Thor::Actions
8
8
 
9
- argument :env, :type => :string
10
- argument :email, :type => :string
9
+ argument :environment, :type => :string
11
10
  argument :host, :type => :string
12
11
  argument :port, :type => :numeric
13
12
  argument :account, :type => :string
13
+ argument :email_to, :type => :string
14
+ argument :gmail_username, :type => :string
15
+ argument :gmail_password, :type => :string
14
16
 
15
17
  def create_config
16
18
  empty_directory("config")
@@ -43,7 +43,7 @@ module MyTradeWizard
43
43
  end
44
44
 
45
45
  def sell(position)
46
- output "SELL #{position.size} #{position.stock.symbol}"
46
+ email << "SELL #{position.size} #{position.stock.symbol}"
47
47
  place_market_order "SELL", position.size, position.stock.contract
48
48
  end
49
49
 
@@ -52,9 +52,10 @@ module MyTradeWizard
52
52
  buying_power_per_order = total_buying_power / orders.length
53
53
  orders.each do |order|
54
54
  order.quantity = (buying_power_per_order / order.stock.price).floor
55
- output "#{order.action} #{order.quantity} #{order.stock.symbol}"
55
+ email << "#{order.action} #{order.quantity} #{order.stock.symbol}"
56
56
  place_market_order order.action.to_s, order.quantity, order.stock.contract
57
57
  end
58
+ email.send
58
59
  end
59
60
 
60
61
  end
@@ -7,9 +7,12 @@ module MyTradeWizard
7
7
  def initialize
8
8
  @ib = MyTradeWizard::InteractiveBrokers.new
9
9
  @ib_ruby = @ib.connect
10
- @env = MyTradeWizard::Configuration::ENV
10
+ @environment = MyTradeWizard::Configuration::ENVIRONMENT
11
11
  @account = MyTradeWizard::Configuration::InteractiveBrokers::ACCOUNT.empty? ? @ib.accounts.first : MyTradeWizard::Configuration::InteractiveBrokers::ACCOUNT
12
12
  @logger = Logger.new("/mtw/sys/#{self.class.to_s.downcase}/log/#{Time.now.strftime('%Y%m%d-%H%M')}") unless test?
13
+ @email = MyTradeWizard::Email.new
14
+ @email.subject = (production?) ? self.class.to_s : "#{@environment.upcase} #{self.class.to_s}"
15
+ @email.body = ""
13
16
  @orders = []
14
17
  end
15
18
 
@@ -29,8 +32,21 @@ module MyTradeWizard
29
32
  end
30
33
  end
31
34
 
35
+ def email(msg = nil)
36
+ if msg.nil?
37
+ return @email
38
+ else
39
+ @email.body = msg
40
+ @email.send
41
+ end
42
+ end
43
+
32
44
  def test?
33
- @env == 'local'
45
+ @environment == 'local'
46
+ end
47
+
48
+ def production?
49
+ @environment == 'production'
34
50
  end
35
51
 
36
52
  end
@@ -1,3 +1,3 @@
1
1
  module MyTradeWizard
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.8"
3
3
  end
@@ -24,6 +24,7 @@ Gem::Specification.new do |gem|
24
24
  gem.add_dependency "tzinfo", "~> 0.3.29"
25
25
  gem.add_dependency "nokogiri"
26
26
  gem.add_dependency "thor"
27
+ gem.add_dependency "gmail"
27
28
 
28
29
  gem.files = `git ls-files`.split($/)
29
30
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mytradewizard
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - mytradewizard
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-10 00:00:00.000000000 Z
11
+ date: 2013-10-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -164,6 +164,20 @@ dependencies:
164
164
  - - ! '>='
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: gmail
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ! '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ! '>='
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
167
181
  description: Helpers for CME Group, Interactive Brokers, and Yahoo Finance
168
182
  email:
169
183
  - zack@mytradewizard.com
@@ -190,6 +204,7 @@ files:
190
204
  - lib/mytradewizard/cme.rb
191
205
  - lib/mytradewizard/daily_bars.rb
192
206
  - lib/mytradewizard/date_time.rb
207
+ - lib/mytradewizard/email.rb
193
208
  - lib/mytradewizard/future_trading_system.rb
194
209
  - lib/mytradewizard/generators/config/mytradewizard.rb
195
210
  - lib/mytradewizard/generators/mytradewizard.rb