POLOXUE's BLOG

POLOXUE's BLOG

04 Feb 2025

基于 Python 开发 GMGN.AI 抢币机器人

本文介绍如何使用 Python 开发一个 gmgn.ai 的抢币机器人,它可以用来从链上抢币,如 Trump 等 meme 币。

风险提示: GMGN.AI 的币波动极大,有大量的空气币,务必谨慎操作,切勿在不了解的情况下投入过多资金。本文是我学习过程中的记录,请仔细甄别,防止资金损失。

完整的实例代码请查看:sniper_new.py

什么是 GMGN.AI?

GMGN.AI 是一个代币追踪和分析平台,提供了实时市场信号和自动交易机器人,我们可以监听它提供的实时信号,跟单聪明钱包,快速抓住赚钱机会。

通过 GMGN.AI 的分析能力筛选潜力代币,然后在它上就可以直接交易。

除此以外,它还提供了自动化交易机器人。GMGN.AI 的自动化交易机器人都是依托于 telegram 实现的,它提供了很多机器人,如新币信号、聪明钱包等,都可以通过监听 telegram 消息实现,然后在基于它提供的交易机器人直接下单交易。

GMGN.AI 内置机器人功能是固定的,如果我想自定义交易规则,如按持有人数、流动市值等过滤掉一些不满足条件的币,就需要自己写程序实现了。

如何实现一个抢币机器人

在 GMGN.AI 实现自定义交易机器人高度依赖 Telegram,要通过 telegram 的 app 将我的交易机器人与 GMGN.AI 的 telegram 机器人连接。我将使用 Python 实现这个机器人。

实现的大致流程如下:

  1. 创建 Telegram App:在 Telegram 上创建一个应用,获取 api_idapi_hash
  2. 监听 GMGN.AI 信号:GMGN.AI 会实时推送不同类型信号给 Telegram,机器人要监听刚兴趣的信号进行抢单。
  3. 按条件过滤信号:监听到信号消息,将消息文本转为结构化的数据,判断是否下达交易。
  4. 通过 Sniper Bot 执行交易:一旦确认某个币符合条件,发送指定给 Sniper Bot 下单。

安装依赖包

提前安装好依赖库:

1
pip install telethon instructor pydantic openai

Telethon 库是用于和 telegram 交互的,而 instructor 是要与大模型配合将 Telegram 文本消息结构化的;

创建 Telegram App

访问 Telegram Developer,使用 Telegram 账户登录。接下来会看到如下的页面。

填写这个表单,创建应用,就能获得认证所要的 api_idapi_hash,实现程序和 Telegram 交互的身份验证。

验证登录

正式开始机器人的逻辑前,先用 Telethon 来登录 Telegram,验证下 api_idapi_hash 是否正确。

实现代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
from telethon import TelegramClient, events

api_id = 'YOUR_API_ID'
api_hash = 'YOUR_API_HASH'

# 创建 Telegram 客户端
client = TelegramClient('session_name', api_id, api_hash)

async def main():
    # 登录 Telegram
    await client.start()
    print("登录成功!")

    # 获取当前用户信息
    me = await client.get_me()
    print(f"用户名:{me.username},ID:{me.id}")

    await client.run_until_disconnected()

client.loop.run_until_complete(main())

如果认证成功,会打印 “登录成功” 和我的用户信息。

1
2
登录成功!
用户名:xxx,ID:xxx

信号来源

GMGN.AI 提供一些信号群,如 t.me/gmgnsignals 和 t.me/gmgnsignalsol, 会实时推送不同主题的信号消息。

如下是 GMGN.AI 的官方文档上给出的信号列表:

  • CTO信号 (社区接管)
  • Update DEX Screener Social Infos (更新社交三件套)
  • PUMP Update DEX Screener Social Infos (PUMP币更新社交三件套)
  • PUMP FDV Surge (PUMP内盘代币快速飙升)
  • Solana FDV Surge (Solana代币快速飙升)
  • Smart Money FOMO (聪明钱FOMO)
  • KOL FOMO
  • DEV Burnt Alert (作者烧币)
  • ATH Price (历史新高)
  • Heavy Bought (大单买入)
  • Sniper New (狙新币)

我将以监听 “Sniper New(狙击新币)” 消息为例,演示如何狙击满足我要求的新币。

监听 “Sniper New” 消息

首先,“Sniper New” 消息位于 https://t.me/gmgnsignalsol 群组下。我将用 telethon 的消息监听能力监听 @gmgnsignalsol 下的 “Sniper New” 消息。

先查看下消息的格式:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
🎯Featured New Pair🎯

$PEPSI(Pepsi On Solana)
4ZsJoreG6w6xpgHPtaBBA6aSr8EzHVoDdezAkxeFVJvG

📈 5m | 1h | 6h: >99999% | >99999% | >99999%
🎲 5m TXs/Vol: 54/$93.9K
💡 MCP: $857.1M
💧 Liq: 453.11 SOL ($186.8K 🔥100%)
👥 Holder: 136
🕒 Open: 16s ago

✅ NoMint / ✅Blacklist / ✅Burnt
✅TOP 10: 13.52%

⏳ DEV: Add Liquidity
👨‍🍳 DEV Burnt烧币: 0(🔥Rate: %)

Backup BOT: US | 01 | 02 | 03 | 04

🌏 Website | ✈️ Telegram

🌈 NEW: Wallet Copy Trading is Live! Click NOW

这个消息的特点是开头包含 “Featured New Pair” 文本。

如下是实现代码:

1
2
3
4
5
@client.on(events.NewMessage(
    chats="@gmgnsignalsol", pattern=".*Featured New Pair.*"
))
def on_new_sniper(event):
    print(event.message.text)

如上的代码,events.NewMessage 的两个参数 chatspattern 是用来限定监听什么样的信号。

到此,我的这个机器人就能实时监听新币消息了。

文本消息结构化

现在这个消息还是是文本内容,并不便于接下来的分析,程序中起码要能拿到如代币的合约地址、持有人数、市值的等信息。最起码的,要能拿到合约地址吧。

如何将文本结构化呢?

一种常用方式是通过正则解析,但这要求文本格式固定,稍微有所改变就要重新解析。

还有一种方式,通过 LLM 大语言模型实现文本结构化。deepseek 的出现让 LLM 的调用成本非常的低。如果在意成本,跑一个本地模型也能满足需求。

首先要让大模型知道要提取什么数据,通过 pydantic 将目标定义出来。

代码如下所示:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
from pydantic import BaseModel, Field
from datetime import datetime

class NewPair(BaseModel):
    contract_address: str = Field(..., description="The contract address, used to uniquely identify the contract")
    market_cap: float = Field(..., description="The market capitalization of the contract, usually in USD")
    liquidity_sol: float = Field(..., description="Liquidity in SOL")
    liquidity: float = Field(..., description="Liquidity in USD")
    holders_count: int = Field(..., description="The number of holders of the contract")
    open_seconds: int = Field(..., description="The number of seconds since the contract was opened")
    top10_ratio: float = Field(..., description="The ratio of the top 10 holders, expressed as a decimal")
    no_mint: bool = Field(..., description="Whether the contract is NoMint, meaning no new tokens can be minted")
    blacklist: bool = Field(..., description="Whether the contract is blacklisted")
    burnt: bool = Field(..., description="Whether the tokens in the contract are burnt")

接下来,用 LLM 按定义的模型从文本抽取数据即可。我用到一个名为 instructor 简化这个过程。

实现代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import instructor
from openai import AsyncOpenAI

llm = instructor.from_openai(AsyncOpenAI(
    base_url="https://api.deepseek.com",
    api_key=os.getenv("DEEPSEEK_API_KEY"),
))

@client.on(events.NewMessage(
    chats="@gmgnsignalsol", pattern=".*Featured New Pair.*")
)
async def on_sniper_new(event):
    response = await llm.chat.completions.create(
        model="deepseek-chat",
        response_model=NewPair,
        messages=[{"role": "user", "content": event.message.text}],
    )
    print(response)

输出样例如下:

1
contract_address='EX82HnkDihYGP8owXSDZfyMQXzovvYiWddNAxuxfpump' market_cap=87400.0 liquidity_sol=81.94 liquidity=34400.0 holders_count=523 open_seconds=120 top10_ratio=0.2207 no_mint=True blacklist=True burnt=True

现在,要按选币条件过滤新币,如 top10 的占比要小于 10%,只有人数要大于 500 人,流动市值要大于 100k USD。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
async def on_sniper_new(event):
    r = await llm.chat.completions.create(
        model="deepseek-chat",
        response_model=NewPair,
        messages=[{"role": "user", "content": event.message.text}],
    )
    if (
        r.holders_count > 500
        and r.liquidity > 10e5
        and r.top10_ratio < 0.1
        and r.blacklist
        and r.no_mint
        and r.burnt
    ):
        await create_buy_order(r.contract_address, 0.01) # 下单 0.01 SOL

到此,我已经按规则选择出来了我想要的币。现在还差最后一步,实现下单交函数 create_buy_order

通过 Sniper Bot 执行交易

GMGN.AI 提供了在 Telegram 通过发送命令执行交易的机器人,如实现自动化交易。 SOL 连上的抢币机器人,请查看官方文档:TG Solana 狙击机器人

快速学习几个简单的使用机器人的命令案吧。

  • 立刻买入某合约 0.1 SOL:
1
/buy EX82HnkDihYGP8owXSDZfyMQXzovvYiWddNAxuxfpump 0.1
  • 立刻卖出持有仓位的 50%:
1
sell EX82HnkDihYGP8owXSDZfyMQXzovvYiWddNAxuxfpump 50

还提供了很多其他的命令,如仓位、钱包余额、当前订单等等。

到此,create_buy_order 实现起来就很简单了,如下所示:

1
2
3
4
async def create_buy_order(contract_address, amount):
    buy_command = f"/buy {contract_address} {amount}"
    await client.send_message("@GMGN_sol03_bot", buy_command)
    print(f'已执行交易: {buy_command}')

到此,整个流程就打通了,接下来的重点就是找到能赚钱的策略了。

总结

本文介绍了如何利用 Python 的 Telethon 库结合 GMGN.AI 提供的信号和 Sniper Bot 执行自动化抢币交易。

再次说明:我开发这个机器人仅仅为学习目的,去打通了抢币的自动化流程。链上交易风险很大,要想真正赚钱,还要自行下功夫研究。

本文来源于 POLOXUE's BLOG,地址: 基于 Python 开发 GMGN.AI 抢币机器人