פיתוח מנוע בדיקות חוזרות (Backtesting) ב-JavaScript/TypeScript
צוות מסחר משתמש ב-Python אך רוצה לשלב בדיקות באפליקציית ווב. סקריפטים של Python קשים להטמעה בדפדפן, ושכתוב ב-C# לוקח יותר מדי זמן. מנוע TypeScript פותר את שתי הבעיות: הוא רץ גם על השרת (Node.js) וגם בדפדפן. אובדן מיליונים על נייר עקב החלקה (slippage) שלא נלקחה בחשבון הוא סיפור נפוץ. הניסיון שלנו — 7+ פרויקטים בשנים האחרונות — מבטיח עמידות בפני כניסה חוזרת (reentrancy) וטיפול נכון בהחלקה. אנו משתמשים ב-Decimal.js לחישובים מדויקים. קבלו ייעוץ להערכת הפרויקט שלכם — נגיב תוך יום.
למה לבחור ב-TypeScript לבדיקות חוזרות?
TypeScript מספק ממשקים לנרות ופקודות — המהדר תופס שגיאות לפני הריצה. זה קריטי: שגיאת הקלדה אחת בשדה import Decimal from 'decimal.js'; const pnl = new Decimal(exitPrice).minus(entryPrice).times(quantity).minus(commission); במקום close יכולה לעלות במיליונים על נייר. אנו משתמשים ב-ethers.js לאינטראקציה עם בלוקצ'יין, אך לנתונים היסטוריים, Node.js טהור מספיק. המנוע תומך בטוקנים מסוג ERC-20 ובבריכות AMM סטנדרטיות. TypeScript גם מקל על כתיבת בדיקות יחידה ושילוב עם CI/CD.
מהן המלכודות עם מספרי JavaScript?
JavaScript משתמש בדייקנות כפולה IEEE 754. לבדיקות רגילות, 15 ספרות דיוק מספיקות, אך לחישובים עם עמלות ומנות חלקיות, עדיף לכלול את Decimal.js. אנו כוללים אותו בקונפיגורציה כברירת מחדל. דוגמה:
import Decimal from 'decimal.js'; const pnl = new Decimal(exitPrice).minus(entryPrice).times(quantity).minus(commission); דוגמה לאופטימיזציית פרמטרים
אנו משתמשים בחיפוש רשת (grid search) עם עיבוד מקבילי. הקלט הוא טווח פרמטרים, למשל תקופת EMA מ-10 עד 50 עם צעד של 5. Worker Threads ב-Node.js או Web Workers בדפדפן מריצים בדיקות במקביל. התוצאות ממוינות לפי יחס שארפ (Sharpe ratio). האצה אופיינית היא פי 4-6 בהשוואה לריצה סדרתית.איך אנו בונים את ארכיטקטורת המנוע
הארכיטקטורה מודולרית: DataFeed, Broker, Portfolio, Strategy. כל מודול ניתן להחלפה ללא שינוי האחרים. האסטרטגיה יורשת ממחלקה אבסטרקטית ומיישמת את המתודה onBar. לבדיקות מקבילות אנו משתמשים ב-workers:
- בדפדפן — Web Workers (MDN)
- על השרת — Worker Threads מ-
node:worker_threads
השוואה עם חלופות:
| פרמטר | מנוע ה-JS שלנו | Python (backtrader) | C# (Wealth-Lab) |
|---|---|---|---|
| ריצה בדפדפן | כן (Web Worker) | לא | לא |
| בטיחות טיפוסים | TypeScript | אופציונלי (mypy) | חזקה |
| מהירות (1M נרות) | ~1.2 שניות | ~3.5 שניות | ~0.8 שניות |
| רישיון | MIT | GPL | מסחרי |
טעויות נפוצות בבדיקות חוזרות
- הטיה קדימה (Look-ahead bias) — שימוש בנתונים עתידיים. פתרון: בקרה קפדנית על חותמות זמן.
- התעלמות מהחלקה. פתרון: פרמטר
slippagePct(ברירת מחדל 0.05%). - אי התחשבות בעמלות. פתרון:
commissionPctב-BrokerOptions. - גלישת מספרים. פתרון: Decimal.js לסכומים גדולים.
- חוסר בדיקות על מסגרות זמן שונות — אסטרטגיה עשויה לעבוד על נרות של שעה אך להיכשל על נרות של דקה. פתרון: ניתוח רב-מסגרות זמן.
- התעלמות מנזילות — נפח הזמנה גדול יכול להגדיל את ההחלקה. אנו מדמים עומק ספר הזמנות באמצעות פרמטר מגבלת נפח.
מה כלול בעבודה במפתחות (Turnkey)
- עיצוב ארכיטקטורה וממשק
- יישום DataFeed (CSV, REST API, WebSocket)
- Broker עם פקודות שוק/מוגבלות/עצירת-מוגבלת
- Portfolio עם עקומת הון ועסקאות
- מודול אינדיקטורים (EMA, RSI, MACD, ATR)
- אופטימיזציית פרמטרים (רשת/אקראי)
- שילוב עם APIs של ברוקרים (Binance, Bybit) לפי בקשה
- תיעוד והדרכת צוות
תהליך העבודה
| שלב | משך |
|---|---|
| ניתוח דרישות ומפרט | 2–3 ימים |
| אב-טיפוס ליבה (DataFeed, Broker, Portfolio) | 5–7 ימים |
| אינדיקטורים ואסטרטגיה | 3–5 ימים |
| אופטימיזציה ובדיקות | 3–5 ימים |
| שילוב ותיעוד | 2–3 ימים |
| סה"כ | מ-2 עד 4 שבועות |
העלות מחושבת באופן אישי — תלויה במורכבות לוגיקת הברוקר ובצורך בשילוב API חיצוני. חיסכון זמן אופייני לכל אסטרטגיה הוא עד 80% בהשוואה לבדיקות ידניות, מה שמפחית משמעותית את תקציב הפיתוח. קבלו ייעוץ להערכת הפרויקט שלכם. הניסיון שלנו: שנים רבות של פיתוח מערכות מסחר, אנו מבטיחים איכות ועמידה בזמנים. הזמינו פיתוח מנוע למשימות שלכם — תוצאות מובטחות.







