最先端技術即席実装(SSJ)

最先端技術即席実装(SSJ)

いかに時間をかけないで、最新技術を使いこなすかを目標にした活動記録

仮想通貨の暴落が怖くて不眠症になったので、科学の力を持ってこれに対抗した | PyBitFlyer + Pandas + Cron で自動売買

f:id:tetsuyaimagawa:20170617191955j:plain

前回までのあらすじ

仮想通貨のオラオラなボラボラに振り回されていた私は、ビットコインの暴騰暴落を見ては一喜一憂するだけの廃人生活を送っていた。
日本で一番簡単にビットコインが買える取引所 coincheck bitcoin
やがて、このままではいけない・・・と、真っ当に生きるために自動売買システムに手を出しはじめる。
しかしテクニカル指標を計算するために時系列データを取得しようとした時点で、BTCの為替データが高くて買えず、泣く泣く有給をとってデイトレードに勤しんだのであった・・・

tetsuyaimagawa.hatenablog.com

今回のあらすじ

サーバーを使わず自分のPCから、定期的に為替データを取得して、csvに保存する簡易プログラムを書く。


PyBitFlyerで為替情報を取る

pybitflyerをpipして、BitFlyer APIからBTC/JPYを取得する

import pybitflyer

api = pybitflyer.API(api_key="[KEY]", api_secret="[SECRET]")
tick = api.ticker(product_code="BTC_JPY") #BTC_JPYを選択
time = datetime.now().strftime("%Y/%m/%d %H:%M:%S") #apiにも時刻あるけど、扱いやすいのでこっちにする
ask = tick["best_ask"]
bid = tick["best_bid"]
mid = ( ask + bid ) / 2 #ASKとBIDの中間値をとる

Pandasでcsvにデータを追加していく

import pandas as pd

df = pd.read_csv('jpyeth.csv') #よむ
row = pd.Series([time,mid], index=df.columns) #行つくる
df = df.append(row,ignore_index=True) #行たす
df.to_csv('jpyeth.csv',index=None) #かく

テクニカル指標を実装

とりあえずPandasで標準偏差とか簡単に計算できるので
ボリンジャーバンドの-2σに触れたら損切るみたいなチキンなロジックを組みました。
決済もpybitflyerで一瞬です。
tetsuyaimagawa.hatenablog.com

cronで5分毎に自動実行させる

↓のような分を一文含むfile.txtを作って
*/5 * * * * /usr/local/bin/python3 /Users/hoge/retrieveBtcJpyRate.py

$ crontab file.txt #読み込む
$ crontab -l #読まれたか確認する
$ crontab -e #これで直接編集できるが、crontab -r を押すリスクがあるのでやめましょうとのこと

file.txtは読み込み後消してもOKです。

これで5分毎に自動実行です。

結果

データは取得できました。
f:id:tetsuyaimagawa:20170617201022p:plain

-2σに触れて損切りされてたらたまらないので、一旦コメントアウトしてますが、動作確認済みです…。

if df.tail(1)["jpybtc"].iloc[0] > bolbtm:
    print("まだ売っちゃだめだよおお")
else:
    print("売るよお")
"""
    api.sendchildorder(product_code="BTC_JPY",
                  child_order_type="MARKET",
                  side="SELL",
                  size=0.001,
                  minute_to_expire=10000,
                  time_in_force="GTC"
                  )
"""

まとめ

多少下がったとしても、まぁまだ上がると思うので(神話)
簡単に決済されてしまっては困ります。

漢は黙って



ズッホ

AWSの課金に耐えかねた方々への、Heroku PHPによる無料データベース利用方法

前回までのあらすじ

Mastodonを立てるために奮闘していた作者は、結局途中で色々忙しくなってAWSを放置していたら、また大量課金されていてびっくりしたドン。
f:id:tetsuyaimagawa:20170611155541p:plain

今回のあらすじ

やはり気軽にデータベースを利用したwebアプリを作れるHerokuは有能。

基本操作

インストール(Mac
$ brew install heroku
ログイン/ログアウト
$ heroku login
$ heroku logout
アプリ作成
$ heroku create AppName
ブラウザでアプリ立ち上げる
$ heroku open
デプロイしているファイルを確認
$ heroku run bash

データベースを使えるようにする

DBアドオン"ClearDB"を追加する
$ heroku addons:add cleardb:ignite -app AppName

-app は -a で代用可。
アプリディレクトリ内では -app 不要。

CLEARDB_DATABASE_URLを調べる
$ heroku config -app AppName | grep CLEARDB_DATABASE_URL

mysql://~が出てくるのでメモる
下記のような形式になっていて、DB設定時に必要なパラメータが載っている。
mysql://username:password@us-cdbr-east-XX.cleardb.com/heroku_00000000000?reconnect=true

  • ユーザー名:username
  • パスワード:password
  • ホスト:us-cdbr-east-XX.cleardb.com
  • データベース名:heroku_00000000000
CLEARDB_DATABASE_URLをDATABASE_URLに代入

メモったmysql://~を代入する

$ heroku config:add DATABASE_URL='mysql://~' -a AppName

PHPを使えるようにするための準備

コンポーザーを作っていればPHPと認識してくれる。
$ echo '{}' > composer.json
アプリ作成時にビルドパックを入れてもよい。
$ heroku create AppName -s cedar -b  git://github.com/iphoting/heroku-buildpack-php-tyler.git
ビルドパック一覧
$ heroku help buildpacks
ビルドパック削除
$ heroku buildpacks:remove git://github.com/iphoting/heroku-buildpack-php-tyler.git

git設定

初期コミット・プッシュ
$ git init
$ git add .
$ git commit -m 'initial commit'
$ git push heroku master
Heroku上のGitリポジトリ
$ heroku git:remote -a AppName
登録されたリポジトリ確認
$ git remote -v
master以外のブランチから強制デプロイ

stgというブランチをHerokuのmasterにデプロイする場合

$ git push heroku stg:master --force

その他

ステータス確認
$ heroku ps --app AppName
ログ確認
$ heroku logs -t --app AppName
MySQLエンコード変更

例えばutf8mb4に変える場合

$ heroku config:set DATABASE_URL="mysql2://<username>:<password>@<host>/<database>?reconnect=true&encoding=utf8mb4"
アプリ名変更

アプリディレクトリ内

$ heroku rename NewAppName

アプリディレクトリ外

$ heroku rename NewAppName -app OldAppName
タイムゾーン・言語設定
$ heroku config:add TZ=Asia/Tokyo
$ heroku config:add LANG=ja_JP.UTF-8
$ heroku restart