Skip to content

仅需五步,打造您的专属数字货币实时交易机器人

作者:老余捞鱼

原创不易,转载请标明出处及原作者。

写在前面的话:随着本周比特币价格突破10万美元的历史新高,许多粉丝纷纷留言,期待我能分享一些关于数字货币的知识。我觉得这不仅是一个里程碑,也是一个绝佳的时机来探讨如何利用技术把握市场机遇。今天,我将与大家分享如何仅用五步就能打造一个专属与你的实时加密货币交易机器人。这不仅可以帮助我们在波动的市场中抢占先机,还能让我们的财富在忙碌的生活中稳步积累。接下来,我将一步步引导你进入这个充满挑战与机遇的领域,从基础配置到完整功能的搭建,每一步都是我们共同学习和进步的印记。

想象一下,有一个机器人可以在你睡觉时为你交易加密货币,并根据实时市场数据和技术指标做出决策。无论你是一个对金融市场充满热情的软件开发人员,还是一个希望实现交易自动化的投资者,构建一个加密货币交易机器人都是既令人兴奋又具有教育意义的。

如果你不找到一种睡觉时也能赚钱的方法,你就会一直工作到死。
----沃伦·巴菲特 (Warren Buffet)

在本文中,我我们一起来探索如何构建加密货币交易机器人,它可以跟踪实时价格,计算 RSI(相对强弱指数)等技术指标,并自动执行买入/卖出交易。我们将分五步构建这个机器人:

第 1 步:安装所需程序库

开始之前,请确保已安装以下 Python 库:

pip install websocket-client stockstats python-binance numpy

代码释义:

  • websocket-client:用于连接 Binance WebSocket,获取实时价格数据。
  • stockstats:一个便于计算 RSI 等技术指标的库。
  • python-binance:用于与 Binance API 交互以下达买入/卖出指令的库。

第 2 步:构建简化的交易机器人

让我们从简化版的机器人开始。该版本不会连接交易所,但可以帮助您了解如何使用历史价格数据计算 RSI 等技术指标。

下面是一个使用 stockstats 根据一系列收盘价计算 RSI 的简单示例:

import pandas as pd
from stockstats import StockDataFrame as Sdf

# Simulated closing price data (candlestick data)
data = {
    'close': [428.1, 426.9, 429.3, 427.5, 430.2, 432.4, 434.1, 433.0, 432.5, 431.8, 429.6, 427.2, 425.8, 428.9, 430.7]
}
df = pd.DataFrame(data)

# Convert to StockDataFrame to calculate RSI
stock_data = Sdf.retype(df)
stock_data['rsi_14'] = stock_data['rsi_14']

# Define overbought and oversold thresholds
RSI_OVERBOUGHT = 70
RSI_OVERSOLD = 30

# Print the closing price and corresponding RSI
for i in range(len(stock_data)):
    close = stock_data['close'][i]
    rsi = stock_data['rsi_14'][i]
    print(f"Closing Price: {close} | RSI: {rsi}")
    
    # Buy or sell conditions
    if rsi < RSI_OVERSOLD:
        print("RSI indicates oversold conditions. Buy!")
    elif rsi > RSI_OVERBOUGHT:
        print("RSI indicates overbought conditions. Sell!")
    else:
        print("RSI within normal range. No action.")

代码释义:

  • StockDataFrame:stockstats 库封装了一个 Pandas DataFrame,使 RSI、MACD、移动平均线等各种技术指标的计算变得更容易。
  • RSI 计算:在本例中,我们根据数据集中的收盘价计算 14 期 RSI。

代码输出如下图:

接下来我们进一步打造功能齐全的机器人,可连接 Binance 的 API 实时交易加密货币。

第 3 步:申请数字货币交易所 API

要让你的机器人真正发挥作用,你需要将它连接到像 Binance 这样的加密货币交易所。首先,需要在 Binance 上创建一个账户,然后生成您的 API Key 和 API Secret。有了这些凭证,机器人才能访问实时数据并执行交易。

注册地址:https://accounts.binance.com/zh-CN/login


第 4 步:API 集成

现在使用 Binance 的 WebSocket 实时更新价格,并使用 API 下达买卖指令,将机器人与 Binance 集成。以下是机器人的完整代码:

import websocket
import json
import numpy as np
from binance.client import Client
from stockstats import StockDataFrame as Sdf
import pandas as pd
import config  # A file where API keys are stored

# Connect to Binance API
client = Client(config.API_KEY, config.API_SECRET)
# Parameters
TRADE_SYMBOL = 'ETHUSDT'
TRADE_QUANTITY = 0.05
RSI_PERIOD = 14
RSI_OVERBOUGHT = 70
RSI_OVERSOLD = 30
in_position = False
# Create an empty list to store closing prices
closes = []
def on_message(ws, message):
    global closes, in_position
    json_message = json.loads(message)
    candle = json_message['k']
    
    is_candle_closed = candle['x']
    close_price = candle['c']
    if is_candle_closed:
        closes.append(float(close_price))
        
        if len(closes) > RSI_PERIOD:
            stock_data = Sdf.retype(pd.DataFrame({'close': closes}))
            stock_data['rsi_14'] = stock_data['rsi_14']
            rsi = stock_data['rsi_14'].iloc[-1]
            print(f'RSI: {rsi}')
            # Trading logic
            if rsi > RSI_OVERBOUGHT:
                if in_position:
                    print("Sell Signal")
                    order = client.order_market_sell(
                        symbol=TRADE_SYMBOL,
                        quantity=TRADE_QUANTITY
                    )
                    in_position = False
                else:
                    print("Overbought, but no position to sell")
            if rsi < RSI_OVERSOLD:
                if not in_position:
                    print("Buy Signal")
                    order = client.order_market_buy(
                        symbol=TRADE_SYMBOL,
                        quantity=TRADE_QUANTITY
                    )
                    in_position = True
                else:
                    print("Oversold, but already in position")
def on_open(ws):
    print("Connection opened")
def on_close(ws):
    print("Connection closed")
socket = f"wss://stream.binance.com:9443/ws/{TRADE_SYMBOL.lower()}@kline_1m"
ws = websocket.WebSocketApp(socket, on_message=on_message, on_close=on_close)
ws.run_forever()

代码释义:

  • WebSocket 连接:机器人连接到 Binance 的 WebSocket 流,接收以太坊 (ETH) 价格数据的实时更新。
  • RSI 计算:机器人使用 stockstats 根据最近 14 个收盘价计算 RSI。
  • 交易逻辑:当 RSI 下降到 30 以下(超卖)时,机器人会自动下达买单;当 RSI 上升到 70 以上(超买)时,机器人会自动下达卖单。
  • 持仓检查:机器人会跟踪自己是否持有头寸,以避免重复执行买入或卖出订单。

第 5 步:配置 API 账户

您需要创建一个 config.py 文件,以安全存储您的 Binance API 凭据。配置文件应该是这样的:

API_KEY = 'your_api_key'
API_SECRET = 'your_api_secret'

二、使用交易机器人的优势

  • 全天候交易:与人类交易员不同,机器人可以全天候监控市场,确保您不会错过任何交易机会。
  • 无情感交易:机器人完全根据数据执行交易,消除了恐惧或贪婪等情绪偏见。
  • 速度:机器人能对市场变化做出即时反应,下单速度比人类更快。
  • 自动化:自动交易可让您专注于策略制定,而不是不断观察市场。

三、机器人必要的功能进化提示

  • 多种指标:通过整合更多指标(如 MACD、布林带或移动平均线)来增强机器人功能,从而进行更全面的市场分析。
  • 回溯测试:使用历史数据测试您的交易策略,然后再用真金白银冒险。
  • 投资组合管理:扩展你的机器人,同时管理多个交易对和策略。比如配对交易等,后面我还会写文章来进一步说明。

四、观点总结

构建一个基于Python的加密货币交易机器人,是将编程技巧与金融洞察力完美融合的实践。通过接入实时市场数据、部署自动化的交易策略,并实现与Binance等知名交易所的无缝对接,你将转变成一位更加高效、不受情绪干扰的交易高手。

  • 自动化和效率:通过编写交易机器人,投资者可以实现交易的自动化,从而提高交易效率,节省时间,并有效避免情绪化交易。
  • 知识投资:投资于学习如何构建和优化交易机器人是非常值得的,因为这种知识能够带来长期的回报。
  • 技术和金融结合:本文体现了编程技能与金融市场知识的结合,展示了如何通过编程来解决实际的金融问题。
  • 持续学习和改进:我非常鼓励您不断实验新策略、添加新功能,并自动化交易流程,以提高机器人的性能和适应性。

感谢您阅读到最后,希望本文能给您带来新的收获。祝您投资顺利!如果对文中的内容有任何疑问,请给我留言,必复。


本文内容仅限技术探讨和学习,不构成任何投资建议。

Published inAI&Invest专栏

Be First to Comment

    发表回复