🌐 دانشکدهٔ ۱۱ · بازارهای پیشرفته
پایتون مقدماتی برای دادهٔ کریپتو
Introductory Python for crypto data
پیشنیازها: بکتست و خطای نگاه به آینده
📚 آموزش در سه سطح
از سطح ساده شروع کنید؛ اگر روشن بود، سطح بعد را بخوانید. سطح مناسب شما ذخیره میشود.
🌱 توضیح ساده
پایتون زبان رایج تحلیل داده است، چون ساده خوانده میشود و کتابخانههای قدرتمندی دارد. مهمترین آنها برای دادهٔ جدولی «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 است.
نمونهٔ کوچک برای تمرین ذهنی: پنج قیمت بسته شدن ۱۰۰، ۱۱۰، ۹۹، ۱۰۴ و ۱۲۰. بازدهها ۱۰٪، منفی ۱۰٪، حدود ۵٫۱٪ و حدود ۱۵٫۴٪ است. منحنی ارزش از ۱ به ۱٫۱، سپس ۰٫۹۹، ۱٫۰۴ و ۱٫۲ میرسد و بیشترین افت، از قلهٔ ۱٫۱ تا ۰٫۹۹، برابر ۱۰٪ است. درس: ابزاری که از نیاز واقعی یک تحلیلگر مالی ساخته شد، امروز اجازه میدهد همین محاسبه را روی ده سال داده در چند ثانیه و بدون خطای دستی انجام دهید.
🔤 واژگان تخصصی
ساختار جدولی pandas با ستونهای نامدار و نمایه.
مثال: جدول قیمت روزانه با ستونهای open، high، low، close و volume.
تغییر درصدی قیمت نسبت به روز قبل.
مثال: df['close'].pct_change()
بزرگترین افت درصدی از یک قله تا کف بعدی.
مثال: افت از ۱٫۱ به ۰٫۹۹ یعنی ۱۰٪.
محاسبهٔ یک آماره روی تعداد ثابتی از آخرین مشاهدهها.
مثال: df['close'].rolling(50).mean()
خطای ناشی از حذف داراییهای از بین رفته از نمونهٔ تحلیل.
مثال: تحلیل فقط توکنهای فهرستشدهٔ امروز.
🔑 نکات کلیدی
- pandas با DataFrame، pct_change، rolling و resample پایهٔ تحلیل دادهٔ قیمت است.
- نوسان سالانهٔ کریپتو = انحراف معیار بازده روزانه × جذر ۳۶۵.
- بیشترین افت = کمینهٔ (ارزش ÷ بیشینهٔ تجمعی ارزش − ۱).
- سیگنال امروز را با shift(1) از فردا اجرا کنید تا نگاه به آینده رخ ندهد.
- منبع داده، منطقهٔ زمانی، شکافها و نسخهٔ کد را ثبت کنید تا نتیجه قابل تکرار باشد.
⚠️ اشتباهات رایج
- تحلیل بدون نگاه کردن به داده؛ اشتباه است چون ردیف تکراری یا تاریخ نامرتب نتیجه را جعلی میکند.
- فراموش کردن shift(1) در سیگنال؛ اشتباه است چون بکتست از اطلاعات آینده استفاده میکند.
- استفاده از جذر ۲۵۲ برای کریپتو؛ اشتباه است چون بازار کریپتو هر روز سال باز است.
- تحلیل فقط داراییهای زندهٔ امروز؛ اشتباه است چون سوگیری بقا بازده را بیش از واقع نشان میدهد.
🛠 تمرین عملی: نخستین تحلیل پایتونی دادهٔ بیتکوین
- یک فایل CSV قیمت روزانهٔ BTC با ستونهای date و close تهیه کنید، آن را با pandas بخوانید و ردیفهای خالی و تکراری را بشمارید.
- بازده روزانه، نوسان سالانه با جذر ۳۶۵ و بیشترین افت را حساب کنید.
- استراتژی «بالای میانگین متحرک ۵۰ روزه» را با shift(1) بسازید و بازده و بیشترین افت آن را با نگهداری ساده مقایسه کنید؛ سپس همان را بدون shift تکرار کنید و تفاوت را توضیح دهید.
✅ معیار درستی: داده بررسی و پاکسازی شده، سه معیار درست حساب شده و تفاوت نتیجهٔ با و بدون shift(1) بهعنوان اثر نگاه به آینده توضیح داده شده است.
🔒 در هیچ تمرینی از سرمایهٔ واقعی، عبارت بازیابی (Seed Phrase)، کلید خصوصی یا اتصال کیف پول اصلی استفاده نکنید.
📝 آزمون تطبیقی
هر بار ۵ سؤال از بانک ۹ سؤالی این درس انتخاب میشود؛ سؤالهایی که قبلاً اشتباه زدهاید زودتر برمیگردند. حدنصاب قبولی ۸۰٪ (۴ از ۵) است و درس بعد با قبولی باز میشود.
✍️ پرسش تشریحی
دوستی نتیجهٔ بکتستی را نشان میدهد که با pandas ساخته شده و بازده سالانهٔ ۳۰۰٪ با بیشترین افت ۵٪ دارد. چه پرسشها و بررسیهایی انجام میدهید تا مطمئن شوید نتیجه حاصل خطای داده یا کد نیست؟
بعد از نوشتن، پاسخ خود را با این معیارها بسنجید
خودارزیابی: هر نکتهای را که پاسخ شما بهروشنی پوشش داده علامت بزنید.
🤖 دستیار آموزشی
دستیار آفلاین آکادمی: پاسخها فقط از متن درسها و واژگان همین آکادمی پیدا میشوند و منبع هر پاسخ نشان داده میشود. هوش مصنوعی مولد نیست، حدس نمیزند و هیچ سیگنال خرید و فروشی نمیدهد.
📎 منابع مطالعاتی
🏁 معیار تسلط بر این درس: میتوانید با pandas دادهٔ قیمت را بخوانید و بررسی کنید، بازده، نوسان سالانه و بیشترین افت را حساب کنید و یک سیگنال ساده را بدون نگاه به آینده بیازمایید.