כל המאמרים
trading botAIPythonAlpacaBacktestingאוטומציה

איך לבנות AI Trading Bot מאפס — המדריך הטכני המלא לשנת 2026

מדריך שלב-אחר-שלב לבניית בוט מסחר AI מאפס: Python, yfinance, Alpaca API, Backtrader, ו-DigitalOcean. כולל קוד מלא, Backtesting, ו-Deploy לשרת.

כדי לבנות AI Trading Bot מאפס צריך לעשות שלושה דברים בסדר הנכון: (1) להגדיר אסטרטגיה ברת-בדיקה עם כניסה, יציאה, ו-Stop Loss ברורים, (2) לכתוב ולבחון את הקוד עם נתונים היסטוריים לפני שמשקיעים שקל אחד, ו-(3) להריץ את הבוט על ענן עם שמירת לוגים. כל השאר — הכלים, ה-AI, הפלטפורמה — הם פרטי יישום. המדריך הזה עובר את כל השלבים, עם קוד שעובד.


מה הבוט שלך צריך לדעת לעשות לפני שורת קוד אחת

לפני שפותחים IDE, מגדירים את האסטרטגיה בכתב. בוט ללא אסטרטגיה מוגדרת הוא רק מחולל הפסדים אוטומטי.

תבנית הגדרת אסטרטגיה:

| שדה | תיאור | |-----|--------| | שם האסטרטגיה | Gap and Go / RSI Oversold / MA Crossover | | מכשיר | מניות S&P 500 / ETF / קריפטו | | סיגנל כניסה | תנאי מדויק (דוגמה: RSI < 30 וסגירה מעל MA20) | | סיגנל יציאה | תנאי יציאה (דוגמה: RSI > 60 או +5%) | | Stop Loss | % מקסימלי להפסד (דוגמה: 2%) | | Take Profit | יחס סיכון/רווח (דוגמה: 1:2) | | ניהול פוזיציה | % מהתיק לכל עסקה (דוגמה: 2%) |

שלוש אסטרטגיות מתאימות למתחילים:

  1. Gap and Go — מניה שפתחה פער גדול (>3%) עם נפח גבוה, כניסה לונג בראשית המסחר
  2. RSI Oversold — RSI מתחת ל-30 + חזרה מעל ה-30, סיגנל לרכישה
  3. MA Crossover — חצייה של ממוצע נע קצר (20) מעל ממוצע ארוך (50)

כיצד להתקין את כל הכלים בדקה אחת

כל הכלים חינמיים ו-Open Source:

pip install yfinance pandas pandas-ta alpaca-trade-api python-dotenv backtrader

| ספרייה | תפקיד | |--------|--------| | yfinance | נתוני מניות היסטוריים מ-Yahoo Finance | | pandas-ta | אינדיקטורים טכניים (RSI, MACD, MA) | | alpaca-trade-api | ביצוע עסקאות ב-Paper Trading וב-Live | | python-dotenv | שמירת API Keys בצורה בטוחה | | backtrader | Backtesting על נתונים היסטוריים |

שמירת API Keys — אסור לקודד בקוד

# קובץ .env — לא לעלות ל-Git!
ALPACA_API_KEY=your_key_here
ALPACA_SECRET_KEY=your_secret_here
ALPACA_BASE_URL=https://paper-api.alpaca.markets
from dotenv import load_dotenv
import os

load_dotenv()
api_key = os.getenv("ALPACA_API_KEY")
secret_key = os.getenv("ALPACA_SECRET_KEY")
base_url = os.getenv("ALPACA_BASE_URL")

הוסף .env ל-.gitignore לפני ה-commit הראשון.


איך לכתוב את הקוד מהר יותר עם AI

Claude ו-ChatGPT יכולים לכתוב 80% מהקוד — אבל צריך לדעת לבקש נכון.

תבנית Prompt לבוט:

"כתוב Python script שמשתמש ב-yfinance לטעינת נתוני AAPL ב-1 Day timeframe, מחשב RSI(14) עם pandas-ta, ומייצר סיגנל קנייה כש-RSI חוצה מתחת ל-30 וחוזר מעל. כלול Stop Loss של 2% ו-Take Profit של 4%. קוד נקי, עם הערות בעברית."

רשימת בדיקה לקוד שה-AI כתב:

  • [ ] האם ה-Stop Loss מוגדר כערך מספרי ולא כתנאי לוגי בלבד?
  • [ ] האם הקוד מטפל ב-API error ולא קורס שקטות?
  • [ ] האם Position Sizing מחושב נכון (תיק * 0.02) / מחיר_כניסה?
  • [ ] האם הלוג כולל timestamp, סמל, מחיר, וסיבת כניסה?

כיצד לטעון נתונים ולחשב אינדיקטורים

import yfinance as yf
import pandas_ta as ta

# טעינת נתונים היסטוריים
ticker = yf.Ticker("AAPL")
df = ticker.history(period="6mo", interval="1d")

# חישוב אינדיקטורים
df["RSI"] = ta.rsi(df["Close"], length=14)
df["MA20"] = ta.sma(df["Close"], length=20)
df["MA50"] = ta.sma(df["Close"], length=50)

# סיגנל כניסה: RSI חוזר מעל 30 אחרי שהיה מתחתיו
df["signal"] = (df["RSI"] < 30) & (df["RSI"].shift(1) >= 30)

print(df[df["signal"]][["Close", "RSI", "MA20"]].tail(10))

לנתונים בזמן אמת דרך Alpaca WebSocket:

from alpaca_trade_api.stream import Stream

stream = Stream(api_key, secret_key, base_url=base_url, data_feed="iex")

async def on_bar(bar):
    print(f"{bar.symbol}: Close={bar.close}, Volume={bar.volume}")

stream.subscribe_bars(on_bar, "AAPL")
stream.run()

Backtesting — כך בודקים את האסטרטגיה על העבר

ראה מדריך מלא: מה זה Backtesting ואיך עושים אותו נכון

import backtrader as bt
import yfinance as yf

class GapStrategy(bt.Strategy):
    def __init__(self):
        self.rsi = bt.indicators.RSI(self.data.close, period=14)

    def next(self):
        if not self.position:
            # כניסה: RSI עולה מתחת ל-30
            if self.rsi[0] < 30 and self.rsi[-1] >= 30:
                size = int((self.broker.cash * 0.02) / self.data.close[0])
                self.buy_bracket(
                    size=size,
                    stopprice=self.data.close[0] * 0.98,   # Stop Loss 2%
                    limitprice=self.data.close[0] * 1.04   # Take Profit 4%
                )

# הרצת Backtest
cerebro = bt.Cerebro()
cerebro.addstrategy(GapStrategy)

data_df = yf.download("AAPL", start="2023-01-01", end="2025-01-01")
feed = bt.feeds.PandasData(dataname=data_df)
cerebro.adddata(feed)

cerebro.broker.setcash(10000)
cerebro.addanalyzer(bt.analyzers.SharpeRatio, _name="sharpe")
cerebro.addanalyzer(bt.analyzers.DrawDown, _name="drawdown")

results = cerebro.run()
strat = results[0]

print(f"Sharpe Ratio: {strat.analyzers.sharpe.get_analysis()['sharperatio']:.2f}")
print(f"Max Drawdown: {strat.analyzers.drawdown.get_analysis()['max']['drawdown']:.2f}%")
print(f"Final Value: ${cerebro.broker.getvalue():,.2f}")

מה תוצאות Backtest טובות?

| מדד | מינימום לצלוח | אידיאלי | |-----|--------------|---------| | Sharpe Ratio | > 1.0 | > 1.5 | | Max Drawdown | < 20% | < 10% | | Win Rate | > 45% | > 55% | | Profit Factor | > 1.3 | > 1.8 |


Paper Trading — עסקאות אמיתיות בלי כסף אמיתי

לפני שמשקיעים כסף אמיתי — חובה לרוץ Paper Trading לפחות חודש. ראה: כמה כסף צריך להתחיל מסחר אוטומטי

import alpaca_trade_api as tradeapi

api = tradeapi.REST(api_key, secret_key, base_url, api_version="v2")

def execute_trade(symbol, entry_price, qty):
    stop_loss_price = round(entry_price * 0.98, 2)
    take_profit_price = round(entry_price * 1.04, 2)

    order = api.submit_order(
        symbol=symbol,
        qty=qty,
        side="buy",
        type="market",
        time_in_force="day",
        order_class="bracket",
        stop_loss={"stop_price": stop_loss_price},
        take_profit={"limit_price": take_profit_price}
    )
    
    log_trade(symbol, entry_price, qty, stop_loss_price, take_profit_price, order.id)
    return order

def log_trade(symbol, price, qty, sl, tp, order_id):
    import csv
    from datetime import datetime
    
    with open("trades_log.csv", "a", newline="") as f:
        writer = csv.writer(f)
        writer.writerow([
            datetime.now().isoformat(),
            symbol, price, qty, sl, tp, order_id
        ])

Bracket Order שולח Stop Loss ו-Take Profit בפקודה אחת — אם הבוט נפל, ההגנות עדיין פעילות.


Deploy לשרת — איך הבוט רץ 24/7

הפתרון הפשוט ביותר: DigitalOcean Droplet ב-$6 לחודש (Ubuntu 22.04, 1GB RAM).

# על השרת
sudo apt update && sudo apt install python3-pip python3-venv -y

mkdir ~/trading_bot && cd ~/trading_bot
python3 -m venv venv
source venv/bin/activate

pip install yfinance pandas pandas-ta alpaca-trade-api python-dotenv backtrader

# העלאת קבצים
scp bot.py .env user@your_server_ip:~/trading_bot/

Systemd Service — הבוט מתחיל מחדש אוטומטית אחרי קריסה:

# /etc/systemd/system/trading_bot.service
[Unit]
Description=AI Trading Bot
After=network.target

[Service]
Type=simple
User=your_username
WorkingDirectory=/home/your_username/trading_bot
ExecStart=/home/your_username/trading_bot/venv/bin/python bot.py
Restart=always
RestartSec=10
StandardOutput=append:/var/log/trading_bot.log
StandardError=append:/var/log/trading_bot_error.log

[Install]
WantedBy=multi-user.target
sudo systemctl enable trading_bot
sudo systemctl start trading_bot
sudo systemctl status trading_bot

מתי הבוט מוכן לכסף אמיתי?

7 קריטריונים לפני מעבר ל-Live Trading:

  • [ ] הבוט עבר Backtest עם Sharpe > 1.0 ו-Drawdown < 20%
  • [ ] רץ Paper Trading חודש מלא ללא קריסות
  • [ ] כל עסקה מתועדת בלוג עם timestamp ומחיר
  • [ ] Stop Loss פעל נכון לפחות 3 פעמים בפועל
  • [ ] Systemd מפעיל מחדש את הבוט אוטומטית
  • [ ] יש התראות Telegram/Email על שגיאות קריטיות
  • [ ] מבין כל שורת קוד בסקריפט הראשי

תוכנית גדילה הדרגתית:

| שלב | הון | מה מוכיחים | |-----|-----|-----------| | Paper Trading | $0 | האסטרטגיה עובדת | | Live שלב א' | $500–1,000 | הקוד עובד עם כסף אמיתי | | Live שלב ב' | $2,000–5,000 | ניהול פוזיציה ו-Drawdown | | סקייל-אפ | $10,000+ | יציבות לאורך זמן |

אל תדלגו שלבים — כל שלב חושף בעיות שרק כסף אמיתי מגלה.


שאלות נפוצות

כמה זמן לוקח לבנות בוט עובד? עם Python בסיסי ו-AI לכתיבת קוד — 2–4 שבועות לבוט ראשון שרץ ב-Paper Trading.

האם צריך לדעת תכנות מתקדם? לא. Python בסיסי (משתנים, לולאות, פונקציות) מספיק — ה-AI כותב את החלקים המורכבים.

מה ההבדל בין Paper Trading ל-Backtesting? Backtesting בוחן על נתוני עבר; Paper Trading מריץ את האסטרטגיה בזמן אמת עם כסף מדומה.

Alpaca מדוייק לישראלים? כן. Alpaca מאפשר פתיחת חשבון לישראלים, ממשק API נוח, ו-Paper Trading חינמי ללא הגבלה.

מה עושים כשהבוט מפסיד ברצף? עוצרים, בוחנים את הלוגים, מגדירים Circuit Breaker — למשל, עצירה אוטומטית אחרי 3 הפסדות רצופות.

האם אפשר להריץ כמה אסטרטגיות במקביל? כן, אבל מתחילים באחת. כל אסטרטגיה דורשת תשומת לב נפרדת בשלב ה-Paper Trading.


סיכום: הסדר הנכון לבניית בוט

  1. הגדר אסטרטגיה בכתב עם כניסה, יציאה, Stop Loss
  2. Backtest על 2+ שנים של נתונים היסטוריים
  3. Paper Trading חודש מלא — 7 קריטריוני מוכנות
  4. Deploy לשרת עם Systemd ולוגים
  5. Live Trading עם $500 ראשונים בלבד

לפרטים על איך בוט מסחר עובד מבפנים, ראה: איך עובד בוט מסחר אוטומטי — הסבר מלא

רוצה לבנות בוט כזה בעצמך?

שיחה קצרה של 20 דקות. בלי לחץ, בלי התחייבות.

דברו איתנו חינם