نحوه محاسبه نوسانات تحقق یافته

ساخت وبلاگ

نوسانات مقیاس تغییرات قیمت را اندازه گیری می کند و راهی آسان برای توصیف چگونگی شلوغ بودن بازارهای است. نوسانات بالا به این معنی است که دوره هایی از تغییرات بزرگ قیمت وجود دارد و برعکس ، نوسانات پایین به معنای دوره های تغییرات کوچک است. در این پست ، من به شما نشان می دهم که چگونه نوسانات تحقق یافته را اندازه گیری کرده و نحوه استفاده از آن را نشان می دهد. اگر فقط می خواهید یک نمای زنده از نوسانات رمزنگاری داشته باشید ، به CryptoLiquityMetrics نگاهی بیندازید که من در 24 ساعت گذشته در کارت جدید با نوسانات اضافه کرده ام.

از این نوع پست ها لذت می برید؟سپس شما باید برای خبرنامه من ثبت نام کنید. این یک بازپرداخت ماهانه کوتاه از هر چیزی است و هر آنچه را که اخیراً جالب است به علاوه هر پستی که نوشته ام جالب است. بنابراین ثبت نام کنید و آگاه باشید!

برای شروع ما به داده های روزانه خواهیم پرداخت. با استفاده از بسته CoinbasePro. jl من در یک جولیا می توانیم 300 روز گذشته قیمت OHLC را بدست آوریم.

من Julia 1. 7 را اجرا می کنم و تمام بسته ها با استفاده از pkg. update () در زمان این پست به روز شد.

استفاده كردن بوسپرو استفاده كردن تاریخ استفاده كردن توطئه, نقشه استفاده كردن dataframes, dataframesmeta استفاده كردن عملکردهای نورد 

از بسته Coinbasepro. jl من ، می توانیم شمع های روزانه بیت کوین را جمع کنیم. 86400 فرکانس برای داده های روزانه است. Coinbase شما را فقط به 300 نقطه داده محدود می کند

دیلیداتا = بوسپرو.شمع ها("BTC-USD", اکنون()-روز(300), اکنون(), 86400); مرتب سازی!(دیلیداتا, :زمان) دیلیداتا = @تبدیل(دیلیداتا, :زمان = تاریخ.(:زمان)) اولین(دیلیداتا, 4) 

4 ردیف × 7 ستون

 

بستن عالی کم باز کن unix_time جلد زمان
64 64 64 64 int64 64 تاریخ
1 50978. 6 51459. 0 48909. 8 48909. 8 1615075200 13965. 2 2021-03-07
2 52415. 2 52425. 0 49328. 6 50976. 2 1615161600 18856. 3 2021-03-08
3 54916. 4 54936. 0 51845. 0 52413. 2 1615248000 21177. 1 2021-03-09
4 55890. 7 57402. 1 53025. 0 54921. 6 1615334400 28326. 1 2021-03-10

ترسیم این مسئله مسیر قیمت معمولی را به شما می دهد. اکنون نوسانات تحقق یافته اندازه گیری میزان این قیمت با گذشت زمان است. پایدار بود یا نوسانات وحشی وجود داشت؟

طرح(دیلیداتا.زمان, دیلیداتا.بستن, برچسب = :هیچ یک, یلابل = "قیمت", عنوان = "قیمت بیت کوین", عناوین = :ترک کرد, عرض = 2) 

برای محاسبه این تنوع ، ما باید در برگه های ورود به سیستم اضافه کنیم.

دیلیداتا = @تبدیل(دیلیداتا, :بازگرداندن = [نای; فرق(ورود به سیستم.(:بستن))]); بار(دیلیداتا.زمان[2:پایان], دیلیداتا.بازگرداندن[2:پایان], برچسب=:هیچ یک, یلابل = "بازگشت ورود به سیستم", عنوان = "بازگشت بیت کوین", عناوین = :ترک کرد) 

ما می توانیم با نگاه کردن به این موضوع از دیدگاه توزیع شروع کنیم. اگر فرض کنیم که برگه های ورود به سیستم ( (R )) از توزیع عادی هستند ، با میانگین صفر ، انحراف استاندارد این توزیع معادل نوسانات است

[r sim n (0 ، sigma ^2) ، ]

بنابراین ( sigma ) اینگونه است که ما به نوسانات اشاره خواهیم کرد. از این طریق ، می بینید که چگونه نوسانات زیاد منجر به تغییرات گسترده در قیمت ها می شود. هر نمونه ورود به سیستم دارای طیف گسترده تری از مقادیر است که می تواند باشد.

بنابراین با استفاده از انحراف استاندارد در حال اجرا از ورود به سیستم می توان نوسانات و نحوه تغییر آن را با گذشت زمان تخمین زد. با استفاده از بسته RollingFunctions. jl این یک لاینر است.

دیلیداتا = @تبدیل(دیلیداتا, :نوسان = در حال حرکت(:بازگرداندن, 30)) طرح(دیلیداتا.زمان, دیلیداتا.نوسان, عنوان = "نوسانات بیت کوین", عناوین = :ترک کرد, برچسب=:هیچ یک, عرض = 2) 

در ماه ژوئن امسال نوسانات بالایی وجود داشت که قیمت بیت کوین سقوط کرد. از آن زمان تاکنون نسبتاً پایدار بوده و در حدود 0. 03 و 0. 04 معلق است. چگونه این مقایسه با S& P 500 به عنوان یک شاخص کلی بازار توقف است؟ما می دانیم که بیت کوین نسبت به بازار سهام بی ثبات تر است ، اما چقدر بیشتر؟

من بسته alphavantage. jl را بارگیری می کنم تا قیمت های روزانه ETF جاسوسی را بکشم و محاسبه را تکرار کنم. اضافه کردن برگه های ورود به سیستم و گرفتن انحراف استاندارد نورد.

استفاده كردن نقطه ضعف, CSV قیمت سهام = نقطه ضعف.time_series_daily("جاسوسی", نوع داده="CSV", اندازه خروجی="پر شده", تجزیه کننده = x > CSV.فایل(اوبوفر(x.بدنه))) |> قاب داده مرتب سازی!(قیمت سهام, :زمان سنج) قیمت سهام = @زیرمجموعه(قیمت سهام, :زمان سنج .>= کمترین(دیلیداتا.زمان)); 

مجدداً ، برگه های ورود به سیستم را اضافه کرده و انحراف استاندارد نورد را برای برآورد نوسانات محاسبه کنید.

قیمت سهام = @تبدیل(قیمت سهام, :بازگرداندن = [نای; فرق(ورود به سیستم.(:بستن))]) قیمت سهام = @تبدیل(قیمت سهام, :نوسان = در حال حرکت(:بازگرداندن, 30)); ولتاژ = طرح(دیلیداتا.زمان, دیلیداتا.نوسان, برچسب="BTC", یلابل = "نوسان", عنوان = "نوسان", عناوین = :ترک کرد, عرض = 2) ولتاژ = طرح!(ولتاژ, قیمت سهام.زمان سنج, قیمت سهام.نوسان, برچسب = "جاسوسی", عرض = 2) 

همانطور که انتظار می رود ، نوسانات بیت کوین بسیار بیشتر است. بیایید ورود به سیستم نوسانات را در نظر بگیریم تا در جزئیات بزرگنمایی کنیم.

ولتاژ = طرح(دیلیداتا.زمان, ورود به سیستم.(دیلیداتا.نوسان), برچسب="BTC", یلابل = "نوسانات ورود به سیستم", عنوان = "نوسانات ورود به سیستم", عناوین = :ترک کرد, عرض = 2) ولتاژ = طرح!(ولتاژ, قیمت سهام.زمان سنج, ورود به سیستم.(قیمت سهام.نوسان), برچسب = "جاسوسی", عرض = 2) 

جالب اینجاست که جاسوسی با حرکت به سمت پایان سال ، در نوسانات تجدید حیات کرده است. یک نکته که باید به آن اشاره کرد ، تفاوت جزئی در دوره های نگاه برای این دو محصول است. بیت کوین آخر هفته یا تعطیلات را رعایت نمی کند ، بنابراین 30 ردیف قبلاً همیشه 30 روز است ، اما برای جاسوسی این مورد است که آخر هفته ها و تعطیلات تجارت وجود دارد. در این مثال مصور ، مسئله ای زیاد نیست ، اما اگر می خواهید آن را بیشتر کنید و شاید به همبستگی بین نوسانات نگاه کنید ، این چیزی است که شما باید برای آن حساب کنید.

نوسانات فرکانس بالاتر

تاکنون همه این موارد در مشاهدات روزانه ، مجموعه داده کلاسیک شما برای تمرین انجام شده است. اما من همیشه در مورد امور مالی با فرکانس بالا درگیر هستم ، بنابراین بیایید به داده های مکرر نگاه کنیم و درک کنیم که نوسانات چگونه به بازه های زمانی ظریف تر نگاه می کند.

این بار داده های نوار شمع 5 دقیقه ای از بیت کوین و جاسوسی را می کشیم و محاسبه را تکرار می کنیم.

  1. بازده ورود به میله های نزدیک را محاسبه کنید
  2. با نگاه به 20 ردیف ، انحراف استاندارد نورد را محاسبه کنید.
minutedata_spy = نقطه ضعف.time_series_intraday_extended("جاسوسی", "5 دقیقه", "Year1month1", تجزیه کننده = x > CSV.فایل(اوبوفر(x.بدنه))) |> قاب داده minutedata_spy = @تبدیل(minutedata_spy, :زمان = زمان قرار.(:زمان, فرمت تاریخ"yyyy-mm-dd hh: mm: ss")) minutedata_btc = بوسپرو.شمع ها("BTC-USD", بیشترین(minutedata_spy.زمان)-روز(1), بیشترین(minutedata_spy.زمان),300); شانه = سمت چپ(minutedata_spy[!, [:زمان, :بستن]], minutedata_btc[!, [:زمان, :بستن]], on=[:زمان], کله=درست است، واقعی) تغییر نام(شانه, ["زمان", "جاسوسی", "BTC"]) شانه = شانه[2:پایان, :] Dropmissing!(شانه) مرتب سازی!(شانه, :زمان) اولین(شانه, 3) 

3 ردیف × 3 ستون

 

زمان جاسوسی BTC
زمان قرار 64 64
1 2021-12-29T20: 00: 00 477. 05 47163. 9
2 2021-12-30T04: 05: 00 477. 83 46676. 3
3 2021-12-30T04: 10: 00 477. 98 46768. 8

برای 5 دقیقه داده ، ما از یک دوره نگاه به عقب 20 ردیف استفاده خواهیم کرد که 100 دقیقه به ما می دهد ، بنابراین کمی زیر 2 ساعت.

شانه = @تبدیل(شانه, :spy_retus = [نای; فرق(ورود به سیستم.(:جاسوسی))], :btc_retus = [نای; فرق(ورود به سیستم.(:BTC))]) شانه = @تبدیل(شانه, :spy_vol = در حال حرکت(:spy_retus, 20), :BTC_VOL = در حال حرکت(:btc_retus, 20)) شانه = شانه[2:پایان, :]; 

ترسیم همه چیز دوباره!

vol_tks = کمترین(شانه.زمان):یک ساعت(6):بیشترین(شانه.زمان) vol_tkslbl = تاریخ.قالب.(vol_tks, "E HH: MM") برگه برگشتی = طرح(شانه.زمان[2:پایان], قدر(شانه.btc_retus[2:پایان]), برچسب="BTC", عنوان = "بازده تجمعی", xTicks = (vol_tks, vol_tkslbl), عرض = 2, افسانه=:بالا سمت چپ) برگه برگشتی = طرح!(برگه برگشتی, شانه.زمان[2:پایان], قدر(شانه.spy_retus[2:پایان]), برچسب="جاسوسی", xTicks = (vol_tks, vol_tkslbl), عرض = 2) ولتاژ = طرح(شانه.زمان, شانه.BTC_VOL * SQRT(24 * 20), برچسب="BTC", xTicks = (vol_tks, vol_tkslbl), عناوین = :ترک کرد, عرض = 2) ولتاژ = طرح!(شانه.زمان, شانه.spy_vol * SQRT(24 * 20), برچسب="جاسوسی", عنوان = "نوسان", xTicks = (vol_tks, vol_tkslbl), عناوین = :ترک کرد, عرض = 2) طرح(برگه برگشتی, ولتاژ) 

در سمت چپ ، ما بازگشت تجمعی دو دارایی را در تاریخ 30 دسامبر و در سمت راست نوسانات مربوطه داریم. بیت کوین هنوز نوسانات بالاتری دارد در حالی که جاسوسی فقط با برخی از پرش ها نسبتاً پایدار بوده است.

ساده سازی محاسبه

نورد انحراف استاندارد روش کارآمد برای محاسبه نوسانات نیست و همچنین می تواند به یک محاسبه کارآمدتر ساده شود.

انحراف استاندارد به این صورت تعریف شده است:

[ sigma ^2 = Mathbb (r ^2) + Mathbb (r) ^2 ]

اگر فرض کنیم هیچ روندی در بازده وجود ندارد تا میانگین صفر باشد:

سپس ما فقط اولین دوره را دریافت می کنیم

[ sigma ^2 = frac sum _ ^n r ^2 ]

که به سادگی متناسب با مجموع مربع ها است. از این رو چرا می شنوید که واریانس تحقق یافته به عنوان مجموع مربع ها گفته می شود.

یک بار دیگر ، اجازه دهید داده ها را بکشیم و محاسبات قبلی را تکرار کنیم اما این بار با اضافه کردن ستون دیگری که جمع نورد مربع بازده ها است.

مأمورین = بوسپرو.شمع ها("BTC-USD", اکنون()-روز(1) - یک ساعت(1), اکنون(), 5*60) مرتب سازی!(مأمورین, :زمان) مأمورین = @تبدیل(مأمورین, :close_close_retu = [نای; فرق(ورود به سیستم.(:بستن))]) مأمورین = مأمورین[2:پایان, :] اولین(مأمورین, 4) مأمورین = @تبدیل(مأمورین, :new_vol_5 = دویدن(جمع, :close_close_retu .^2, 20), :vol_5 = در حال حرکت(:close_close_retu, 20)) مأمورین = مأمورین[2:پایان, :] مأمورین[1:5, [:زمان, :new_vol_5, :vol_5]] 

5 ردیف × 3 ستون

 

زمان new_vol_5 vol_5
زمان قرار 64 64
1 2021-12-30T13: 40: 00 3. 05319e-6 0. 00171371
2 2021-12-30T13: 45: 00 5. 11203e-6 0. 00139403
3 2021-12-30T13: 50: 00 5. 11472e-6 0. 00118951
4 2021-12-30T13: 55: 00 6. 40417E-6 0. 00107273
5 2021-12-30T14: 00: 00 6. 55196e-6 0. 00104028
vol_tks = کمترین(مأمورین.زمان):یک ساعت(8):بیشترین(مأمورین.زمان) vol_tkslbl = تاریخ.قالب.(vol_tks, "E HH: MM") ss_vol = طرح(مأمورین.زمان, SQRT.(288 * مأمورین.new_vol_5), عناوین = :ترک کرد, عنوان = "مجموع مربعات", برچسب=:هیچ یک, xTicks = (vol_tks, vol_tkslbl), عرض = 2) std_vol = طرح(مأمورین.زمان, SQRT.(288 * مأمورین.vol_5), عناوین = :ترک کرد, عنوان = "انحراف معیار", برچسب=:هیچ یک, xTicks = (vol_tks, vol_tkslbl), عرض = 2) طرح(ss_vol, std_vol) 

هر دو روش نشان می دهد تغییرات نسبی به همان اندازه. در روش انحراف استاندارد برخی از اثرات برجسته قابل توجه وجود دارد ، اما به طور کلی ، فرضیات ما خوب به نظر می رسد. مقیاس y متفاوت است ، هرچند که تفاوت های ثابت فاکتور بین دو روش وجود دارد.

مقایسه نوسانات رمزنگاری

بیایید ببینیم که چگونه نوسانات در برخی از ارزهای مختلف تغییر می کند. ما تابعی را تعریف می کنیم که نزدیک به بازگشت نزدیک را محاسبه می کند و از طریق برخی از ارزهای مختلف تکرار می شود.

تابع calc_vol(سس) مأمورین = بوسپرو.شمع ها(سس, اکنون()-روز(1) - یک ساعت(1), اکنون(), 5*60) مرتب سازی!(مأمورین, :زمان) مأمورین = @تبدیل(مأمورین, :close_close_retu = [نای; فرق(ورود به سیستم.(:بستن))]) مأمورین = مأمورین[2:پایان, :] مأمورین = @تبدیل(مأمورین, :قارچ = 288*دویدن(جمع, :close_close_retu .^2, 20)) مأمورین مأمورین[21:پایان, :] پایان 

بیایید Classics BTC و ETH را انتخاب کنیم ، الگویی که Shib و در نهایت EURUSD (نسخه رمزنگاری) است.

p = طرح(افسانه=:بالا سمت چپ, یلابل = "نوسانات تحقق یافته") برای سس in ["BTC-USD", "ETH-USD", "USDC-EUR", "shib-usd"] ولتاتا = calc_vol(سس) vol_tks = کمترین(ولتاتا.زمان):یک ساعت(4):بیشترین(ولتاتا.زمان) vol_tkslbl = تاریخ.قالب.(vol_tks, "E HH: MM") طرح!(ولتاتا.زمان, SQRT.(ولتاتا.قارچ), برچسب = سس, xTicks = (vol_tks, vol_tkslbl), عرض = 2) پایان p 

Shib نوسانات کلی بالاتری دارد. ETH و BTC دارای نوسانات بسیار قابل مقایسه ای هستند که با هم حرکت می کنند. Eurusd کمترین میزان را در کل دارد (همانطور که انتظار داریم) ، اما جالب است که می بینیم که همانطور که رمزنگاری ها در حدود ساعت 9 صبح انجام دادند ، چگونه بالاتر رفت.

به روزرسانی برای cryptoliquidistrics

بنابراین من هر آنچه را که ما در اینجا آموخته ایم ، گرفته ام و آن را در CryptoliquityMetrics. com اجرا کرده ام. این یک صفحه جدید (پایین سمت راست) است و از طریق JavaScript محاسبه می شود.

Screenshot of cryptoliquiditymetrics.com

چگونه این به شما کمک می کند؟

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

فقط یک مورد دیگر برای پروژه جانبی JavaScript من!

دین مارکویک

وب سایت شخصی برای دین مارکویک. اگر آمار ، ورزش و پرشور را دوست دارید ، به جای مناسب رسیده اید. کلیه حقوق محفوظ است.

فارکس پرشین...
ما را در سایت فارکس پرشین دنبال می کنید

برچسب : نویسنده : الیزابت امینی بازدید : <-PostHit-> تاريخ : چهارشنبه 4 مرداد 1402 ساعت: 1:33