הגדרת מסגרת FinRL לאימון סוכן מסחר

אלגוריתמי מסחר מצליחים לעיתים בסימולציות אך מפסידים הון בשווקים אמיתיים בשל עמלות והחלקה שלא נלקחו בחשבון. אנו מגדירים את מסגרת FinRL לתנאי השוק שלך, ובונים סביבת StockTradingEnv המשקפת במדויק עלויות ונזילות. הצוות שלנו מספק פרויקטים סוהר מאודיט ועד פריסה, ומבטיח פעולה אמינה של הסוכן עם תמיכה מתמשכת.

תחומי פיתוח AI

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1365
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

סוכן מסחר המבוסס על DRL ייכשל אם הסביבה לא משקפת עמלות ונזילות אמיתיות. נתקלנו בפרויקטים שבהם המודל הראה תשואה של 200% בסימולציה אך הפסיד הון בשווקים חיים עקב התעלמות ממרווחים והחלקה. FinRL מטפל בכך עם סביבת StockTradingEnv הניתנת להתאמה אישית, שבה ניתן להגדיר עמלות קנייה/מכירה, הון התחלתי ומגבלות עסקה. מפתחים רבים מעתיקים את התצורה ממאמר מבלי להתחשב בברוקר שלהם: לדוגמה, הם משתמשים בעמלה ברירת מחדל של 0.1% בעוד שהנתון האמיתי הוא 0.3% כולל מרווח. לאחר התאמת הסביבה, התשואה ירדה מ-30% ל-8%, אך המודל החל להרוויח באופן עקבי בייצור. אנו מגדירים את הסביבה לתנאי השוק הספציפיים שלך: נזילות, מרווחים, מגבלות גודל פוזיציה. הניסיון שלנו — 5+ שנים של יישום DRL בפיננסים, 50+ פרויקטים מוצלחים. אנו מבטיחים בסיס עבודה תוך 2–3 ימים. קבל ייעוץ — נבחן את המקרה שלך מקצה לקצה. צור קשר להערכת עלויות ולוחות זמנים.

בעיות אופייניות בהגדרת FinRL

התעלמות מעמלות והחלקה. אם לא תגדיר buy_cost_pct ו-sell_cost_pct, הסוכן יבצע עסקאות בעלות אפסית, דבר בלתי אפשרי במציאות. בפרויקט עם קרן גידור, הוספנו החלקה של 0.05% לכל עסקה — התשואה ירדה ב-12%, אך המודל הפך לעמיד בפני תנאי שוק.

התאמת יתר לנתונים היסטוריים. הסוכן עלול לשנן רעש במקום אות. כדי להימנע מכך, אנו משתמשים בבדיקת חוץ-מדגם עם חלוקת נתונים 70/30 ורגולריזציה באמצעות בונוס אנטרופיה ב-PPO. חיסכון אופייני בסיכון: +15% יחס שארפ.

נורמליזציה שגויה של תכונות. מחירי מניות אינם בקנה מידה אחיד, מה שמפריע לאימון. FinRL מיישם אוטומטית נורמליזציית Z-score על אינדיקטורים טכניים, אך אם הנתונים מכילים חריגים (למשל, קריסת פלאש), הסוכן עלול לבחור אסטרטגיה שגויה. אנו מוסיפים וינסוריזציה באחוזון 0.5.

התקנה והרצה ראשונה

pip install finrl pip install stockstats wrds alpaca-trade-api # источники данных 

התחלה מהירה:

import finrl
from finrl.train import train
from finrl.test import test
from finrl.config_tickers import DOW_30_TICKER
from finrl.config import INDICATORS

# обучение на акциях Dow Jones 30
train(
    start_date='2010-01-01',
    end_date='2021-10-31',
    ticker_list=DOW_30_TICKER,
    data_source='yahoofinance',
    technical_indicator_list=INDICATORS,
    drl_lib='stable_baselines3',
    env='stock_trading',
    model_name='ppo',
    if_store_account_value=True,
    cwd='./trained_models/ppo_dow30'
)

test(
    start_date='2021-11-01',
    end_date='2023-12-31',
    ticker_list=DOW_30_TICKER,
    data_source='yahoofinance',
    technical_indicator_list=INDICATORS,
    drl_lib='stable_baselines3',
    env='stock_trading',
    model_name='ppo',
    cwd='./trained_models/ppo_dow30'
)

כיצד להגדיר את פונקציית התגמול?

פונקציית התגמול מגדירה את התנהגות הסוכן. ב-FinRL היא מוגדרת דרך pip install finrl pip install stockstats wrds alpaca-trade-api # источники данных ב-import finrl from finrl.train import train from finrl.test import test from finrl.config_tickers import DOW_30_TICKER from finrl.config import INDICATORS # обучение на акциях Dow Jones 30 train( start_date='2010-01-01', end_date='2021-10-31', ticker_list=DOW_30_TICKER, data_source='yahoofinance', technical_indicator_list=INDICATORS, drl_lib='stable_baselines3', env='stock_trading', model_name='ppo', if_store_account_value=True, cwd='./trained_models/ppo_dow30' ) test( start_date='2021-11-01', end_date='2023-12-31', ticker_list=DOW_30_TICKER, data_source='yahoofinance', technical_indicator_list=INDICATORS, drl_lib='stable_baselines3', env='stock_trading', model_name='ppo', cwd='./trained_models/ppo_dow30' ) . כברירת מחדל, התגמול שווה לשינוי בערך התיק. אנו מוסיפים לעיתים קנס על סיכון מופרז, כמו שונות של תשואות יומיות. זה מאלץ את הסוכן לחפש אסטרטגיות יציבות יותר, ומשפר את יחס שארפ ב-15–20%.

from finrl.meta.env_stock_trading.env_stocktrading import StockTradingEnv

env_kwargs = {
    "hmax": 100,  # max акций за транзакцию
    "initial_amount": 1_000_000,  # начальный капитал
    "buy_cost_pct": [0.001] * n,  # комиссия покупки
    "sell_cost_pct": [0.001] * n,  # комиссия продажи
    "state_space": state_space,
    "stock_dim": n_tickers,
    "tech_indicator_list": INDICATORS,
    "action_space": n_tickers,
    "reward_scaling": 1e-4  # масштаб reward
}

env = StockTradingEnv(df=train_df, **env_kwargs)

מדוע PPO יעיל למסחר?

PPO (אופטימיזציית מדיניות פרוקסימלית) הוא אחד האלגוריתמים הפופולריים ביותר ל-DRL פיננסי. הוא יציב יותר מ-A2C, מהיר יותר מ-DDPG, ודורש פחות כוונון היפרפרמטרים. במדדים שלנו, PPO עולה על A2C ביחס שארפ ב-15–20% ומתכנס פי 2 מהר יותר מ-DDPG על נפח נתונים שווה. לפי ויקיפדיה, PPO מבטיח התכנסות אמינה בבעיות עם מרחב פעולה רציף.

אלגוריתם מהירות אימון תשואה עודפת אופיינית על S&P500 המלצה
A2C מהיר +5–10% לאבות טיפוס
PPO בינוני +10–20% בחירה עיקרית
DDPG איטי +8–15% לפעולות רציפות
TD3 בינוני +12–18% DDPG משופר
SAC בינוני +10–15% ניסיוני

כדי להשוות מודלים, השתמש בפונקציות המובנות של FinRL:

models = ['a2c', 'ddpg', 'ppo', 'td3', 'sac']
results = {}
for model_name in models:
    train(model_name=model_name, cwd=f'./models/{model_name}', ...)
    account_value = test(model_name=model_name, cwd=f'./models/{model_name}', ...)
    results[model_name] = account_value
# визуализация
from finrl.plot import backtest_plot
backtest_plot(results, baseline_start='2022-01-01', baseline_end='2023-12-31', baseline_ticker='^GSPC') # vs S&P500

כיצד להימנע מהתאמת יתר במהלך אימון הסוכן?

התאמת יתר היא בעיה נפוצה ב-DRL לפיננסים. השתמש בטכניקות הבאות:

  • חלק את הנתונים לאימון/ולידציה/בדיקה (למשל, 60/20/20). השתמש בסט הוולידציה לעצירה מוקדמת.
  • החל רגולריזציה: ב-PPO, השתמש בפרמטר reward_scaling (בונוס אנטרופיה). ערכים 0.01–0.05 משפרים הכללה.
  • הוסף רעש לסביבה: עיכובים אקראיים בביצוע הזמנות או עמלות סטוכסטיות. זה מדמה רעש שוק.
  • הגבל את צעדי הפרק ללא יותר מ-252 (שנת מסחר). פרקים קצרים מאלצים את הסוכן להתמקד באותות קצרי טווח.
  • בדוק את המודל על תקופות חוץ-מדגם עם משברים (למשל, 2020). אם התשואה יורדת ביותר מ-30%, הסוכן מותאם יתר על המידה.

אילו מדדים יש להשתמש להערכת הסוכן?

אל תסתמך רק על תשואה מצטברת. השתמש בסט מקיף:

  • יחס שארפ — תשואה מותאמת סיכון. סוכן טוב מראה שארפ > 1.0.
  • גרירה מקסימלית — הירידה הגדולה ביותר משיא לשפל. לא תעלה על 20%.
  • שיעור ניצחון — אחוז עסקאות רווחיות. מעל 50% טוב, אך תלוי באסטרטגיה.
  • יחס קלמר — תשואה שנתית חלקי גרירה מקסימלית. אידיאלית > 2.
  • יחס סורטינו — דומה לשארפ אך מתחשב רק בתנודתיות שלילית. מחמיר יותר.

ב-FinRL, ניתן לקבל מדדים אלה דרך env_kwargs או לחשב ידנית מ-from finrl.meta.env_stock_trading.env_stocktrading import StockTradingEnv env_kwargs = { "hmax": 100, # max акций за транзакцию "initial_amount": 1_000_000, # начальный капитал "buy_cost_pct": [0.001] * n, # комиссия покупки "sell_cost_pct": [0.001] * n, # комиссия продажи "state_space": state_space, "stock_dim": n_tickers, "tech_indicator_list": INDICATORS, "action_space": n_tickers, "reward_scaling": 1e-4 # масштаб reward } env = StockTradingEnv(df=train_df, **env_kwargs) . אנו מספקים את כל המדדים המרכזיים בדוח שלנו.

מה כלול בעבודה שלנו

  • ניתוח נתוני שוק זמינים ובחירת מקורות.
  • הגדרת סביבת StockTradingEnv עבור הברוקר/השוק שלך.
  • אימון של 5 אלגוריתמי DRL עם כוונון היפרפרמטרים אוטומטי.
  • בדיקת חוזר על נתונים היסטוריים עם דוח מדדים (שארפ, סורטינו, גרירה מקסימלית).
  • מסירת המודל המאומן ותיעוד לפריסה.
  • ייעוץ בנושא אינטגרציה עם מסוף המסחר שלך.

תהליך

  1. אנליטיקה — סקירת דרישות, מקורות נתונים, אילוצים.
  2. עיצוב — הגדרת מרחב מצב/פעולה, פונקציית תגמול.
  3. יישום — הגדרת FinRL, אימון מודלים בסיסיים.
  4. בדיקות — בדיקת חוזר על נתוני חוץ-מדגם, בדיקת עמידות.
  5. פריסה — מסירת המודל, הדרכת הצוות שלך.

לוחות זמנים משוערים

שלב משך
אב טיפוס (אלגוריתם אחד) 2–3 ימים
השוואת 5 אלגוריתמים שבוע
מחזור מלא עם דוח שבועיים

העלות מחושבת באופן אישי — צור קשר להערכת הפרויקט שלך. למהנדסים המוסמכים של TensorFlow יש ניסיון עם JAX ו-PyTorch. קבל ייעוץ — נדון בפרטים. הזמן הגדרת FinRL — קבל אב טיפוס עובד תוך 2–3 ימים.