ここ最近、BTCFXの自動売買システムを構築していたりするからです。
トレンドフォロー系のbitFlyer用のシステムを相場データを取得し
システムでエントリーをする時の判定基準を計算したりするプログラムを
趣味と実益を兼ねて作成したので、記録しておこうと思います。
CakePHP3という自分が馴染みの深いフレームワークで構築をしていこうと思います。
今回の難易度が高かったプログラムの箇所は、bitFlyerのPrivete APIをプログラム側から叩くことで、秘密鍵などを使い、オーダー用の署名をする箇所がやや難しいプログラミングでした。
PHPでどのように解決したらいいかというのがあまり掲載されていませんでした。
nodejsとか他言語のプログラムでの署名方法は見つけれたのんですがあまりPHPでクエリを署名したりするというのは需要がないのかなぁと思いながら作業をしていました。
今回はCCXTというライブラリ(仮想通貨の自動売買用のライブラリ)は使っておらず、PHPのcURLを主軸にヘッダー情報に必要な情報を記載しサーバとのレスポンスを確認しながらの実装となりました。
作業をしていくなかで、bitFlyerのAPIを叩いていく訳なのですが意外とcURLでのアクセスを行うと通信エラーが多発していました。bitFlyerのAPIサーバはアクセス集中に弱いというのが自分の肌感です。
APIの1分間の利用制限などが遠い原因などかもしれないのですがBinanceのAPIのレスポンスの品質とbitFlyerのレスポンスの品質は差があると言わざるを得ません。けど、bitFlyerは国内の取引所ですので日本円とBTCのトレードには外せない取引所ですから仕方ありません。
取引所の選択がどうであれ、自動売買のプログラムを作る上で忘れてしまいがちな事柄を書いておきます。プログラムを作ることが目的ではなく、、売買をして利益を生むことが本来の目的です。
この目的の部分を絶対的に忘れないようにします。
この目的を忘れてしまっては駄目です。せっかく作ったプログラムが迷走してしまうことになるため常に意識をしておくべきです。
CakePHP3というフレームワークを使って、サイトを構築していくのですが、ユーザーに登録をしてもらおうと思うとユーザー認証の処理が重要です。
現行ではCake側にAuthが入っているためこのライブラリを使用するのですが、セキュリティの観点からMicrosoftのAzure Acrivedirectory B2Cというアプリケーションを活用します。
Azure AD B2C
└CakePHP3へのリダイレクト
└JWTをエンコード
└Azure ADの中のUseridをCakeのDBに格納
└格納したUseridでAuthを実行
処理の階層は深くなるのですが、このような処理で設計してやると認証画面を作成せずにユーザー認証が2~3クリックで作れてしまいます。
B2C側のユーザーフローという機能にはメールでのサインアップとパスワードリセットの機能が実装されているため、ユーザーのメールアドレスが取得できます。
B2Cを使うことの副産物の1つにメール認証をMS側が担ってくれるというメリットがあります。メールが確実に届くことが結構有用だと自分は考えているのでB2Cを活用して会員制サイトがすぐに構築できます。
B2C初見の方は少し敷居が高いかもしれませんが、なれたらかなり楽にユーザー認証を完成させることができます。
ユーザー認証をMSに任せることでサイトではB2Cで発行されるUseridが正しいかどうかという判定だけでAuth認証ができるので、これはかなりセキュアになります。
私はここからユーザーのUseridをもとにbitFlyerのWindowsのソフトウェアの認証機能を作成することに成功しました。Useridがユニークな文字列になるため、ソフトウェア側でもAzure ADのライブラリを用いることで認証が完了してしまうのはとても楽でした。
ユーザー認証が同じメールアドレスとパスワードでできることで、会員制サイトに登録したユーザーはbitFlyerのソフトウェアを利用できるようになるという状況が実現できたわけです。
続く
