如何利用ChatGpt做一个币圈量化交易机器人?

ChatGpt很高端,作为币圈韭菜,当然不能错过利用ChatGpt发财的机会。币圈韭菜,21年牛市翻了15倍,22年被Luna无情收割。

现在开始要好好学习研究Defi,撸Airdrop,做量化。

这篇文章会分为4个部分来介绍量化机器人:

1. 用Python写一个交易程序

2. 服务器的构建与Api接口

3. 用TradingView提供交易信号

4. 实盘交易测试


Part 1: 如何用Python写一个量化程序?

废话不多讲,直接上代码。

(这里用的是Binance的接口)

from flask import Flask, request #导入后端框架
import json
import ccxt #导入开单工具
import time
bn = ccxt.binance({
    "apiKey": 'API接口',
    "secret": 'API密钥',
    'enableRateLimit': True,
    "timeout": 3000,
    "enableRateLimit": False
    })

#开单函数(这里是Binance Api接口的程序)
def do(data):
    try:
        symbol = data['symbol'].replace('PERP','') 
        side = data['side']
        amount = float(format(float(data['amount']),'.%sf' % data['point']))
        if side=='buy':
            bn.fapiPrivatePostOrder({"symbol": symbol,"side": "BUY","type": "MARKET", "quantity": amount, 'reduceOnly':'false', "timestamp": int(time.time()*1000)})
        else:
            bn.fapiPrivatePostOrder({"symbol": symbol,"side": "SELL","type": "MARKET", "quantity": amount, 'reduceOnly':'false', "timestamp": int(time.time()*1000)})
        return
    except Exception as e: print(e)

app = Flask(__name__)
def after_request(resp):
    resp.headers['Access-Control-Allow-Origin'] = '*'
    return resp
app.after_request(after_request)
@app.route("/open",methods=['POST'])
def open1():
    data = json.loads(request.data)
    do(data)
    return '1'
if __name__ == '__main__':
    app.run('0.0.0.0', 80) #端口接入

这里是几个包的导入与调用,需要一些Python的知识去理解。这里是一个非常基础的架构,可以基于此做一些优化,不过如果不明白任何Python知识,直接Copy/Paste就可以。

(Python比较复杂,不是一篇文章就可以说清楚的,做量化必须要有一个很好的Coding基础。)


Part 2: 服务器的构建与Api接口

一个高效的量化程序肯定是需要一个服务器来运行,我们不可能一直开着自己的电脑去跑程序,需要一个服务器在后台来帮我们24小时运行。

作为一个个人使用的服务器,云服务器即可解决问题,主流的云服务器平台,像腾讯云、阿里云、亚马逊等就可以。

(一定要租新加坡、日本这些地方的服务器,因为国内的服务器会被和谐)

这里用阿里云来举个例子:

如果你是用阿里云,就按照下面的内容配置即可:

阿里云配置

这里镜像程序一定要选Debian,因为我们的服务器要用Linux配置。

至于套餐配置,因人而异,价格决定性能,这个看你自己的需求,不过我推荐2GB内存,4TB流量的(性能比较好,多端口无忧),差不多是100多一个月。

租完服务器,我们就要开始配置:

因为是Linux系统,所以这里我推荐用FinalShell来配置:

配置的话需要选择SSH链接:

SSH链接

之后按照提示输入服务器地址即可:

(这里注意,我选择的是密码验证,当然用私钥链接也是可以的。)

SSH链接教程

如果链接成功了,端口就会显示:(如果出现下图提示,那么就意味着已经进入服务器了)

服务器连接成功

因为Python服务器是没有的,所以我们还需要下载Python以及Python包:

(具体指令如下)

sudo su - root #转换到root
sudo apt update #更新自带安装工具
sudo apt install python3-pip #安装pip3
pip3 --version #检查pip3是否安装成功
apt-get install screen #安装screen
pip3 install flask #安装flask框架
pip3 install ccxt #安装ccxt框架

这里的指令切记一条一条输入,当全部输入完成之后,可以用:

pip list #检查框架是否下载完成

当这里框架搭建好之后,就可以导入我们的Python机器人了。

这里注意,一般我们要把Python程序导入到admin下面,因为服务器权限问题:

(指令如下)

cd ../home/admin #定位到Admin
加入Python机器人

在Admin附录下,上传Python机器人文件即可。

在导入前,需要加入Api端口:

Api端口创建

这个需要自己去创建,保存好私钥和API Key输入到机器人文件里就可以。

(交易对一定要选择单边交易模式)

因为之后运用的交易信号是单边的交易指令,所以这里务必需要设置一下。

单边交易

注意:这里需要开通Api端口的交易权限。(服务器的IP需要输入到Api的白名单里面)

加入Api及私钥

这里输入之后可以在SSH里打开看一下,确认无误之后就可以准备运行机器人了。

导入文件之后,建议用Screen去创建一个窗口,防止掉线。

(指令如下)

screen 

一般输入后,会显示这个窗口:

Screen创建成功

当窗口建立完毕之后,就可以运行机器人,指令如下:

python3 bot.py #运行机器人

出现以下指令就证明机器人已经可以正常运行了:

机器人运行

当机器人已经可以成功运行后,我们可以来测试一下:(这边推荐使用Postman)

注意:这里测试选择POST

后面输入:

http://(你的服务器地址)/open #一定要加http
Postman测试指令

后面选择RAW模式,然后输入指令:

{
    "symbol":"DOGEUSDTPERP", #交易对名称
    "side":"buy", #交易指令
    "amount":"500", #数量
    "point":"0" #位数(交易对象的最小交易单位)
}

注意,point参数后面需要填当前交易对可购买的最小位数,例如:ETH最少购买0.001个币, 则point的参数需为3,Doge最少购买1个币,则point参数需为0。

然后点击SEND即可,输出栏会有返回参“1”,然后打开交易所,如果发现交易已经成功,那么就证明机器人在工作了,服务器也会有提示。

之后就可以开始利用TradingView来发送指令让机器人自动运行。

(上面的内容比较梗概,需要有些服务器基础才可以更好的理解,有什么问题和不理解的,欢迎DM我)


Part 3: 利用TradingView发松交易信号

首先,先让ChatGpt来写一下量化信号程序:

(这里选取了MACD来作为交易指标)

因为TradingView支持Pine语言,所以这里用了Pine语言让ChatGpt进行编译。

ChatGpt的量化指标

当指标完成之后,就把这写代码导入到TradingView的Pine编译器就可以。

Pine编译器

(这里注意具体的代码还是需要修改一下,因为是单边交易,所以只能选择空或者是多来进行交易)

我修改完之后,代码如下:

//@version=5
strategy("MACD中短线策略", overlay=true,default_qty_type = strategy.cash,initial_capital = 1000,default_qty_value = 1000)

//定义MACD指标
fast_length = input(title="快线移动平均线长度", defval=12)
slow_length = input(title="慢线移动平均线长度", defval=26)
sig_length = input(title="信号线移动平均线长度", defval=9)
macdLine = ta.ema(close, fast_length) - ta.ema(close, slow_length)
signalLine = ta.ema(macdLine, sig_length)
histogram = macdLine - signalLine

//定义移动平均线指标
ma_length = input(title="移动平均线长度", defval=20)
ma = ta.sma(close, ma_length)

//产生交易信号
buy_signal = ta.crossover(macdLine, signalLine) and close > ma
sell_signal = ta.crossunder(macdLine, signalLine)

//买入逻辑
if buy_signal
    strategy.entry("Buy", strategy.long)

//卖出逻辑
if sell_signal
    strategy.close_all('sell')

(这里是一个多头策略,如果需要空头策略,调换一下触发信号就可以)

弄好交易信号后,就需要利用TV来发送信号到服务器:

点击这个小时钟就可以来创建警报:

警报创建

点开之后,输入发送的消息,这里是JSON语言。

警报消息

代码如下:

{"side":"{{strategy.order.action}}",
    "symbol":"{{ticker}}",
    "amount":"{{strategy.order.contracts}}",
    "point":"0"}

输入完之后,就可以利用通知功能向我们的服务器发送信号:

Webhook URL信号发送

这里的话需要在Webhook URL里面输入和测试一样的指令。

当输入完成之后,自动交易信号就创建完毕:

然后就开始自动交易了:

发送的警报

Part 4: 实盘测试

下面是一个回测数据:

是ETH,4小时的K线进行的多头策略。

回测数据

我会用实盘进行测试,交易对是OP,挺看好OP的生态,用的是多头策略,至于效果如何,就需要时间的检验。