币安跟踪委托单高买低卖策略交易机器人
这只是一个测试项目,代码正在测试中。
我不能保证你能通过这个项目来挣钱 所以,使用这个项目的风险由你自己承担,我对使用此代码直接或间接引起的任何损失不承担任何责任。在使用本项目前请先阅读免责协议。 在更新机器人之前,请确保记录最后的买入价格。更新后可能会丢失配置或最后的买入价格记录。
机器人现在支持所有交易对(Symbol),比如 ETH/BTC、XRP/BTC。同时,最大购买数量也在全局配置中进行了更新。
一个交易由一个基本资产(base asset)和一个报价资产(quote asset)组成。给定一个交易对 BTC/USDT,BTC 代表基础资产,USDT 代表报价资产。
在全局配置中,你会看到一个“USDT最大购买金额”的字段。如果你配置了这个字段,任何新添加的使用USDT的交易对将被应用于配置的最大购买金额。
默认值将根据交易对的最小名义价值动态计算。
机器人现在每秒监控所有代币。然而,由于API的限制,交易对的数据不能做到每秒更新。 因此,我不得不为交易对引入锁定机制。当交易对在后台更新数据时,前端会显示锁定图标。在更新数据期间,机器人将不处理订单。
如果有兴趣,可以看一下这个PR #77
机器人现在支持限价止损,以防止超过设置中预期的损失。在配置中,你可以启用“止损”,并设置最大亏损百分比和禁用再次下买单的分钟数。机器人将根据最后的买入价格来计算止损的触发价格。
例如,让我们假设 “最大损失百分比(Max loss percentage)” 被配置为 “0.8”,“暂时禁止买入(Temporary disable for buying)”为 60。最后的买入价格是$100
。那么机器人将计算出止损触发价格为$80
。当当前价格达到$80
时,机器人将进行市价买单委托。
目前,该机器人只支持市价订单。
这个机器人使用跟踪买入/卖出订单的概念,跟踪价格的下跌/上涨。
跟踪委托单 关于跟踪委托的信息可以看币安的官方文档
简单来说就是在价格变化时,按固定的数值或百分比进行委托。利用这个特性可以在下跌买入时买到尽可能低的价格,在上涨卖出时卖出最高的价格。
- 该机器人可以监测多个代币,并对每个代币的价格进行每秒监测。
- 这个机器人只在 USDT 交易对中测试过,比如 BTC/USDT,ETH/USDT。你也可以添加其他与法币锚定的稳定币,比如 BUSD、AUD。但是我并没有使用这些稳定币在生产环境测试过,请自行承担风险。
- 该机器人使用 MongoDB 数据库。然而,它并没有没有使用最新的 MongoDB 来支持Raspberry Pi 32bit,使用的 MongoDB 版本是3.2.20,这是由 apcheamitru 提供的。
该机器人将持续监测一段时间内的最低值。一旦当前价格达到最低价格,那么机器人将下达买入的 "止损限价单(STOP-LOSS-LIMIT)"指令。如果当前价格持续下跌。那么机器人将取消之前的订单,并重新放置新的"止损限价单(STOP-LOSS-LIMIT)"订单。
- 当达到卖出的触发价格时,如果有足够的持仓(通常超过10美元),机器人就不会再下买单。
比方说,使用如下买入配置设置:
- 最大购买金额(Maximum purchase amount): $50
- 触发百分比(Trigger percentage): 1.005 (0.5%)
- 止损百分比(Stop price percentage): 1.01 (1.0%)
- 限价百分比(Limit price percentage): 1.011 (1.1%)
市场情况如下:
- 市场价: $101
- 限价: $100
- 触发价: $100.5
现在机器人不会下单,因为触发价(100.5)低于现价(101)
在下一次市场成交后(next tick),市场情况现在如下:
- 市场价: $100
- 限价: $100
- 触发价: $100.5
现在,机器人会新建一个限价止损单来买入,因为现价($100)已经低于了触发价($100.5)。为了简化计算,这里没有考虑佣金。在真实的交易中,数量会有不同。新的买入订单会被执行如下:
- 止损价 Stop price: $100 * 1.01 = $101
- 限价 Limit price: $100 * 1.011 = $101.1
- 数量: 0.49
在下一次市场成交后(next tick),市场情况现在如下:
- 现价: $99
- 当前限价 Current limit price: $99 * 1.011 = 100.089
- 未平仓止损价 Open order stop price: $101
由于当前的未平仓止损价 101 高于当前限价 100.089,机器人会取消当前的订单并按以下方式重新下单
- 止损价 Stop price: $99 * 1.01 = $99.99
- 限价 Limit price: $99 * 1.011 = $100.089
- 数量 Quantity: 0.49
如果价格不断下跌,这个新的买单也会不断更新报价。
接下来在一次市场成交后(next tick),市场情况如下:
- 现价 Current price: $100
现在当前价格到了止损价(99.99),因此,买单将会按限价 100.089 报价下单。
如果有足够的余额用于卖出,并且最后的买入价格已被记录,那么机器人将开始监测卖出信号。一旦当前价格达到触发价格,机器人将下达一个止损限价单来卖出。如果当前价格持续上涨,那么机器人将取消之前的订单,并重新以新的价格重新下新的止损限价单。
- 如果该币的价值低于10美元(最低名义价值),那么机器人将删除最后的买入价格,因为Binance不允许下低于10美元的订单。
- 如果机器人没有最后买入价格的记录,机器人将不会卖出该币。
比方说,使用如下卖出配置设置:
- 触发百分比 Trigger percentage: 1.05 (5.0%)
- 止损百分比 Stop price percentage: 0.98 (-2.0%)
- 限价百分比 Limit price percentage: 0.979 (-2.1%)
同时市场行情如下:
- 剩余代币数量 Coin owned: 0.5
- 市场价 Current price: $100
- Last buy price: $100
- 触发价 Trigger price: $100 * 1.05 = $105
这时机器人将不会提交订单,因为触发价($105)低于市场价($100)
如果价格持续走低,机器会持续监控价格,直到价格达到触发价
接下来在一次市场成交后(next tick),市场行情如下:
- 市场价 Current price: $105
- 触发价 Trigger price: $105
机器人将提交新的止损限价单进行卖出,因为当前的价格($105)高于或等于触发价格($105)。 为了简化计算,我没有考虑佣金。在实际交易中,数量可能会有所不同。新的卖单将被提交如下:
- 止损价 Stop price: $105 * 0.98 = $102.9
- 限价 Limit price: $105 * 0.979 = $102.795
- 数量 Quantity: 0.5
接下来在一次市场成交后(next tick),市场情况如下:
- 市场价 Current price: $106
- 当前限价 Current limit price: $103.774
- 开仓止损价 Open order stop price: $102.29
由于未平仓订单的止损价格($102.29)低于当前的限价($103.774),机器人将取消未平仓订单,并提交新的止损限价单,如下所示:
- 止损价 Stop price: $106 * 0.98 = $103.88
- 限价 Limit price: $106 * 0.979 = $103.774
- 数量 Quantity: 0.5
如果市场价不断升高,新的卖单也会更新报价。
如果市场价格变化:
- 市场价 Current price: $103
目前的价格达到了止损价($103.88);因此,订单将以限价($103.774)执行。
基于 React.js 的前端,通过 Web Socket 通信:
- List monitoring coins with buy/sell signals/open orders
- View account balances
- Manage global/symbol settings
- Delete caches that are not monitored
- Link to public URL
- Support Add to Home Screen
通过环境变量调整参数. 参考/config/custom-environment-variables.json
查看所有的环境变量.
或者在应用启动后调整参数。
-
基于
.env.dist
创建.env
文件Environment Key Description Sample Value BINANCE_LIVE_API_KEY Binance API key for live (from Binance) BINANCE_LIVE_SECRET_KEY Binance API secret for live (from Binance) BINANCE_TEST_API_KEY Binance API key for test (from Binance Spot Test Network) BINANCE_TEST_SECRET_KEY Binance API secret for test (from Binance Spot Test Network) BINANCE_SLACK_ENABLED Slack enable/disable true BINANCE_SLACK_WEBHOOK_URL Slack webhook URL (from Slack) BINANCE_SLACK_CHANNEL Slack channel "#binance" BINANCE_SLACK_USERNAME Slack username Chris BINANCE_LOCAL_TUNNEL_ENABLED Enable/Disable local tunnel true BINANCE_LOCAL_TUNNEL_SUBDOMAIN Local tunnel public URL subdomain binance -
Check
docker-compose.yml
forBINANCE_MODE
environment parameter -
Launch/Update the bot with docker-compose
Pull latest code first:
git pull
If want production mode, then use the latest build image from DockerHub:
docker-compose -f docker-compose.server.yml pull docker-compose -f docker-compose.server.yml up -d
Or if using Raspberry Pi 4 32bit, must build again for Raspberry Pi:
npm run docker:build docker-compose -f docker-compose.rpi.yml up -d
Or if want development mode, then run below commands:
docker-compose up -d
-
Open browser
http://0.0.0.0:8080
to see the frontend- When launching the application, it will notify public URL to the Slack.
- If you have any issue with the bot, you can check the log to find out what happened with the bot. Please take a look Troubleshooting
-
In Portainer create new Stack
-
Copy content of
docker-stack.yml
or upload the file -
Set environment keys for
binance-bot
in thedocker-stack.yml
-
Launch and open browser
http://0.0.0.0:8080
to see the frontend
前端 移动端 | 设置 | 手工交易 |
---|---|---|
Frontend Desktop |
---|
图表 | 买单 | 卖单 |
---|---|---|
如果你觉得这个项目对你有帮助,欢迎你给开发者一个小小的捐赠
我对本项目所包含的信息和材料的准确性或完整性不作任何保证,也不承担任何责任或义务。在任何情况下,对于因您使用或无法使用本代码或与之链接的任何代码,或因您依赖本代码上的信息和材料而直接或间接导致的任何索赔、损害、损失、费用、成本或责任(包括但不限于任何利润损失、业务中断或信息损失的直接或间接损害),我不承担任何责任或义务,即使我已事先被告知此类损害的可能性。
所以请自行承担所有风险!