ChatGPT 自动化交易教学文,协助你实现自动化投资理财!(实测有效)
2023年3月6日
💡 温馨小提醒:大家都知道 ChatGPT 很会瞎掰和装懂,所以要拿你的真金白银跟他玩,可能需要评估一下,本文仅当作学术研究、饭后闲聊话题。
成效表现
快速看一下我叫 ChatGPT 帮我写的策略成效,以上两个是完全不同的策略,而微调一下参数后,在比特币的交易上都有不错的成效,而这是怎么做到的呢?我们一步一步来拆解。
本次专案代码:TheExplainthis/ChatGPT-Trading-Bot,如果你在实作上遇到任何问题,欢迎直接在 Github 上发一个 issue,我们会定期回答 issue 专区的问题。
ChatGPT 训练方式
首先,我先让 Notion AI 帮我发想了十个可能的交易策略,如下:
- A momentum trading strategy based on price and volume data
- A mean reversion strategy using Bollinger Bands and RSI indicators
- A trend following strategy using moving averages and MACD indicator
- A breakout trading strategy based on support and resistance levels
- A pairs trading strategy using cointegration analysis
- A news-based trading strategy using sentiment analysis on financial news
- An arbitrage trading strategy using cross-market analysis
- A swing trading strategy using candlestick patterns and chart analysis
- A quantitative trading strategy based on statistical models and machine learning algorithms
- A position trading strategy using fundamental analysis and value investing principles
再来,可以跟 ChatGPT 说
Give me pipescript code with version 4 running on TradingView for {交易策略}
,所以随便一个范例如下:Give me pipescript code with version 4 running on TradingView for A momentum trading strategy based on price and volume data.
复制 ChatGPT 的代码,有些部分需要微调,如下:
对代码的第二行,有时候 ChatGPT 会给你
study
要改成strategy
买进卖出信号调整:
- 有时候进出场的那段代码,他会给你
if buy_signal alert("Buy Signal") if sell_signal alert("Sell Signal")
- 要改成以下的代码,才会在回测时触发
if buy_signal strategy.entry("Buy", strategy.long) if sell_signal strategy.entry("Sell", strategy.short)
- 有时候进出场的那段代码,他会给你
在 Buy, Sell, Buy Exit, Sell Exit 后面,需要添加参数
alert_message
,这样后续设定 Notification 时才不会出错。if long_bb and long_ma and macd_above_signal and time >= start_time strategy.entry("Buy", strategy.long, alert_message="Buy") if short_bb and short_ma and macd_below_signal and time >= start_time strategy.entry("Sell", strategy.short, alert_message="Sell") if exit_bb or exit_ma strategy.exit('Buy Exit', 'Buy', alert_message="Buy_Exit") strategy.exit('Sell Exit', 'Sell', alert_message="Sell_Exit")
⚠️ 有时候 ChatGPT 给你的代码会跑不动,因此可以多问他几次,或者将错误讯息抛给他。
调整参数,以获得最好的成效,如下图所示:
自动化流程安装步骤
Token 取得
登入 Binance
登入后左方有一个
API Management
,进入后再右上角按下Create
就会取得
API Key
和Secret Key
专案设置
Fork Github 专案:
- 注册/登入 GitHub
- 进入 ChatGPT-Trading-Bot
- 点选
Star
支持开发者 - 点选
Fork
复制全部的代码到自己的仓库
部署空间注册(免费空间):
注册/登入 Heroku
右上方有一个
New
->Create new app
App Name:
输入此 App 名称
, Region:Europe
按下
Create app
⚠️ 选择部署平台时有两个限制:币安若需要合约交易,则需要有 IP 位置、币安的 API 有地区限制,像是 IP 在美国的地区就无法使用。
专案执行
环境变数设定
- 点击
Settings
->Reveal Config Vars
- 新增环境变数,需新增:
- API Key: key:
API_KEY
value:[由上方步骤一取得]
- API SECRET KEY: key:
API_SECRET_KEY
value:[由上方步骤一取得]
- PASSPHRASE -> 用途是 TradingView 打 Request 到 Server 的时候,可以当作 Token 的东西,避免让所有人都可以打 API key:
PASSPHRASE
value:用户自行生成,步骤四会再用到
- API Key: key:
- 点击
部署步骤
1. 利用 Terminal 进入
ChatGPT-Trading-Bot
所在的资料夹 2.ls
看一下资料夹,是否和以下相同Procfile; demo; src; main.py; runtime.txt; README.md; README.en.md; requirements.txt;
3. 安装 Heroku cli 4. 部署,可参考 Deploy 页面下方流程 - 先登入 Heroku,在 Terminal 输入:
jsx $ heroku login
按下 Enter 后,他会打开浏览器,并且要求登入,登入成功后即完成。 - 新增位置,在 Terminal 输入:
jsx $ heroku git:remote -a [你的 App Name]
5. 将 repo 推上 Heroku,在 Terminal 输入:jsx $ git push heroku main
6. 部署成功后,你的网址列会在
Settings
->Domains
7. 按下连结后,会看到
Hello, World!
8. Terminal 输入heroku logs --tail
找到 "My IP" 的地方,把 IP 复制下来。例如:jsx 2023-03-05T13:38:36.171417+00:00 app[web.1]: My IP: 54.78.178.135
9. 回到Binance ,刚刚那个Token ,点击
Edit restrictions
-> 下方IP access restrictions
勾选Restrict access to trusted IPs only (Recommended)
-> 并将上一步骤IP 加进去。 10. 上方Enable Futures
打勾 11. 按下Save
⚠️ 免费版本的 Heroku 若 30 分钟内无人发送请求,则系统会进入休眠,因此需要下一步骤。
CronJob 定时发送请求
注册/登入 cron-job.org
进入后面板右上方选择
CREATE CRONJOB
Title
输入ChatGPT-Trading-Bot
,网址输入上一步骤的网址下方则每
5 分钟
打一次按下
CREATE
Trading View Alert 设定
在 TradingView 下方
Strategy Tester
,选择你的策略,并按下闹钟的 iconSettings
下方 Message 格式如下:{ "passphrase": "环境设定时的 PASSPHRASE", "symbol": "要交易的币种", "leverage": 杠杆数, "quantity": 要交易的数量, "time": "{{time}}", "close": {{close}}, "message": {{strategy.order.alert_message}} }
例如:
{ "passphrase": "Zw'4Tx^5/]f/pN>}fx*9m6<X,fxLx;x(", "symbol": "BTCUSDT", "leverage": 10, "quantity": 0.002, "time": "{{time}}", "close": {{close}}, "message": {{strategy.order.alert_message}} }
👉 解释:合约交易设定
BTCUSDT
交易对杠杆为10
倍,数量为0.002
个比特币。Notifications 设定
1. Webhook URL 设定: Heroku 里的 URL (
Settings
->Domains
)+/webhook
例如:
https://chatgpt-trading-bot.herokuapp.com/webhook
Q&A
如何测试自动化串接是否有串上?
可以在 TradingView 上,开一个即时的 Alert,像是当前币价为 25000,则设一个 Alert 为 cross 25000,然后让他快速触发,但因为是即时触发,而非策略触发,所以
"message": {{strategy.order.alert_message}}
可以改成"message": "Buy"
,不然 message 会是空的。每一次交易一定要设定 quantity 不能是一个比例吗?
这边我多设定一个参数是
max_quantity_ratio
,他会根据杠杆数,计算最大的 quantity 数量,再乘以一个比例,举例来说max_quantity_ratio
设为 0.01 则表示 1% 的资产。代码有误,该如何 Debug?
可以在 Terminal 输入
heroku logs --tail
,先确认错误问题为何,若无法自行解决可以发 Issue