ChatGPT 自动化交易教学文,协助你实现自动化投资理财!(实测有效)

2023年3月6日

ChatGPT 教學專書
不僅教你 ChatGPT 指令,更帶你實作出創新應用!前往了解

💡 温馨小提醒:大家都知道 ChatGPT 很会瞎掰和装懂,所以要拿你的真金白银跟他玩,可能需要评估一下,本文仅当作学术研究、饭后闲聊话题。

成效表现

ChatGPT Trading Bot Demo 1
ChatGPT Trading Bot Demo 1
ChatGPT Trading Bot Demo 2
ChatGPT Trading Bot Demo 2

快速看一下我叫 ChatGPT 帮我写的策略成效,以上两个是完全不同的策略,而微调一下参数后,在比特币的交易上都有不错的成效,而这是怎么做到的呢?我们一步一步来拆解。

本次专案代码:TheExplainthis/ChatGPT-Trading-Bot,如果你在实作上遇到任何问题,欢迎直接在 Github 上发一个 issue,我们会定期回答 issue 专区的问题。

ChatGPT 训练方式

  1. 首先,我先让 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
  2. 再来,可以跟 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.
    
  3. 复制 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 给你的代码会跑不动,因此可以多问他几次,或者将错误讯息抛给他。

  4. 调整参数,以获得最好的成效,如下图所示:

    ChatGPT Trading Bot Demo 1
    ChatGPT Trading Bot Demo 1

自动化流程安装步骤

Token 取得

  1. 登入 Binance

  2. 登入后左方有一个 API Management ,进入后再右上角按下 Create

    Binance Create Token 1
    Binance Create Token 1
    Binance Create Token 2
    Binance Create Token 2
  3. 就会取得 API KeySecret Key

    Binance Create Token 3
    Binance Create Token 3

专案设置

  1. Fork Github 专案:

    1. 注册/登入 GitHub
    2. 进入 ChatGPT-Trading-Bot
    3. 点选 Star 支持开发者
    4. 点选 Fork 复制全部的代码到自己的仓库
  2. 部署空间注册(免费空间):

    1. 注册/登入 Heroku

    2. 右上方有一个 New -> Create new app

    3. App Name: 输入此 App 名称 , Region: Europe

    4. 按下Create app

      Heroku Create app
      Heroku Create app

    ⚠️ 选择部署平台时有两个限制:币安若需要合约交易,则需要有 IP 位置、币安的 API 有地区限制,像是 IP 在美国的地区就无法使用。

专案执行

  1. 环境变数设定

    1. 点击 Settings -> Reveal Config Vars
    2. 新增环境变数,需新增:
      • API Key: key: API_KEY value: [由上方步骤一取得]
      • API SECRET KEY: key: API_SECRET_KEY value: [由上方步骤一取得]
      • PASSPHRASE -> 用途是 TradingView 打 Request 到 Server 的时候,可以当作 Token 的东西,避免让所有人都可以打 API key: PASSPHRASE value: 用户自行生成,步骤四会再用到
    Heroku Add Environment Variables
    Heroku Add Environment Variables
  2. 部署步骤

    1. 利用 Terminal 进入 ChatGPT-Trading-Bot 所在的资料夹 2. ls 看一下资料夹,是否和以下相同

    Procfile; demo; src; main.py; runtime.txt; README.md; README.en.md; requirements.txt;

    Heroku Add Environment Variables
    Heroku Add Environment Variables

    3. 安装 Heroku cli 4. 部署,可参考 Deploy 页面下方流程 - 先登入 Heroku,在 Terminal 输入: jsx $ heroku login

    Heroku Add Environment Variables
    Heroku Add Environment Variables

    按下 Enter 后,他会打开浏览器,并且要求登入,登入成功后即完成。 - 新增位置,在 Terminal 输入: jsx $ heroku git:remote -a [你的 App Name] 5. 将 repo 推上 Heroku,在 Terminal 输入:

    jsx $ git push heroku main

    6. 部署成功后,你的网址列会在 Settings -> Domains

    Heroku Get URL
    Heroku Get URL

    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

    Heroku Get IP
    Heroku Get IP

    9. 回到Binance ,刚刚那个Token ,点击Edit restrictions -> 下方IP access restrictions 勾选Restrict access to trusted IPs only (Recommended) -> 并将上一步骤IP 加进去。 10. 上方 Enable Futures 打勾 11. 按下 Save

    Heroku Get IP
    Heroku Get IP

⚠️ 免费版本的 Heroku 若 30 分钟内无人发送请求,则系统会进入休眠,因此需要下一步骤。

  1. CronJob 定时发送请求

    1. 注册/登入  cron-job.org

    2. 进入后面板右上方选择  CREATE CRONJOB

      CronJob Step 1
      CronJob Step 1
    3. Title  输入  ChatGPT-Trading-Bot,网址输入上一步骤的网址

    4. 下方则每  5 分钟  打一次

    5. 按下  CREATE

      CronJob Step 2
      CronJob Step 2
  2. Trading View Alert 设定

    1. 在 TradingView 下方 Strategy Tester ,选择你的策略,并按下闹钟的 icon

    2. 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 个比特币。

  3. Notifications 设定

    1. Webhook URL 设定: Heroku 里的 URL (Settings ->Domains )+ /webhook

    例如:

    https://chatgpt-trading-bot.herokuapp.com/webhook

    Notifications setting
    Notifications setting

Q&A

  1. 如何测试自动化串接是否有串上?

    可以在 TradingView 上,开一个即时的 Alert,像是当前币价为 25000,则设一个 Alert 为 cross 25000,然后让他快速触发,但因为是即时触发,而非策略触发,所以"message": {{strategy.order.alert_message}} 可以改成"message": "Buy" ,不然 message 会是空的。

  2. 每一次交易一定要设定 quantity 不能是一个比例吗?

    这边我多设定一个参数是 max_quantity_ratio ,他会根据杠杆数,计算最大的 quantity 数量,再乘以一个比例,举例来说 max_quantity_ratio 设为 0.01 则表示 1% 的资产。

  3. 代码有误,该如何 Debug?

    可以在 Terminal 输入 heroku logs --tail,先确认错误问题为何,若无法自行解决可以发 Issue

🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們