TradingView策略脚本 从零搭建 SOL 量化交易模拟盘系统 | 完整教程

TradingView策略脚本 从零搭建 SOL 量化交易模拟盘系统 | 完整教程

手把手教你用 TradingView + Python + Binance测试网,搭建一套完整的自动化交易系统

🆓 完全免费 · 🛡️ 零风险模拟 · ⏱️ 2~3小时完成 · 🤖 全自动运行


📋 目录


0. 系统原理介绍

在开始之前,先了解整个系统是如何运作的:

1
2
📊 TradingView  →  🔔 Webhook警报  →  🌐 ngrok隧道  →  🐍 Python服务器  →  🏦 Binance测试网
生成买卖信号 发送JSON信号 穿透到本地 接收并处理 模拟自动下单

整个系统由4个部分组成,信号从 TradingView 出发,经过 ngrok 隧道到达本地 Python 服务器,最终在 Binance 测试网自动下单。

💡 Binance 测试网是官方提供的模拟环境,里面的资金全部是虚拟的,任何操作都不会产生真实盈亏,非常适合新手练习。

所需工具清单

工具 用途 费用
TradingView 图表分析 + 策略脚本 + 发送信号 免费
Binance 测试网 模拟交易所,接收下单指令 免费
Python 3.x 运行本地服务器,处理交易逻辑 免费
ngrok 将本地服务器暴露到公网 免费
GitHub 账号 登录 Binance 测试网用 免费

第一步:配置 TradingView 策略脚本

1.1 打开 Pine 编辑器

  1. 打开 TradingView,搜索并进入 SOLUSDT 日线图
  2. 点击底部菜单栏的【Pine编辑器】按钮
  3. 清空编辑器里原有的所有代码

1.2 粘贴策略代码

将以下完整代码复制粘贴到 Pine 编辑器中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//@version=6
strategy("SOL巴菲特安全边际策略 v4.2", overlay=true,
initial_capital=10000,
default_qty_type=strategy.percent_of_equity,
default_qty_value=20,
commission_type=strategy.commission.percent,
commission_value=0.05,
slippage=1)

// === 巴菲特式参数设定 ===
ema_trend_len = input.int(200, "牛熊分界线 (EMA200)", tooltip="只在牛市环境下寻找机会")
ema_entry_len = input.int(21, "入场参考线 (EMA21)")
adx_min = input.int(30, "趋势硬指标 (ADX > 30)", tooltip="只有强劲的趋势才具备价值")
atr_sl_mult = input.float(3.5, "安全边际空间 (ATR止损倍数)", tooltip="给价格足够的呼吸空间,防止插针")

// === 指标计算 ===
ema200 = ta.ema(close, ema_trend_len)
ema21 = ta.ema(close, ema_entry_len)
atr = ta.atr(14)

// 修复变量名
[pDI, mDI, adx_val] = ta.dmi(14, 14)

// === 核心入场逻辑 ===
crossUp = ta.crossover(close, ema21)
// 增加“收盘价大于开盘价”确保是阳线确认
buffettLong = (close > ema200) and (adx_val > adx_min) and crossUp and (close > open)

// === 进场执行 ===
if buffettLong
strategy.entry("ValueLong", strategy.long)

// === 风险管理与退出 ===
if strategy.position_size > 0
// 初始止损位
float initial_sl = strategy.position_avg_price - atr * atr_sl_mult
// 保本触发位 (盈利 2.5 倍 ATR 后)
float breakeven_trigger = strategy.position_avg_price + atr * 2.5

// 动态退出条件
if close > breakeven_trigger
// 利润达标,止损上移至保本位
strategy.exit("SafeExit", "ValueLong", stop=strategy.position_avg_price)
else
// 利润未达标,维持宽止损
strategy.exit("SafeExit", "ValueLong", stop=initial_sl)

// === 绘图辅助 ===
plot(ema200, color=color.new(color.white, 0), linewidth=3, title="牛熊线")
plot(ema21, color=color.new(color.yellow, 0), title="入场参考线")

// 修复:改 color.gold 为 color.orange
bgcolor(adx_val > adx_min ? color.new(color.orange, 90) : na)

plotshape(buffettLong, location=location.belowbar, color=color.lime, style=shape.labelup, text="VALUE BUY")

1.3 添加到图表并回测

  1. 点击编辑器顶部的【添加到图表】按钮
  2. 图表上出现黄色 EMA10 和蓝色 EMA30 两条线,以及 BUY/SELL 标记
  3. 点击顶部【策略测试器】标签,查看历史回测胜率和收益

💡 建议回测胜率 > 50%、最大回撤 < 30% 再考虑上线,可以调整 EMA 周期参数找到更好的组合。


第二步:申请 Binance 测试网账户

2.1 注册并登录

  1. 用浏览器打开:https://testnet.binance.vision
  2. 点击右上角【Log In with GitHub】(需要 GitHub 账号,没有的话先免费注册)
  3. 授权登录后进入测试网控制台

2.2 生成 API 密钥

  1. 点击【Generate HMAC-SHA256 Key】按钮
  2. 描述填写:sol-paper-trade,点击生成
  3. 页面弹出 API Key 和 Secret Key,立即复制保存到记事本!

⚠️ Secret Key 只显示一次! 关闭弹窗后永远无法再查看。如果忘记保存,需要撤销当前 Key 重新生成。

2.3 领取测试币

登录后系统会自动充值虚拟资金,通常包含约 1 BTC10,000 USDT,足够用来测试策略。

💡 测试网的资金全部是虚拟的,所有操作不会产生任何真实损失,放心大胆地测试!


第三步:搭建 Python 本地服务器

3.1 安装 Python

  1. 访问 https://www.python.org/downloads,点击黄色按钮下载最新版
  2. 运行安装程序,务必勾选底部的「Add Python to PATH」,然后点 Install Now
  3. Win+R 输入 cmd 回车,输入以下命令验证安装成功:
1
2
python --version
# 应该显示: Python 3.x.x

⚠️ 安装时必须勾选「Add Python to PATH」,否则后续所有命令都会报错!

3.2 安装必要的库

在命令提示符中依次输入以下 3 条命令:

1
2
3
pip install flask
pip install python-binance
pip install requests

每条装完都会显示 Successfully installed... 表示成功。

3.3 创建服务器脚本

  1. 在桌面新建文件夹,命名为 sol_bot
  2. 在文件夹内新建文本文件,命名为 server.py(注意去掉 .txt 后缀)
  3. 用记事本打开,粘贴以下代码,把第 8、9 行替换成你的 API 密钥
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
from flask import Flask, request, jsonify
from binance.client import Client
import json, datetime, os

app = Flask(__name__)

# !! 替换成你的测试网密钥 !!
API_KEY = "粘贴你的API_Key"
API_SECRET = "粘贴你的Secret_Key"

# testnet=True 表示使用测试网,不会动真实资金
client = Client(API_KEY, API_SECRET, testnet=True)
LOG_FILE = "trades_log.json"

if not os.path.exists(LOG_FILE):
with open(LOG_FILE, "w") as f:
json.dump([], f)

def save_log(trade):
with open(LOG_FILE, "r") as f:
logs = json.load(f)
logs.append(trade)
with open(LOG_FILE, "w") as f:
json.dump(logs, f, indent=2, ensure_ascii=False)

@app.route('/webhook', methods=['POST'])
def webhook():
try:
data = json.loads(request.data)
action = data.get("action")
symbol = data.get("symbol")
price = data.get("price")
rsi = data.get("rsi")
print(f"收到信号: {action} {symbol} 价格={price} RSI={rsi}")

account = client.get_account()
balances = {b['asset']: float(b['free']) for b in account['balances']}
usdt_bal = balances.get("USDT", 0)
sol_bal = balances.get("SOL", 0)

qty = 0; order = None

if action == "BUY" and usdt_bal > 10:
qty = round((usdt_bal * 0.1) / float(price), 2)
if qty > 0:
order = client.create_order(symbol=symbol, side="BUY",
type="MARKET", quantity=qty)
print(f"✅ 买入成功: {qty} SOL")

elif action == "SELL" and sol_bal > 0.01:
qty = round(sol_bal * 0.9, 2)
order = client.create_order(symbol=symbol, side="SELL",
type="MARKET", quantity=qty)
print(f"✅ 卖出成功: {qty} SOL")
else:
return jsonify({"status": "skip"}), 200

log_entry = {
"time": datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
"action": action, "symbol": symbol,
"qty": qty, "price": price, "rsi": rsi,
"order_id": order["orderId"] if order else None
}
save_log(log_entry)
return jsonify({"status": "ok"}), 200

except Exception as e:
return jsonify({"status": "error", "msg": str(e)}), 500

@app.route('/balance', methods=['GET'])
def get_balance():
account = client.get_account()
balances = {b['asset']: float(b['free'])
for b in account['balances'] if float(b['free']) > 0}
return jsonify(balances)

@app.route('/trades', methods=['GET'])
def get_trades():
with open(LOG_FILE, "r") as f:
logs = json.load(f)
return jsonify(logs)

if __name__ == '__main__':
print("🚀 服务器启动成功!")
print("📊 查看余额: http://localhost:5000/balance")
print("📋 查看记录: http://localhost:5000/trades")
app.run(host='0.0.0.0', port=5000, debug=True)

3.4 启动服务器

1
2
cd Desktop\sol_bot
python server.py

看到 🚀 服务器启动成功! 后,打开浏览器访问 http://localhost:5000/balance,能看到账户余额说明连接成功!

⚠️ 这个命令窗口不能关闭,服务器需要一直运行。


第四步:安装配置 ngrok

4.1 为什么需要 ngrok?

你的电脑在家里局域网内,TradingView 在互联网上,ngrok 就像一条隧道,让 TradingView 能把信号发到你的电脑上。

4.2 注册并下载

  1. 访问 https://ngrok.com,点击 Sign up 免费注册(推荐用 Google 账号)
  2. 登录后,左侧菜单点击【Your Authtoken】,复制这串长字符
  3. 访问 https://ngrok.com/download 下载 Windows 版本,解压得到 ngrok.exe
  4. ngrok.exe 放到桌面的 sol_bot 文件夹里

4.3 启动 ngrok

新开一个 PowerShell 窗口(不要关闭运行 server.py 的那个),依次输入:

1
2
3
4
5
6
7
cd Desktop\sol_bot

# 绑定 Authtoken(只需要做一次)
.\ngrok.exe config add-authtoken 你的Authtoken

# 启动隧道
.\ngrok.exe http 5000

看到以下输出说明成功:

1
Forwarding   https://unbiased-fondly-playlist.ngrok-free.app -> http://localhost:5000

复制这个 https://xxx.ngrok-free.app 地址备用,下一步要填入 TradingView。

⚠️ ngrok 免费版每次重启地址都会变化,需要重新更新 TradingView 警报里的 Webhook URL。


第五步:设置 TradingView 警报

需要分别创建买入卖出两个警报。

5.1 警报设置参数

设置项 填写内容
条件 SOL综合分析 → 买入(或卖出)
穿过 上穿
比较值 SOL综合分析 v1.0
周期 1天
触发 每根K线收盘时一次
到期时间 开放式
Message 留空
Webhook URL https://xxx.ngrok-free.app/webhook

5.2 操作步骤

  1. TradingView 图表右上角点击闹钟图标【警报】→【创建警报】
  2. 条件第一栏选择策略名称,第二栏选择【买入】
  3. 穿过选【上穿】,比较值选【SOL综合分析 v1.0】
  4. 触发改为【每根K线收盘时一次】
  5. 到期时间改为【开放式】
  6. 点击 Notifications,找到 Webhook URL 勾选并填入 ngrok 地址
  7. Message 栏清空,点击【创建订单】
  8. 重复以上步骤,再创建一个卖出警报

第六步:验证全链路

检查清单

  • TradingView 图表上有 EMA10/EMA30 两条线和 BUY/SELL 标记
  • server.py 的 cmd 窗口显示「服务器启动成功」并保持运行
  • ngrok 窗口显示 Forwarding 地址并保持运行
  • 浏览器访问 http://localhost:5000/balance 能看到账户余额
  • TradingView 警报列表里有买入和卖出两个警报

查看运行结果

查看内容 访问地址
账户余额 http://localhost:5000/balance
交易记录 http://localhost:5000/trades
日志文件 sol_bot 文件夹里的 trades_log.json
Binance订单 登录 testnet.binance.vision 查看订单历史

常见问题

问题 解决方法
pip 命令找不到 重装 Python,记得勾选 Add Python to PATH
server.py 报 API 错误 检查密钥是否正确,注意不要有多余空格
ngrok 用 ngrok.exe 报错 PowerShell 里要用 .\ngrok.exe
Webhook 收不到信号 日线要等 K 线收盘才触发,耐心等待
每次重启地址变了 重新在 TradingView 警报里更新 Webhook URL
模拟单没有成交 检查 SOL 余额,确保有足够的 USDT(>10)

风险提示

⚠️ 本教程中的策略脚本仅为技术示例,不构成任何投资建议。加密货币市场风险极高,请在充分了解风险后谨慎操作,盈亏自负。

四条铁律

  1. 🔒 API 安全:只开启「读取」和「交易」权限,绝对不要开启「提现」权限
  2. 📊 先模拟后实盘:至少模拟运行 1~2 个月,月胜率稳定 >55% 再考虑真实资金
  3. 💰 仓位管理:每次下单不超过总资金 10%,止损设置 3%,严格执行
  4. 📉 敬畏市场:加密货币波动极大,任何策略都无法保证盈利,量力而行

🎉 恭喜完成! 你已经成功搭建了一套完整的 SOL 量化交易模拟系统。接下来只需耐心观察信号触发和下单情况,持续优化策略参数。


工具链:TradingView Pine Script v6 · Python 3 · Binance Testnet · ngrok
作者:Weekend · 仅供学习参考,不构成投资建议