Automated Prosper Investing with ProsperBot

Michael Lynch

用 ProsperBot 自動化 Prosper 投資

原文由 Michael Lynch 發布,訂閱此部落格

概覽

我在 2014 年透過一個名為 Prosper 的網站開始投入 P2P 借貸。我覺得 P2P 借貸是個很有趣的點子,而且有機會帶來豐厚的報酬。

一開始,我都是手動挑選每一筆貸款進行投資,但久而久之,我打造了一個名為 ProsperBot 的自動投資機器人,把這個過程自動化,讓它替我自動投資。

在這篇部落格文章中,我會簡單介紹 P2P 借貸,並帶你走一遍打造 ProsperBot 的過程。

什麼是 P2P 借貸?

想像 Alice 想借 3,000 美元,分 5 年償還。按照傳統做法,Alice 最好的選擇是向銀行申請貸款。銀行借給她 3,000 美元,如果 Alice 如期還款,銀行就能透過利息和手續費賺錢。如果她還不出來,銀行就得自行吸收損失。

而在 P2P 借貸的模式下,Alice 會去找 P2P 中介平台(例如 Lending Club 和 Prosper)。中介平台不會拿自己的錢出來放款,而是把這筆貸款提供給平台上的投資人。投資人 Bob、Charlie 和 Danica 就能各自用 1,000 美元認購 Alice 這筆貸款的一部分。Alice 每個月把還款繳給借貸平台,平台再每個月將 Alice 還款的三分之一分別分配給 Bob、Charlie 和 Danica。

背後的概念是,少了銀行這個中間人,借款人能拿到比傳統管道更優惠的利率,而投資人(也就是放款人)也能賺到比把錢放在銀行的儲蓄帳戶或定存更高的利息。想更深入了解 P2P 借貸,像 Lend Academy 這類網站就是很棒的資源。

什麼是 ProsperBot

要在 Prosper 上投資 P2P 貸款,投資人可以用 Prosper 的網站手動挑選貸款,但 Prosper 同時也為開發者提供了公開 API 讓人可以自動投資。

我選擇了 API 這條路,開發了 ProsperBot,這個自動投資機器人會持續在 Prosper 上搜尋新上架的貸款,並在符合特定條件時自動投資。它還包含一個網頁儀表板,可以顯示 ProsperBot 目前的狀態以及我的 Prosper 帳戶一段時間以來的活動紀錄:

ProsperBot 螢幕截圖

如圖表所示,自從 4 月以來,隨著 ProsperBot 收到貸款的還款並將資金再投入新的貸款,我的帳戶價值穩定成長。到了 10 月,總帳戶價值開始下降,是因為我開始從 Prosper 帳戶提領資金。

各個組成

ProsperBot 由幾個不同的部分組成,我整理如下圖:

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。任何想用 Go 來串接 Prosper API 的人,都可以在自己的應用程式中重複使用這個函式庫。

ProsperBot

ProsperBot 是建立在 gofn-prosper 之上、實際在 Prosper 上執行操作的應用程式。ProsperBot 會持續輪詢 Prosper 的伺服器,以:

  • 查詢新上架的貸款
  • 投資符合條件的貸款
  • 偵測 Prosper 帳戶狀態的變化(例如現金餘額的變動、帳戶總值的變動)
  • 偵測債權的更新(收到還款、債權狀態改變)

ProsperBot 會把所有狀態都儲存在 Redis 資料庫中。

這部分還沒有我期望的那麼完善(程式碼有些取巧的地方,文件也不夠完整),但我還是把它公開,主要作為 gofn-prosper 的使用範例。

ProsperBot Frontend

ProsperBot Frontend 是一個用 AngularJS 打造的網頁應用程式,用來顯示 ProsperBot 的狀態(如上方截圖所示)。它使用 nginx 來處理靜態資源的請求(例如 HTML 檔案、圖片),並使用一個客製化的 Go 伺服器來處理動態內容的請求。這個 Go 伺服器和 ProsperBot 共用同一個 Redis 資料儲存來提供動態請求的服務。

部署 ProsperBot

ProsperBot 包含了好幾個不同的元件,而且對主機系統有一些相依套件的要求(Go、nginx 等)。為了簡化部署 ProsperBot 的流程,我寫了兩個 Ansible roles:

這樣拆開的好處是,ProsperBot、ProsperBot Frontend 和 Redis 可以各自部署在不同的機器上。我個人是把所有元件都安裝在同一台伺服器上(在 GitHub 的 README 範例中有這樣的 Ansible playbook 範例)。

對 Prosper 的看法

整體來說,ProsperBot 對我而言是一次很棒的學習經驗,但我並不推薦把 Prosper 當作投資策略。原因有幾個:

  • 小額投資不划算:我在 Prosper 上的報酬率以 XIRR 計算約為 9%,乍看之下還不錯, P2P 借貸的所得會被當作一般所得課稅,比起股票這類較傳統的投資,會吃掉更大比例的報酬。這也讓我的報稅變得複雜許多,無法再用市售的報稅軟體自行處理,而必須另外聘請報稅會計師,每年要多花 600 美元(對於 16,000 美元的投資來說,幾乎就占了 4%)。
  • 難用的 API:Prosper 的 API 本身設計得不太好。舉例來說,它採用權杖驗證(這點不錯),也會發給應用程式開發者 client ID 和 secret 而非帳號密碼,但驗證時卻又要求提供帳號和密碼,讓 client ID 和 secret 變得毫無意義(這點就很糟)。我也曾發現 API 回傳不合理的資料,例如債權出現負數的還款金額,這對一個正式上線的投資 API 來說根本不該發生。
  • 糟糕的開發者支援:2015 年時,Prosper 對 API 進行了大幅改版(之前的 API 甚至更糟),卻只給開發者一個月的時間切換到全新的 API,否則就關閉舊系統。要求所有 Prosper 客戶端開發者在一個月內放下手邊工作、重寫所有程式碼,實在是相當強硬的做法。更糟的是,新 API 的 bug 多到 Prosper 不得不在逼所有客戶端趕著在一個月內完成切換後,又把舊版 API 的使用期限延長了三個月。
  • 對散戶投資人興趣降低:Prosper 似乎越來越專注於銀行等法人投資人,而較不重視個人散戶投資人。最明顯的舉動是在 2016 年 9 月,Prosper 宣布使用者將無法再在次級市場上出售貸款。這是條款上的重大改變,因為這讓投資人無法變現手上的 Prosper 部位,所以現在我得被 Prosper 綁住(以及隨之而來的報稅麻煩)長達 5 年。

Prosper 對散戶投資人興趣的降低,讓我決定開始把資金領出來(這點在上面的圖表中就可以看到)。我聽說 Prosper 在美國唯一的主要競爭對手 Lending Club 評價不錯,所以我打算把資金轉過去,並為那個平台寫一個新的自動投資機器人。

本文章由 muse-spark-1.2-contributor 進行翻譯

留言