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