0 风险学习加密货币:亲手搭建 Python 量化交易模拟器

·

打开 Google 搜索,99% 的教程都在教你如何把钱换成数字货币,却没几个人告诉你如何零成本验证策略。
本文用 30 分钟带你用 Python 亲手建造一套加密货币交易模拟器,不用充值一分钱,即可在 历史行情 上验证买卖点。

「为什么」要比「怎么做」更重要

  1. 没人愿意用真钱交学费,但模拟交易能提前暴露策略漏洞。
  2. 常见平台关掉「回测」按钮,自己写才灵活:可加指标、花式加仓。
  3. Python 生态成熟,sqlitepandasbokeh 等库一小时即可上手。

环境准备 & 数据准备

只装这 3 样

文件结构最终长这样:

CryptoSimulator/
├─ currency_monitor.db   # 历史行情
├─ run.py                # 主程序
├─ simulator.py          # 回测引擎
└─ drama.py              # 文字特效,纯属娱乐

代码拆解:从「功能脑图」到「可运行程序」

步骤 1:欢迎页 & 动态打印

# drama.py:逐字输出,像在放电影
import sys, time
def dramatic(text):
    for ch in text + "\n":
        sys.stdout.write(ch)
        sys.stdout.flush()
        time.sleep(0.05)
# run.py – 欢迎函数
from drama import dramatic
def welcome():
    dramatic("◉ Simple Crypto Trading Simulator")
    dramatic("◉ 欢迎来到 2018-03-07 07:39 AM")

步骤 2:加载币种清单 & 最新卖出价

借助加密货币行情数据表 prices(timestamp, first_leg, second_leg, ask, bid)

import sqlite3
def fetch_coins():
    conn = sqlite3.connect('currency_monitor.db')
    cur  = conn.cursor()
    ts   = '1520408341.52'  # 精确时间戳
    cur.execute("""
        SELECT DISTINCT first_leg, ask
        FROM   prices
        WHERE  second_leg='USD' AND timestamp=?;
    """,(ts,))
    coins = {symbol: {'price': px, 'name': symbol} for symbol, px in cur.fetchall()}
    for symbol, px in coins.items():
        dramatic(f"{symbol} — ${round(px['price'],4)}")
    return coins

ask 为卖出价,即我们此刻可买入的成交价,与关键字「交易价格」同步出现网络搜索结果。

步骤 3:让用户交互下单

def input_order(coins):
    dramatic("Input coin symbol (e.g. BTC):")
    symbol = input(">> ").upper()
    dramatic("Quantity to buy:")
    qty = float(input(">> "))
    return symbol, qty, coins[symbol]['price']

回测核心:如何计算「最佳出仓价」

问题定义:给定买入价位,之后 9 天内最高价是多少,我这么久拿得住吗?

代码位于独立的 simulator.py,专注以下三件事:

  1. 最大卖出价MAX(bid) 从数据库查询
  2. 收益百分比 → (高价 * 数量 - 成本) ÷ 成本
  3. 结果渲染 → 播报盈亏情况
from datetime import datetime
def run_simulation(symbol, qty, bought_price):
    conn = sqlite3.connect('currency_monitor.db')
    cur  = conn.cursor()
    query = """
        SELECT MAX(bid), datetime(timestamp, 'unixepoch')
        FROM   prices
        WHERE  first_leg=? AND second_leg='USD' AND timestamp > 1520408341.52;
    """
    mx, ts = cur.execute(query,(symbol,)).fetchone()

    cost   = bought_price * qty
    value  = mx * qty
    pct    = (value - cost) / cost * 100
    dramatic(f"""
    High reached ${mx:.4f} at {ts}
    Your {symbol} rose by {pct:.2f}%, final value ${value:.2f}
    """)

合成一条完整「零风险」流程

在终端输入一行 Python,即刻体验完整交易闭环
# run.py
if __name__ == "__main__":
    welcome()
    coins = fetch_coins()
    symbol, qty, price = input_order(coins)
    from simulator import run_simulation
    run_simulation(symbol, qty, price)

效果演示(动图想象文字版)

$ python run.py
◉ Simple Crypto Trading Simulator
◉ 欢迎来到 2018-03-07 07:39 AM
BTC — $9476.0
ETH — $707.6
LTC — $188.8
Input coin symbol (e.g. BTC):
>> BTC
Quantity to buy:
>> 0.1
High reached $11125.6100 at 2018-03-11 23:59:59
Your BTC rose by 17.40%, final value $1112.56

FAQ:90% 新手卡住的 5 个问题

  1. Q:必须联网吗?
    A:不需要。模拟器完全离线,所有数据已在 SQLite 里。
  2. Q:为什么用 sqlite3 而不用 MySQL?
    A:零配置、单文件便于分享,降低上手难度
  3. Q:想换别的日期,例如 2020 年 3 月 12 日?
    A:只需把 timestamp、数据 DB 替换即可;算法不动。
  4. Q:怎样添加自己的技术指标?
    A:把行情导出到 pandas.DataFrame,一行 df['EMA12']=... 就能计算。技术指标都是组合拳。
  5. Q:能否模拟 API 下单?
    A:easy!把 run_simulation 换成向假接口的请求即可。交易模拟器的目标就是抽离真实风险。

升级方向:三步把「玩具」变「工具」

  1. 回调函数:用户可以传入自定义策略,例如「MACD 金叉后买入」。
  2. Web UI:Flask/FastAPI + Vue,手机秒开浏览器就能回测。
  3. 多币种 U 本位:加入 USDT 计价行情,模拟更复杂的加密货币组合。

写在最后

你的第一次爆仓往往发生在“觉得会赢”的那一刻。
在真金白银之前,用这段 Python 把加密货币交易策略量化系统的坑先踩一遍,账户余额就能保持原地踏步。

想继续深挖?👉 零成本解锁更多行情与回测框架


善用模拟器,别让学费太贵。