- چگونه میتوان اندیکاتور و استراتژی در TradingView نوشت و آن را به صرافی متصل کرد؟
- بخش 1 — شروع با Pine Script (نسخه 5)
- بخش 2 — ساختار آلارم و وبهوک در TradingView
- بخش 3 — راهاندازی وبهوک سرور برای دریافت آلارمها و ارسال سفارش به صرافی
- بخش 4 — استقرار امن روی سرور (Linux/Docker/systemd)
- بخش 5 — نکات امنیتی و پایداری
- بخش 6 — بکتست، بهینهسازی و forward testing
- بخش 7 — مقایسه لوکیشنهای دیتاسنتر برای ترید
- بخش 8 — کانفیگهای پیشنهادی سرور برای ترید
- بخش 9 — نکات عملی برای کاهش ریسک در اتوماسیون ترید
- جمعبندی
- سؤالات متداول
چگونه میتوان اندیکاتور و استراتژی در TradingView نوشت و آن را به صرافی متصل کرد؟
در این راهنمای جامع و عملی، گامبهگام نحوهٔ نوشتن اندیکاتور و استراتژی با Pine Script نسخهٔ 5، ساخت آلارمهای وبهوک در TradingView، راهاندازی وبهوک سرور امن با Flask و ccxt، و نکات فنی/امنیتی و انتخاب لوکیشن برای کاهش تاخیر توضیح داده شده است. این مطلب مناسب معاملهگران، توسعهدهندگان و تیمهای عملیات است.
بخش 1 — شروع با Pine Script (نسخه 5)
در Pine Script نسخهٔ 5 امکانات جدید و توابع پیشرفته موجود است. برای شروع:
- انتخاب نسخه: از
//@version=5استفاده کنید. - دو نوع اصلی: indicator (برای نمایش روی چارت و تولید سیگنال) و strategy (برای بکتست و اجرای سفارشهای فرضی).
- متغیرهای ورودی: از تابع
inputبرای پارامترهای قابل تغییر توسط کاربر استفاده کنید. - آلارمها: از
alertconditionبرای تعریف شرط آلارم قابل استفاده در TradingView بهره ببرید.
نمونه اندیکاتور ساده (EMA Crossover + RSI filter)
//@version=5
indicator("EMA Crossover + RSI Filter", overlay=true)
// Inputs
shortLen = input.int(9, "EMA Short Length")
longLen = input.int(21, "EMA Long Length")
rsiLen = input.int(14, "RSI Length")
rsiThresh = input.int(50, "RSI Threshold")
// Price
price = close
// Indicators
emaShort = ta.ema(price, shortLen)
emaLong = ta.ema(price, longLen)
rsi = ta.rsi(price, rsiLen)
// Signals
bull = ta.crossover(emaShort, emaLong) and rsi > rsiThresh
bear = ta.crossunder(emaShort, emaLong) and rsi < rsiThresh
plot(emaShort, color=color.blue)
plot(emaLong, color=color.orange)
plotshape(bull, title="Long", location=location.belowbar, color=color.green, style=shape.labelup, text="LONG")
plotshape(bear, title="Short", location=location.abovebar, color=color.red, style=shape.labeldown, text="SHORT")
// Alerts
alertcondition(bull, title="Long Alert", message="LONG_SIGNAL")
alertcondition(bear, title="Short Alert", message="SHORT_SIGNAL")نکات کاربردی: پیام آلارم بهتر است در قالب JSON یا ساختار مشخص باشد تا وبهوکسرور بهسادگی پارس کند؛ مثلاً {"signal":"LONG","symbol":"BTCUSDT","timeframe":"1m"}.
نمونه استراتژی ساده با مدیریت ریسک
//@version=5
strategy("EMA Crossover Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=1)
// inputs ...
// (same indicators as above)
shortLen = input.int(9, "EMA Short Length")
longLen = input.int(21, "EMA Long Length")
rsiLen = input.int(14, "RSI Length")
rsiThresh = input.int(50, "RSI Threshold")
price = close
emaShort = ta.ema(price, shortLen)
emaLong = ta.ema(price, longLen)
rsi = ta.rsi(price, rsiLen)
bull = ta.crossover(emaShort, emaLong) and rsi > rsiThresh
bear = ta.crossunder(emaShort, emaLong) and rsi < rsiThresh
if bull
strategy.entry("Long", strategy.long)
if bear
strategy.entry("Short", strategy.short)
// Example Stop Loss / Take Profit
strategy.exit("Exit Long", from_entry="Long", loss=100, profit=200)
strategy.exit("Exit Short", from_entry="Short", loss=100, profit=200)توضیح: برای بکتست دقیقتر از strategy استفاده کنید و پارامترهای stop-loss و take-profit و اندازهٔ پوزیشن را تنظیم نمایید.
بخش 2 — ساختار آلارم و وبهوک در TradingView
پس از افزودن اندیکاتور یا استراتژی روی چارت، از منوی Alerts یک آلارم جدید ایجاد کنید. در تنظیمات:
- Alert type: گزینهٔ Webhook URL را انتخاب کنید و آدرس سرور خود را وارد کنید (مثلاً https://trade.example.com/webhook).
- Message: از JSON استاندارد استفاده کنید؛ شامل فیلدهای
symbol،action،price،timeframe،uuidوtimestamp.
مثال پیام آلارم:
{"symbol":"BTCUSDT","action":"LONG","price":"${close}","timeframe":"1m","strategy":"EMA_CROSS_V1"}
بخش 3 — راهاندازی وبهوک سرور برای دریافت آلارمها و ارسال سفارش به صرافی
معماری پیشنهادی:
- TradingView (Alert) → HTTPS Webhook (NGINX + Flask/Node) → Bot (Business Logic) → Exchange API (ccxt یا SDK)
نصب پیشنیازها (نمونه برای Ubuntu)
sudo apt update
sudo apt install -y python3 python3-venv python3-pip
python3 -m venv venv
source venv/bin/activate
pip install flask ccxtنمونه app.py با Flask و ccxt
from flask import Flask, request, jsonify
import ccxt, os, hmac, hashlib, time
app = Flask(__name__)
API_KEY = os.getenv("EXCHANGE_API_KEY")
API_SECRET = os.getenv("EXCHANGE_API_SECRET")
exchange = ccxt.binance({
'apiKey': API_KEY,
'secret': API_SECRET,
'enableRateLimit': True,
})
@app.route('/webhook', methods=['POST'])
def webhook():
data = request.json
# simple validation: check data presence (use HMAC in production)
if not data:
return jsonify({"error":"no data"}),400
symbol = data.get("symbol")
action = data.get("action")
qty = data.get("qty", 0.001)
try:
if action == "LONG":
order = exchange.create_market_buy_order(symbol, qty)
elif action == "SHORT":
order = exchange.create_market_sell_order(symbol, qty)
else:
return jsonify({"error":"unknown action"}),400
return jsonify(order)
except Exception as e:
return jsonify({"error":str(e)}),500
بخش 4 — استقرار امن روی سرور (Linux/Docker/systemd)
پیشنهاد: استفاده از Docker Compose با nginx بهعنوان reverse proxy و certbot برای TLS.
نمونه docker-compose.yml
version: '3.8'
services:
app:
build: .
restart: always
environment:
- EXCHANGE_API_KEY
- EXCHANGE_API_SECRET
nginx:
image: nginx:stable
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./certs:/etc/letsencrypt
ports:
- "80:80"
- "443:443"نمونه systemd unit برای اجرای بدون Docker
[Unit]
Description=Trading Webhook Bot
After=network.target
[Service]
User=trade
WorkingDirectory=/home/trade/app
Environment=EXCHANGE_API_KEY=your_key_here
Environment=EXCHANGE_API_SECRET=your_secret_here
ExecStart=/home/trade/venv/bin/gunicorn -w 4 -b 127.0.0.1:5000 app:app
Restart=always
[Install]
WantedBy=multi-user.targetدستورات مدیریتی نمونه:
sudo systemctl daemon-reload
sudo systemctl enable --now tradebot.service
sudo ufw allow 443/tcp
sudo ufw allow 80/tcp
بخش 5 — نکات امنیتی و پایداری
- ذخیرهٔ امن API Key: از متغیر محیطی، فایل با
chmod 600یا Secret Manager استفاده کنید. - TLS: از گواهی معتبر (certbot + nginx) برای HTTPS استفاده کنید.
- تأیید پیام: از HMAC-SHA256 برای تایید پیامهای ورودی TradingView بهره ببرید.
- محدودیتها و Retry: محدودیت نرخ (rate limit) و الگوریتمهای retry/backoff را پیادهسازی کنید.
- مانیتورینگ و لاگگذاری: از Prometheus + Grafana یا ELK برای نظارت بر سلامتی و زمان پاسخ استفاده کنید.
- محافظت در برابر حملات: از Fail2Ban، iptables، و سرویسهای Anti-DDoS یا CDN برای endpointهای عمومی استفاده کنید.
بخش 6 — بکتست، بهینهسازی و forward testing
- بکتست: از توابع
strategy.*در Pine برای تحلیل گذشته استفاده کنید ولی محدودیتهای پارامتری Pine را در نظر داشته باشید. - بهینهسازی: پارامترها را دستی یا با اسکریپتهای خارجی تست کنید (مثلاً تولید چندین چارت با پارامترهای مختلف).
- Forward-test: همیشه پس از بکتست، در حساب دمو یا با حجم کوچک روی VPS با low-latency تست کنید.
- اندازهگیری Slippage و Latency: زمان دریافت وبهوک و زمان اجرای سفارش در اکسچنج را ثبت و آنالیز کنید.
بخش 7 — مقایسه لوکیشنهای دیتاسنتر برای ترید
لوکیشن دیتاسنتر میتواند هر میلیثانیه در موفقیت استراتژیهای با فرکانس بالا اهمیت داشته باشد. انتخاب لوکیشن باید بر اساس صرافیها و مسیرهای BGP انجام شود.
- اروپا (Frankfurt, Amsterdam): مناسب برای صرافیهای اروپایی و برخی لیکوئیدیتیپولها.
- شرق آمریکا (New York, NJ): مناسب برای Coinbase و بازارهای مرتبط با نیویورک.
- آسیا (Singapore, Tokyo, Hong Kong): مناسب برای Binance Asia، OKX و بازارهای آسیایی.
اگر بیشتر روی Binance یا صرافیهای آسیایی ترید میکنید، VPS در سنگاپور یا توکیو مناسبتر است؛ برای صرافیهای آمریکایی لوکیشن نیویورک/نیوجرسی بهتر عمل خواهد کرد.
بخش 8 — کانفیگهای پیشنهادی سرور برای ترید
VPS مخصوص ترید (Low-Latency)
- CPU: 2-4 vCPU با فرکانس بالا
- RAM: 4-8 GB
- Storage: NVMe SSD 50-100GB
- Network: low-latency/1Gbps، BGP/Anycast در صورت نیاز
سرور محاسباتی/بکتست سنگین
- CPU: 8+ vCPU
- RAM: 32+ GB
- Storage: NVMe 1TB
- GPU: در صورت نیاز به ML/AI برای پردازش مدلها
بهعلاوه از امکانات امنیتی مانند Anti-DDoS، Private Networking و Firewall Management استفاده کنید تا پایداری و امنیت سرویس افزایش یابد.
بخش 9 — نکات عملی برای کاهش ریسک در اتوماسیون ترید
- حد ضرر و حداکثر اکسپوژر: برای هر سفارش حد ضرر و مقدار حداکثری اکسپوژر را تعیین کنید.
- وضعیت حساب API: محدودیتها و وضعیت KYC را بررسی کنید.
- Circuit breaker: در صورت افزایش خطاها یا افزایش latency شدید، ربات را متوقف کنید.
- مانیتورینگ سلامت: uptime، latency و وضعیت fills را مانیتور کنید و برای تیم پشتیبانی alert تعریف کنید.
جمعبندی
این راهنما مراحل اصلی از نوشتن اندیکاتور و استراتژی در Pine Script (نسخهٔ 5)، ساخت آلارم وبهوکی در TradingView، راهاندازی وبهوک سرور امن با Flask/ccxt، تا نکات مهم امنیتی، انتخاب لوکیشن دیتاسنتر و کانفیگهای پیشنهادی سرور را پوشش داد.
چنانچه نیاز به راهحلهای زیرساختی شامل VPS با کمترین تأخیر، سرور ضد DDoS یا سرویسهای سرور گرافیکی برای پردازشهای سنگین دارید، شرکت ما با بیش از 85 لوکیشن جهانی این امکانات را فراهم میکند و میتواند زیرساخت شما را راهاندازی و بهینه کند.









