پرش به محتوا
آکادمی / دیفای، وب ۳ و فناوری‌های پیشرفته / پایتون مقدماتی برای دادهٔ کریپتو
🏛 آکادمی📊 داشبورد من🔁 مرور 🧪 آزمایشگاه📖 اصطلاحات

🌐 دانشکدهٔ ۱۱ · بازارهای پیشرفته

پایتون مقدماتی برای دادهٔ کریپتو

Introductory Python for crypto data

سطح ۴ · پیشرفته (Advanced)⏱ ۴۰ دقیقه❓ ۹ سؤال در بانک
🎯 هدف آموزشی: با پایتون و کتابخانهٔ pandas دادهٔ قیمت کریپتو را بخوانید و بررسی کنید، بازده، نوسان سالانه و بیشترین افت را حساب کنید و از خطاهای رایج دادهٔ مالی مانند نگاه به آینده و سوگیری بقا پرهیز کنید.
پیش‌نیازها: بک‌تست و خطای نگاه به آینده

📚 آموزش در سه سطح

از سطح ساده شروع کنید؛ اگر روشن بود، سطح بعد را بخوانید. سطح مناسب شما ذخیره می‌شود.

🌱 توضیح ساده

پایتون زبان رایج تحلیل داده است، چون ساده خوانده می‌شود و کتابخانه‌های قدرتمندی دارد. مهم‌ترین آن‌ها برای دادهٔ جدولی «pandas» است که ساختاری به نام DataFrame می‌دهد: جدولی با ستون‌هایی مانند تاریخ، قیمت باز شدن، بیشینه، کمینه، بسته شدن و حجم. با یک خط می‌توانید فایل CSV قیمت‌های روزانه را بخوانید: df = pd.read_csv('btc.csv', parse_dates=['date'], index_col='date').

نخستین محاسبهٔ مفید «بازده روزانه» است: df['ret'] = df['close'].pct_change() که تغییر درصدی قیمت بسته شدن هر روز نسبت به روز قبل را می‌دهد. سپس می‌توانید میانگین، انحراف معیار و بزرگ‌ترین افت روزانه را با df['ret'].describe() ببینید. انحراف معیار بازده روزانه ضرب در جذر ۳۶۵، «نوسان سالانه» را می‌دهد؛ در کریپتو از ۳۶۵ استفاده می‌شود چون بازار هر روز سال باز است.

قانون طلایی داده: پیش از هر تحلیل، داده را ببینید. چند ردیف اول و آخر را با df.head() و df.tail() نگاه کنید، مقادیر خالی را با df.isna().sum() بشمارید و مطمئن شوید تاریخ‌ها مرتب و بدون تکرارند. بیشتر نتیجه‌های «شگفت‌انگیز» در تحلیل مالی از دادهٔ خراب، منطقهٔ زمانی اشتباه یا ردیف تکراری می‌آیند، نه از کشفی واقعی.

📘 توضیح متوسط

«بیشترین افت» را با دو خط حساب می‌کنید: ابتدا منحنی ارزش تجمعی wealth = (1 + df['ret']).cumprod() و سپس افت از قلهٔ قبلی dd = wealth / wealth.cummax() - 1 و در پایان dd.min(). این عدد می‌گوید بدترین سقوط از یک قله تا کف بعدی چقدر بوده است؛ معیاری که برای سنجش تحمل روانی و مالی از انحراف معیار مهم‌تر است.

«میانگین متحرک» و پنجره‌های غلتان با rolling ساخته می‌شوند: df['ma50'] = df['close'].rolling(50).mean(). نوسان غلتان ۳۰ روزه هم با df['ret'].rolling(30).std() به دست می‌آید. برای تغییر بازهٔ زمانی، مثلاً از روزانه به هفتگی، از resample استفاده کنید: df['close'].resample('W').last(). این ابزارها پایهٔ هر بک‌تست و داشبورد ساده‌اند.

هنگام ساختن سیگنال معاملاتی مراقب «نگاه به آینده» باشید: اگر سیگنال امروز با قیمت بسته شدن امروز ساخته می‌شود، معامله باید از فردا اجرا شود. در pandas این کار با shift انجام می‌شود: df['pos'] = (df['close'] > df['ma50']).astype(int).shift(1) و بازده استراتژی برابر df['pos'] * df['ret'] است. فراموش کردن shift(1) یکی از رایج‌ترین دلایل بک‌تست‌های بیش از حد خوش‌بینانه است.

🔬 توضیح تخصصی

دادهٔ کریپتو مشکلات ویژه‌ای دارد: حجم جعلی در برخی صرافی‌ها، اختلاف قیمت میان صرافی‌ها، شکاف داده در زمان قطعی API، و تغییر نماد یا مهاجرت توکن. تحلیل جدی منبع داده را مستند می‌کند، چند منبع را مقایسه می‌کند، زمان‌ها را به وقت جهانی یکسان می‌کند و دربارهٔ شکاف‌ها تصمیم روشن می‌گیرد: حذف، پر کردن با آخرین مقدار یا علامت‌گذاری. هر انتخاب روی نتیجه اثر دارد و باید گزارش شود.

«سوگیری بقا» خطای پنهان دیگری است: اگر فقط توکن‌هایی را که امروز در فهرست صرافی‌اند تحلیل کنید، هزاران توکن مرده از نمونه حذف شده‌اند و میانگین بازده به‌طرز گمراه‌کننده‌ای بالا می‌رود. همچنین بازده لگاریتمی، np.log(df['close']).diff()، برای جمع زدن در طول زمان راحت‌تر است، اما برای میانگین وزنی سبد چنددارایی باید از بازده ساده استفاده کرد.

کد تحلیل را «قابل تکرار» بنویسید: منبع و تاریخ دریافت داده را ثبت کنید، نسخهٔ کتابخانه‌ها را بنویسید، تحلیل را در یک اسکریپت یا دفترچهٔ مرتب نگه دارید و نتیجه‌ها را فقط از کد بسازید، نه با ویرایش دستی جدول. اگر کس دیگری با همان داده و کد به عدد دیگری برسد، نتیجهٔ شما هنوز یافته‌ای قابل اتکا نیست.

🌍 مثال واقعی: از ابزار داخلی یک صندوق تا ابزار استاندارد علم داده — pandas از ۲۰۰۸

Wes McKinney پژوهشگر کمّی شرکت مدیریت سرمایهٔ AQR بود و به گفتهٔ خودش ساختن pandas را در ۶ آوریل ۲۰۰۸ آغاز کرد تا پژوهش‌های اقتصادسنجی را در پایتون بازتولید کند؛ ابزارهای موجود برای کار با سری‌های زمانی مالی کند و دست‌وپاگیر بودند. او پیش از ترک AQR مدیریت را قانع کرد کتابخانه را متن‌باز کند و pandas در ۲۰۰۹ منتشر شد. کتاب «Python for Data Analysis» او در ۲۰۱۲ منتشر شد و پروژه از ۲۰۱۵ زیر حمایت NumFOCUS است.

نمونهٔ کوچک برای تمرین ذهنی: پنج قیمت بسته شدن ۱۰۰، ۱۱۰، ۹۹، ۱۰۴ و ۱۲۰. بازده‌ها ۱۰٪، منفی ۱۰٪، حدود ۵٫۱٪ و حدود ۱۵٫۴٪ است. منحنی ارزش از ۱ به ۱٫۱، سپس ۰٫۹۹، ۱٫۰۴ و ۱٫۲ می‌رسد و بیشترین افت، از قلهٔ ۱٫۱ تا ۰٫۹۹، برابر ۱۰٪ است. درس: ابزاری که از نیاز واقعی یک تحلیلگر مالی ساخته شد، امروز اجازه می‌دهد همین محاسبه را روی ده سال داده در چند ثانیه و بدون خطای دستی انجام دهید.

🔤 واژگان تخصصی

دیتافریم (DataFrame)

ساختار جدولی pandas با ستون‌های نام‌دار و نمایه.

مثال: جدول قیمت روزانه با ستون‌های open، high، low، close و volume.

بازده روزانه (Daily return)

تغییر درصدی قیمت نسبت به روز قبل.

مثال: df['close'].pct_change()

بیشترین افت (Maximum drawdown)

بزرگ‌ترین افت درصدی از یک قله تا کف بعدی.

مثال: افت از ۱٫۱ به ۰٫۹۹ یعنی ۱۰٪.

پنجرهٔ غلتان (Rolling window)

محاسبهٔ یک آماره روی تعداد ثابتی از آخرین مشاهده‌ها.

مثال: df['close'].rolling(50).mean()

سوگیری بقا (Survivorship bias)

خطای ناشی از حذف دارایی‌های از بین رفته از نمونهٔ تحلیل.

مثال: تحلیل فقط توکن‌های فهرست‌شدهٔ امروز.

🔑 نکات کلیدی

  • pandas با DataFrame، pct_change، rolling و resample پایهٔ تحلیل دادهٔ قیمت است.
  • نوسان سالانهٔ کریپتو = انحراف معیار بازده روزانه × جذر ۳۶۵.
  • بیشترین افت = کمینهٔ (ارزش ÷ بیشینهٔ تجمعی ارزش − ۱).
  • سیگنال امروز را با shift(1) از فردا اجرا کنید تا نگاه به آینده رخ ندهد.
  • منبع داده، منطقهٔ زمانی، شکاف‌ها و نسخهٔ کد را ثبت کنید تا نتیجه قابل تکرار باشد.

⚠️ اشتباهات رایج

  • تحلیل بدون نگاه کردن به داده؛ اشتباه است چون ردیف تکراری یا تاریخ نامرتب نتیجه را جعلی می‌کند.
  • فراموش کردن shift(1) در سیگنال؛ اشتباه است چون بک‌تست از اطلاعات آینده استفاده می‌کند.
  • استفاده از جذر ۲۵۲ برای کریپتو؛ اشتباه است چون بازار کریپتو هر روز سال باز است.
  • تحلیل فقط دارایی‌های زندهٔ امروز؛ اشتباه است چون سوگیری بقا بازده را بیش از واقع نشان می‌دهد.

🛠 تمرین عملی: نخستین تحلیل پایتونی دادهٔ بیت‌کوین

  1. یک فایل CSV قیمت روزانهٔ BTC با ستون‌های date و close تهیه کنید، آن را با pandas بخوانید و ردیف‌های خالی و تکراری را بشمارید.
  2. بازده روزانه، نوسان سالانه با جذر ۳۶۵ و بیشترین افت را حساب کنید.
  3. استراتژی «بالای میانگین متحرک ۵۰ روزه» را با shift(1) بسازید و بازده و بیشترین افت آن را با نگه‌داری ساده مقایسه کنید؛ سپس همان را بدون shift تکرار کنید و تفاوت را توضیح دهید.

✅ معیار درستی: داده بررسی و پاک‌سازی شده، سه معیار درست حساب شده و تفاوت نتیجهٔ با و بدون shift(1) به‌عنوان اثر نگاه به آینده توضیح داده شده است.

🧪 باز کردن ابزار مربوط

🔒 در هیچ تمرینی از سرمایهٔ واقعی، عبارت بازیابی (Seed Phrase)، کلید خصوصی یا اتصال کیف پول اصلی استفاده نکنید.

📝 آزمون تطبیقی

هر بار ۵ سؤال از بانک ۹ سؤالی این درس انتخاب می‌شود؛ سؤال‌هایی که قبلاً اشتباه زده‌اید زودتر برمی‌گردند. حدنصاب قبولی ۸۰٪ (۴ از ۵) است و درس بعد با قبولی باز می‌شود.

✍️ پرسش تشریحی

دوستی نتیجهٔ بک‌تستی را نشان می‌دهد که با pandas ساخته شده و بازده سالانهٔ ۳۰۰٪ با بیشترین افت ۵٪ دارد. چه پرسش‌ها و بررسی‌هایی انجام می‌دهید تا مطمئن شوید نتیجه حاصل خطای داده یا کد نیست؟

بعد از نوشتن، پاسخ خود را با این معیارها بسنجید

خودارزیابی: هر نکته‌ای را که پاسخ شما به‌روشنی پوشش داده علامت بزنید.

🤖 دستیار آموزشی

دستیار آفلاین آکادمی: پاسخ‌ها فقط از متن درس‌ها و واژگان همین آکادمی پیدا می‌شوند و منبع هر پاسخ نشان داده می‌شود. هوش مصنوعی مولد نیست، حدس نمی‌زند و هیچ سیگنال خرید و فروشی نمی‌دهد.

📎 منابع مطالعاتی

🏁 معیار تسلط بر این درس: می‌توانید با pandas دادهٔ قیمت را بخوانید و بررسی کنید، بازده، نوسان سالانه و بیشترین افت را حساب کنید و یک سیگنال ساده را بدون نگاه به آینده بیازمایید.

داده‌ها به‌صورت خودکار از کانال Coin_Kurd، Binance، CoinGecko و alternative.me به‌روز می‌شوند.