見出し画像

【Python DeFi Bot作り④】PancakeSwap自動売買 ~2倍で原資抜き・10倍で利確~

納豆男爵です。PythonとWeb3.pyによるDeFi bot作りの紹介記事も4回目となりました。今回はトークンを買ってから売るまでの過程を全て自動化してみましょう。指定した時間に指定した量を買い,値が上がったら自動で利確するようなプログラムを作ってみましょう。

まずは、ここまでの記事をおさらいさせていただきます。PythonやWeb3.pyに慣れていない方は過去の記事で勉強してから本記事を読むことを強くお勧めします。

PythonやDeFi bot作りが全くの初めてという方は下記記事を参考に環境構築から実施しましょう。

コントラクトの操作について初めてという方は下記記事を参考にコントラクトの扱いを学びましょう。

Python + Web3.pyでBSCのコントラクトを扱える方は本記事を読み進めることができると思います。ただし、以下の記事で解説済みの内容は本記事では割愛いたします。より詳細が知りたい方は是非ご参照ください。

概要

今回はPancakeSwapで取引されているトークンに対して、狙った時間に購入し、狙った価格で利確するプログラムを作ります。具体的な戦略としてあのあどまん氏も推奨する「2倍で原資抜き・10倍で利確」戦略を実装していきます。
① 価格に応じた自動取引に向けた準備
② 指定時間にCAKEを買う
③ 2倍で原資抜き・10倍で利確

※この記事で公開するプログラムを実行することによって資産を失う恐れがあります。この記事によって生じた損失について当方では一切の保証をいたしません。各自の責任によってお試しいただくようお願いいたします。
特にプログラムを試験的に実行する場合には,試験用のウォレットを用意し極少額のBNBやBUSDを入れておくことをお勧めいたします。

①価格に応じた自動取引に向けた準備

PancakeSwapで売買するための準備は「超簡単! PythonによるBSC DeFi bot作り③ ~Pancake Swap~」と同様です。こちらを参照して以下を準備しましょう。
・PancakeSwap Router V2のコントラクトABI
  -> "PancakeSwap_Router_ABI.json"として保存
・CAKE TokenのコントラクトABI
  -> "Cake_Contract_ABI.json"として保存
・取引したいウォレットのアドレス
・取引したいウォレットの秘密鍵
・あらかじめPancakeSwapでBUSDをApproveしておく

今回は値動きを確認するための準備として以下も追加で作成します。
・PancakeSwap Factory V2のコントラクトABI
やや難しい話ですが、FactoryのコントラクトはPancakeSwapに設定されている流動性ペアを管理するためのコントラクトです。今回はこいつを使います。コントラクトアドレスは以下になります。
0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73
このコントラクトアドレスからABIをコピーしてjsonファイルにして保存しましょう。ファイル名は"PancakeSwap_Factory_ABI.json"としておきます。
・PancakeSwap 流動性プールのコントラクトABI
PancakeSwapに設定されている各流動性ペアに対して流動性プールのコントラクトも用意されています。このコントラクトはペア毎に用意されているため大量に存在していますが、関数呼び出しのインタフェースであるABIはどれも同じです。今回用いるCAKE-BUSDペアのABIを保存しておけばおそらくどの通貨でも使いまわせるでしょう。CAKE-BUSDペアのコントラクトアドレスは以下です。
0x804678fa97d91B974ec2af3c843270886528a9E6
こちらも同様にしてABIをjsonファイルにしておきましょう。ファイル名は"PancakeSwap_LP_ABI.json"とします。

②指定時間にCAKEを買う

さて、いよいよ自動購入をしてみましょう。非常に単純なトリガーですが、指定時間になったらCAKEトークンを買ってみます。今回は最終的なコード全体がとても長くなるため、見やすさのために各機能の関数を定義して呼び出すようにしていきます。
まずはプログラム内で用いる定数を定義していきます。各コントラクトアドレスなどは変数定義しておいたほうが読みやすいですね。PCSFactoryはPancakeSwap Factoryのことを示します。購入するのには不要ですが、後段で価格参照のために用いるためここでコントラクトを作っておきます。

ここから先は

18,284字

¥ 980

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