使用 ProsperBot 实现 Prosper 自动化投资
概述
我在 2014 年通过一个名为 Prosper 的网站开始投资点对点借贷。我觉得点对点借贷是个很有吸引力的想法,有可能获得丰厚的回报。
刚开始时,我手动挑选每一笔贷款投资,但随着时间的推移,我通过构建一个名为 ProsperBot 的借贷机器人将这一过程自动化,它可以为我自动进行投资。
在这篇博文中,我将简要介绍点对点借贷,并详细介绍构建 ProsperBot 的过程。
什么是点对点借贷?
想象一下,Alice(爱丽丝)想借款 3000 美元,并在未来 5 年内偿还。按照传统方式,爱丽丝的最佳选择是向银行申请贷款。银行向她提供 3000 美元,如果爱丽丝按期偿还贷款,银行就能通过贷款的利息和费用赚钱。如果她未能偿还贷款,银行则承担损失。
在点对点借贷模式下,爱丽丝会访问一家点对点中介机构(如 Lending Club 和 Prosper)。中介机构不是用自己的资金放贷,而是将这笔贷款提供给其投资者。投资者 Bob(鲍勃)、Charlie(查理)和 Danica(达妮卡)可以各自出资 1000 美元购买爱丽丝这笔贷款的一部分。爱丽丝每月向借贷网站还款,而借贷网站则每月将爱丽丝还款的三分之一分别分配给鲍勃、查理和达妮卡。
其背后的理论是,通过省去银行这一中间环节,借款人可以获得比传统贷款机构更优惠的利率,而投资者(出借人)也能获得比将钱存入银行储蓄账户或定期存单更高的利息。想要更深入地了解点对点借贷,Lend Academy 等网站是极好的资源。
什么是 ProsperBot
要在 Prosper 上投资点对点贷款,投资者可以使用 Prosper 网站手动挑选贷款,但 Prosper 还为开发者提供了公共 API,以便实现自动投资。
我选择了 API 方式,并开发了 ProsperBot,这是一个借贷机器人,它会持续在 Prosper 上搜索新贷款,并在符合特定条件时进行投资。它还包含一个网页仪表盘,用于显示 ProsperBot 的当前状态以及我的 Prosper 账户随时间变化的活动情况:

如图所示,自 4 月以来,随着 ProsperBot 收到贷款还款并将现金再投资于新贷款,我的账户价值一直在稳步增长。从 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 是一个 AngularJS 网络应用,用于展示 ProsperBot 的状态(如上文截图所示)。它使用 nginx 来处理对静态资源(如 HTML 文件、图片)的请求,并使用自定义的 Go 服务器来处理动态内容的请求。该 Go 服务器使用与 ProsperBot 相同的 Redis 数据存储来提供这些动态请求。
部署 ProsperBot
ProsperBot 包含多个不同的组件,并对宿主机系统有一定的依赖(Go、nginx 等)。为了简化部署 ProsperBot 的流程,我编写了几个 Ansible roles:
- mtlynch.prosperbot 是用于安装核心(无界面)ProsperBot 应用的角色。
- mtlynch.prosperbot-frontend 用于部署前端。
这样拆分后,用户可以将 ProsperBot、ProsperBot Frontend 和 Redis 分别部署在不同的机器上。我个人是将所有组件安装在同一台服务器上(相应的 Ansible playbook 示例在 GitHub 的 README 示例中展示)。
对 Prosper 的看法
总体而言,ProsperBot 对我来说是一次很好的学习经历,但我不推荐将 Prosper 作为投资策略。原因有以下几点:
- 小规模投资无利可图:我在 Prosper 上的 XIRR 投资回报率约为 9%,乍听上去还不错,但点对点借贷的收入按普通收入征税,这比股票等更传统的投资会吃掉你更大比例的收益。这也让我的报税变得复杂,以至于我需要聘请税务会计师,而不是使用现成的报税软件,因此每年要从收益中支出 600 美元(几乎占 16000 美元投资的 4%)。
- 笨拙的 API:Prosper API 本身设计得不是很好。例如,它使用基于令牌的身份验证(优点),并为应用开发者分配 client ID 和 secret 而非用户名/密码,但随后在所有身份验证中又要求提供用户名和密码,使得 client ID 和 secret 变得毫无意义(缺点)。我还注意到 API 会返回一些荒谬的数据,比如债权出现负数还款,这对于一个生产环境的投资 API 来说是不应该发生的。
- 开发者支持差:2015 年,Prosper 对其 API 进行了彻底重构(之前的 API 甚至更糟),但却告知开发者仅有一个月的时间切换到全新的 API,否则就将关闭旧系统。要求所有 Prosper 客户端开发者放下手头一切工作,在一个月内重写所有代码,这是一个相当大胆的要求。更糟糕的是,新 API 漏洞百出,以至于 Prosper 在迫使所有客户端匆忙满足一个月期限后,不得不将旧版 API 的寿命又延长了三个月。
- 对散户投资者兴趣下降:Prosper 似乎越来越专注于银行等机构投资者,而对个人散户投资者的关注减少。在这方面最大的举措是,2016 年 9 月,Prosper 宣布用户将无法再在二级市场上出售贷款。这是条款上的巨大变动,因为这使得投资者无法变现其持有的 Prosper 资产,因此在接下来的 5 年里,我都只能困在 Prosper 中(并承受相关的税务烦恼)。
Prosper 对散户投资者兴趣的减弱,促使我开始将资金撤出(如上图所示)。我听说 Prosper 在美国唯一的主要竞争对手 Lending Club 口碑不错,因此我计划开始将资金转移到那里,并为该网站编写一个新的借贷机器人。
随机一篇博客