打开 Google 搜索,99% 的教程都在教你如何把钱换成数字货币,却没几个人告诉你如何零成本验证策略。
本文用 30 分钟带你用 Python 亲手建造一套加密货币交易模拟器,不用充值一分钱,即可在 历史行情 上验证买卖点。
「为什么」要比「怎么做」更重要
- 没人愿意用真钱交学费,但模拟交易能提前暴露策略漏洞。
- 常见平台关掉「回测」按钮,自己写才灵活:可加指标、花式加仓。
- Python 生态成熟,
sqlite、pandas、bokeh等库一小时即可上手。
环境准备 & 数据准备
只装这 3 样
- Python 3.8+(2.7 已停止维护,建议升级)
sqlite3(Python 自带,不用再装)- 1 份内含比特币、以太坊等主流币种 2018-03-07 ~ 2018-03-16 逐笔成交价 的 SQLite 数据库
👉 点击下载并获取示例 SQLite · 零配置直接可用
文件结构最终长这样:
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 coinsask 为卖出价,即我们此刻可买入的成交价,与关键字「交易价格」同步出现网络搜索结果。
步骤 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,专注以下三件事:
- 最大卖出价 →
MAX(bid)从数据库查询 - 收益百分比 → (高价 * 数量 - 成本) ÷ 成本
- 结果渲染 → 播报盈亏情况
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.56FAQ:90% 新手卡住的 5 个问题
- Q:必须联网吗?
A:不需要。模拟器完全离线,所有数据已在 SQLite 里。 - Q:为什么用 sqlite3 而不用 MySQL?
A:零配置、单文件便于分享,降低上手难度。 - Q:想换别的日期,例如 2020 年 3 月 12 日?
A:只需把timestamp、数据DB替换即可;算法不动。 - Q:怎样添加自己的技术指标?
A:把行情导出到pandas.DataFrame,一行df['EMA12']=...就能计算。技术指标都是组合拳。 - Q:能否模拟 API 下单?
A:easy!把run_simulation换成向假接口的请求即可。交易模拟器的目标就是抽离真实风险。
升级方向:三步把「玩具」变「工具」
- 回调函数:用户可以传入自定义策略,例如「MACD 金叉后买入」。
- Web UI:Flask/FastAPI + Vue,手机秒开浏览器就能回测。
- 多币种 U 本位:加入 USDT 计价行情,模拟更复杂的加密货币组合。
写在最后
你的第一次爆仓往往发生在“觉得会赢”的那一刻。
在真金白银之前,用这段 Python 把加密货币、交易策略、量化系统的坑先踩一遍,账户余额就能保持原地踏步。
想继续深挖?👉 零成本解锁更多行情与回测框架
善用模拟器,别让学费太贵。