מפתח כתב אסטרטגיה בפייתון ורוצה למכור אותה לסוחרים אחרים. אבל איך להגן על הקוד מפני גניבה? איך להציג היסטוריית מסחר אמיתית? ואיך להגדיר מנויים בלי להיתקע בחישובי עמלות ידניים? בנינו 12 פלטפורמות כאלה — כל אחת עם ממוצע של מעל 50,000 סוחרים. הנה איך אנחנו פותרים את הבעיות האלה.
למה בידוד קוד הוא גורם המפתח להצלחת השוק?
בלי בידוד, כל מפתח יכול לגנוב אסטרטגיה של אחר על ידי הרצתה מקומית. אנחנו לא מסתמכים על תום לב — אנחנו בונים הגנה במספר שכבות. Docker הוא הבסיס: קונטיינרים עם מגבלת זיכרון של 256 MB ו-0.5 CPU, רשת רק דרך ה-API של הפלטפורמה, מערכת קבצים לקריאה בלבד, ובדיקת קוד ידנית למפתחים חדשים. גישה זו אמינה פי 10 מהרצה בתהליך משותף. זמן ביצוע ממוצע של בדיקת ביצועים (backtest) במהלך השנה — 5 דקות.
איך עובד ה-SDK לאסטרטגיות?
המפתח כותב אסטרטגיה בפייתון באמצעות ה-SDK שלנו. מחלקת הבסיס StrategyBase מספקת גישה לנתוני נרות, פוזיציות ויתרה דרך הקונטקסט. כל האסטרטגיות עובדות בצורה אסינכרונית — המתודה on_candle נקראת בכל סגירת נר.
# Интерфейс для разработчиков стратегий
from abc import ABC, abstractmethod
class StrategyBase(ABC):
"""Базовый класс для всех стратегий на платформе"""
def __init__(self, context: StrategyContext):
self.ctx = context
@abstractmethod
async def on_candle(self, candle: Candle) -> None:
"""Вызывается при закрытии каждой свечи"""
async def on_trade(self, trade: Trade) -> None:
"""Опционально: вызывается при каждой сделке"""
async def on_order_update(self, order: Order) -> None:
"""Опционально: вызывается при изменении статуса ордера"""
# Доступные методы через context
async def buy_market(self, quantity: float) -> Order:
return await self.ctx.place_order('BUY', 'MARKET', quantity=quantity)
async def sell_market(self, quantity: float) -> Order:
return await self.ctx.place_order('SELL', 'MARKET', quantity=quantity)
def get_position(self) -> float:
return self.ctx.position.quantity
def get_balance(self) -> float:
return self.ctx.balance.usdt
# Пример простой стратегии от разработчика
class RSICrossStrategy(StrategyBase):
"""EMA crossover + RSI фильтр"""
def __init__(self, context, fast_period=9, slow_period=21, rsi_period=14):
super().__init__(context)
self.fast_ema = EMA(fast_period)
self.slow_ema = EMA(slow_period)
self.rsi = RSI(rsi_period)
async def on_candle(self, candle: Candle):
fast = self.fast_ema.update(candle.close)
slow = self.slow_ema.update(candle.close)
rsi = self.rsi.update(candle.close)
position = self.get_position()
if fast > slow and rsi < 70 and position == 0:
await self.buy_market(quantity=self.get_balance() * 0.95 / candle.close)
elif fast < slow and position > 0:
await self.sell_market(quantity=position)
מה זה בידוד ולמה הוא קריטי?
בידוד קוד של צד שלישי הוא המשימה העיקרית של שוק. אנחנו לא מסתמכים על יושרת המפתחים אלא בונים הגנה במספר שכבות. Docker הוא הבסיס: קונטיינרים עם מגבלת זיכרון של 256 MB ו-0.5 CPU, רשת רק דרך ה-API של הפלטפורמה, מערכת קבצים לקריאה בלבד, ובדיקת קוד ידנית למפתחים חדשים. גישה זו מבטיחה אבטחה ברמה של יישום בנקאי ואמינה פי 10 מהרצה בתהליך משותף ללא בידוד.
| שיטת בידוד | אמינות | ביצועים | מורכבות הגדרה |
|---|---|---|---|
| תהליך משותף | נמוכה | גבוהים | נמוכה |
| קונטיינר Docker | גבוהה | בינוניים | בינונית |
| מכונה וירטואלית | גבוהה מאוד | נמוכים | גבוהה |
דוגמה לתצורת Docker:
---
# docker-compose.strategy.yml
services:
strategy-runner:
image: strategy-runtime:latest
mem_limit: 256m
cpus: 0.5
network_mode: none # нет прямого доступа к сети
read_only: true # read-only filesystem
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
איך עובד פרסום אסטרטגיה?
כל אסטרטגיה עוברת תהליך חובה בן ארבעה שלבים לפני פרסום. במהלך השנה, יותר מ-500 אסטרטגיות עברו דרכו, עם 30% שנדחו בבדיקות סטטיות. יחס שארפ ממוצע של אסטרטגיות מוצלחות הוא מעל 1.0.
- ניתוח קוד סטטי (linting) — מסנן שגיאות תחביר ודפוסים מסוכנים, כולל ייבוא אסור.
- בדיקת ביצועים אוטומטית ל-365 הימים האחרונים — בודק רווחיות אמיתית ומשיכה (drawdown) על נרות דקה.
- בדיקת מדדים מינימליים: שארפ > 0.5, משיכה < 50% — מבטיח איכות בסיסית.
- פרסום בקטלוג עם כרטיס אסטרטגיה המציג מדדים מרכזיים.
class PublicationPipeline:
REQUIRED_BACKTEST_PERIOD = 365 # дней
async def process_submission(self, strategy: StrategySubmission) -> PublicationResult:
# 1. Статический анализ кода
lint_result = await self.code_linter.check(strategy.code)
if lint_result.has_errors:
return PublicationResult.rejected(lint_result.errors)
# 2. Автоматический бэктест
backtest = await self.backtester.run(
strategy=strategy,
symbol=strategy.config.symbol,
period_days=self.REQUIRED_BACKTEST_PERIOD,
)
# 3. Проверка минимальных метрик
if backtest.sharpe_ratio < 0.5:
return PublicationResult.rejected("Sharpe ratio below minimum threshold")
if backtest.max_drawdown > 0.5:
return PublicationResult.rejected("Max drawdown exceeds 50%")
# 4. Публикация
published = await self.publish(strategy, backtest)
return PublicationResult.approved(published.id)
איזה מודל מונטיזציה רווחי יותר?
יישמנו שלושה מודלים עיקריים. האסטרטגיה האופטימלית היא לשלב מנוי ועמלת ביצועים. לדוגמה, מנוי מספק הכנסה יציבה לפלטפורמה, בעוד שעמלת ביצועים מניעה מפתחים לשפר אסטרטגיות. רווח ממוצע למפתח תחת מודל הביצועים הוא עד $10,000 בחודש.
| מודל | תיאור | עמלת פלטפורמה |
|---|---|---|
| מנוי חודשי | תשלום קבוע מהמשתמש | 30% |
| עמלת ביצועים | אחוז מרווח המנוי | 30% מהחלק של המפתח |
| רכישה חד-פעמית | גישה בלתי מוגבלת | 30% |
חישוב תשלום למפתח:
def calculate_developer_payout(subscription: Subscription, performance: PerformanceData) -> Decimal:
if subscription.model == 'MONTHLY':
platform_fee = subscription.price * Decimal('0.30')
return subscription.price - platform_fee
elif subscription.model == 'PERFORMANCE':
profit = performance.follower_profit
if profit <= 0:
return Decimal(0)
developer_share = profit * subscription.performance_fee_pct
platform_fee = developer_share * Decimal('0.30')
return developer_share - platform_fee טעויות אופייניות בהשקת שוק
- בידוד חלש: הרצת אסטרטגיות בתהליך משותף מובילה לדליפות נתונים. פתרון — רק קונטיינריזציה עם אפס גישה לרשת.
- סטטיסטיקות סגורות: אסטרטגיות ללא מדדים שקופים פוגעות באמון. תמיד הצג P&L ומשיכה בכרטיס.
- מונטיזציה מורכבת: רק מודל מונטיזציה אחד מגביל את הקהל. שלב מנוי ועמלת ביצועים.
רוצים להימנע מטעויות אלה? בקשו ייעוץ על הארכיטקטורה של השוק שלכם — ננתח את המקרה שלכם תוך שעתיים ונציע פתרון אופטימלי.
ממשק משתמש: כרטיס אסטרטגיה
אלמנטים מרכזיים: גרף P&L, משיכה מקסימלית, יחס שארפ, אחוז ניצחונות, מספר מנויים, בורסות נתמכות, תיאור לוגיקה. שקיפות היא הבסיס לאמון. אנחנו גם מוסיפים תג "מאומת" לאסטרטגיות שעברו ביקורת ידנית. הפלטפורמה יכולה להשתלב עם ארנקי Web3 לתשלומים אוטומטיים.
מה כלול בעבודה?
אנחנו מספקים:
- תיעוד API למפתחי אסטרטגיות (Strategy SDK) עם דוגמאות בפייתון ו-JavaScript
- קוד מקור של הפלטפורמה עם הוראות התקנה עבור Kubernetes שלך
- סביבת בדיקה לניפוי אסטרטגיות על נתונים מדומים
- הכשרת צוות (יומיים) ותבניות לבדיקת קוד
- 3 חודשי תמיכה לאחר ההשקה
נעריך את הפרויקט שלך תוך 2 ימי עסקים. צרו קשר לקבלת ייעוץ והצעה מסחרית. הזמינו פיתוח שוק — ניישם את הפרויקט תוך 3-6 חודשים.







