ラベル シェルスクリプトもどき の投稿を表示しています。 すべての投稿を表示
ラベル シェルスクリプトもどき の投稿を表示しています。 すべての投稿を表示

2016年3月5日土曜日

Bitcoin関連データ収集自動化3 Jason2XML and auto Gmail

地道にシェルスクリプトを追加している。

なぜXML?というつっこみはしないでくれ。
スクリプトで簡単に処理できるデータベース言語を他に知らないだけだからw
多少冗長になるけど、見やすいんだよね…。

というわけで2つのスクリプトの紹介。

<ひとつは自動E-mail送信スクリプト>
GmailのAPIを使った。
まず、捨てアカウントを作成。
次にセキュリティ設定(アプリケーション)を下げ,特定のアプリケーション以外でも使用可能に。
それから肝心のスクリプト作成。
https://gist.github.com/kawaz/4152434
の記述を主に使ったが、うまく行かなかった部分もあったので、修正した。

base64のところは苦労したので、問題の切り分けのときに変数($EN64)化した。
今となっては意味ないけど。

#!/bin/sh

user="hoge" #Only the username. Should not include @gmail.com
pass="hogehoge"
to="friend@hoge.hoge"
message="Today is hot.\nIt is winter, though."

EN64=`perl -MMIME::Base64 -e 'print encode_base64("\000'$user'\@gmail.com\000'$pass'")'`


( sleep 1
  echo "EHLO localhost"
  sleep 1
  echo "AUTH PLAIN $EN64"
  sleep 1
  echo "MAIL FROM: <"$user"@gmail.com>"
  sleep 1
  echo "rCPT TO: <$to>"
  sleep 1
  echo "DATA"
  sleep 1
  ( echo "Subject: Checklist"
    echo "From: $user@gmail.com"
    echo "To: $to"
    echo ""
    echo "$message"
    echo ""
    echo "."
  ) | perl -pe's/(?<!\r)\n/\r\n/'
  sleep 1
  echo "quit"
) | openssl s_client -connect smtp.gmail.com:465


<もうひとつはJason 2 XML スクリプト。>
ちょっとずつ専門的になってきているので、スクリプト全部は公開しない。
だれか買うかな?とも思うけど、儲かるなら自分で使う罠wwwwwww

価格チャートの時系列記録スクリプトだ。
ブログの最初に出力されたXMLの画像を貼り付けた。

#Time description
SYSTEM_DATE=`date '+%Y-%m-%d'`
SYSTEM_DATE_year1=`date '+%Y'`
SYSTEM_DATE_month1=`date '+%m'`
SYSTEM_DATE_day1=`date '+%d'`
SYSTEM_DATE_hour1=`date '+%H'`
SYSTEM_DATE_minute1=`date '+%M'`

で時間を全部とってきて、価格データと共にXMLに埋めた。
ファイルが大きくなりすぎないように、上記の変数をファイル名にも転用し、
一日ごとに区切った。

トラブルにならない程度に数分Sleepさせた上で、
Jason2XMLスクリプトをfor関数で繰り返した。
ダブルクオテーションの記述をあまり考えたくなかったので、少しXMLが冗長…。

また独立したスクリプトで5日分(日数は変数化してある)のXMLを参照するXMLを作るものを作成した。 これで、XSLで5日分まとめて変換できる。あまり日数を多くすると負荷が大きいのと実用的でなくなる。古い記録を残したままにできるのは我ながら良い。

あとは本当の意味での”関数”であるXSLを考えないといけない。
  1. 大きな変動があれば携帯宛にメールで送る
  2. グラフにして変化を視覚的に見る。統計ソフトに計算させる。
    • SVG
    • CSVにしてR(統計・グラフ描画ソフト)に引き渡す。
  3. メールに2を添付して送る
  4. 最終的には売買APIに渡して売買の自動化
    1. Log出力でテスト
    2. 最小額でテスト
    3. 実用化
の順番で考えている。
2・4は2が先行だが必要があれば双方向で修正。
4が最高に難しいので、じっくりやっていく予定。
当面は実際の売買でなくlogとグラフ出力させメール送信(1,2,3)になるだろう。
起きている時間帯は最終判断を自分でする方が良いが、
仕事中や寝ている間はある程度任せられるぐらいのスクリプトを組みたいものだ。

すでにBitcoin取引所とYahoo financeは自動で取得できる。
メールは送れるので、あとは送る条件を関数化することで1は終了だ。

実際のところYahoo financeは株価でも使えるので、今後株取引でも応用がきく。

コンパイルされたソフトウェアと違い、スクリプトは対話式で一個ずつ修正がしやすい。
XMLはかなり厳密な記述を要するので相性が良い。

コンパイルが不要なのは助かるが、取引の時に処理による一瞬の遅れが出るのが致命的になる可能性もある。
もちろん、そういう取引をするつもりはないのだが、不測の事態はやはり怖い。
逆指値スクリプトで下げ幅を大きくとって保険にする必要があるのかもしれない。
逆指値も万能ではないし、きりがないが…。

ともかく、目指せ金儲けプログラム!

2016年2月20日土曜日

Bitcoin関連データ収集自動化2 Ticker Jason type based API 2 CSV by shell script

環境はubuntu14.04 シェルスクリプトを用いてBitcoin取引所のデータを取得する。
取得するデータはログイン不要でとれるもののみ。
Curlというデフォルトでインストールされていないソフトを用いている。
必要な人は sudo apt-get install curl でインストールしてください。

Bitcoin取引所の多くが同じシステムを使っていたので、
サブルーチン化した上で展開した。

やってることは単純だが、慣れないので非常に時間がかかった。
CurlでJasonフォーマットのファイルを取得。
これとこの保存に時間がかかるので念のため、5秒Sleep。
Jasonフォーマットは使いにくいので、文字置換でカンマ区切りのCSVにした。

本当に疲れた。

前回作ったYahoo finance からの続きになるが、わかりにくいので全部載せた。

#!/bin/sh

#Set the directory which this file exists will be the root directory.
dirname=`dirname $0`;

# make directory for saving the raw data files.
mkdir -p ./Raw_Data; 

#-----------Yahoo finance data--------------
#Get the raw data from Yahoo finance
wget -O ./Raw_Data/Yahoo_data.csv "http://finance.yahoo.com/d/quotes.csv?s=BTCUSD=X+JPY=X&f=nl1" ;
#-----------end--------------

#------------JASON based Ticker routine function-----------------
#This needs the Ticker API_web_address and the part of the data_file_name as valiables.

Ticker(){
curl -X GET "$API_web_address" --output ./Raw_Data/"$data_file_name"_data.csv;

#In case the previous step takes time, this helps the next step.
sleep 5;

#Substitute some characters to form CSV from Jason format.
sed -i -e 's/[{|}|"]//g' -e 's/,/\n/g' -e 's/:/,/g' ./Raw_Data/"$data_file_name"_data.csv
}
#-----------end--------------

#-----------Each website data--------------
#BTC box
API_web_address=https://www.btcbox.co.jp/api/v1/ticker/
data_file_name=btcbox
Ticker

#Bitstamp
API_web_address=https://www.bitstamp.net/api/ticker/
data_file_name=bitstamp
Ticker

#CEX.IO
API_web_address=https://cex.io/api/ticker/BTC/USD
data_file_name=cexio
Ticker
#-----------end--------------

2016年2月19日金曜日

Bitcoin関連データ収集自動化1 Yahoo finance API 2 CSV by shell script

今回気づいた取引の失敗(後日詳細を述べる)から、ある程度の相場の分析が必要だと判断したが、
計算ソフトへの入力が面倒くさすぎる。

というわけで、一般の情報収集にはYahoo finance のAPIを用いることにした。
参考にさせてもらったのはhttp://www.jarloo.com/yahoo_finance/という英語のサイト。

APIと言うと難しい響きだが、データ収集なら結構簡単(Google検索みたいに、今まで気づかずに使っているのだろう)。ウェブブラウザのアドレスに以下を張り付けるだけ。
http://finance.yahoo.com/d/quotes.csv?s=BTCUSD=X+JPY=X&f=nl1
これは一例だが、これでドル建てのビットコインの値段とドル円相場がCSVファイルで取得できる。
通貨の種類を+で区切り、データの種類は&f=の後に羅列するだけ。

自分はUbuntu userなので、Shell scriptファイルでさらに自動化。

#!/bin/sh



#Set the directory which this file exists will be the root directory.
dirname=`dirname $0`;



# make directory for saving the raw data files.
mkdir -p ./Raw_Data; 



#-----------Yahoo finance data--------------
#Get the raw data from Yahoo finance
wget -O ./Raw_Data/Yahoo_data.csv "http://finance.yahoo.com/d/quotes.csv?s=BTCUSD=X+JPY=X&f=nl1" ;
#-----------end--------------




今後もこのような自動化を増やしていく予定なので、新規フォルダ(Raw_Dataフォルダ)作成し、ここに生データを突っ込むことにした(なんかエロい)。CSVファイルをYahoo_data.csvと名付けてダウンロードする。wgetコマンドを今後いろいろ追加し、データ収集を自動化する予定。

私はプログラマーではないので、コンピューター言語も詳しくないし(HTMLとXMLとShell-scriptをコピペして使っている程度のレベル。)、このぐらいの自動化がコスト的に限界。計算は計算ソフト(Libreoffice使ってます。WindowsはXP以外ほとんど使ったことがないし、エクセルとか無駄に値段が高くてこれまで自分の金で買ったことないwww)の外部ファイル参照機能で既に作った解析用のファイルにとりこむ。

時間が余ったら、統計ソフトのRで経済の勉強しながら多変量解析(できるのかな…)してみよう。