LINE × AWS でFTXトラリピボットのLINEアプリを構築する方法
個人開発としてFTXのトラリピボット(売り買いの板を自動でたくさん並べて細かな利益を積み上げるやつ)を作って運用していたのですが、AWSなどのクラウド上でボットを動かしていると、相場状況が急変してボットを起動・停止・パラメータ変更したいとき、パソコンの前でAWSにログインできない外出中、仕事中などに、すぐに対応できなかったりして困ってしまう場面があります。
その解決策として、LINEで即座に起動・停止・パラメータ変更できたら便利かも?と思い、仮想通貨ボットをLINEアプリ化してみました。
■変更履歴
2021/07/29 ボットの稼働が安定しなかったため、⑥で設定するftxbot.pyの内容と⑦で設定するAMIのボリュームサイズを20→30に変更
2021/08/02 一部処理でエラーハンドリングが間違っていたため⑥で設定するftxbot.pyの内容を修正
BOT参考画像(PC版LINEアプリ)
FTXのボット実行中の取引ペア画面
実際に使ってみて使い勝手がよかったので、当noteでは、私の自作したFTXトラリピボットについて、LINE Messaging API × AWS (API Gateway/DynamoDB/lambda/EC2等) でシステムを構築し、LINEの友達登録からLINE上の操作のみでボットのパラメータ調整、起動・停止を行えるLINEアプリの作成ノウハウを解説したいと思います。
また、今回のLINEアプリ用に提供するFTXトラリピボットは、FTXの「FUTURES」にある100以上の通貨ペアで動作することを確認済です。
▼FTXのアカウント登録はこちら
※上記リンクからアカウント登録して頂いた方には、当note下部にあるDISCORD内で追加コンテンツと、次の開発ボットを無料プレゼントする予定です!DISCORD内で @menmen までDMください!
トラリピボットでは、指定の価格帯で繰り返し指値注文で自動売買を行い、利益を積み上げることができます。ボットの特性的にレンジ相場にものすごく強いです。ボットのパラメータについては当noteの最後で詳しく説明します。また、当noteの通りにシステムを構築し運用した場合、月額およそ8~10ドルの運用コストがAWSでかかります。(※ただし、AWSアカウント作成後12か月は無料利用枠があり、運用コストは無料もしくは減額されると思います)
■概要
・システム構築のガイドは最初から最後まで詳しく図や解説付きで省略せずシステム構築などしたことがない全くの初心者でもシステム構築が可能なレベルで解説しています。また、noteの内容に関することに限りますが、質問やエラーの問い合わせについては、専用のDISCORDサーバでサポートしますので、結局動かなかった、ということはないようにしたいと思います。
・仮想通貨ボットをLINEアプリ化するノウハウが得られます。ただし一つ注意ですが、仮想通貨の取引を行うサービスを個人で誰かに提供することは法律上できません(投資運用業の登録が必要)。当noteの内容を理解し流用すれば、仮想通貨ボットではなく、AIボットや自動返信ボットのようなLINEアプリ・サービスも開発して作れるようになると思います。
・LINE Messaging APIとAWSの各サービス(API Gateway/DynamoDB/lambda/IAM/EC2)を使用するため、これらのシステム構築経験が得られます。
・筆者の作成したFTXで実際に取引できるトラリピボットを手に入れることができます。
■注意事項
・FTXトラリピボットは裁量補助ボットです。動かしっぱなしで利益が出るようなものではなく、また利益の保証は一切できませんので、自己責任の元運用してもらうことになります。
・当noteは個人で利用するための仮想通貨ボットをサンプルにした応答型のLINEアプリ作成ノウハウにもっとも価値があると思います。
・当noteの内容をもとに読者が作成したシステムやサービス、損益その他すべてのものについて、筆者は一切責任を負いません。
・当noteの中で説明しているFTXのAPI、SECRETおよびLINEアプリのQRコードは、絶対に外部に漏れないよう注意してください。AWSで高額請求が来たり、FTXのアカウント操作をされたりする危険性があります。
・当noteの内容について、無断で転載・販売・公開は禁止します。
それではFTX仮想通貨ボットのLINEアプリの作成方法を説明していきます。
アジェンダは以下の通りです。
①LINE Messaging API 設定
②AWSアカウント作成
③ AWS (IAM) 登録
④ AWS (lambda/API Gateway) 設定
⑤ AWS (DynamoDB) 設定
⑥ AWS (Cloud9) 設定
⑦ AWS (EC2) 設定
⑧ FTXトラリピLINEボット解説
①~⑦で設定方法、⑧で実際のボットの使い方について説明します。
①LINE Messaging API 設定
まずはLINE側の設定を行っていきます。なお、後続の作業でAWSとLINEの画面を行ったり来たりしますので、LINEおよびAWSの設定画面は開きっぱなしにしておいた方がスムーズに作業が進みます。
LINE Business のサイトへ移動し、「Log in with LINE account」をクリック
普段使用しているLINEアカウントを入力しログイン
スマホなどのLINEアプリで画面の認証コードを入力しログイン
プロバイダー作成
Messaging APIを選択
チャネル設定の入力
同意にチェックして作成をクリック
これでLINE側のプロバイダー、チャネル設定が完了しました。画面はそのままにしておき、次はAWS(Amazon Web Service)の設定を行っていきます。
②AWSアカウント作成
以下のnoteで解説してますので、参考にAWSアカウントを作成してください。
アカウント登録しrootユーザでログインした後、画面左下の部分で言語を「日本語」に設定します。
また、画面右上の部分でリージョンを「アジアパシフィック(東京)」に変更してから作業を開始してください。(ボットのロジックが東京リージョン前提になってます)
また、AWSの操作については、AWSアカウントにログイン後、画面真ん中上の検索欄で「サービス」を検索して設定を行ってください。また、AWSの各サービスごとに複数画面を開きっぱなしの方が作業がスムーズです。
③ AWS (IAM) 登録
検索欄で「IAM」のサービスを検索しクリック
ロールをクリック
ロールを作成
Lambdaをクリックし、次のステップ
ポリシーのフィルタに以下のポリシー名を入力して、出てきたポリシーにチェックをつけて次のステップへ
・AmazonEC2FullAccess
・AmazonDynamoDBFullAccess
・CloudWatchLogsFullAccess
・AmazonSSMFullAccess
4つのポリシーにチェックしたら次のステップへ
タグの追加画面はそのままで次のステップ
最後にロール名に「AWSforBotLambdaRole」を入力した後、ロールの作成をクリック
これでlambda用のIAMロールの作成が完了しました。
続けて、EC2用のIAMロールも作成しておきます。
今度はEC2を選択し次のステップへ
以下のポリシーを検索、チェックし、次のステップ
・AmazonEC2FullAccess
・AmazonEC2RoleforSSM
・AmazonDynamoDBFullAccess
・AmazonSSMManagedInstanceCore
・CloudWatchLogsFullAccess
・AmazonSSMFullAccess
最後にロール名に「AWSforBotEC2Role」を入力した後、ロールの作成をクリック
④ AWS (lambda/API Gateway) 設定
関連があるため、AWS lambda関数とAPI Gateway 設定を同時に行います。検索欄で「lambda」のサービスを検索しクリック
関数の作成
以下の通り選択、項目に値を入力
「デフォルトの実行ロールの変更」では先ほど作成したIAMロール「AWSforBotLambdaRole」を選択して関数の作成をクリック
Lambda関数が作成されます。
次に、API Gatewayの設定をします。「トリガーを追加」をクリック
トリガーの設定で「API Gateway」を選択
APIで「APIを作成する」を選択
APIタイプ、セキュリティは以下の通り設定し、「追加」をクリック
トリガーの追加が成功するとこのようになります。
作成したAPI Gatewayの「詳細」をクリックすると、APIエンドポイントがあるのでコピーします
ここでLINE側の設定画面に戻り、「Messaging API設定」をクリック
Webhool設定の編集をクリック
先ほどコピーしたAPIエンドポイントを設定し更新
「Webhookの利用」をONに設定し、応答メッセージの編集をクリック
以下の通りに設定し、この画面を閉じる
最後にチャネルアクセストークンを発行しコピー
これでLINE側の設定は終わりです。
次に、AWS lambda関数の画面に戻り、環境変数を設定します。
設定 > 環境変数 をクリック
編集をクリック
環境変数の追加
以下の画像のように、キー、値の組み合わせを2つ設定し、保存
①キー:CHANNEL_ACCESS_TOKEN 値:LINEで発行したチャネルアクセストークン
②キー:LINE_REPLY_URL 値:https://api.line.me/v2/bot/message/reply
⑤ AWS (DynamoDB) 設定
検索欄で「DynamoDB」のサービスを検索しクリック
画面左のダッシュボードをクリックし、「テーブルの作成」をクリック
テーブル名に「ftxbot_info」、プライマリキーに「userid」を設定し作成
テーブルが作成されました。テーブル名をクリック
・項目タブの「項目の作成」をクリック
「userid」の左側の+をクリックすると以下のプルダウンが表示されますので、Append > String をクリック
すると、このように新たに入力できる行が追加されます
追加された行に、以下の項目をFIELDおよびVALUEに同じ値で設定していきます。入力ミスを防ぐため、コピー&ペーストをお勧めします。最後に保存をクリック
追加する項目:
apikey
apisecret
instance
interval
mail
market
maxlimit
minlimit
process
reply
running
size
sizeofaddbuy
sizeofaddsell
trademode
※画像では「userid」が一番下ですが、順番は気にしなくてOKです
これでDynamoDBの設定は完了です。
⑥ AWS (Cloud9) 設定
検索欄で「Cloud9」のサービスを検索しクリック
「Create environment」をクリック
Nameを入力しNext Stepをクリック
「Cost-Saving setting」をNeverに変更し、あとは以下の通り設定してNext Stepをクリック
Create environmentをクリック
EC2インスタンスが起動し、以下のような画面になる
起動したら、以下のファイルをローカルPCにダウンロードし、解凍して3ファイルをドラッグ&ドロップで以下のようにアップロードします。
※ftx.pyはドースーさんのnoteを参考にさせていただいております。
https://note.com/sdu0217/n/ne94ace5b5a52
「ftxbot」のフォルダの部分にダウンロードした3ファイルをドロップ
アップロードするとこうなる
次に、ターミナルで以下の通りコマンドを実行したり、ファイルの編集を行ったりしていきます。以下の通りに正しく操作してください。
画面下部のこの部分がターミナルになります。赤枠の部分にコマンドをコピー&ペーストして実行してください。なお、複数行のコマンドをコピペすると、最後の行だけ実行されない状態で残ってしまうので、ENTERを押して最後の行を実行してください。(Immediateは×で消してください)
コマンド①
ターミナルにコピペしてENTER押下
sudo pip3 install aiohttp requests boto3
実行後
コマンド②
ターミナルにコピペしてENTER押下
cd /etc/init.d
sudoedit app_start
実行後、このような画面になると思います。「/etc/init.d」というフォルダ
内の「app_start」ファイルの編集画面です。
ここに、以下の内容をコピペしてください。
#!/bin/sh
#
# chkconfig: 2345 99 10
# description: start_app shell
case "$1" in
start)
bash /home/ec2-user/environment/start_app.sh
;;
stop)
/usr/bin/pkill python
echo "stop!"
;;
*) break ;;
esac
このようになります。先頭行から最終行まで正しくコピペできていることを確認してください。
次に、「app_start」ファイルを保存します。
Escキー + :wq の順でキーボード入力してください。
こんな感じだと思います。ENTERを押して保存完了です。ターミナルでコマンドが入力できる状態に戻ります。
あとは、以下のコマンドをコピペして実行しておいてください。
コマンド③
ターミナルにコピペしてENTER押下
sudo su -
cd /etc/init.d
chmod 775 app_start
chkconfig --add app_start
chkconfig app_start on
exit
cd /home/ec2-user/environment/
chmod 775 start_app.sh
次に、ftxbot.pyのファイルをダブルクリックすると、以下のように右側にファイルのエディタが開かれます。この画面をそのまま開いておき、「aws_access」、「aws_secret」に設定する値を別画面で取得していきます。
ログイン後の画面で、東京リージョンの左のアカウント名の部分をクリックし、マイセキュリティ資格情報をクリック
アクセスキーをクリック
新しいアクセスキーの作成をクリック
このような画面になりますので、「アクセスキーを表示」をクリック
以下のように表示されますので、アクセスキーIDをftxbot.pyの「aws_access」、シークレットアクセスキーをftxbot.pyの「aws_secret」にそれぞれコピペします。
設定後
※ '' の間にそれぞれコピーします
Ctrl+Sを押してftxbot.pyのファイルを保存します。
ここまでで、一旦Cloud9で開いたインスタンスを閉じてください。
⑦ AWS (EC2) 設定
検索欄で「EC2」のサービスを検索しクリック
インスタンスをクリック
さきほどCloud9で作成した「ftxbot」の文言があるインスタンスが実行中になっていると思います。
右クリックし、インスタンスを停止をクリック
停止済みになったら、セキュリティ > IAMロールを変更 をクリック
③IAMで作成した「AWSforBotEC2Role」を選択して保存をクリック
次に、再度インスタンスを右クリックしてイメージとテンプレート > イメージを作成 をクリック
イメージ名に「ftxbot」、サイズを30に変更してイメージを作成をクリック
次の画面で、以下のようにami-xxxxxxxxxxxxxx のAMIが作成されますので、これをコピーしてください。
ここで、lambdaの関数:ftx_botの画面に戻ります。
設定 > 環境変数 の画面で編集をクリック
キー:AMI_ID、値:先ほど作成されたAMI で環境変数を追加し保存
次に、コードのタブでlambda_function.pyというファイルが開いているので、ここの中身を以下のZIPファイルを解凍した「lambda_function.py」ファイルの内容に置き換えてください。
中身を置き換えたら、Deployボタンをクリック
これで、長かったFTXトラリピボットの設定が終わりました。では次の説明の通り、実際にLINEからQRコードで友達登録をし、FTXトラリピボットを起動してみます。
⑧ FTXトラリピLINEボット解説
それでは、実際にFTXボットを初期設定、起動していきましょう。
まず、LINEの設定画面で「MessagingAPI設定」のタブにQRコードがありますので、スマホのLINEアプリで読み込んで友達登録をします。
友達追加画面がでますので、トークをクリック
このような画面になります
最初に"0"など適当な文字を入力したらメールアドレスの入力を聞かれるので、適当なメールアドレスを入力してください(@が必須です)
ここからはChrome拡張のLINEアプリの画面で説明していきます。スマホのLINEアプリからでも動作は同じです。
メールアドレス設定後、"0"など適当な入力をすると、以下のように起動メニューが返ってきます。(※はっきり言ってUIのセンスはありません(笑)気になる方はlambdaのlambda_function.pyの中身をいじってみてもいいでしょう)
上記の通り、"a" から "s" の機能コードを入力すると、それぞれの設定ができます。まずは、 "k" で現在の値を確認しましょう。
初期設定ではこのようになっています。まずは "a"、"b"のAPIキーの設定と "d"のINTERVALの設定が必須です。API Key、API SecretはFTXにログイン後、「Settings > Api > CREATE API KEY」の順で作成したものを設定してください。
※API Secretは作成時しか表示されないので、コピーし忘れた場合は再度API作成してください
以下のように設定
設定後、値を確認すると以下のように設定されています
次に、INTERVALを設定しました。
この状態で、 "r"でボットを起動、"s"でボットを停止できます。(※起動、停止はAWSでのEC2インスタンスの起動、停止を伴いますので、実際に起動停止するまで1~2分程度の時間を見ておいてください。停止後にすぐ起動などすると、LINEの起動メニューでは起動してるのにEC2インスタンスは起動してないなど、システム不具合が起こります)
ただし、以下のようなチャートのときに上のような設定でボットを起動した場合、"e"のMAXLIMITから"f"のMINLIMITの価格範囲である1000~20000ドルに現在価格がないので、この場合は注文が出されません。
このチャートに合わせて、設定例としてパラメータを変更して起動してみます。
これでボットを起動します。
初回起動時はEC2インスタンス作成も行っているので、余分に時間がかかります。BTC-PERPの画面で待ちます。1分程度すると、以下の画面のように、トラリピボットによる注文が出されました!
パラメータの値と実際のFTXの注文を見比べてみてください。以下の設定を一言で説明すると、「BTC-PERPのペアで、BTC価格が1000~41000ドルの範囲内にあるとき、最終価格から200ドルの固定幅でLONGおよびSHORTの指値注文を0.001BTC分出す。ただし、売り注文は+0.0002BTCとする」となります。
どちらかの注文が約定した場合は、残った注文をキャンセルし、その価格を中心に200ドルの価格幅で再度LONG、SHORTの注文がだされます。また、"j"のTRADEMODEの設定を変更すると、LONGのみ、SHORTのみの戦略に変えることも可能です。
最後に、"c"のMARKETを変える場合は、一度"s"でボットを停止し、パラメータを再設定して、時間を空けて"r"で再度起動してください。また、ボットを停止してもすでに出ている注文はそのままなので、取引をしたくなければ手動で注文をキャンセルしてください。また、ボットを起動しながら、手動で注文を出しても問題ありません。ただし、TRADEMODEの設定には注意してください。
これで、LINEで動くFTXトラリピボットの解説はすべてとなります。ボットに関する質問や記載内容の不備などがあれば、以下のDISCORDチャンネルで@menmen#5124 までご連絡ください。
▼専用DISCORDチャンネルはこちら
https://discord.gg/RhfKGUMzV2
また、当noteの更新や次の開発ボットのnote投稿などの動きがあった場合にツイートしますので、以下のtwitterアカウントもフォロー頂けると嬉しいです。
https://twitter.com/menmen________
以上となります。長文になりましたが、最後まで読んで頂きありがとうございました!!!有益だと思ったらこのnoteにスキも押してもらえると次のボット開発、note執筆の励みになりますので、よろしくお願い致します!
この記事が気に入ったらサポートをしてみませんか?