ProsperBotによるProsper投資の自動化
概要
私は2014年、Prosperというサイトを通じて、ソーシャルレンディングへの投資を始めました。ソーシャルレンディングは面白い仕組みですし、大きなリターンを得られる可能性もあると思ったからです。
始めた当初は、投資するローンを一つひとつ手作業で選んでいました。しかし時間が経つにつれ、ProsperBotという融資ボットを作り、このプロセスを自動化しました。今では、ProsperBotが私に代わって自動的に投資してくれます。
このブログ記事では、ソーシャルレンディングの概要を簡単に説明し、ProsperBotを構築した過程を紹介します。
ソーシャルレンディングとは?
アリスが3,000ドルを借りて、今後5年間で返済したいとします。従来であれば、アリスにとって最善の選択肢は銀行にローンを申し込むことでした。銀行はアリスに3,000ドルを貸し、アリスが予定どおり返済すれば、そのローンの利息と手数料で利益を得ます。アリスが返済できなければ、銀行が損失を負担します。
ソーシャルレンディングでは、アリスはLending ClubやProsperのような仲介サイトを訪れます。仲介サイトは自分のお金を貸す代わりに、投資家にローンを提供します。投資家のボブ、チャーリー、ダニカは、それぞれ1,000ドルずつ出して、アリスのローンの一部を購入できます。アリスは毎月、融資サイトに返済を行い、融資サイトはその支払いの3分の1ずつを、毎月ボブ、チャーリー、ダニカに分配します。
銀行という仲介者をなくすことで、借り手は従来の貸し手よりも有利な金利で借りられ、投資家(貸し手)は銀行の普通預金口座やCD(譲渡性預金)に預けるよりも高い利息を得られる、というのがこの仕組みの理屈です。ソーシャルレンディングについて詳しく知りたい場合は、Lend Academyのようなサイトが優れた情報源になります。
ProsperBotとは
Prosperでソーシャルレンディングに投資する場合、Prosperのウェブサイトを使ってローンを手動で選べます。しかしProsperは、開発者が投資を自動化するための公開APIも提供しています。
私はAPIを使う方法を選び、Prosper上で新しいローンを継続的に検索し、一定の条件を満たしたローンに投資する融資ボット、ProsperBotを開発しました。ProsperBotにはウェブダッシュボードもあり、現在の状態や、時間の経過に伴う私のProsper口座の取引状況を確認できます。

グラフから分かるように、ProsperBotがローンの返済を受け取り、その現金を新しいローンに再投資することで、私の口座残高は4月以降、着実に増えています。10月から口座の総額が減少し始めているのは、Prosper口座からお金を引き出し始めたためです。
構成要素を一つずつ
ProsperBotはいくつかの異なる要素で構成されています。以下に図示しました。
gofn-prosper(Go Forth ’n Prosper)
gofn-prosperは、Prosperの公開APIをGoから利用するためのバインディングです。Prosper APIの細かな仕組みをアプリケーションの他の部分から隠してくれるため、たとえばProsperのノートを購入する場合、アプリケーションから次のように呼び出せます。
client.PlaceBid(prosper.BidRequest{
ListingID: 5492410,
BidAmount: 25.0,
})このプロジェクトの中で、他の人にとって最も興味深いのはおそらくここでしょう。ProsperBotとは完全に独立しているからです。Prosper APIと連携するGoアプリケーションを書きたい人は、このライブラリを自分のアプリケーションで再利用できます。
ProsperBot
ProsperBotは、gofn-prosperの上に構築され、Prosper上で実際の処理を行うアプリケーションです。ProsperBotはProsperのサーバーに継続的にポーリングし、次の処理を行います。
- 新しく利用可能になったローンを検索する
- 投資条件を満たすローンに投資する
- Prosper口座の状態の変化(現金残高の変化や口座総額の変化など)を検知する
- ノートの更新(返済を受け取った、ノートの状態が変わったなど)を検知する
ProsperBotは、すべての状態をRedisデータベースに保存します。
この部分は、私が望むほど洗練されていません(コードにはいくつか裏技的な処理があり、ドキュメントも十分ではありません)。ただ、主な目的はgofn-prosperの使用例として公開することです。
ProsperBot Frontend
ProsperBot Frontendは、ProsperBotの状態を表示するAngularJSウェブアプリケーションです(上のスクリーンショットに表示されているものです)。静的リソース(HTMLファイルや画像など)へのリクエスト処理にはnginxを使い、動的コンテンツへのリクエスト処理には独自のGoサーバーを使います。GoサーバーはProsperBotと同じRedisデータストアを使って、これらの動的なリクエストに応答します。
ProsperBotのデプロイ
ProsperBotはいくつかの異なる要素で構成されており、ホストシステムにGoやnginxなどの依存関係も必要です。ProsperBotのデプロイを簡単にするため、私はAnsibleのロールをいくつか作成しました。
- mtlynch.prosperbotは、ProsperBotの中核となる(ヘッドレスの)アプリケーションをインストールするロールです。
- mtlynch.prosperbot-frontendはフロントエンドをデプロイします。
このように分割することで、ProsperBot、ProsperBot Frontend、Redisをそれぞれ別のマシンにデプロイできるようになります。私は個人的には、すべてのコンポーネントを1台のサーバーにインストールしています(そのためのAnsibleプレイブックの例は、GitHubのREADMEの例にあります)。
Prosperについて思うこと
全体として、ProsperBotは私にとって良い学習経験になりました。しかし、投資戦略としてProsperをおすすめはしません。理由はいくつかあります。
- 小規模では利益が出ない:Prosperから得られるXIRRベースのROIは約9%です。最初は悪くないように聞こえますが、ソーシャルレンディングの収益は総合課税の対象となるため、株式のような従来型の投資よりも、リターンのかなり大きな部分を税金に持っていかれます。さらに、税務処理が複雑になるため、市販の税務ソフトではなく税理士を雇う必要があります。結果として、毎年600ドルが収益から消えます(16,000ドルの投資額に対して、ほぼ4%です)。
- 使いにくいAPI:Prosper API自体の設計はあまりよくありません。たとえば、トークンベースの認証を使っている点は良いですし、アプリケーション開発者にはユーザー名とパスワードではなくクライアントIDとシークレットを割り当てています。ところが、すべての認証でユーザー名とパスワードを要求するため、クライアントIDとシークレットが意味を持たなくなっています(これはよくありません)。また、返済を受けたノートの金額がマイナスになるなど、本番用の投資APIとしてはあり得ないでたらめなデータをAPIが返すこともあります。
- 開発者サポートが貧弱:2015年、ProsperはAPIを全面的に刷新しました(以前のAPIはさらにひどいものでした)。その際、古いシステムを停止する前に、開発者にはまったく新しいAPIへ移行するための期間がわずか1か月しかないと伝えました。Prosperのクライアント開発者全員に、やっていることをすべて放り出して1か月以内にコードを全面的に書き直せと要求したわけで、かなり大胆なやり方です。さらに悪いことに、新しいAPIにはバグが多すぎたため、クライアントが1か月という期限に間に合わせようと奔走した後になって、ProsperはレガシーAPIの提供期間をさらに3か月延長せざるを得ませんでした。
- 個人投資家への関心が低下:Prosperは、個人投資家よりも銀行などの機関投資家に重点を置くようになっているようです。この点で最大の動きがあったのは2016年9月です。このときProsperは発表を行い、ユーザーはローンをセカンダリーマーケットで売却できなくなりました。これは条件面での大きな変更でした。投資家がProsperで保有する資産を換金できなくなったからです。そのため私は今後5年間、Prosperと、それに伴う税務上の面倒な問題から抜け出せません。
Prosperが個人投資家への関心を失っていることを受け、私は資金を引き出し始めることにしました(その様子は上のグラフでも確認できます)。Prosperにとって米国で唯一の大手競合であるLending Clubについては良い評判を聞いているので、そちらへ資金を移し、そのサイト向けに新しい融資ボットを書くつもりです。
記事をランダムに読む