פיתוח בוטים למסחר על בסיס אינדיקטורים — פרויקט מפתח
הטיית מבט קדימה: למה הדמו מראה 30% רווח, אבל החשבון החי מחסל את ההפקדה
בדיקות היסטוריות מראות 30% רווח בשנה — בדמו. בחשבון חי, האסטרטגיה מחסלת את ההפקדה תוך חודש בגלל החלקה והטיית מבט קדימה. הטיית מבט קדימה מתרחשת כשהקוד משתמש בנתונים שהיו זמינים רק אחרי סגירת הנר. לדוגמה, קריאת הנר הנוכחי הלא סגור כסגור נותנת אשליה של רווח. במציאות, החלקה בזוגות נזילים לוקחת 0.5-1% בכניסה וביציאה. ולבוטים של DeFi, מגבלת גז יכולה למנוע ביצוע עסקה בשעות שיא. הפסדי גז ברשת Ethereum יכולים להגיע ל-0.5 ETH בחודש עם מסחר פעיל.
פיתוח בוט מסחר על בסיס אינדיקטורים הוא לא רק קוד pandas, אלא משימה הנדסית: ביטול שגיאות הטיית מבט קדימה, הבטחת ביצוע אטומי, ועמידה במגבלות גז (ל-DeFi) או השהיה (ל-CEX). אנו יוצרים בוטים מוכנים: מהגדרת אסטרטגיה ועד פריסה על VPS ושילוב עם Telegram/Slack שלך להתראות. במשך 5+ שנים פיתחנו 100+ אלגוריתמים ללקוחות — מסוחרי סקאלפינג ועד קרנות גידור. עוד על הטיית מבט קדימה בויקיפדיה.
מה כלול בפיתוח?
| רכיב | תיאור |
|---|---|
| תיעוד אסטרטגיה | הגדרת כללי כניסה/יציאה, ניהול סיכונים, פרמטרי אינדיקטורים |
| קוד מקור | Python/Node.js עם הערות, סקירת קוד, מאגר Git פרטי |
| שילוב בורסה | WebSocket למחירים, REST לפקודות, OCO ל-SL/TP |
| פריסה | הגדרת VPS, Docker, systemd, ניטור זמינות עם התראות Telegram |
| הדרכה | סשן של שעתיים לניהול הבוט, הגדרת פרמטרים |
| תמיכה | שבועיים של תמיכה לאחר השקה: תיקוני באגים, התאמות אסטרטגיה, אופטימיזציה |
איך ליישם אסטרטגיית RSI ללא הטיית מבט קדימה?
import pandas_ta as ta
import pandas as pd
class RSIStrategy:
def __init__(self, rsi_period=14, oversold=30, overbought=70):
self.rsi_period = rsi_period
self.oversold = oversold
self.overbought = overbought
def generate_signal(self, df: pd.DataFrame) -> str:
# ВАЖНО: shift(1) — используем только закрытые свечи
rsi = ta.rsi(df['close'], length=self.rsi_period).shift(1)
prev_rsi = rsi.shift(1)
current_rsi = rsi.iloc[-1]
previous_rsi = prev_rsi.iloc[-1]
# Вход из oversold зоны (пересечение снизу вверх)
if previous_rsi < self.oversold and current_rsi >= self.oversold:
return 'BUY'
# Вход из overbought зоны (пересечение сверху вниз)
if previous_rsi > self.overbought and current_rsi <= self.overbought:
return 'SELL'
return 'HOLD' למה שילוב אינדיקטורים מפחית אותות שגויים?
אינדיקטור אחד — הרבה רעש. לדוגמה, RSI קרוב ל-70 יכול לתת כניסה שגויה בטרנד חזק. שילוב של RSI + ממוצעים נעים + נפח מסנן עד 70% מהאותות השגויים. יישום אסטרטגיית ריבוי אינדיקטורים שלנו משתמש בשלוש רמות אישור:
class MultiIndicatorStrategy:
def generate_signal(self, df: pd.DataFrame) -> str:
rsi = ta.rsi(df['close'], 14).shift(1)
ema_20 = ta.ema(df['close'], 20).shift(1)
ema_50 = ta.ema(df['close'], 50).shift(1)
volume_ma = df['volume'].rolling(20).mean().shift(1)
current_close = df['close'].iloc[-1]
# Условия BUY: все три фактора совпадают
trend_up = ema_20.iloc[-1] > ema_50.iloc[-1]
rsi_ok = 40 < rsi.iloc[-1] < 65 # не перекуплен, но выше нейтрали
volume_confirm = df['volume'].iloc[-1] > volume_ma.iloc[-1] * 1.3
price_above_ema = current_close > ema_20.iloc[-1]
if trend_up and rsi_ok and volume_confirm and price_above_ema:
return 'BUY'
# Условия SELL: тренд сломан
if ema_20.iloc[-1] < ema_50.iloc[-1] and rsi.iloc[-1] > 60:
return 'SELL'
return 'HOLD'אסטרטגיה כזו על נתונים היסטוריים מראה פי 2.5 פחות עסקאות מפסידות מאשר RSI עצמאי. ויחס רווח/סיכון (מקדם רווח) משתפר מ-1.2 ל-2.0.
איך לעבד נתונים בזמן אמת?
במסחר חי, אי אפשר לחשב מחדש אינדיקטורים על כל ההיסטוריה בכל טיק. אנו משתמשים בעדכונים מצטברים:
class IncrementalCandleManager:
def __init__(self, symbol: str, interval: str, history_length: int = 200):
self.symbol = symbol
self.interval = interval
self.history_length = history_length
self.df: pd.DataFrame = None
async def initialize(self):
"""Загружаем историю при старте"""
candles = await self.exchange.get_klines(
self.symbol, self.interval, limit=self.history_length
)
self.df = self.to_dataframe(candles)
def update(self, new_candle: dict):
"""Добавляем новую свечу, удаляем старую"""
new_row = self.candle_to_row(new_candle)
if new_candle['time'] == self.df.index[-1]:
# Обновляем текущую незакрытую свечу
self.df.iloc[-1] = new_row
else:
# Добавляем новую закрытую свечу
self.df = pd.concat([self.df, pd.DataFrame([new_row])])
# Держим фиксированную длину истории
if len(self.df) > self.history_length:
self.df = self.df.iloc[-self.history_length:]זה חוסך עד 90% מזמן העיבוד לעומת חישוב מלא.
איך להגדיר סטופ-לוס וטייק-פרופיט?
אנו משתמשים בפקודות OCO להגדרה אטומית:
class PositionManager:
async def open_with_sl_tp(
self,
symbol: str,
side: str,
amount: float,
entry_price: float,
sl_percent: float,
tp_percent: float,
):
# Основной ордер
order = await self.exchange.place_order(symbol, side, amount)
if side == 'buy':
sl_price = entry_price * (1 - sl_percent / 100)
tp_price = entry_price * (1 + tp_percent / 100)
else:
sl_price = entry_price * (1 + sl_percent / 100)
tp_price = entry_price * (1 - tp_percent / 100)
# OCO ордер для одновременной установки SL и TP
await self.exchange.place_oco_order(
symbol=symbol,
side='sell' if side == 'buy' else 'buy',
quantity=amount,
price=tp_price, # limit (take profit)
stop_price=sl_price, # stop trigger
stop_limit_price=sl_price * (0.995 if side == 'buy' else 1.005),
)
חישוב נכון של סטופ לוס הוא מפתח לשימור הון. הלקוחות שלנו חוסכים בממוצע 0.3 עד 0.5 ETH בחודש על ידי אופטימיזציה של עמלות גז. אם האסטרטגיה רצה על DEX, אנו משלבים אגרגטורי נזילות להפחתת החלקה.
בדיקות: מבэктест לחיים
לפני יציאה לחיים, בדיקות היסטוריות על נתונים (5+ שנים) ובדיקות קדימה על חשבון דמו הן חובה. כללי בדיקה היסטורית: ביצוע בפתיחת הנר הבא, כולל עמלות (מינימום 0.1% לעסקה), התחשבות בהחלקה. מדדים: יחס שארפ, משיכה מקסימלית, אחוז ניצחון. האסטרטגיה חייבת להראות תוצאות חיוביות על נתונים מחוץ למדגם.
| סוג | מה הוא בודק | השהיה אופיינית | עמלות | החלקה | ריאליזם |
|---|---|---|---|---|---|
| בדיקה היסטורית | לוגיקת אותות | אין | אופציונלי | אין | 50-70% |
| מסחר נייר | ביצוע פקודות | אמיתי | כן | מדומה | 80-90% |
| מסחר חי | תנאים אמיתיים | אמיתי | כן | אמיתי | 100% |
דילוג על שלב הנייר הוא הטעות הנפוצה ביותר של סוחרים. אנו מתעקשים על בדיקות חובה בחשבון דמו למשך שבועיים.
טעויות אופייניות בפיתוח בוטים
| טעות | תוצאה | פתרון |
|---|---|---|
| שימוש בנר נוכחי כסגור | הטיית מבט קדימה, רווח שקרי | shift(1) לכל האינדיקטורים |
| בדיקה היסטורית ללא עמלות | רווח מנופח ב-20-30% | כלול עמלות 0.1-0.2% |
| התעלמות מהחלקה | ביצוע גרוע יותר מאשר בבדיקה | דמה החלקה של 0.05% |
| השקה ללא מסחר נייר | אובדן הפקדה תוך 1-2 ימים | בדוק בדמו למשך שבועיים |
היתרונות שלנו
- מעל 5 שנים בפיתוח אלגוריתמי מסחר, 100+ פרויקטים ללקוחות פרטיים ומוסדיים.
- אחריות על קוד: אנו מתקנים באגים בחינם תוך 30 יום לאחר הפריסה.
- אנו משתמשים בשיטות מומלצות: אימות פורמלי לחוזי DeFi, הגנות reentrancy, אופטימיזציית גז.
- רווח פוטנציאלי מאסטרטגיה מוגדרת כהלכה יכול לנוע בין $5,000 ל-$10,000 בחודש בהתאם להון ולתנאי השוק.
צור קשר כדי לדון בפרויקט שלך. אנו נספק הערכה תוך יום אחד. קבל ייעוץ על האסטרטגיה שלך — נעזור להפוך את הרעיון שלך לאלגוריתם עובד.







