成效表现
快速看一下我叫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 给你的程式码会跑不动,因此可以多问他几次,或者将错误讯息抛给他。
- 对程式码的第二行,有时候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:
- 点击
- 部署步骤
- 利用Terminal 进入
ChatGPT-Trading-Bot
所在的资料夹 ls
看一下资料夹,是否和以下相同Procfile; demo; src; main.py; runtime.txt; README.md; README.en.md; requirements.txt;
- 安装Heroku cli
- 部署,可参考Deploy 页面下方流程
- 先登入Heroku,在Terminal 输入:
$ heroku login
按下Enter 后,他会打开浏览器,并且要求登入,登入成功后即完成。
- 新增位置,在Terminal 输入:
$ heroku git:remote -a [你的 App Name]
- 先登入Heroku,在Terminal 输入:
- 将repo 推上Heroku,在Terminal 输入:
$ git push heroku main
- 部署成功后,你的网址列会在
Settings
->Domains
- 按下连结后,会看到
Hello, World!
- Terminal 输入
heroku logs --tail
找到”My IP” 的地方,把IP 复制下来。例如:2023-03-05T13:38:36.171417+00:00 app[web.1]: My IP: 54.78.178.135
- 回到Binance,刚刚那个Token ,点击
Edit restrictions
-> 下方IP access restrictions
勾选Restrict access to trusted IPs only (Recommended)
-> 并将上一步骤IP 加进去。 - 上方
Enable Futures
打勾 - 按下
Save
- 利用Terminal 进入
⚠️ 免费版本的Heroku 若30 分钟内无人发送请求,则系统会进入休眠,因此需要下一步骤。
- CronJob 定时发送请求
- 注册/登入 cron-job.org
- 进入后面板右上方选择
CREATE CRONJOB
Title
输入ChatGPT-Trading-Bot
,网址输入上一步骤的网址- 下方则每
5 分鐘
打一次 - 按下
CREATE
- Trading View Alert 设定
- 在TradingView 下方
Strategy Tester
,选择你的策略,并按下闹钟的icon Settings
下方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
个比特币。 - 在TradingView 下方
-
- Webhook URL 设定: Heroku 里的URL (
Settings
->Domains
)+/webhook
例如:https://chatgpt-trading-bot.herokuapp.com/webhook
Notifications 设定
- Webhook URL 设定: Heroku 里的URL (
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