仮想通貨、自動売買してみた vol.1
こんにちは。開発趣味勢の @funnythingz です。
仮想通貨、インターネット界隈勢はみんな好きですよね。僕はちょっとかじった程度しかやってません。というよりほぼやってません。
※大事なことなので先に書いておきますが、
仮想通貨の売買については自己責任でお願いします!
きっかけ
投資やギャンブルは全くセンスないのでほぼやらない勢なのですが、NFTやらMetaverseやら仮想通貨界隈がかなり盛り上がっているのと、仮想通貨にどっぷりハマっている友人の影響を受けて知識だけ無駄についてしまったのと、友人から「自動売買botつくってくれ」という要望があったのでちょっとつくって運用してみたという話です。
ちなみに僕自身はチャートのテクニカル指標の意味とか売買テクニックとかそういうの一切よくわからんです。ただチョット開発デキルくらいです。
システム構成を考える
普段はただのポンコツ系エンジニアなのでとりあえず何かしらのどこぞのインターネットに転がってる仕組みをコピペでもってくれば良いだろ的な発想でインターネットをサヴァイヴしてアルゴリズムをいくつか拾ってきました。
チャートテクニカル指標
CCI
MACD
RSI
ボリンジャーバンド
サイコロジカルライン
ROC
ストキャスティクス
True Range
Average True Range
スーパートレンド
OBV
ADX
ボリンジャーバンドは知ってるけど他はまぁよくわからんです。とりあえず上記のチャートのテクニカル指標の判断諸々のアルゴリズムを使って、売買判断をしようという感じです。
MLとか使って複雑にしすぎても手に負えないのでシンプルなシステムにします。シンプルに安く買って高く売るというロジックにします。
売買判断ルール
テクニカル指標の買いシグナルが n 以上で買い
テクニカル指標の売りシグナルが (n - 1) 以上で売り
テクニカル指標の売りシグナルが (n - 2) 以上 且つ 買値より下がったら売り (損切り)
上記3つのルールで売買するようにします。
システム構成
開発言語
Python
将来的にMLとか色々やるかもなーとか思いつつ何となくPythonです。
インフラ
AWS EC2
ラズパイも考えましたが、IP固定にしたかったのとシンプルに構築がラクなのでubuntuでEC2インスタンス一個立てることにしました。Cron
Pythonで書いたスクリプトをCronで1分ごとに実行します。
売買がうまくいくかどうかもわからないので、一旦こんな感じで構築することにします。
どこで何を売買するか
とりあえずAPI叩きまくれる取引所だったら何でも良かったのでBinanceを使うことにしました。
通貨はステーブルコイン(USDT)を原資として使います。
対象通貨ですが、STEPNが盛り上がり始めていたこともあり取引量もそこそこあるので対象通貨はGMTにしました。
ここまで決まればあとは運用で検証です。果たして儲かるのか 😇
運用結果
いくつかパターンを試してみたのでその結果発表です。
(n = 5) の場合
まずはルールのおさらいです。しきい値は下記の通りです。
買いシグナル 5
売りシグナル 4
損切り 3 (売りシグナル + 損益)
一旦これでやってみました。
緑↑で買って、赤↓で売っています。価格の差分は微々たる感じですが、雲の下で安く買って雲の上で高く売るっていうのはできてそうです。
ただ次の売買でいきなり雲行き怪しくなってきました。
確かに雲の下で安く買ってるのですが、さらに雲が下がって底値がまだ先にあります。その下がった雲が反発してちょろっと雲の上に行った時に損切りが発生しました。損切りっていうほどでもないのに…。(ちなみにこの先は雲が上がってます。)
このしきい値で売買を続けても収支がほぼゼロかジリジリマイナスになるだけだと思ったので売買シグナルのログ分析をすることにしました。
シミュレーションしてみたところ、シグナル6のタイミングで売買すると確実に利益になってそうだったので、シグナル6でやることにしました。
(売買シグナル6, 損切り5) の場合
購入タイミングは大分良い感じになりました。
しかし、その後は良い感じの売りタイミングがあったにも関わらずなかなか売りシグナルが発生せず…。しびれを切らして売りシグナルを5に下げてしまいました。
売りシグナル5にしたら良い感じのタイミングでやっと売却が発生しました。損切りシグナルも5だったのでこのままだと塩漬けにもなりそうでやばそうなのでこれも調整が必要そうです。
【良さげ】(n = 6) の場合
買いシグナル 6
売りシグナル 5
損切り 4 (売りシグナル + 損益)
なんかこれが一番しっくりきてそうです。
良い感じに雲の下で買って雲の上で売ってます。
ただ次のチャートは微妙でした。
こちらは雲の下で買ってるものの、雲の中にも関わらずなぜか売却。謎です…。
こちらは損切りが発生したチャートです。売りシグナルがどうしても上昇している時に出るので、そこで売りシグナル4 + 損益状態だったので損切りが発生したんだと思います。(ヨクワカラン)
個人的に手動だったらこんな感じで損切りしないよなー、と思いつつ微損で売却したのでまぁ良いかなと。
これも損切りです。真ん中あたりですんごい落ちてるのでそこで売ってくれても良いんですが、基本的に売りシグナルが雲の上部で発生しやすいのでこんな感じになるんでしょうね。損切りロジック難しいです。
あとはそこそこ上手に売買してくれるので一旦 (n = 6) のまま様子を見てみようという感じです。
まさかの鯖落ち
順調に売買してくれていたのですが、チャートがスパイクして超良い売りどきが発生したにも関わらず「あれ…?売却されない…だと?」という状態が発生し何でだろうなぁと思ってインスタンスを見たところ、まさかの鯖落ち!そりゃ売買されないですわ…。
ということで急いで復旧して、その後アラート設定と自動復旧の設定をしました。自動売買において売買途中の鯖落ちは命を捨てたようなもんですね…。あぶなかったぜ…!(含み損になってたけど)
ということでまとめ
やってみた結果、自動売買面白いです。下降トレンドでも微々たるものですが利益出てます。更に調整して、1分足を10秒ごとにシグナルチェックして売買するようにしてみました。
こちらはこのnoteを書いてる間に売買された直近のチャートです。
ロングで見ると下降トレンドなのですが、自動売買は1分足分析で超短期売買なので、安く買って高く売るが成立します。(成立しているように見えるだけかもですが)
まだしばらくやってみないと何とも言えませんがとりあえず自動というだけで面白いです。
最後に、大事なことなので何度でも書きますが、仮想通貨の売買については自己責任でお願いします!
その後面白い運用結果が出たらvol.2を書くかもしれません。
それでは良い開発ライフを〜(^ω^≡^ω^)おっおっおっ!