DEVGRU

プログラミングと競馬予想について書きます

Binance の手持ちの草コインの価格上昇・下落がぱっと分かるようにした

昨日の続き。

team-6.hatenablog.jp

昨晩は全般的にかなり下落していたようで、反発したコインを売りたくなった。

いちいち購入履歴と付きあわせてどのくらい上がったかを計算するのはアレなので、 昨日のスクリプトを改良して以下のように表示されるようにした。

f:id:katoken-0215:20180512094316p:plain

ソースコードはこんな感じ(Python3)。

$ pip install python-binance
import requests

from binance.client import Client

API_KEY = 'Your API key'
API_SECRET = 'Your API secret'

def get_price(client, coin):
    recent_trade = client.get_recent_trades(symbol=f'{coin}BTC', limit=1)
    return float(recent_trade[0]['price'])

def get_current_position(client, coin):
    orders = client.get_all_orders(symbol=f'{coin}BTC')
    position = 0
    amount = 0
    for order in orders:
        if order['side'] == 'BUY' and float(order['executedQty']) > 0:
            price = float(order['price'])
            executed_qty = float(order['executedQty'])
            position = (amount * position + price * executed_qty) / (amount + executed_qty)
            amount += executed_qty
        elif order['side'] == 'SELL':
            amount -= executed_qty
    return position

if __name__ == '__main__':
    client = Client(API_KEY, API_SECRET)
    account = client.get_account()
    btc_total = 0
    for balance in account['balances']:
        amount = float(balance['free']) + float(balance['locked'])
        coin = balance['asset']
        if amount > 0 and coin != 'BTC':
            price = get_price(client, coin)
            btc_amount = price * amount
            if btc_amount > 0.0001:
                position = get_current_position(client, coin)
                ratio = ((price - position) / position) * 100
            else:
                position = 0
                ratio = 0
            print(f'{coin}:\t{btc_amount:.10f}\t{amount:8.2f}\t{position:.10f}\t({price:.10f} {ratio:5.2f}%)')
            btc_total += btc_amount
        elif coin == 'BTC':
            print(f'{coin}:\t{amount}')
            btc_total += amount
    print('Total:', btc_total)
    response = requests.get('https://api.cryptowat.ch/markets/bitflyer/btcjpy/price')
    btcjpy_price = response.json()['result']['price']
    print('Total(JPY):', btc_total * btcjpy_price)

仮想通貨の総まとめ

仮想通貨の総まとめ

いま仕込んでおくべき10倍通貨教えます!

いま仕込んでおくべき10倍通貨教えます!

アルトコイン投資術: 仮想通貨で億り人になる

アルトコイン投資術: 仮想通貨で億り人になる

BTCから草コインへ

先日、この記事を書いた。

team-6.hatenablog.jp

しかしながら、上昇の見込めない相場での現物取引は儲けが少なく損ばかり、ということで草コインに投資することにした。

Binance のアカウントを作って0.5BTCを投入、AdaやらVergeやらを買って、Binace APIから価格取得をして...とするとこんな感じに。

f:id:katoken-0215:20180511233344p:plain

ソースコードはこんな感じ。

$ pip install python-binance
import requests

from binance.client import Client

API_KEY = 'Your API key'
API_SECRET = 'Your API secret'

if __name__ == '__main__':
    client = Client(API_KEY, API_SECRET)
    account = client.get_account()
    btc_total = 0
    for balance in account['balances']:
        amount = float(balance['free']) + float(balance['locked'])
        coin = balance['asset']
        if amount > 0 and coin != 'BTC':
            recent_trade = client.get_recent_trades(symbol=f'{coin}BTC', limit=1)
            btc_amount = float(recent_trade[0]['price']) * amount
            print(f'{coin}:', btc_amount)
            btc_total += btc_amount
        elif coin == 'BTC':
            print(f'{coin}:', amount)
            btc_total += amount
    print('Total:', btc_total)
    response = requests.get('https://api.cryptowat.ch/markets/bitflyer/btcjpy/price')
    btcjpy_price = response.json()['result']['price']
    print('Total(JPY):', btc_total * btcjpy_price)

次は過去のトレードからポジションを計算して、一定割合上昇・下降したときに通知するように拡張する。

仮想通貨の総まとめ

仮想通貨の総まとめ

いま仕込んでおくべき10倍通貨教えます!

いま仕込んでおくべき10倍通貨教えます!

アルトコイン投資術: 仮想通貨で億り人になる

アルトコイン投資術: 仮想通貨で億り人になる

bitcoin のシステムトレードをしている 〜2017/05/01の時点の話〜

以前、こんな記事を書いた。

team-6.hatenablog.jp

この記事で書いたVer.8は結局お蔵入りになり、 約定履歴とOHLCを記録するモジュールtrade-histroyが外部化され、 そこに毎分問い合わせて売り買いのシグナルが立っているかを判断と実際に売買を行う部分がVer.9となり、現在稼働中だ。

また、Ver.9までの間に裁定取引のボットを3ヶ月回していたが、Ver.9の稼働に伴い修了した。

ZaifのAPIが重すぎたのが原因で、これを気にBitbank一本に絞っている。

Ver.9では、これまできちんとバックテストできていなかったアルゴリズムを、きちんとできるようにしたのが大きい。

バックテストは普通に時系列にデータ流し込んでループ回すととても遅い

早くするには、OHLCをガバッとPandasに読み込んで行列演算でどかっといっぺんに売り買いシグナルまで計算してから、 ループで売買をシミュレーションする必要がある。

OHLCガバッと読み込むのは、この辺で書いているのでご参考に。

team-6.hatenablog.jp

team-6.hatenablog.jp

これを用いて100回200回とテクニカル指標を組み合わせを試して、いまやっと収益の上がるものができて動いている。

本当は機械学習をガッツリ使ったものを作りたいが、これのバックテストは行列演算でいっぺんに、というわけには行かず 極めて時間がかかるので、収益が上がってCPUのアップグレードができたら、ぐらいで考えている。

また売買記録も少し工夫をした。

約定時にZapierのWebhookからGoogle spreadsheetに 売買のどちらか、日時、マーケット、約定価格、量を記録している。

(さらにPushoverで通知が来るようになっているはずだが、こちらはなぜか止まっている。なぜだ?)

Google Apps Script でSpreadsheetの集計とWeb API実装を行っていて、 グラフも見られるし、コマンドから収益とポジションを取得できるようになっていて、トレーディングプログラム(Bot)が調子悪いのがすぐ分かるようになっている。

あとは普通に生活しながらたまに様子を見るだけで、何もすることがなくなったので、 最近は家の大掃除をしてゴミ屋敷をまっとうにする活動を行っている。

裁量トレードと違って自分の時間が確保できるのがシステムトレードの良い所だ。

新・片づけ術「断捨離」

新・片づけ術「断捨離」

人生がときめく片づけの魔法

人生がときめく片づけの魔法

システムトレード 基本と原則 (ウィザードブックシリーズ)

システムトレード 基本と原則 (ウィザードブックシリーズ)

  • 作者: ブレント・ペンフォールド,長尾慎太郎,山口雅裕
  • 出版社/メーカー: パンローリング
  • 発売日: 2011/07/15
  • メディア: 単行本
  • 購入: 3人 クリック: 14回
  • この商品を含むブログ (2件) を見る

システムトレード 検証と実践 ──自動売買の再現性と許容リスク (ウィザードブックシリーズ)

システムトレード 検証と実践 ──自動売買の再現性と許容リスク (ウィザードブックシリーズ)