Skip to main content
search
0
codingcryptocurrencyTrading

初めてRuby On Rialsで小さいWEBアプリを作ってみた記録「Bitflyerトレード裁量補助ツール」

By 2021年6月18日No Comments

初めてカラウリなるものをやったのがBitflyer。

Bitflyerは日本の仮想通過取引所。現物の売買だけではなくて現物を持っていなくとも先に売りからポジションが持てる空売りができる相場がある。

以前から金融市場への興味はあった(あまり良い印象ではない)のでせっかく興味を持つ至ったその相場で触って学ぶことにした。

デモサイト:https://lightning.bitflyer.com/trade/fxbtcjpy

そこからトレードで勉強代のみを拠出し続けて学んだのがスキャルピングという手法。

時間軸はいろいろあれど秒スキャの名の通り買い注文が約定(売買成立)したり売り注文が約定した数秒後には買ったものを売り。売ったものを買い戻す。

1分足から一切の情報が汲み取れなかったが、トレードを教われるきっかげあったのでその仕組みや練習をした時期がある。

結局最後の方自分のよくやった手法は秒もポジションを持たないことが多かった。

自分のやり方だと待つ時間などの拘束力も大きくリソースが割かれてしまうので今やってない。

当時は有料のトレード(裁量)補助ツールがある。かなり多機能でかつスキャルピングに長けたツールは実際の取引所よりもかなり使い勝手がよかった。ゼロサムの相場ではそういった少しの優位性に大きな差が出ることがある。

もともとビットコインまわりは多くのオープンソースネタや公開情報それらを駆使したツールがいろいろあったりプログラミングの世界がもつ自由な風土やサイバーパンク的要素などの未楽観が面白かった。

有料ツールは期間限定で相場や自分の状況から使いこなせるほどではなくなってしまったのでもう契約は終了している。その時に一番使ったのが「現在価格指値」。これを自分のプログラミングの趣味と兼ねて自作できないかを考えた。

Html程度しか知らないので触っては妥協しを繰り返してるうちにRubyとRuby On Railsを学ぶ機会があったので試しに作ってみることにした。

惹かれた要素は「APIを利用すること」「サーバーサイドの言語を利用してアプリを作成すること」「金融市場での優位性を自作できること」。

API

なぜ取引所への発注がその第三者が作った有料ツールを通じでできてしまうのかというとそのような機能を取引所がもともとAPIを提供しているから。

アプリケーションプログラミングインタフェース(API、英: Application Programming Interface)とは、ソフトウェアコンポーネントが互いにやりとりするのに使用するインタフェースの仕様である。
引用元:Wkipedia

普段使っているサイトやツールにもこのような機能が備わっていることがある。今までの自分は普通使いたいサイトに移動してそのサイトが指し示すデザインに沿って使う、そしてそこから離れる。という一般的な使い方だったけれど、探してみると意外とAPIをbitflyerのように提供しているサービスは多い。

これができるとそのサイトに行かなくとも、例えば自分で作ったサービス上で他社のサービスにあるデータを引っ張ってきたり動かすことができるようになる。

自分の夢はこう膨らむ。

APIが利用できたら世界中のマシーンと連携し動せるやん。と。

アプリを自作で完結できるような能力も魅力的だけれど、既にあるサービス(とてつもない労力と時間とお金をかけてつくられ、運営されている)をうまく利用でき拡張性をもたらせたり一部高機能なものを利用できるのであればようわからんけど一度型にしてみたいとおもった。

行政でも一部APIに積極的な分野があり、国費でつくった重要なデータを活用できるという点では素晴らしいと思う一方でそういったデータをいまだにレポートとしてpdfファイルをアップロードしているだけだったりするが多いのは本当にげんなりする。

API Management Market

マーケッツアンドマーケッツ社のレポートでは2023年にAPI管理の士業規模は約5100億円

日本能率協会総合研究所の算出によれAPIマーケットプレイス市場2024年に880億円規模と予測

いずれのグラフも右肩上がり。

Bitflyerではトレードの設定画面にメニューとして存在し、ドキュメントにすぐアクセスできる。

https://lightning.bitflyer.com/docs

bitFlyer Lightning API PlaygroundではAPIの呼び出しを実際に行うことができる場所になっている。

https://lightning.bitflyer.com/docs/playground#GETv1%2Fgetmarkets/javascript

 

 

自分のAPIキーを入力しつつ勘でさわってみると。おいうごくやんけ。

しかもコードがいくるか種類を持たせて用意してある。コピペでいけそうやん!

この俺でもできそうやん感を大事にする自分にとってはかなり楽しかった。

パソコンに眠ったままのRubyを学ぶ機会にも良いとRubyでファイルを用意し実行。

実行し動かすだけでもかなり時間がかかった記憶だが、何か値が返ってきた!!!

がダメだった。自分にとっては大きな一歩だったが、価格を取得しているらしいことができているものの、それしかできない。

そこから何がたりないのかネットで近しい情報を見つけたとしても内容が全然わからない。

構造を調べようとしてもまったく頭に入ってこなかった。挫折。

サーバーサイドの言語を利用してアプリを作成すること

そもそものインターネットやWEBアプリケーションの仕組み

ここがよくわかっていなかった。

それまでテキストを表示するだけではなく自由に出し入れしたり自動化させるためにサーバーサイドの言語が必要なことくらいは知っていたが、知ろうとしても頭がこんがらがるだけ。こうかなと思いながら試行錯誤しても基礎から違う。地元のkobe.rbのみなさんに聞いてみたら少し間があいた。あまりにこちらの前提知識が欠けているので何から話すべきかを考えてくださっていたはず。壁は高そうだと再度挫折したものの、しばらくしてその時のアドバイスが欠かせない貴重なアドバイスやヒントが多くそれだけでアプリを作ったといっても過言ではない。

Htmlだとかのサイトのデザイン系から雰囲気で入った人間からするとユーザーが触れるフロントサイド側の設計しかほとんどやらないので、ブラウザから見える画像を中心としたものの考えをしてしまうのだが、サーバーサイド言語になると、どうデータと保存し、動かすのか、表示するのかを指示するためブラウザではなくて動かす対象であるマシーン(サーバー)やデーターベース中心の考えか方に切り替える必要があり、ここがどうも自分にとっては苦労した。

そのためには雰囲気では乗り越えづらい、そもそも普段この何気なく使ってるインターネットの仕組みや見てる側とデータを送る側との関係性などをある程度理解しておく必要がある。

その時のアドバイスのうち大変に助けられた本がこちら

「「プロになるためのWeb技術入門」 ――なぜ、あなたはWebシステムを開発できないのか」


サブタイトルが素晴らしい、2010年に発行されたものを今もおすすめできると教えてくださった。

まさに私のような動かし方がわからない、そしてその理由はwebアプリケーションにおけるより広範囲な知識の習得が必要という点をカバーしたもので、「最新の技術ではなく、何年経っても役に立つ基本的な考え方を伝えることを主眼に置いています。」とあるように自分の知る現役のプログラマの方が今も重要な要素があると紹介してくれたのが大きい。

少しだけ理解が以前よりできる様になってくると何が必要かがわかってくる。避けてたものもやる気が湧いてくる。

完全に理解できなくとも今まで知らなかった仕組みをざっくりと全体像を描ける様になってくることと、CRUDシステムの仕組みなどをしれば意外と基礎的なものが土台になるのがわかってくると「もしかしたらやっぱ俺にもできんちゃうん」とまた試したくなった。

本はどのみちその当時のプロジェクトでも必要な前提知識だったので一石二鳥。

上でつまづいたのは通常サイトを表示するために必要なGETメソッドではなく、自分が好きな価格で好きな数量を設定したものを取引所伝えるPOSTメソッドを利用する必要があったということまでわかってきた。

上記のように実際の細かいコードはあるわけやし、仕組みがわかってればなーと思っていたら当時別の理由でRubyOnRailsでアプリを作りはじめていたのですぐに完成できるアプリとしてまたこのアプリを作るのを再開。

極小アプリ

自分が一般ユーザーとしてWEBアプリケーションという言葉を聞いて想起するのは大きな完成度の高いものをイメージするけれど、マイクロサービスとかSPAのような小さい単位のアプリもあり、まずは一番欲しくて低いハードルである現在価格を自分で入力せずにボタンひとつで発注ができるものを作りそれを完成とする。

Railsでフォームを作りPOSTメソッドで発注ができるのを確認しレスポンスが得られるようになった。この頃になるとより具体的な質問をし相談に乗ってもらうことができるように。

プログラミング入門学習サービス

その過程で学習用に使っていたのがアドバイスの中で紹介されていたprogate。

https://prog-8.com/

入門にはめちゃめちゃおすすめ。数年前に動画で学ぼうとした時期があったけど別に仕事で使うでもなくよくわからないのでやめてしまったけれど。このサイトなら直接コードを自分で書いて学習できる。教材を見ながらコードが書けて、実際に動かせるか試せる環境が実はめちゃめちゃ恵まれている。

サービスも献身的にデザインされ運営されているのが伝わるし、高額だったり玉石混合のスクールにすぐ飛び込む前に友人で興味を持つ人にはよくこのサイトを紹介している。無料でも使えるし、有料でも月1000円ちょい。

いくつか言語の種類もある。初学者や新しい言語学ぶのにも役立。

 

地元の勉強会

これは言わずものがな鉄板なのが、プログラミングの勉強会やユーザーグループなるものがありそこに参加して質問するとあくまで有志なので必ず回答が得られるというわけではないが教えてくれる方がいる。(さらに運営もされている)ある程度触ったことのある人なら知っていることでも自分が驚いたことの一つにこういったプログラミング関連の世界ではオープンソースプロジェクトやボランティア活動などが「ごく当たり前にある」世界で一般のビジネスの世界とは違った自由を重んじる様な文化がある。そういった方が相談に乗ってくれる場合があるので地元かもしくは今はオンライン開催が多いのでいろんなところに顔を出せるチャンスがある。これからの方や初学者の方にはあまり知られてない世界かと。

完成品:Bitflyer裁量補助ツール

そもそもこのアプリで解決したかったこと。

課題:入力に時間がかかる

ボラティリティが高く且つ現在では7桁円のビットコインの現在価格に合わせた発注をしようとすると「価格を見て」→「数字を入力」→「発注」→「反映」までに時間がかかってしまう。まして入力中に1円単位で価格が動き続けているわけなので入力開始する前に価格は変わっているので現在価格で発注するのは難易度が非常に高い。自分の場合は無理。これをいかにはやくできるかをテンキーを利用している人もいるけれどそれでもむずかしい、打ち終わって価格がずれていまた消して、入力しなおす。食い込み気味にいれようともボラがあるとそれすら難しい。

長期での売買ならある程度は誤差の範囲だろうし、決めた価格に指値してそれが約定しないなら良いということなら課題ではないけれど、スキャルピングの場合は短期でより優位な売買をする必要があるので死活問題。希望する数量を全て約定させるためにあえて指値を入れない成行注文があるけれど自分で価格指定していない分驚くような不利な場所に入ってしまうことも多く(というか基本)金融市場から同じ会社でありながら取引所と販売所の価格の違いやスプレッドの大きさ、システムなど大人の世界を学ぶことができた。

解決策:ボタンひとつで現在の価格に注文をだせる機能を作る。

数量と補正価格は価格ほどいじる必要がないので事前に入力しておくことで、ボタンをクリックすれば作業のうち圧倒的な割合を占める価格入力の手間が省きつつ注文できる。それだけの機能。

それしかできないのでもう少し複雑なことがしたかったり、指標などを見たい時にはそちらを使う必要がある。そのため平行して使える様にwindowサイズは小さくして他のツールと平行して使いやすい様にし、かといってあまりに小さいと誤ってボタンを押しかねないので適度な大きさと実際にトレード画面に似たボタン配置にした。※windowを小さくする限界はある。

 

APIKeyのボタンはもともと自分だけが使うアプリなのでキーを直接コードの中に組み込んでいたけれど誰かに相談する時にはその部分が見えない様に注意を払う必要があったので入力フォームを用意し、コード上では直接記述しないようにデータベースに保存するようにした。

注意点

このツールを使えるから勝てるわけではない。それに環境の劇的変化もある最近であれば以下の日程で予告なく緊急メンテナンスがはいった。

当日のチャートを見てもらうとわかるのだけれどえげつない時にえげつないことになっている。

もしこの相場に出くわしていたとして下落相場の売りから追従できたと万一しても「買い戻せない」メンテナンスの蓋を開けた時にはものすごい損をしてる場合もある。それだけではなく、前後で正常な動作ができなくなっているので注文が通ったのかどうか、自分はポジションをもっているのかどうか、いくつ注文が保留されているのか、キャンセルできているのかどうか、トレードに一番必要な基礎的な情報が全くわからなくなることが「とてもよくある」。(本当に上手い人は危機察知に重点を置きつつ攻めのバランスが絶妙でそれに近い前後の相場で稼ぐ。)

しかもこの後の正常に稼働していますのアナウンスのあとも明らかな正常な動作ではなかった。

その日は500万円から価格が下がり続けて、一気に300万円まで途中100万円以上の幅で上下しているところや線が途切れているところがあり、その前後でまともに動かなかったとおもうだけでぞっとする。

今後の展望

今は他のことに興味が移ってるので優先順位がさがっているけど今回の経験から挑戦したいなーと思っていること。

・他の取引所でもAPIを用いた発注ができるか、そしてまた上記のような優位性を自作してきるか。

単純に事例を増やしてAPIの経験の汎用性を高めたいということと自作した優位性を別の場所を持ち込めるということを試したい。それに他の「取引所を選べる」こと自体が流動性の増加や自分に有利なルールの取引所を選べるなど期待値を高めることができる。

・機能増加

取引所のツールを使うと時間のかかる特殊注文など上記のようにボタンひとつで複雑もしくは複数の注文をだせるようにしてみたい。

・自動取引bot作成

スキャルピングは時間と体力勝負的なところがある。自分が想像する相場と時期に合わせて張り付いて参加。するとなかなか他の作業ができない。それにスキャルピングというよりもトレードそのものが人間がやるデメリットがあるのはメンタル面に左右される点がある。それらの時間と労力とメンタル面を使わずに自分の代わりに自動取引をしてくれるbotを作るのだ。もちろんbotも同じく相場のシステムやらbotそのものの運営におけるデメリットはあるしお金が減る可能性も高いけれど、一般人が生きる通常の労働市場とは全く別の次元の金融市場という場所でbotを動かせる意味合いは大きいと思う。単純にこういう条件だったら入ってみたいなーというのを試してみたい。人と雇うこととはちがうまでも自作botで自分やチームの生産性を高める様な仕組みが作れるのはおもしろい。

 

まとめ

今回は以前から作ってみたいな〜と思っていたアプリとトレードや簡単さといった興味が惹かれる内容ではじめてRailsでアプリを作った時の記録を書いた。

途中何度も挫折をしたのは、前提知識が欠けていたこととそれに必要んだった必要な視点の転換、習得すべき知識がわかったこと、後から学んだこととの一致などタイミングが重なり小さいまでも形にまでした記録を残した。

自分にとって大きな学びがありひとつひとつのテーマではここでは書き足りないものもあるのでまた別の機会にそれぞれ触れてみたい。

具体的な方法を探してみてもプログラマーの方達は知ってて当たり前の世界なのでわざわざ触れない別れた世界を感じた、もし自分のような興味はあるけどとっつきにくさがあったり理解が進まない様な方にも自分が得た上記の様な手がかりを共有できていると嬉しい。

ああこれは難しいなあと挫折したつもりでもひょんなきっかで繋がったりできたりもするので何か作ってみたいものがあれば簡単なものでも具体的にイメージにしてからとりかかって巷の短期集中型だけではなく気長に緩く続けてみる方法もありかもしれない。