オリジナルポートフォリオの作成
オリジナルポートフォリオの作成
メモはkobito.app
使う技術
*プログラム言語ruby
*webサービス構築sinatra
*データベース管理sqlite3
*データベースをrubyのオブジェクト化activerecord
まずsinatraから攻める
前回インストール済み
Markdown: これができればwebサービスは作れる-sinatra
構造
k-portfolio
┣main.rb
┣import.sql
┣stock.db
┗views
_┣layout.erb
_┗index.erb
┗┣は「けいせん」で変換
<!DOCTYPE html>
<html lang="ja">
<head>
<mata charset="utf-8">
<title>k-portfolio</title>
</head>
<body>
<%= yield %>
</body>
</html>
stock.dbの作成、import.sqlの読み込み
drop table if exists posts;
create table posts(
id integer primary key,
title text,
body text,
created_at,
updated_at
);
Mac-no-MacBook-Pro:k-portfolio Mac$ sqlite3 stock.db
SQLite version 3.8.5 2014-08-15 22:37:57
Enter ".help" for usage hints.
sqlite> .read import.sql
sqlite> .shema
Error: unknown command or invalid arguments: "shema". Enter ".help" for help
sqlite> .shcema
Error: unknown command or invalid arguments: "shcema". Enter ".help" for help
sqlite> .schema
CREATE TABLE posts(
id integer primary key,
title text,
body text,
created_at,
updated_at
);
sqlite>
main.rbにsinatra,active_record読み込み
stock.dbと関連付け,Postクラスの作成
require "sinatra"
require "sinatra/reloader"
require 'active_record'
ActiveRecord::Base.establish_connection(
"adapter" => "sqlite3",
"database" => "./stock.db"
)
class Post < ActiveRecord::Base
end
get "/" do
@title = "index"
@content = "this is index"
@posts = Post.order("id").all
erb :index
end
post "/new" do
Post.create({:body => params[:body]})
redirect '/'
erb :index
end
<h1><%= @title %></h1>
<%= @content %>
<h2>Add new</h2>
<form method="post" action="/new">
<input type= "text" name="body"><input type= "submit" value="post!">
</form>
<br>
<table border="1">
<tr>
<td>id</td><td>comment</td><td>created_at</td>
</tr>
<% @posts.each do |post| %>
<tr>
<td><%= post.id %></td><td><%= post.body %></td><td><%= post.created_at %></td>
</tr>
<% end %>
</table>
これでフォームに入力した文字はcomment欄に表示され、その日時も記録される。出力はテーブル表。
ここからどうするか
株ポートフォリオに必要な変数名の用意
-コード
-市場
-名称
-損益
-当時購入価格
-現在取引値
-単元株数
-前日比
-出来高
シンプルなものを作るために変数名を絞る
やりたいこと
簡単に言えばYahooポートフォリオを自作する
1.気になる銘柄を選定後、その銘柄をtextファイルに保存。
textファイルから読み出し以下のことをする。
a.コード(code)
textファイルに保存してあるので、そこからインポートしDBのcodeに追加
b.名称(name)
codeから名称を検索しDBのnameに追加
c.当時購入価格(price)(終値*最低単元株数)
codeから終値、最低単元株数を検索し、計算。計算結果をDBのpriceに追加
2.または気になる銘柄を選定後そのままDB(stock_日付.db)に追加する。
シンプルに考えて
1.引け後銘柄選定
2.日付ごとにcodeだけ保存(.db OR .text)
3.終値*最低単元株数を計算し購入価格を算出
4.上書き保存
┗とりあえずここまでやってみる
5.最新の株価と照らし合わせ日付ごとの損益を出す
引け後銘柄選定
自作chart.rbより選択
今はhtmlファイルとして保存(XXXX-XX-XX.text)
<% if focus != nil
File.open("./stockfile/#{today}.html","a") do |file|
file.puts focus
end
end %>
これをdbファイルに保存したい(XXXX-XX-XX.db)がよくわからないのでtextファイルとして保存しdbファイルから読み込むようにする
<% if focus != nil
File.open("./stockfile/#{today}.text","a") do |file|
file.puts focus
end
end %>
2.日付ごとにcodeだけ保存(.db OR .text)
dbファイルからtextファイルを読み込む
まずk-portfolio下に新規dbを作成。stock.db
:string #=> 文字列
:text #=> string読みも長い文字列
:integer #=> 整数
:float #=> 少数点を含む数
:decimal #=> floatよみも精度の高い少数点を含む数
:datetime #=> 日時
:timestamp #=> より細かい日時
:time #=> 日付
:date #=> 日付
:binary #=> バイナリデータ
:boolean #=> Boolean型(true or false)
参考http://morizyun.github.io/blog/active-record-rails-beginner-tutorial/
外部データからデータを取り込む - ドットインストール#17
SQL文
drop table if exists posts;
create table posts(
codes integer
);
Mac>sqlite3 stock.db
sqlite> .read import.sql
sqlite> .import ./2015-01-23.text posts
sqlite> select * from posts
...> ;
1883
1944
2002
2193
4114
4272
6517
9008
9021
9375
9739
stock.dbにコードが記録された
3.終値*最低単元株数を計算し購入価格を算出
-stock.dbからコードを1つずつ抽出
-それをyahoofinanceで検索し、正規表現でparse
時間がかかる、サーバーに負担がかかる
-銘柄,名称のDBを作っておきそこから反映
DB構築の最初だけ時間がかかる、新しい会社の反映、更新が面倒
終値データ取得方針
-yahoofinanceから
最低単元株数データ取得方針
o-yahoofinenceから
x-100,1000から選択できるようにする
結局yahoofinenceから取らなければいけないから
名称、終値、最低単元株数は同じようにスクレイピングする
スクレイピングしたのをtext→db保存になる
でもrubyから直接dbに保存することはできないのか
「db 保存 ruby」「ruby 保存 sqlite3」で検索してみた
# 仮データを入れてみる
Stat.create(
:update_id => '1234556',
:name => 'zanmai',
:text => '肉が食べたい'
)
なるほどchart1.rbからaciverecordをつかって
ってことはchart1.rbをsinatraで作り変えなければいけない。
いつかはしたほうがいいと思っていたが...
それをまずやって、保存先をstock.dbにする!
そうすればtextファイルを経由しなくていい!
次に続く
Author And Source
この問題について(オリジナルポートフォリオの作成), 我々は、より多くの情報をここで見つけました https://qiita.com/kimioka0/items/3a36022b314ecd67576b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .