見出し画像

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アプリ)

画像108


FTXのボット実行中の取引ペア画面

画像109


実際に使ってみて使い勝手がよかったので、当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」をクリック

画像46

普段使用しているLINEアカウントを入力しログイン

画像46

スマホなどのLINEアプリで画面の認証コードを入力しログイン

画像47

プロバイダー作成

画像47

画像48

Messaging APIを選択

画像20

チャネル設定の入力

画像21

画像47

同意にチェックして作成をクリック

画像48

画像49

これでLINE側のプロバイダー、チャネル設定が完了しました。画面はそのままにしておき、次はAWS(Amazon Web Service)の設定を行っていきます。


②AWSアカウント作成

以下のnoteで解説してますので、参考にAWSアカウントを作成してください。


アカウント登録しrootユーザでログインした後、画面左下の部分で言語を「日本語」に設定します。

画像89

また、画面右上の部分でリージョンを「アジアパシフィック(東京)」に変更してから作業を開始してください。(ボットのロジックが東京リージョン前提になってます)

画像90


また、AWSの操作については、AWSアカウントにログイン後、画面真ん中上の検索欄で「サービス」を検索して設定を行ってください。また、AWSの各サービスごとに複数画面を開きっぱなしの方が作業がスムーズです。

画像91




③ AWS (IAM) 登録

検索欄で「IAM」のサービスを検索しクリック

画像50

ロールをクリック

画像50

ロールを作成

画像51

Lambdaをクリックし、次のステップ

画像58

画像53

ポリシーのフィルタに以下のポリシー名を入力して、出てきたポリシーにチェックをつけて次のステップへ

・AmazonEC2FullAccess
・AmazonDynamoDBFullAccess
・CloudWatchLogsFullAccess
・AmazonSSMFullAccess

画像54

4つのポリシーにチェックしたら次のステップへ

画像55

タグの追加画面はそのままで次のステップ

画像56

最後にロール名に「AWSforBotLambdaRole」を入力した後、ロールの作成をクリック

画像57

これでlambda用のIAMロールの作成が完了しました。


続けて、EC2用のIAMロールも作成しておきます。

画像104

今度はEC2を選択し次のステップへ

画像105


以下のポリシーを検索、チェックし、次のステップ

・AmazonEC2FullAccess
・AmazonEC2RoleforSSM
・AmazonDynamoDBFullAccess
・AmazonSSMManagedInstanceCore
・CloudWatchLogsFullAccess
・AmazonSSMFullAccess


最後にロール名に「AWSforBotEC2Role」を入力した後、ロールの作成をクリック

画像105



④ AWS (lambda/API Gateway) 設定

関連があるため、AWS lambda関数とAPI Gateway 設定を同時に行います。検索欄で「lambda」のサービスを検索しクリック

画像58

関数の作成

画像58

以下の通り選択、項目に値を入力

画像58

「デフォルトの実行ロールの変更」では先ほど作成したIAMロール「AWSforBotLambdaRole」を選択して関数の作成をクリック

画像59

Lambda関数が作成されます。

画像59




次に、API Gatewayの設定をします。「トリガーを追加」をクリック

画像59

トリガーの設定で「API Gateway」を選択

画像60

APIで「APIを作成する」を選択

画像61

APIタイプ、セキュリティは以下の通り設定し、「追加」をクリック

画像62

トリガーの追加が成功するとこのようになります。

画像63




作成したAPI Gatewayの「詳細」をクリックすると、APIエンドポイントがあるのでコピーします

画像63


ここでLINE側の設定画面に戻り、「Messaging API設定」をクリック

画像63

Webhool設定の編集をクリック

画像64

先ほどコピーしたAPIエンドポイントを設定し更新

画像65


「Webhookの利用」をONに設定し、応答メッセージの編集をクリック

画像65


以下の通りに設定し、この画面を閉じる

画像66


最後にチャネルアクセストークンを発行しコピー

画像66

画像66

これでLINE側の設定は終わりです。




次に、AWS lambda関数の画面に戻り、環境変数を設定します。

設定 > 環境変数 をクリック

画像67

編集をクリック

画像68

環境変数の追加

画像68

以下の画像のように、キー、値の組み合わせを2つ設定し、保存

①キー:CHANNEL_ACCESS_TOKEN  値:LINEで発行したチャネルアクセストークン

②キー:LINE_REPLY_URL 値:https://api.line.me/v2/bot/message/reply

画像69




⑤ AWS (DynamoDB) 設定

検索欄で「DynamoDB」のサービスを検索しクリック

画像69

画面左のダッシュボードをクリックし、「テーブルの作成」をクリック

画像69

テーブル名に「ftxbot_info」、プライマリキーに「userid」を設定し作成

画像69

テーブルが作成されました。テーブル名をクリック

画像70



・項目タブの「項目の作成」をクリック

画像38

「userid」の左側の+をクリックすると以下のプルダウンが表示されますので、Append > String をクリック

画像70

すると、このように新たに入力できる行が追加されます

画像70

追加された行に、以下の項目をFIELDおよびVALUEに同じ値で設定していきます。入力ミスを防ぐため、コピー&ペーストをお勧めします。最後に保存をクリック


追加する項目:
apikey
apisecret
instance
interval
mail
market
maxlimit
minlimit
process
reply
running
size
sizeofaddbuy
sizeofaddsell
trademode


※画像では「userid」が一番下ですが、順番は気にしなくてOKです

画像105

これでDynamoDBの設定は完了です。




⑥ AWS (Cloud9 設定

検索欄で「Cloud9」のサービスを検索しクリック

画像72


「Create environment」をクリック

画像72


Nameを入力しNext Stepをクリック

画像38

「Cost-Saving setting」をNeverに変更し、あとは以下の通り設定してNext Stepをクリック

画像72


Create environmentをクリック

画像72

EC2インスタンスが起動し、以下のような画面になる

画像72

起動したら、以下のファイルをローカルPCにダウンロードし、解凍して3ファイルをドラッグ&ドロップで以下のようにアップロードします。

※ftx.pyはドースーさんのnoteを参考にさせていただいております。
https://note.com/sdu0217/n/ne94ace5b5a52

「ftxbot」のフォルダの部分にダウンロードした3ファイルをドロップ

画像74

アップロードするとこうなる

画像74


次に、ターミナルで以下の通りコマンドを実行したり、ファイルの編集を行ったりしていきます。以下の通りに正しく操作してください。

画面下部のこの部分がターミナルになります。赤枠の部分にコマンドをコピー&ペーストして実行してください。なお、複数行のコマンドをコピペすると、最後の行だけ実行されない状態で残ってしまうので、ENTERを押して最後の行を実行してください。(Immediateは×で消してください)

画像75


コマンド①
ターミナルにコピペしてENTER押下

sudo pip3 install aiohttp requests boto3

実行後

画像76



コマンド②
ターミナルにコピペしてENTER押下

cd /etc/init.d
sudoedit app_start

実行後、このような画面になると思います。「/etc/init.d」というフォルダ
内の「app_start」ファイルの編集画面です。

画像77

ここに、以下の内容をコピペしてください。

#!/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

このようになります。先頭行から最終行まで正しくコピペできていることを確認してください。

画像80

次に、「app_start」ファイルを保存します。

Escキー + :wq  の順でキーボード入力してください。

画像79

こんな感じだと思います。ENTERを押して保存完了です。ターミナルでコマンドが入力できる状態に戻ります。

画像80

あとは、以下のコマンドをコピペして実行しておいてください。

コマンド③
ターミナルにコピペして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」に設定する値を別画面で取得していきます。

画像82


ログイン後の画面で、東京リージョンの左のアカウント名の部分をクリックし、マイセキュリティ資格情報をクリック

画像83

アクセスキーをクリック

画像84

新しいアクセスキーの作成をクリック

画像85

このような画面になりますので、「アクセスキーを表示」をクリック

画像86

以下のように表示されますので、アクセスキーIDをftxbot.pyの「aws_access」、シークレットアクセスキーをftxbot.pyの「aws_secret」にそれぞれコピペします。

画像87

設定後

画像88

※ ''  の間にそれぞれコピーします

Ctrl+Sを押してftxbot.pyのファイルを保存します。

ここまでで、一旦Cloud9で開いたインスタンスを閉じてください。


⑦ AWS (EC2 設定

検索欄で「EC2」のサービスを検索しクリック

画像88

インスタンスをクリック

画像92

さきほどCloud9で作成した「ftxbot」の文言があるインスタンスが実行中になっていると思います。

画像93

右クリックし、インスタンスを停止をクリック

画像94

停止済みになったら、セキュリティ > IAMロールを変更 をクリック

画像112

③IAMで作成した「AWSforBotEC2Role」を選択して保存をクリック

画像113



次に、再度インスタンスを右クリックしてイメージとテンプレート > イメージを作成 をクリック

画像95

イメージ名に「ftxbot」、サイズを30に変更してイメージを作成をクリック

画像111

次の画面で、以下のようにami-xxxxxxxxxxxxxx のAMIが作成されますので、これをコピーしてください。

画像97


ここで、lambdaの関数:ftx_botの画面に戻ります。

画像98

設定 > 環境変数 の画面で編集をクリック

画像99

キー:AMI_ID、値:先ほど作成されたAMI で環境変数を追加し保存

画像100


次に、コードのタブでlambda_function.pyというファイルが開いているので、ここの中身を以下のZIPファイルを解凍した「lambda_function.py」ファイルの内容に置き換えてください。

画像101


中身を置き換えたら、Deployボタンをクリック

画像102


これで、長かったFTXトラリピボットの設定が終わりました。では次の説明の通り、実際にLINEからQRコードで友達登録をし、FTXトラリピボットを起動してみます。



⑧ FTXトラリピLINEボット解説

それでは、実際にFTXボットを初期設定、起動していきましょう。

まず、LINEの設定画面で「MessagingAPI設定」のタブにQRコードがありますので、スマホのLINEアプリで読み込んで友達登録をします。

画像89


友達追加画面がでますので、トークをクリック

画像90

このような画面になります

画像91

最初に"0"など適当な文字を入力したらメールアドレスの入力を聞かれるので、適当なメールアドレスを入力してください(@が必須です)

画像92

ここからはChrome拡張のLINEアプリの画面で説明していきます。スマホのLINEアプリからでも動作は同じです。

メールアドレス設定後、"0"など適当な入力をすると、以下のように起動メニューが返ってきます。(※はっきり言ってUIのセンスはありません(笑)気になる方はlambdaのlambda_function.pyの中身をいじってみてもいいでしょう)

画像93

上記の通り、"a" から "s" の機能コードを入力すると、それぞれの設定ができます。まずは、 "k" で現在の値を確認しましょう。

画像94

初期設定ではこのようになっています。まずは "a"、"b"のAPIキーの設定と "d"のINTERVALの設定が必須です。API Key、API SecretはFTXにログイン後、「Settings > Api > CREATE API KEY」の順で作成したものを設定してください。

画像96

画像97

※API Secretは作成時しか表示されないので、コピーし忘れた場合は再度API作成してください

画像98

以下のように設定

画像95

設定後、値を確認すると以下のように設定されています

画像99

次に、INTERVALを設定しました。

画像100

この状態で、 "r"でボットを起動、"s"でボットを停止できます。(※起動、停止はAWSでのEC2インスタンスの起動、停止を伴いますので、実際に起動停止するまで1~2分程度の時間を見ておいてください。停止後にすぐ起動などすると、LINEの起動メニューでは起動してるのにEC2インスタンスは起動してないなど、システム不具合が起こります)

ただし、以下のようなチャートのときに上のような設定でボットを起動した場合、"e"のMAXLIMITから"f"のMINLIMITの価格範囲である1000~20000ドルに現在価格がないので、この場合は注文が出されません。

画像101

このチャートに合わせて、設定例としてパラメータを変更して起動してみます。

画像102

これでボットを起動します。

画像103

初回起動時はEC2インスタンス作成も行っているので、余分に時間がかかります。BTC-PERPの画面で待ちます。1分程度すると、以下の画面のように、トラリピボットによる注文が出されました!

画像104


パラメータの値と実際のFTXの注文を見比べてみてください。以下の設定を一言で説明すると、「BTC-PERPのペアで、BTC価格が1000~41000ドルの範囲内にあるとき、最終価格から200ドルの固定幅でLONGおよびSHORTの指値注文を0.001BTC分出す。ただし、売り注文は+0.0002BTCとする」となります。

画像106

画像105

どちらかの注文が約定した場合は、残った注文をキャンセルし、その価格を中心に200ドルの価格幅で再度LONG、SHORTの注文がだされます。また、"j"のTRADEMODEの設定を変更すると、LONGのみ、SHORTのみの戦略に変えることも可能です。

最後に、"c"のMARKETを変える場合は、一度"s"でボットを停止し、パラメータを再設定して、時間を空けて"r"で再度起動してください。また、ボットを停止してもすでに出ている注文はそのままなので、取引をしたくなければ手動で注文をキャンセルしてください。また、ボットを起動しながら、手動で注文を出しても問題ありません。ただし、TRADEMODEの設定には注意してください。

画像107




これで、LINEで動くFTXトラリピボットの解説はすべてとなります。ボットに関する質問や記載内容の不備などがあれば、以下のDISCORDチャンネルで@menmen#5124 までご連絡ください。

▼専用DISCORDチャンネルはこちら

https://discord.gg/RhfKGUMzV2


また、当noteの更新や次の開発ボットのnote投稿などの動きがあった場合にツイートしますので、以下のtwitterアカウントもフォロー頂けると嬉しいです。

https://twitter.com/menmen________


以上となります。長文になりましたが、最後まで読んで頂きありがとうございました!!!有益だと思ったらこのnoteにスキも押してもらえると次のボット開発、note執筆の励みになりますので、よろしくお願い致します!



この記事が気に入ったらサポートをしてみませんか?