イケハヤフラグを検知してビットコインFXするプログラムを書いてみた!

f:id:McG:20171113202216p:plain

最近,日本のトップブロガーことイケダハヤトさんがビットコインFXにハマってらっしゃいます.

ビットコインFXを知らない人のためにざっくり解説すると,『ビットコイン価格が上がるか下がるかを予想して行う取引』みたいな感じ.

ふと彼のTwitterを見ていて『マジでこの人天才じゃないか』と思ったんですよね

なんと,24連敗を記録したとのこと

上がるか下がるかを予想して取引を行うので,コイントスの結果で取引しても50%は勝つわけです (利益確定タイミングとかあるのでそんな単純じゃないですが)

そのFX取引で24連敗って,天才以外なんと表現できるでしょうか?

裏を返せば,イケハヤさんの逆の注文を入れれば大金持ち間違いなし!w

僕と同じことを考えていた人が他にもいましたw

ということで!ネタ記事にはなりますがイケハヤさんのツイートを検出して注文を入れるbotを開発してみようと思います!

ちなみに,これ僕が10分で書いたくらいめちゃめちゃ簡単なコードなんですよね.初心者でも数日勉強すればできるはずです!

ビットコインの自動売買システムを作りながらプログラミングを学ぶ動画教材も販売しているので興味がある方は是非!

前準備

まず,前準備としてTwitterアカウント及びbitFlyerアカウントをプログラムからいじるためにAPIキーの発行を行いましょう.

今回はサクッと作ってみるだけなので細かい解説は省きます.

プログラミング言語は僕が好きなRubyを使って行きますね!.

イケハヤさんのつぶやき取得

では,まずはイケハヤさんのつぶやきをTwitterから取得してみましょう.

gem install twitterでtwitterのgemをインストールします.

そして,わずか数行の以下のコードを書けばイケハヤさんのつぶやきを取得することができるんです.

require 'twitter'
stream = Twitter::Streaming::Client.new do |config|
  config.consumer_key = "先ほど登録したTwitterのAPIのconsumer key"
  config.consumer_secret = "先ほど登録したTwitterのAPIのconsumer secret"
  config.access_token = "先ほど登録したTwitterのAPIのaccess token"
  config.access_token_secret = "先ほど登録したTwitterのAPIのaccess token secret"
end

stream.user do |status|
  if status.is_a?(Twitter::Tweet)
    if status.user.screen_name == "IHayato"
      puts status.text
    end
  end
end

やってることはすごく簡単で,自分のタイムラインをリアルタイムに監視して,『流れてきたツイートがイケハヤさんのものだったらつぶやきを表示』というプログラムを組むだけ.

簡単につぶやきを取得することができました.

f:id:McG:20171113194327p:plain

#イケハヤフラグを検出

では,次にハッシュタグ『#イケハヤフラグ』が含まれているつぶやきのみを表示させてみます.

というのも,イケハヤさんは以下のようにハッシュタグ『#イケハヤフラグ』をつけて相場をコントロールしているんですよw

今回は『#イケハヤフラグ』と『ロング』という単語が含まれていた時に「イケハヤさんがロングした(買い注文をした)ので自分は逆に売り注文をする』という処理をしたいので,以下のようなプログラムになります.

require 'twitter'
stream = Twitter::Streaming::Client.new do |config|
  config.consumer_key = "先ほど登録したconsumer key"
  config.consumer_secret = "先ほど登録したconsumer secret"
  config.access_token = "先ほど登録したaccess token"
  config.access_token_secret = "先ほど登録したaccess token secret"
end

stream.user do |status|
  if status.is_a?(Twitter::Tweet)
    if status.user.screen_name == "IHayato"
      tweet_text = status.text
      if (/イケハヤフラグ/ =~ tweet_text) && (/ロング/ =~ tweet_text)
        #イケハヤフラグとロングがツイートに含まれているので,売り注文を出す処理
      end
    end
  end
end

文字の解析には,正規表現と呼ばれるものを使用しました.

これを使えば,文字列の中にある文字列が含まれているかどうかを簡単に検出できるんですね.

/りんご/ =~ ”青りんご"trueですが,/オレンジ/ =~ ”青りんご"falseといったように,左辺の文字列が右辺に含まれているかを調べています.

売り注文を出す

あとは,上記の条件が満たされた時にbitFlyerで売り注文を入れるだけですね.

これもめっちゃ簡単で,数行のプログラムでOK.

とりあえず,1BTCの成行売り注文を入れるプログラムを書きました (bitFlyer関係の詳しいプログラムは動画でめちゃめちゃ丁寧に解説しています)

require "net/http"
require "uri"
require "openssl"

key = "先ほど取得したbitFlyerのAPI Key"
secret = "先ほど取得したbitFlyerのAPI Secret"

timestamp = Time.now.to_i.to_s
method = "POST"
uri = URI.parse("https://api.bitflyer.jp")
uri.path = "/v1/me/sendchildorder"
body = '{
  "product_code": "FX_BTC_JPY",
  "child_order_type": "MARKET",
  "side": "SELL",
  "size": 1,
}'

text = timestamp + method + uri.request_uri + body
sign = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new("sha256"), secret, text)

options = Net::HTTP::Post.new(uri.request_uri, initheader = {
  "ACCESS-KEY" => key,
  "ACCESS-TIMESTAMP" => timestamp,
  "ACCESS-SIGN" => sign,
  "Content-Type" => "application/json"
});
options.body = body

https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
response = https.request(options)
puts response.body

全部組み合わせる

では,先ほど書いた『#イケハヤフラグ』の検出プログラムと『bitFlyerで売り注文』のプログラムを組み合わせましょう!

require 'twitter'
require "net/http"
require "uri"
require "openssl"

stream = Twitter::Streaming::Client.new do |config|
  config.consumer_key = "先ほど登録したTwitterのAPIのconsumer key"
  config.consumer_secret = "先ほど登録したTwitterのAPIのconsumer secret"
  config.access_token = "先ほど登録したTwitterのAPIのaccess token"
  config.access_token_secret = "先ほど登録したTwitterのAPIのaccess token secret"
end

stream.user do |status|
  if status.is_a?(Twitter::Tweet)
    if status.user.screen_name == "IHayato"
      tweet_text = status.text
      if (/イケハヤフラグ/ =~ tweet_text) && (/ロング/ =~ tweet_text)
        key = "先ほど取得したbitFlyerのAPI Key"
        secret = "先ほど取得したbitFlyerのAPI Secret"

        timestamp = Time.now.to_i.to_s
        method = "POST"
        uri = URI.parse("https://api.bitflyer.jp")
        uri.path = "/v1/me/sendchildorder"
        body = '{
          "product_code": "FX_BTC_JPY",
          "child_order_type": "MARKET",
          "side": "SELL",
          "size": 1,
        }'

        text = timestamp + method + uri.request_uri + body
        sign = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new("sha256"), secret, text)

        options = Net::HTTP::Post.new(uri.request_uri, initheader = {
          "ACCESS-KEY" => key,
          "ACCESS-TIMESTAMP" => timestamp,
          "ACCESS-SIGN" => sign,
          "Content-Type" => "application/json"
        });
        options.body = body

        https = Net::HTTP.new(uri.host, uri.port)
        https.use_ssl = true
        response = https.request(options)
        puts response.body
      end
    end
  end
end

本来はもっとメソッドを定義するなりして見やすくしたり,APIキーの管理をしっかりするべきなのですが,何せ10分で書いたのでw

ということで,完成しましたよ!これであなたも億万長者!

※このコードを動かして損しても一切責任は追えません.

※テストしたかったのですがイケハヤさんがなかなか『イケハヤフラグ』をつぶやいてくれないので確認できず... エラーあるかも.

やってることはすごくシンプル!

どうでしょうか?意外と簡単そうじゃなかったですか?

今回書いたコードはネタでしたが,上手くやれば普通に稼げるプログラムになるはず

今まで400人に受講してもらった,ビットコインの自動売買システムを作りながらプログラミングを学ぶ動画教材の購入者にもプログラミング完全初心者がいらっしゃりますが,数日学んだだけで簡単な自動売買システムを作れるようになりました.

f:id:McG:20171101134535p:plain

ビットコインFXは手動でやるのはかなり効率悪いので,プログラミングを学んで自動化することをオススメしますw

また,僕の講座はA8.netでアフィリエイトもできるのでビットコインFXやってるブロガーさんは記事ネタにもなります〜!

僕のブログ経由だと半額の割引になるのでかなりお得かと!

© 2016-2017 迫 佑樹