الأدلة التقنية

صندوق رأس المال الجريء Venture Capital من الداخل

كيف يجمع الصندوق المال ويأخذ رسومه وحصته من الأرباح، ولماذا يبحث كل صندوق عن شركة واحدة تعيد قيمته كاملة.

صندوق رأس المال الجريء Venture Capital من الداخل

في المقال السابق ذكرنا أن مدير صندوق رأس المال الجريء Venture Capital يدير مال غيره، وأن هذا وحده يفسر كثيراً من أسئلته، فلماذا يسألك عن سوق بمليارات وأنت تبيع اليوم لعشرة عملاء؟ ولماذا يرفض شركة مربحة ومستقرة؟ ولماذا يتحدث عن «إعادة الصندوق» كأنها هدف كل استثمار؟ والإجابة ليست في شخصيته وإنما في حسابات الصندوق نفسه: من أين يأتي المال، وكم يأخذ المدير منه، وكيف تتوزع النتائج على الشركات. وفي هذا المقال سوف نفتح الصندوق من الداخل، ثم نبني محاكياً صغيراً بلغة Python يحسب كل ذلك بالأرقام.

المواضيع في السلسلة:

وسوف نناقش في هذا المقال ما يلي:

  • الشريك العام GP والشريك المحدود LP، ومن يملك المال ومن يديره.
  • عمر الصندوق وطلبات المال Capital Calls والتوزيعات.
  • رسوم الإدارة Management Fee والحصة من الأرباح Carried Interest، والأرقام من دراسة أكاديمية.
  • بناء المحفظة والاحتياطي للجولات اللاحقة، وقانون القوة Power Law في النتائج.
  • ما الذي يجب أن يصدقه المستثمر من عرضك، والإشارة Signalling.
  • مختبر: محاكي صندوق بثلاثين شركة، وما يحدث عندما تكون النتائج متقاربة بدلاً من قانون القوة.

الشريك العام GP والشريك المحدود LP

بحسب صفحة What is Venture Capital في الجمعية الوطنية الأمريكية لرأس المال الجريء NVCA، تنشئ شركة رأس المال الجريء شراكة محدودة Limited Partnership يكون فيها المستثمرون شركاء محدودين LP وتكون الشركة نفسها الشريك العام GP، وكل صندوق شراكة منفصلة. والصورة التالية تبين من يملك المال ومن يديره، وكيف يتحرك المال بينهم:

الشركاء المحدودون مثل صناديق التقاعد والأوقاف وشركات التأمين والمكاتب العائلية وصناديق الصناديق يلتزمون بالمال للصندوق ويدفعونه عند طلبه ويستلمون التوزيعات، والصندوق يدفع للشريك العام رسوم الإدارة والحصة من الأرباح، ويستثمر في الشركات ويستلم المال عند البيع أو الطرح
الشريك المحدود يملك المال، والشريك العام يديره ويأخذ رسوماً وحصة من الربح

وفي الصورة أعلاه لاحظ التالي:

  • الشريك المحدود LP: صناديق تقاعد وأوقاف جامعات وشركات تأمين ومكاتب عائلية وصناديق صناديق، مثل جدا Jada في السعودية التي شرحناها في المقال السابق، ومسؤوليته محدودة بما التزم به، ولا يدير الاستثمارات.
  • الشريك العام GP: فريق الاستثمار الذي يختار الشركات ويفاوض ويدخل مجالس الإدارة ويقرر متى يبيع، ويضع عادة جزءاً صغيراً من المال حتى تكون له مصلحة في النتيجة.
  • الصندوق: لا يحتفظ بالمال كله في حسابه من اليوم الأول، وإنما يطلبه عند الحاجة كما سوف نرى.

ولهذا الترتيب نتيجة مباشرة عليك: الشريك العام سوف يجمع صندوقاً جديداً بعد سنوات، والشركاء المحدودون سوف يحكمون عليه بالنتيجة الصافية التي أعادها إليهم، فكل قرار في شركتك يمر في ذهنه بسؤال واحد: هل يساعدني هذا على إعادة المال مضاعفاً قبل أن ينتهي عمر الصندوق؟

عمر الصندوق وطلبات المال

تذكر صفحة NVCA أن اتفاقية الشراكة المعتادة مدتها عشر سنوات، وأن التمديدات تجعل الصناديق تستمر عملياً أطول من ذلك، وفي ورقة The Economics of Private Equity Funds لـ Andrew Metrick وAyako Yasuda من Wharton، وهي نسخة العمل من سنة 2007 لدراسة نشرت لاحقاً في مجلة Review of Financial Studies، أن الصناديق تستمر عادة عشر سنوات مع تمديد حتى سنتين بموافقة الشركاء المحدودين. والصورة التالية تبين مراحل هذا العمر:

خط زمني من السنة 0 إلى 12: فترة الاستثمار من 0 إلى 5 حيث تدخل شركات جديدة والرسوم على كامل الالتزام، ثم الجولات اللاحقة والبيع من 5 إلى 10 والرسوم تنخفض، ثم التمديد من 10 إلى 12 بموافقة الشركاء المحدودين، ومنحنى أخضر توضيحي ينزل تحت الصفر في السنوات الأولى ثم يرتفع
المال يخرج من الشريك المحدود في السنوات الأولى، ويعود إليه في السنوات الأخيرة

وفيما يلي ما يحدث في كل مرحلة:

  1. الالتزام Commitment: يوقع الشريك المحدود على مبلغ يلتزم به، ولكنه لا يدفعه كله يوم التوقيع.
  2. طلبات المال Capital Calls: بحسب NVCA يؤخذ المال من الشركاء المحدودين كلما تمت استثمارات، فيرسل الصندوق إشعاراً بالمبلغ المطلوب وموعده.
  3. فترة الاستثمار Investment Period: السنوات الأولى، وفيها تدخل الشركات الجديدة إلى المحفظة.
  4. الجولات اللاحقة والبيع: بعد فترة الاستثمار يركز الصندوق على دعم شركاته في جولاتها اللاحقة ثم بيع حصصه، وتذكر NVCA أن الشركات المدعومة بهذا النوع من المال تحتاج عادة من خمس إلى ثماني سنوات أو أكثر لتنضج.
  5. التوزيعات Distributions: عند كل بيع أو طرح يعود المال إلى الشركاء المحدودين أولاً، ثم يأخذ الشريك العام حصته من الربح.

والمنحنى الأخضر في الصورة رسم توضيحي يسمى منحنى J Curve، فالشريك المحدود يدفع طلبات ورسوماً في السنوات الأولى قبل أن تعود إليه أي توزيعات، فيكون رصيده سالباً لسنوات. ولهذا قد يتساءل البعض: ماذا يعني عمر الصندوق لي كمؤسس؟ والإجابة أن صندوقاً استثمر فيك في سنته السابعة لا يملك عشر سنوات لينتظر خروجك، فاسأل المستثمر عن سنة صندوقه، والسبب أن صندوقاً في آخر عمره قد يضغط لبيع مبكر لا يناسبك.

رسوم الإدارة والحصة من الأرباح Carried Interest

الشريك العام يكسب من الصندوق بطريقتين، والمعروف في السوق باختصار «2 و20»، أي رسوم إدارة سنوية بنحو 2% من الالتزام، وحصة من الأرباح Carried Interest بنحو 20%. وهذه أعراف وليست قانوناً، ولذلك نأخذ الأرقام من دراسة Metrick وYasuda التي حللت 238 صندوقاً أنشئت بين 1992 و2006 من سجلات مستثمر كبير واحد، منها 94 صندوق رأس مال جريء، وفيما يلي ما وجدته:

البندما وجدته الدراسةماذا يعني للصندوق
رسوم الإدارة في البداية2% هي النسبة الأكثر شيوعاًصندوق بالتزام 100 مليون يدفع للإدارة 2 مليون سنوياً في سنواته الأولى
الرسوم بعد فترة الاستثمار43% من صناديق رأس المال الجريء تحسبها على المبلغ المستثمر بدلاً من الالتزام، و54.8% تخفض النسبةالرسوم تنخفض عندما يقل العمل في البحث عن شركات جديدة
مجموع الرسوم طوال العمرالوسيط 17.75% من الالتزام في صناديق رأس المال الجريءقرابة خمس الالتزام لا يصل إلى الشركات أصلاً
الحصة من الأرباح Carried Interest20% في الغالبية العظمى، ومن 94 صندوقاً كان صندوق واحد بنسبة 17.5% وثلاثة بنسبة 25% وواحد بنسبة 30%الشريك العام يأخذ خمس الربح بعد أن يسترد الشركاء المحدودون مالهم بحسب شروط الصندوق

والحصة من الأرباح لها تفاصيل تغير قيمتها كثيراً، وفيما يلي أهمها:

  • توزيع على مستوى الصندوق كله Whole-of-fund: يسترد الشركاء المحدودون كل ما دفعوه أولاً، ثم يبدأ الشريك العام في أخذ حصته، وتعده مبادئ ILPA 3.0، وهي جمعية الشركاء المحدودين المؤسسيين، أفضل ممارسة.
  • توزيع على مستوى كل صفقة Deal-by-deal: يأخذ الشريك العام حصته من كل صفقة رابحة عند بيعها، حتى لو خسرت صفقات أخرى، ولذلك يحتاج إلى شرط استرداد Clawback إذا تبين في النهاية أنه أخذ أكثر من حقه.
  • العائد الأدنى Hurdle: بعض الصناديق لا يأخذ فيها الشريك العام حصته حتى يحقق الشركاء المحدودون عائداً أدنى متفقاً عليه.
  • تخفيض الرسوم: توصي مبادئ ILPA بأن تنخفض رسوم الإدارة بعد فترة الاستثمار إلى نسبة من تكلفة الاستثمارات غير المباعة.

والدرس من هذه الأرقام أن الصندوق يحتاج أن يعيد أكثر بكثير من مرة واحدة إجمالاً حتى يحصل الشريك المحدود على عائد صاف جيد، لأن الرسوم والحصة من الأرباح تخرج من المجموع قبل أن يصل إليه شيء.

بناء المحفظة والاحتياطي

الصندوق لا يضع كل ماله في الشيكات الأولى، وتذكر NVCA أن الصندوق بعد استثماره الأول في شركة يحتفظ عادة بثلاثة أو أربعة أضعاف ذلك المبلغ للجولات اللاحقة. وبناء المحفظة Portfolio Construction هو الإجابة عن الأسئلة التالية قبل أول استثمار:

  • كم شركة؟ عدد يكفي ليجد الصندوق بينها الشركة التي تعيد قيمته، ويقل بما يسمح له بمتابعتها.
  • كم نسبة في كل شركة؟ الصندوق يحتاج نسبة تبقى ذات قيمة بعد التخفيف Dilution في الجولات اللاحقة، وقد شرحنا التخفيف بالأرقام في التقييم قبل الاستثمار وبعده.
  • كم احتياطي Reserves؟ المال الذي يحفظه للشركات التي تنجح، حتى يحافظ على نسبته فيها عبر حق المشاركة النسبية Pro Rata.

ولاحظ أن الاحتياطي يذهب في الغالب إلى الشركات التي تتقدم، ولذلك فإن قرار مستثمرك الحالي في الجولة القادمة له معنى عند الآخرين، وهو ما سوف نشرحه في قسم الإشارة.

قانون القوة Power Law: لماذا تحمل شركة واحدة الصندوق؟

نتائج الاستثمار الجريء لا تتوزع حول متوسط كما تتوزع أطوال الناس، وإنما تتبع ما يسمى قانون القوة Power Law، أي أن معظم الشركات تعيد القليل أو لا شيء، وقليلاً منها يعيد أضعافاً كبيرة تغطي الباقي. وفي ورقة Entrepreneurship as Experimentation لـ William Kerr وRamana Nanda وMatthew Rhodes-Kropf، المنشورة في Journal of Economic Perspectives سنة 2014، حلل الباحثون كل الشركات الأمريكية التي حصلت على أول تمويل جريء بين 1985 و2009، ووجدوا ما يلي:

  • قرابة 55% من الشركات انتهت بخسارة.
  • 6% فقط أعادت أكثر من خمسة أضعاف ما استثمر فيها.
  • هذه النسبة الصغيرة وحدها جاءت بقرابة 50% من العائد الإجمالي في الفترة كلها.

وهذا يعني أن الصندوق لا يربح بتجنب الخسائر، فالخسائر جزء من النموذج، وإنما يربح بأن يكون في الشركة القليلة التي تكبر جداً، وبأن يملك فيها نسبة كافية عندما تكبر. والمختبر في آخر المقال يبين ذلك بالأرقام.

ما الذي يجب أن يصدقه المستثمر من عرضك؟

لنفرض صندوقاً بالتزام 100 مليون ريال، ونسبته في شركتك عند الخروج 10% بعد كل التخفيف، فحتى تعيد شركتك وحدها قيمة الصندوق يجب أن تباع بمليار ريال على الأقل، وهذا هو الحساب الذي يجريه المستثمر في ذهنه، حتى لو لم يقله لك. ولذلك يجب أن يخرج من عرضك وهو يصدق ما يلي:

  1. السوق كبيرة بما يكفي: أن هناك طريقاً معقولاً إلى شركة بهذا الحجم، لا أن السوق موجودة فقط.
  2. الفريق هو من يستطيع ذلك: لماذا أنتم بالتحديد، وما الذي تعرفونه ولا يعرفه غيركم.
  3. لماذا الآن Why Now: ما الذي تغير في التقنية أو النظام أو السلوك فجعل الفكرة ممكنة اليوم.
  4. أن المال يغير المسار: أن هذه الجولة تنقلك إلى مرحلة يمكن قياسها، مثل إيرادات أو عملاء، تجعل الجولة القادمة ممكنة.

وقد يتساءل البعض: هل يعني ذلك أن الشركة التي ستباع بمئة مليون فاشلة؟ والإجابة لا، فهي قد تكون نتيجة ممتازة لك ولمستثمر ملائكي، ولكنها لا تغير نتيجة صندوق بالتزام 100 مليون، ولذلك لا تحاول أن تقنع صندوقاً بشركة لا تناسب حساباته، وابحث عن نوع آخر من المستثمرين كما في كيف تختار نوع المستثمر. أما كيف ترتب هذه الأفكار في عرض Pitch Deck فهو موضوع مقال جمع التمويل.

الإشارة Signalling

عندما تجمع الجولة القادمة، أول ما يسأله المستثمر الجديد: هل يشارك المستثمرون الحاليون؟ والسبب أنهم يعرفون شركتك من الداخل، فإذا كان لصندوق حق المشاركة النسبية Pro Rata واحتياطي مخصص لك ثم لم يستخدمه، فسوف يفهم المستثمر الجديد ذلك إشارة سلبية، حتى لو كان السبب أن الصندوق نفسه في آخر عمره أو انتهى احتياطيه. وفيما يلي ما يجب أن تفعله:

  • اسأل مستثمرك قبل أن تبدأ الجولة عن نيته في المشاركة، ولا تتفاجأ بالإجابة أمام المستثمرين الجدد.
  • إذا كان لن يشارك لسبب يخص الصندوق، فاطلب منه أن يشرح ذلك بنفسه لمن يسأله.
  • كن حذراً مع الصناديق الكبيرة التي تكتب شيكات صغيرة في مراحل مبكرة كخيار مستقبلي، والسبب أن قرارها بعدم المتابعة يقرأ كحكم على شركتك.

مختبر: محاكي صندوق رأس المال الجريء

نبني محاكياً صغيراً بلغة Python دون أي مكتبة، ونشغله في Container من ال Image الرسمية python:3.13.16-slim كما في محاكي جدول الملكية. والصندوق مصطنع، والأرقام بالريال، وشروطه كما يلي:

  • الالتزام: 100 مليون ريال، وعمر الصندوق عشر سنوات.
  • رسوم الإدارة: 2% سنوياً من الالتزام في السنوات الخمس الأولى، ثم 1.5% في الخمس الأخيرة، فيكون المجموع 17.5%، وهو قريب من الوسيط 17.75% في دراسة Metrick وYasuda.
  • الحصة من الأرباح: 20% من الربح بعد أن يسترد الشركاء المحدودون كامل الالتزام، على مستوى الصندوق كله ودون عائد أدنى.
  • المحفظة: 30 شركة، ولكل شركة المبلغ نفسه، ويشمل الشيك الأول واحتياطيها.
  • النتائج: مضاعف عشوائي لكل شركة، 35% منها صفر، و20% بين 0.1 و1، و39% بين 1 و5، و6% أكثر من 5 أضعاف من توزيع Pareto بسقف 300 ضعف، فتكون نسبة الخاسرة قرابة 55% ونسبة ما فوق خمسة أضعاف 6%، كما في ورقة Kerr وزملائه. والتوزيع نفسه من صنعنا لهذا التمرين، وليس نتيجة الورقة.

السكربت

نضع السكربت التالي في ملف fund.py:

"""A small venture capital fund simulator (invented fund, amounts in SAR, for learning only).
    python fund.py            one fund: 30 companies with power-law outcomes, fees, carry, net multiple to LPs (seed 2)
    python fund.py seed=42    the same fund with another seed
    python fund.py equal      break it: the same total, spread equally over the 30 companies
    python fund.py montecarlo 10,000 funds with power-law outcomes against 10,000 funds with thin-tailed outcomes
Plain Python, standard library only, fixed seeds so every run prints the same numbers.
It also writes results.js for the article's charts.
"""
import json, random, statistics, sys

ARGS = sys.argv[1:]
MODE = next((a for a in ARGS if "=" not in a), "")
SEED = int(next((a.split("=")[1] for a in ARGS if a.startswith("seed=")), 2))

# ------------------------------------------------------------------ 1. the fund (LPA terms)
FUND = 100_000_000            # committed capital from the LPs
YEARS = 10                    # fund life, before any extension
FEE_EARLY, FEE_LATE = 0.02, 0.015   # management fee on commitments: years 1-5, then a step-down for years 6-10
CARRY = 0.20                  # GP share of profit after LPs get back all committed capital (whole-of-fund, no hurdle)
COMPANIES = 30

fees = sum(FUND * (FEE_EARLY if y <= 5 else FEE_LATE) for y in range(1, YEARS + 1))
investable = FUND - fees
cheque = investable / COMPANIES       # initial cheque plus its follow-on reserve, the same for every company here


# ------------------------------------------------------------------ 2. outcomes: a power-law mix
def outcome(rng):
    """Gross multiple on the money put into one company.
    About 55% end at a loss and about 6% return more than 5x, close to the shares Kerr, Nanda and
    Rhodes-Kropf (2014) report for US VC-backed startups first funded 1985-2009. Above 5x the tail is Pareto."""
    u = rng.random()
    if u < 0.35:
        return 0.0                                   # written off
    if u < 0.55:
        return rng.uniform(0.1, 1.0)                 # sold for less than was invested
    if u < 0.94:
        return rng.uniform(1.0, 5.0)                 # a decent exit
    return min(5 * (1 - rng.random()) ** (-1 / 1.2), 300.0)   # the tail: 5x and up, capped at 300x


def waterfall(proceeds):
    """Whole-of-fund: LPs first get back everything they committed (fees included), then the GP takes CARRY of the rest."""
    profit = max(0.0, proceeds - FUND)
    carry = CARRY * profit
    return carry, proceeds - carry


def m(x): return f"{x / 1e6:9.2f}M"


def run_fund(multiples, label):
    proceeds = [cheque * x for x in multiples]
    total = sum(proceeds)
    carry, lp = waterfall(total)
    order = sorted(range(COMPANIES), key=lambda i: -proceeds[i])
    print(f"\n== {label}")
    print(f"{'rank':>4}  {'multiple':>8}  {'proceeds':>10}  share of all proceeds")
    for r, i in enumerate(order[:5], 1):
        print(f"{r:>4}  {multiples[i]:7.2f}x  {m(proceeds[i])}  {100 * proceeds[i] / total:5.1f}%")
    rest = order[5:]
    print(f"{'6-30':>4}  {'':>8}  {m(sum(proceeds[i] for i in rest))}  {100 * sum(proceeds[i] for i in rest) / total:5.1f}%")
    losers = sum(1 for x in multiples if x < 1)
    print(f"companies returning less than 1x: {losers} of {COMPANIES}; zero: {sum(1 for x in multiples if x == 0)}")
    print(f"gross proceeds {m(total)}  = {total / investable:.2f}x on invested, {total / FUND:.2f}x on committed")
    print(f"carry to GP    {m(carry)}")
    print(f"net to LPs     {m(lp)}  = net multiple (TVPI) {lp / FUND:.2f}x")
    best = proceeds[order[0]]
    print(f"best company alone: {m(best)} = {best / FUND:.2f}x the fund -> {'returns the fund' if best >= FUND else 'does not return the fund'}")
    carry2, lp2 = waterfall(total - best)
    print(f"without the best company: net to LPs {m(lp2)} = {lp2 / FUND:.2f}x")
    return dict(multiples=multiples, proceeds=proceeds, total=total, carry=carry, lp=lp, lp_wo_best=lp2)


print("== Fund terms (invented fund)")
print(f"committed capital {m(FUND)} from LPs, life {YEARS} years")
print(f"management fees   {m(fees)} ({FEE_EARLY:.1%} years 1-5, {FEE_LATE:.1%} years 6-10) = {fees / FUND:.1%} of commitments")
print(f"investable        {m(investable)} over {COMPANIES} companies = {m(cheque)} each (initial cheque + reserve)")
print(f"carried interest  {CARRY:.0%} of profit after LPs get back all {m(FUND)}")
print(f"to return the fund from one company owning 10% at exit, that company must sell for {m(FUND / 0.10)}")

rng = random.Random(SEED)
power = [outcome(rng) for _ in range(COMPANIES)]
R = {"fund": FUND, "fees": fees, "investable": investable, "cheque": cheque}

if MODE == "":
    R["power"] = run_fund(power, f"Power law, seed {SEED}")
elif MODE == "equal":
    avg = sum(power) / COMPANIES
    R["power"] = run_fund(power, f"Power law, seed {SEED} (same as the main run)")
    R["equal"] = run_fund([avg] * COMPANIES, f"Break it: every company returns the same {avg:.2f}x (same total)")
    med = statistics.median(power)
    R["median"] = run_fund([med] * COMPANIES, f"Break it: every company returns the median company's {med:.2f}x")
elif MODE == "montecarlo":
    N = 10_000
    big = random.Random(1)
    mean = sum(outcome(big) for _ in range(1_000_000)) / 1_000_000
    print(f"\nmean gross multiple of one company under the power-law mix (1,000,000 draws): {mean:.2f}x")

    def sim(draw, seed):
        r = random.Random(seed)
        nets, best_returns, saved = [], 0, 0
        for _ in range(N):
            xs = [draw(r) for _ in range(COMPANIES)]
            pr = [cheque * x for x in xs]
            _, lp = waterfall(sum(pr))
            nets.append(lp / FUND)
            b = max(pr)
            best_returns += b >= FUND
            _, lp2 = waterfall(sum(pr) - b)
            saved += lp >= FUND and lp2 < FUND
        return nets, best_returns, saved

    thin = lambda r: r.uniform(0, 2 * mean)          # same mean, no tail
    out = {}
    for name, draw in (("power law", outcome), ("thin tail", thin)):
        nets, best_returns, saved = sim(draw, 7)
        q = statistics.quantiles(nets, n=20)
        print(f"\n== {N:,} funds, {name}")
        print(f"net multiple to LPs: p5 {q[0]:.2f}x  p25 {q[4]:.2f}x  median {q[9]:.2f}x  p75 {q[14]:.2f}x  p95 {q[18]:.2f}x  mean {statistics.fmean(nets):.2f}x")
        print(f"funds returning less than 1x net: {100 * sum(n < 1 for n in nets) / N:.1f}%")
        print(f"funds where the best company alone returns the fund: {100 * best_returns / N:.1f}%")
        print(f"funds above 1x that fall below 1x without their best company: {100 * saved / N:.1f}%")
        bins = [0] * 16                                # 0.25x wide bins from 0 to 4x, the last one open
        for n in nets:
            bins[min(15, int(n / 0.25))] += 1
        out[name] = {"bins": bins, "median": q[9], "mean": statistics.fmean(nets)}
    R["montecarlo"] = out

if SEED != 2: sys.exit(0)            # only the default seed feeds the charts
name = {"": "results.js", "equal": "results-equal.js", "montecarlo": "results-mc.js"}[MODE]
with open(name, "w", newline="\n") as f:
    f.write(f"window.{ {'': 'R', 'equal': 'RE', 'montecarlo': 'RM'}[MODE] } = " + json.dumps(R) + ";\n")

في السكربت أعلاه لاحظ التالي:

  • الدالة outcome هي المكان الوحيد الذي يحدد شكل النتائج، والفرع الأخير فيها هو ذيل قانون القوة.
  • الدالة waterfall تعيد للشركاء المحدودين كامل الالتزام أولاً، ثم تعطي الشريك العام 20% مما زاد.
  • البذرة Seed الثابتة random.Random(SEED) تجعل كل تشغيل يطبع الأرقام نفسها، والبذرة الافتراضية 2.

التشغيل

docker run --name lab-fund-sim -v "$PWD:/w" -w /w python:3.13.16-slim python fund.py

والمخرج سوف يكون كما يلي:

== Fund terms (invented fund)
committed capital    100.00M from LPs, life 10 years
management fees       17.50M (2.0% years 1-5, 1.5% years 6-10) = 17.5% of commitments
investable            82.50M over 30 companies =      2.75M each (initial cheque + reserve)
carried interest  20% of profit after LPs get back all    100.00M
to return the fund from one company owning 10% at exit, that company must sell for   1000.00M

== Power law, seed 2
rank  multiple    proceeds  share of all proceeds
   1    58.58x     161.10M   51.0%
   2     9.62x      26.46M    8.4%
   3     5.79x      15.92M    5.0%
   4     4.98x      13.69M    4.3%
   5     4.63x      12.72M    4.0%
6-30                86.22M   27.3%
companies returning less than 1x: 17 of 30; zero: 8
gross proceeds    316.12M  = 3.83x on invested, 3.16x on committed
carry to GP        43.22M
net to LPs        272.89M  = net multiple (TVPI) 2.73x
best company alone:    161.10M = 1.61x the fund -> returns the fund
without the best company: net to LPs    144.01M = 1.44x

في المخرج أعلاه لاحظ التالي:

  • 17 شركة من 30 أعادت أقل مما استثمر فيها، و8 منها لم تعد شيئاً، ومع ذلك فالمضاعف الصافي للشركاء المحدودين 2.73x.
  • الشركة الأولى وحدها أعادت 161.10 مليوناً، أي 51% من كل ما أعادته المحفظة، وأكثر من حجم الصندوق كله، وهذا معنى «شركة تعيد الصندوق».
  • دون هذه الشركة ينخفض الصافي من 2.73x إلى 1.44x، فالصندوق يبقى رابحاً، ولكن قرابة ثلاثة أرباع ربح الشركاء المحدودين، 128.88 مليوناً من 172.89، جاءت من شركة واحدة من ثلاثين.
  • الحصة من الأرباح 43.22 مليوناً، لأن المحفظة أعادت 316.12 مليوناً، فالربح فوق الالتزام 216.12 مليوناً، وخمسه للشريك العام.
  • السطر الأخير في قسم الشروط هو حساب «ما الذي يجب أن يصدقه المستثمر»: بنسبة 10% عند الخروج يجب أن تباع الشركة بمليار ريال لتعيد الصندوق.

والصورة التالية تبين ما أعادته كل شركة من الثلاثين، مرتبة من الأكبر:

ثلاثون عموداً مرتبة: الشركة الأولى 161.1 مليوناً فوق خط حجم الصندوق 100 مليون، والثانية 26.5 مليوناً، ثم أعمدة صغيرة تنخفض حتى ثمانية أعمدة بلا قيمة في آخر الترتيب
عمود واحد فوق خط الصندوق، والباقي كله تحته

والصورة التالية تبين الطريق من التزام الشركاء المحدودين إلى ما يعود إليهم:

أشرطة: الالتزام 100 مليون، ورسوم الإدارة 17.5 مليون، والمبلغ المستثمر 82.5 مليون، وما أعادته الشركات 316.1 مليون، والحصة من الأرباح 43.2 مليون، وصافي الشركاء المحدودين 272.9 مليون، وتحتها المضاعف الإجمالي على المستثمر 3.83x والمضاعف الصافي 2.73x والصافي دون الشركة الأولى 1.44x
من 3.83x إجمالاً على المستثمر إلى 2.73x صافياً على الالتزام

وقد يتساءل البعض: هل اخترنا البذرة 2 لأنها تعطي هذه النتيجة؟ والإجابة نعم، فقد اخترناها من أول 60 بذرة لأنها تحتوي شركة تعيد الصندوق، حتى نرى الفكرة بوضوح. ولكي نرى صندوقاً عادياً نشغل السكربت بالبذرة 42:

docker run --name lab-fund-seed42 -v "$PWD:/w" -w /w python:3.13.16-slim python fund.py seed=42

والمخرج بعد قسم الشروط، وهو مطابق لما سبق، سوف يكون كما يلي:

== Power law, seed 42
rank  multiple    proceeds  share of all proceeds
   1     7.04x      19.36M   16.9%
   2     4.24x      11.65M   10.2%
   3     3.92x      10.78M    9.4%
   4     3.79x      10.43M    9.1%
   5     3.71x      10.19M    8.9%
6-30                51.79M   45.4%
companies returning less than 1x: 18 of 30; zero: 14
gross proceeds    114.20M  = 1.38x on invested, 1.14x on committed
carry to GP         2.84M
net to LPs        111.36M  = net multiple (TVPI) 1.11x
best company alone:     19.36M = 0.19x the fund -> does not return the fund
without the best company: net to LPs     94.84M = 0.95x

في هذا الصندوق كانت أفضل شركة 7.04x فقط، فبقي الصافي 1.11x، أي أن الشريك المحدود استرد ماله بالكاد بعد عشر سنوات، ولو أخرجنا أفضل شركة لخسر. أما كم مرة يحدث هذا وكم مرة يحدث ذاك، فهو ما يجيب عنه قسم المحاكاة الكبيرة.

نكسر الفكرة: نتائج متساوية بدلاً من قانون القوة

الآن سوف نأخذ المبلغ نفسه الذي أعادته المحفظة في البذرة 2، ونوزعه بالتساوي على الشركات الثلاثين، ثم نجرب عالماً تعيد فيه كل شركة ما أعادته الشركة الوسيطة:

docker run --name lab-fund-equal -v "$PWD:/w" -w /w python:3.13.16-slim python fund.py equal

والمخرج يبدأ بقسم الشروط ثم بالتشغيل الأساسي نفسه، وبعدهما يكون كما يلي:

== Break it: every company returns the same 3.83x (same total)
rank  multiple    proceeds  share of all proceeds
   1     3.83x      10.54M    3.3%
   2     3.83x      10.54M    3.3%
   3     3.83x      10.54M    3.3%
   4     3.83x      10.54M    3.3%
   5     3.83x      10.54M    3.3%
6-30               263.43M   83.3%
companies returning less than 1x: 0 of 30; zero: 0
gross proceeds    316.12M  = 3.83x on invested, 3.16x on committed
carry to GP        43.22M
net to LPs        272.89M  = net multiple (TVPI) 2.73x
best company alone:     10.54M = 0.11x the fund -> does not return the fund
without the best company: net to LPs    264.46M = 2.64x

== Break it: every company returns the median company's 0.96x
rank  multiple    proceeds  share of all proceeds
   1     0.96x       2.63M    3.3%
   2     0.96x       2.63M    3.3%
   3     0.96x       2.63M    3.3%
   4     0.96x       2.63M    3.3%
   5     0.96x       2.63M    3.3%
6-30                65.84M   83.3%
companies returning less than 1x: 30 of 30; zero: 0
gross proceeds     79.00M  = 0.96x on invested, 0.79x on committed
carry to GP         0.00M
net to LPs         79.00M  = net multiple (TVPI) 0.79x
best company alone:      2.63M = 0.03x the fund -> does not return the fund
without the best company: net to LPs     76.37M = 0.76x

في المخرج أعلاه لاحظ التالي:

  • في العالم المتساوي المضاعف الصافي 2.73x كما هو، لأن المجموع لم يتغير، ولكن لا توجد شركة تعيد الصندوق، وخسارة أي شركة لا تغير النتيجة إلا قليلاً، من 2.73x إلى 2.64x.
  • في عالم الشركة الوسيطة يخسر الصندوق، فالمضاعف الصافي 0.79x، والسبب أن الشركة الوسيطة في المحفظة أعادت 0.96x فقط، أي أقل مما استثمر فيها.
  • هذا هو جوهر قانون القوة: متوسط المحفظة تصنعه الشركات القليلة في الذيل، والشركة «العادية» لا تكفي لتعيد مال الصندوق، ولذلك يسألك المستثمر عن الحالة الكبرى لا عن الحالة المتوسطة.

عشرة آلاف صندوق

صندوق واحد لا يكفي للحكم، لذلك نشغل عشرة آلاف صندوق بنتائج قانون القوة، وعشرة آلاف صندوق بنتائج متقاربة لها المتوسط نفسه، حيث تأخذ كل شركة مضاعفاً بين صفر وضعف المتوسط بالتساوي:

docker run --name lab-fund-mc -v "$PWD:/w" -w /w python:3.13.16-slim python fund.py montecarlo

والمخرج بعد قسم الشروط سوف يكون كما يلي:

mean gross multiple of one company under the power-law mix (1,000,000 draws): 2.43x

== 10,000 funds, power law
net multiple to LPs: p5 0.94x  p25 1.22x  median 1.48x  p75 1.90x  p95 3.68x  mean 1.80x
funds returning less than 1x net: 7.5%
funds where the best company alone returns the fund: 15.7%
funds above 1x that fall below 1x without their best company: 16.5%

== 10,000 funds, thin tail
net multiple to LPs: p5 1.52x  p25 1.69x  median 1.80x  p75 1.92x  p95 2.07x  mean 1.80x
funds returning less than 1x net: 0.0%
funds where the best company alone returns the fund: 0.0%
funds above 1x that fall below 1x without their best company: 0.0%

والصورة التالية تبين توزيع المضاعف الصافي في العالمين:

مدرجان تكراريان للمضاعف الصافي في عشرة آلاف صندوق: البرتقالي لقانون القوة منتشر من أقل من 1x إلى أكثر من 4x بوسيط 1.48x ومتوسط 1.80x، والأزرق للنتائج المتقاربة مجتمع بين 1.5x و2.1x بوسيط ومتوسط 1.80x، وخط أحمر عند 1x
المتوسط واحد في العالمين، ولكن قانون القوة ينشر النتائج ويجعل الوسيط أقل من المتوسط

في المخرج والصورة أعلاه لاحظ التالي:

  • المتوسط واحد في العالمين، 1.80x، ولكن الوسيط في قانون القوة 1.48x، أي أن نصف الصناديق تحقق أقل منه، والمتوسط يرفعه عدد قليل من الصناديق المحظوظة.
  • 7.5% من صناديق قانون القوة تعيد أقل من الالتزام، مقابل لا شيء في العالم المتقارب.
  • في 15.7% من الصناديق تعيد شركة واحدة الصندوق كله، وفي 16.5% من الصناديق الرابحة تنقلب النتيجة إلى خسارة لو أخرجنا أفضل شركة.
  • هذه أرقام نموذجنا المصطنع وليست إحصاءات صناديق حقيقية، والمهم فيها الشكل: انتشار كبير، وذيل طويل، وصندوق يعتمد على شركات قليلة.

حذف المختبر

docker rm lab-fund-sim lab-fund-seed42 lab-fund-equal lab-fund-mc

ولم نبن أي Image جديدة، والملفات التي كتبها السكربت هي results.js وresults-equal.js وresults-mc.js في المجلد نفسه، وهي مصدر الرسوم في هذا المقال.

أخطاء شائعة عند المؤسسين

  • اعتبار رفض الصندوق حكماً على الشركة: قد يكون الرفض لأن شركتك لا تستطيع أن تعيد صندوقاً بهذا الحجم، وهذا سبب في حساباته لا في فكرتك.
  • عرض الحالة المتوسطة فقط: المستثمر يحتاج أن يرى الطريق إلى الحالة الكبرى، فاعرضها بأرقام معقولة لا بأمنيات.
  • تجاهل عمر الصندوق: اسأل عن سنة الصندوق قبل أن يدخل في جدول الملكية Cap Table، لأن صندوقاً في آخر عمره قد يضغط لبيع مبكر.
  • نسيان حق المشاركة النسبية Pro Rata: مستثمر له حق المشاركة ولا يستخدمه يرسل إشارة إلى الجولة القادمة، فاعرف نيته مبكراً.
  • الخلط بين رسوم الصندوق ومال الشركة: الرسوم يدفعها الشركاء المحدودون للشريك العام، ولا تخصم من استثمارك في شركتك.

تدريب عملي

  1. غير في السكربت CARRY إلى 0.25 وFEE_LATE إلى 0.02، ثم احسب كم ينقص المضاعف الصافي في البذرة 2.
  2. غير عدد الشركات إلى 15 ثم إلى 60، وشغل المحاكاة الكبيرة، وقارن نسبة الصناديق التي تعيد أقل من الالتزام.
  3. لصندوق بالتزام 300 مليون ريال ونسبة 8% عند الخروج، احسب القيمة التي يجب أن تباع بها شركتك لتعيد الصندوق وحدها.

الخلاصة

وصلنا لنهاية الموضوع، وأهم ما فيه:

  • الصندوق شراكة محدودة، يملك فيها الشركاء المحدودون LP المال، ويديره الشريك العام GP لعمر معتاد عشر سنوات مع تمديد.
  • المال يطلب على دفعات، ويعود إلى الشركاء المحدودين أولاً، ثم يأخذ الشريك العام الحصة من الأرباح Carried Interest، وهي 20% في الغالبية العظمى بحسب دراسة Metrick وYasuda.
  • الرسوم تأخذ قرابة خمس الالتزام طوال العمر، فيحتاج الصندوق نتيجة إجمالية أكبر بكثير من مرة واحدة.
  • النتائج تتبع قانون القوة Power Law، فشركات قليلة تصنع معظم العائد، ولذلك يبحث المستثمر عن شركة يمكن أن تعيد الصندوق وحدها.
  • اعرف عمر صندوق مستثمرك ونيته في الجولة القادمة، فكلاهما يؤثر عليك.

وفي المقال القادم بإذن الله ننتقل إلى من يدخل قبل الصندوق غالباً: المستثمر الملائكي Angel Investor والمسرعات، وشروط Y Combinator من صفحتها.

سجل التحديثات

  • أكتوبر 2026: كتابة المقال، ومراجعة صفحة NVCA وورقة Metrick وYasuda ومبادئ ILPA 3.0 وورقة Kerr وNanda وRhodes-Kropf من مصادرها، وتشغيل المختبر على Docker Engine 29.8.0.
نشرة عرب رووت | ArabRoot

معرفة تستحق مكاناً في بريدك.

مقالات مختارة وأدوات مفيدة وأفكار لمشروعك القادم، في رسالة واحدة كل أسبوع.

يمكنك إلغاء الاشتراك متى شئت. الخصوصية

تم استلام طلبك. افتح بريدك واضغط رابط التأكيد لإتمام الاشتراك.