交易机器人开发入门

这是一个关于如何将像 Perplexity 这样的人工智能的战略思维与 Python 的执行能力相结合,构建你自己的市场分析工具的故事。

交易机器人开发入门
一键发币: Aptos | X Layer | SUI | SOL | BNB | ETH | BASE | ARB | OP | Polygon | Avalanche | 用AI学区块链开发

我既不是专业交易员,也不是天才程序员。但我想看看能否使用现代 AI 工具来自动化一个简单的交易策略。结果令人震惊。

我们都梦想着拥有这样一台机器:一台静默无声、毫无感情的机器,替我们观察混乱的加密货币市场,耐心等待发出交易信号的最佳时机。多年来,这一直是华尔街对冲基金的专属领域,这些基金拥有大批博士。但游戏规则正在改变。

我最近突然冒出一个疯狂的想法:我,一个拥有 Python 基础知识的普通人,能否在 30 分钟内从零开始构建一个简单的人工智能交易机器人?答案是肯定的,而且这个过程比我想象的要简单得多,也更强大。

这不是一个关于神奇印钞机的故事。这是一个关于如何将像 Perplexity 这样的人工智能的战略思维与 Python 的执行能力相结合,构建你自己的市场分析工具的故事。让我们一起构建它吧。

0、思维转变:从情绪化的赌徒到系统构建者

交易员亏损的首要原因是情绪。我们害怕错过市场顶部,而在底部恐慌性抛售。构建机器人的目标是将我们人类的缺陷和情绪化思维排除在外。

我们的机器人不会是一个复杂无所不知的预言家。它将是一个简单、训练有素的士兵,每次都完美地遵循一套规则。我们的工作不是成为士兵,而是成为设计策略的将军。

1、聘请我们的“AI量化分析师”来设计策略(5分钟)

在编写代码之前,我们需要一个策略。与其花费数周时间学习复杂的技术分析,我决定免费聘请一位世界级的量化分析师:Perplexity AI。

我给了它一个简单但具体的提示:

“假设我是一位来自顶级对冲基金的量化分析师。我需要一个基于技术指标的简单、适合初学者且有效的加密货币市场交易策略。该策略应该易于用 Python 自动化执行。

请提供:
- 策略名称。
- 策略运作方式的简单说明。
- 具体的入场和出场信号(“买入”和“卖出”规则)。”

Perplexity 给出了一个经典而完美的选择:移动平均线交叉策略。

  • 概念:它使用两条“移动平均线”——一条短期移动平均线(例如 50 天移动平均线)和一条长期移动平均线(例如 200 天移动平均线)。移动平均线只是平滑价格数据以显示潜在趋势。
  • “黄金交叉”(看涨信号):当短期移动平均线向上穿越长期移动平均线时,表明动量正在向上移动。这是一个潜在的“买入”信号。
  • “死亡交叉”(看跌信号):当短期移动平均线跌破长期移动平均线时,表明动量正在向下移动。这是一个潜在的“卖出”信号。

完美!它简单、合乎逻辑,而且易于转化为代码。

2、组装工具包(5分钟)

现在,让我们设置 Python 环境。如果您是新手,请不要害怕。

大脑(Python):如果您尚未安装 Python,可以从 Python 官方网站免费下载。

“乐高积木”(库):我们并非从零开始构建所有内容。我们将使用两个免费且功能强大的 Python 库。

  • Requests:这个库就像代码的 Web 浏览器。它允许您的脚本从互联网上获取数据。
  • Pandas:可以将其视为代码形式的 Excel 或 Google Sheets 的超强版本。它是分析时间序列数据(例如价格)的黄金标准。

要安装它们,只需打开电脑的终端或命令提示符,然后输入:

pip install requests pandas

就这样。您的研讨会已准备就绪。

3、构建机器人 - Python 代码(5 分钟编程)

现在到了最有趣的部分。我们将编写一个简单的脚本来执行四个关键任务。

(完整的可复制粘贴代码将在最后,但让我们逐步分解。)

A 部分:获取数据 首先,我们需要获取加密货币的历史价格数据。我们将使用免费且优秀的 CoinGeckoAPI。

import requests
import pandas as pd

def get_crypto_data(crypto_id='bitcoin', days=200):
    # This function fetches historical data from the CoinGecko API
    url = f"https://api.coingecko.com/api/v3/coins/{crypto_id}/market_chart?vs_currency=usd&days={days}&interval=daily"
    response = requests.get(url)
    data = response.json()
    prices = data['prices']
    
    # We use Pandas to turn this messy data into a clean table (a DataFrame)
    df = pd.DataFrame(prices, columns=['timestamp', 'price'])
    df['date'] = pd.to_datetime(df['timestamp'], unit='ms')
    df = df[['date', 'price']]
    return df

B 部分:计算移动平均线 现在,我们已经将数据保存在干净的 Pandas DataFrame 中,可以轻松计算短期(50 天)和长期(200 天)移动平均线。

def calculate_moving_averages(df, short_window=50, long_window=200):
    # Pandas makes this incredibly simple
    df['short_ma'] = df['price'].rolling(window=short_window).mean()
    df['long_ma'] = df['price'].rolling(window=long_window).mean()
    return df

C 部分:策略逻辑 这是机器人的核心。我们将检查最近的数据点,看看是否发生了交叉。

def generate_signal(df):
    # We look at the last two rows of data
    latest_data = df.iloc[-1]
    previous_data = df.iloc[-2]

    # The Golden Cross Signal
    if previous_data['short_ma'] < previous_data['long_ma'] and latest_data['short_ma'] > latest_data['long_ma']:
        return "BULLISH SIGNAL: Golden Cross detected. Consider a long position."

    # The Death Cross Signal
    elif previous_data['short_ma'] > previous_data['long_ma'] and latest_data['short_ma'] < latest_data['long_ma']:
        return "BEARISH SIGNAL: Death Cross detected. Consider a short position or taking profit."
    
    # No signal
    else:
        return "NEUTRAL: No crossover detected. Hold position."

D 部分:整合所有内容 最后,我们创建一个主函数来运行我们的机器人。

if __name__ == "__main__":
    # You can change 'bitcoin' to any other crypto_id from CoinGecko, like 'ethereum'
    crypto_id = 'bitcoin' 
    
    print(f"Fetching data for {crypto_id}...")
    df = get_crypto_data(crypto_id, days=250) # Fetch more days to ensure we can calculate a 200-day MA
    
    print("Calculating moving averages...")
    df_with_ma = calculate_moving_averages(df, short_window=50, long_window=200)

    print("Analyzing for a signal...")
    signal = generate_signal(df_with_ma.dropna()) # dropna() removes rows without enough data to calculate MAs
    
    print("\n--- Trading Bot Signal ---")
    print(signal)
    print("------------------------\n")

4、结果:完整且可复制粘贴的 AI 交易机器人

以下是完整的脚本。您可以将其保存为 .py 文件(例如 trading_bot.py)并从终端运行。

# --- My Simple AI Trading Bot ---
# This bot uses a Moving Average Crossover strategy to generate trading signals.
# Strategy designed with the help of Perplexity AI.

import requests
import pandas as pd

def get_crypto_data(crypto_id='bitcoin', days=200):
    """Fetches historical market data for a given cryptocurrency."""
    url = f"https://api.coingecko.com/api/v3/coins/{crypto_id}/market_chart?vs_currency=usd&days={days}&interval=daily"
    try:
        response = requests.get(url)
        response.raise_for_status() # Raises an error for bad responses
        data = response.json()
        prices = data.get('prices', [])
        
        df = pd.DataFrame(prices, columns=['timestamp', 'price'])
        df['date'] = pd.to_datetime(df['timestamp'], unit='ms')
        return df[['date', 'price']]
    except requests.exceptions.RequestException as e:
        print(f"Error fetching data: {e}")
        return pd.DataFrame() # Return empty DataFrame on error

def calculate_moving_averages(df, short_window=50, long_window=200):
    """Calculates short and long moving averages."""
    df['short_ma'] = df['price'].rolling(window=short_window, min_periods=1).mean()
    df['long_ma'] = df['price'].rolling(window=long_window, min_periods=1).mean()
    return df

def generate_signal(df):
    """Generates a trading signal based on the latest moving average crossover."""
    if len(df) < 2:
        return "INSUFFICIENT DATA: Not enough data to generate a signal."

    latest_data = df.iloc[-1]
    previous_data = df.iloc[-2]

    # Golden Cross (Bullish)
    if previous_data['short_ma'] < previous_data['long_ma'] and latest_data['short_ma'] > latest_data['long_ma']:
        return "BULLISH SIGNAL: Golden Cross detected. Consider a long position."
    # Death Cross (Bearish)
    elif previous_data['short_ma'] > previous_data['long_ma'] and latest_data['short_ma'] < latest_data['long_ma']:
        return "BEARISH SIGNAL: Death Cross detected. Consider a short position or taking profit."
    else:
        return "NEUTRAL: No crossover detected. Hold position."

if __name__ == "__main__":
    crypto_id = 'bitcoin'  # Change to 'ethereum', 'solana', etc.
    short_ma_days = 50
    long_ma_days = 200
    
    print(f"--- Running AI Trading Bot for {crypto_id.upper()} ---")
    
    # We need enough data to calculate the long moving average
    data_days_to_fetch = long_ma_days + 10 
    
    df = get_crypto_data(crypto_id, days=data_days_to_fetch)
    
    if not df.empty:
        df_with_ma = calculate_moving_averages(df, short_window=short_ma_days, long_window=long_ma_days)
        
        # We need to drop the initial rows where the MAs can't be calculated
        clean_df = df_with_ma.dropna()
        
        signal = generate_signal(clean_df)
        
        print(f"\nSignal Generated at {pd.Timestamp.now()}:")
        print(f"-> {signal}\n")
    else:
        print("Could not generate a signal due to data fetching errors.")

5、关键的下一步:这只是起跑线,而非终点线

这个机器人是一个很好的起点,但它并非印钞机。移动平均线交叉点是一个简单的“滞后”指标。一个真正的专业交易系统要复杂得多。

本次练习的目的并非创建对冲基金,而是证明你可以将交易理念系统化。你可以将策略从直觉的范畴转移到纯粹的、不带感情色彩的逻辑世界。这是成为一名自律、数据驱动型投资者的第一步,也是最重要的一步。

6、结论:你现在是一位建设者

你刚刚完成了一些事情太棒了!您已经运用一个人工智能(Perplexity)的战略思维和另一个人工智能(您的 Python 脚本)的执行力,构建了您自己的定制金融技术。

您已经迈出了第一步,从被动的市场数据消费者转变为积极创建您自己的分析工具。未来的可能性无穷无尽。


原文链接:I Built an AI Trading Bot in 15 Minutes Using Perplexity & Python

DefiPlot翻译整理,转载请标明出处

免责声明:本站资源仅用于学习目的,也不应被视为投资建议,读者在采取任何行动之前应自行研究并对自己的决定承担全部责任。