סוכן מסחר המבוסס על 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 עם כוונון היפרפרמטרים אוטומטי.
- בדיקת חוזר על נתונים היסטוריים עם דוח מדדים (שארפ, סורטינו, גרירה מקסימלית).
- מסירת המודל המאומן ותיעוד לפריסה.
- ייעוץ בנושא אינטגרציה עם מסוף המסחר שלך.
תהליך
- אנליטיקה — סקירת דרישות, מקורות נתונים, אילוצים.
- עיצוב — הגדרת מרחב מצב/פעולה, פונקציית תגמול.
- יישום — הגדרת FinRL, אימון מודלים בסיסיים.
- בדיקות — בדיקת חוזר על נתוני חוץ-מדגם, בדיקת עמידות.
- פריסה — מסירת המודל, הדרכת הצוות שלך.
לוחות זמנים משוערים
| שלב | משך |
|---|---|
| אב טיפוס (אלגוריתם אחד) | 2–3 ימים |
| השוואת 5 אלגוריתמים | שבוע |
| מחזור מלא עם דוח | שבועיים |
העלות מחושבת באופן אישי — צור קשר להערכת הפרויקט שלך. למהנדסים המוסמכים של TensorFlow יש ניסיון עם JAX ו-PyTorch. קבל ייעוץ — נדון בפרטים. הזמן הגדרת FinRL — קבל אב טיפוס עובד תוך 2–3 ימים.







