Ich bin neu in Ruby, und ich versuche, ein "einfaches" System zu kodieren, damit ich die Aktientransaktionen verfolgen kann. Den Durchschnittspreis errechnend, und in der Zukunft werde ich versuchen, Dividendeninformationen zu erhalten.Ruby: Verfolgung von Stock Transaction mit Hash
So weit sieht mein Code so aus (bitte zögern Sie nicht, bessere Möglichkeiten vorzuschlagen, um meinen Code zu machen, wie ich sagte, ich bin neu).
require 'money'
require 'money/bank/google_currency'
require 'monetize'
require 'date'
require 'ystock'
require 'ostruct'
# (optional)
# set the seconds after than the current rates are automatically expired
# by default, they never expire
Money::Bank::GoogleCurrency.ttl_in_seconds = 86400
I18n.enforce_available_locales = false #erro no formatting...
# set default bank to instance of GoogleCurrency
Money.default_bank = Money::Bank::GoogleCurrency.new
class Stock
attr_accessor :code, :quantity, :price, :transactions, :spotprice
def initialize(code:)
@code = code
@quantity =00
@price = 00.to_money(:BRL)
@transactions = []
@spotprice = 0.to_money(:BRL)
end
def spotprice
begin
asset_temp = Ystock.quote(@code.to_s + ".sa") # since it is South America.
asset_info = OpenStruct.new asset_temp # organize it.
@spotprice = asset_info.price.to_money(:BRL) # get the price. And transform it to Money, local currency
rescue => @error #Is there an TCP/IP error?
@spotprice = 0.to_money(:BRL)
end
end
def buy (quantity:, price:, fees:, date:0)
transactions.push type: "BUY", date: Date.strptime(date.to_s, '%d/%m/%Y'), quantity: quantity, price: price.to_money(:BRL), fees: fees.to_money(:BRL)
#Lets calculate the average price that we bought:
new_price = (((@quantity * @price.to_money(:BRL))) + ((quantity * price.to_money(:BRL)) + fees.to_money(:BRL)))/(@quantity + quantity)
@quantity += quantity
@price = new_price.to_money(:BRL) # new price is the average price.
end
def sell (quantity:,price:, fees:, date:)
transactions.push type: "SELL", date: Date.strptime(date.to_s, '%d/%m/%Y'), quantity: quantity, price: price.to_money(:BRL), fees: fees.to_money(:BRL)
@quantity -= quantity
end
end
Zum Beispiel kann ich den Vermögenswert, erstellen und kauft machen und verkauft:
ciel3 = Stock.new(code: "CIEL3")
ciel3.buy(quantity: 100, price: 9.00, fees: 21.5, date: "12/05/2015")
p ciel3
ciel3.buy(quantity: 100,price: 12, fees: 21.7, date: "12/06/2015")
ciel3.sell(quantity: 50,price: 11.5,fees: 20.86, date: "20/06/2015")
p ciel3
ciel3.buy(quantity: 200,price: 15,fees: 23.6, date: "12/07/2015")
puts ciel3.price.format
puts
puts
# puts ciel3.spotprice.format
p ciel3.transactions
weit Also, es in Ordnung ist (aber ich denke, dass eine saubere und lesbare Weise gibt es zu tun es ... nicht sicher).
Aber nehmen wir an, ich möchte alle Transaktionen des Typs "SELL" anzeigen. Wie kann ich das tun? Wie man in das ciel3.transaction Array schaut, das den Hash hat: type ?? Tnks
B. Sieben, danke !! Es ist perfekt. Ich weiß (noch) nicht über die Transaction-Klasse. Ich werde nachsehen. Würden Sie meinem Code einen anderen Hinweis geben? –
Ich konnte die Transaktionsklasse für Ruby nicht finden. Nur für Rails, ist es das Gleiche? –
Sie würden Ihre eigene 'Transaction' Klasse erstellen:' class Transaction'. –