محاسبه میانگین های متحرک با T-SQL

ساخت وبلاگ

SQLServerCentral Article

این مقاله به شما نشان می دهد که چگونه می توانید میانگین های متحرک را با داده های بازار مالی در طول زمان با استفاده از T-SQL محاسبه کنید. دو میانگین متحرک در بازارهای مالی با تجزیه و تحلیل فنی استفاده می شود - ساده و نمایی. هدف در اینجا این است که راه حلی را در اختیار شما قرار دهد که به شما امکان می دهد میانگین های حرکت ساده (SMA) را به طور کارآمد انجام دهید و بر اساس آن برای انجام EMA بنا کنید.

میانگین حرکت ساده (SMA)

تفاوت بین میانگین معمولی که ما استفاده می کنیم (یعنی از طریق عملکرد AVG ()) و یک میانگین حرکت ساده این است که میانگین های حرکت فقط از زیر مجموعه ای از کل داده ها نسبت به تاریخ در ردیف فعلی استفاده می کنند. به عنوان مثال ، در بازار سهام ، بسیاری از سایت های مالی و ابزارهای نمودار دارای یک پوشش 20 روزه SMA (میانگین متحرک ساده) در بالای قیمت سهام هستند. تصویر زیر قیمت سهام Google را به رنگ آبی تیره نشان می دهد ، و SMA 20 روزه در آبی روشن است.

نقطه داده در 12/30/09 برای SMA 20 روزه در حدود 600 دلار است. این میانگین فقط شامل 20 روز معاملات قبلی است. همانطور که می بینید ، برای فهمیدن الگوهای روند عمومی بدون اینکه مستعد ابتلا به نوسانات کوتاه مدت باشد ، مفید است. با این حال ، سقوط این است که این یک شاخص تاخیر است ، بنابراین نشانگر خوبی برای آنچه آینده نزدیک ممکن است داشته باشد نیست. صرفنظر از این ، این متریک می تواند با هر مجموعه داده های تاریخی برای نمودارهای گرایش خلاصه و عکسهای فوری ، خواه برای سهام ، درآمد ماهانه و یا مصرف برق مفید باشد.

پیاده سازی

در این مرحله ، من حدس می زنم که بیشتر خوانندگان این مقاله در حال حاضر چرخ دنده ها را در مورد چگونگی حل این مشکل در نظر گرفته اند. بنابراین بیایید طی کنیم و برخی از استراتژی ها را در مورد چگونگی تحقق این امر سرگرم کنیم. در اینجا کد تنظیم این مقاله است که شامل داده های سهام تاریخی ما برای Google است:

-ایجاد جدول داده های تاریخی ما ایجاد جدول #google_stock (QUOTE_DATE [DATETIME] ، OPEN_PRICE [DECIMAL] (6،2) ، CLOSE_PRICE [DECIMAL] (6،2) ، HIGH_PRICE [اعشاری] (6،2) ، Low_price [اعشاری) مقادیر ('20091027' ، 550. 97 ، 548. 29 ، 554. 56 ، 544. 16) وارد #google_stock (quote_date ، open_price ، close_price ، high_price ، low_price) مقادیر ('20091028' ، 547. 87 ، 540. 30. 30 ، 550. 30 ، 550. 30.، open_price ، close_price ، high_price ، low_price) مقادیر ('20091029' ، 543. 01 ، 551. 05 ، 551. 83 ، 541. 00) وارد کردن به #google_stock (quote_date ، open_price ، close_price ، high_price ، low_price ، low_price ، 550 ، 550. 00)534. 24) در #google_stock (QUOTE_DATE ، OPEN_PRICE ، CLOSE_PRICE ، HIGH_PRICE ، LOW_PRICE) وارد کنید ('20091102' ، 537. 08 ، 533. 99 ، 539. 46 ، 528. 24) وارد #google_stock (quote_date ، open_price ، close_price ، high_price ، low_price) مقادیر ('20091103' ، 530. 01 ، 537. 29 ، 537. 50 ، 528. 30 ، 528. 30) Insert #uegegle_stateمقادیر low_price) مقادیر ('20091104' ، 540. 80 ، 540. 33 ، 545. 50 ، 536. 42) وارد کردن به #google_stock (quote_date ، open_price ، close_price ، high_price ، low_price) مقادیر ('20091105' ، 543. 49 ، 543. 49 ، 548. 65 ، 548. 65 ، 548. 65 ، 548. 77)QUOTE_DATE ، OPEN_PRICE ، CLOSE_PRICE ، HIGH_PRICE ، LOW_PRICE) مقادیر ('20091106' ، 547. 72 ، 551. 10 ، 551. 78 ، 545. 50) درج #Google_stock (Quote_date ، Open_price ، Close_price ، 555. Price ، 55. Price ، Low_price) (20091109).، 554. 23) وارد #google_stock (quote_date ، open_price ، close_price ، high_price ، low_price) مقادیر ('20091110' ، 562. 73 ، 566. 76 ، 568. 78 ، 562. 00) در #google_stock (quote_date_date ، open_date ، close_date ، open_date ، close_date ، close_date ، close)20091111 '، 570. 48 ، 570. 56 ، 573. 50 ، 565. 86) در #google_stock (quote_date ، open_price ، close_price ، high_price ، low_price) مقادیر ('20091112' ، 5699. 56 ، 567. 85 ، 572. 90 ، 565. 50) درج به #Google_stock (quote_date_date ، open_price ، close_price ، close_price ، close_price ، close_price ، close_price ، close_price ، close_price)'، 569. 29 ، 572. 05 ، 572. 51 ، 566. 61) وارد کردن به #google_stock (quote_date ، open_price ، close_price ، high_price ، low_price) مقادیر (' 20091116 '، 575. 00 ، 576. 28 ، 576. 99 ، 576. 99 ، 572. 72. 72. 78) Insertبا قیمت بالا ،

مقادیر low_price) مقادیر ('20091117' ، 574. 87 ، 577. 49 ، 577. 50 ، 573. 72) وارد کردن به #google_stocle (quote_date ، open_price ، close_price ، high_price ، insh insh_price) ارزش ها ('20091118' ، 576. 65 ، 576. 65 ، 576. 65 ، 576. 65 ، 576. 78. 78. 78. 78. 78. 78. 78. 78. 78. 78. 78. 78. 78. 78. 78. 78. 78. 78. 78. 78. 78. 78. 78. 78. 78. 78. 78. 78. 78. 78. 78. 78. 78. 78. 78. 78. 78. 78. QUOTE_DATE ، OPEN_PRICE ، CLOSE_PRICE ، HIGH_PRICE ، LOW_PRICE) مقادیر ('20091119' ، 573. 77 ، 572. 99 ، 574. 00 ، 570. 00) وارد کردن به #google_stock (quote_date ، open_price ، close_price ، high_price ، 56. 5650) 56910). 20091124 '، 582. 52 ، 583. 09 ، 584. 29 ، 576. 54) وارد کردن #google_stock (quote_date ، open_price ، close_price ، close_price ، low_price) ارزش ها (' 20091125 '، 586. 41 ، 585. 74 ، 587. 06 ، 587. 06)، مقادیر high_price ، low_price) ('20091127 '، 572. 00 ، 579. 76 ، 582. 46 ، 570. 97) وارد کردن به #google_stock (heote_date ، open_price ، close_price ، high_price ، low_price) مقادیر (' 20091130 '، 580. 63 ، 583. 00 ، 583. 67 ، 577. 11) Insert insert (qutogogle_dtock)، High_price ، Low_price) مقادیر ('20091201' ، 588. 13 ، 589. 87 ، 591. 22 ، 583. 00) مقادیر #google_stock (QUOTE_DATE ، OPEN_PRICE ، CLOSE_PRICE ، HIGH_PRICE ، LOW_PRICE) مقادیر ('20091202' ، 591202 ، 59120 ، 591202. 585. 01 ، 594. 83 ، 579. 18) وارد #google_stock (quote_date ، open_price ، close_price ، high_price ، low_price) مقادیر ('20091207' ، 584. 21 ، 586. 25 ، 588. 69 ، 581. 00) insert به #googe_dumtoke_dumارزش ها ('20091208' ، 583. 50 ، 587. 05 ، 590. 66 ،'، 590. 44 ، 591. 50 ، 594. 71 ، 590. 41) در #google_stock (quote_date ، open_price ، close_price ، high_price ، low_price) مقادیر (' 20091211 '، 594. 68 ، 590. 51 ، 594. 75 ، 594. 75 ، 587. 73) درج شده است.

مقادیر high_price ، low_price) مقادیر ('20091214' ، 595. 35 ، 595. 73 ، 597. 31 ، 592. 61) در #google_stock (quote_date ، open_price ، close_price ، inser_price ، low_price) مقادیر ('20091215' ، 593. 30 ، 593. 30 ، 593. 30 ، 593. Google_stock (quote_date ، Open_price ، close_price ، high_price ، low_price) مقادیر ('20091216' ، 598. 60 ، 597. 76 ، 600. 37 ، 596. 64) درج به #google_stock (quote_date ، open_price ، close_price ، high_price ، high_price)، 597. 64 ، 593. 76) وارد #google_stock (quote_date ، open_price ، close_price ، high_price ، low_price) مقادیر ('20091218' ، 596. 03 ، 596. 42 ، 598. 93 ، 595. 00) indert ints #plate_stock ، open_preic_price (quote_stock)، close_price ، high_price ، low_price) ارزشمندES ('20091223' ، 603. 50 ، 611. 68 ، 612. 87 ، 602. 85) وارد #google_stock (quote_date ، open_price ، close_price ، high_price ، low_price) مقادیر ('20091224' ، 612. 93 ، 618. 48 ، 618. 48 ، 619. 52 ، 612. 27)Open_price ، close_price ، high_price ، low_price) مقادیر ('20091228' ، 621. 66 ، 622. 87 ، 625. 99 ، 618. 48) وارد کردن به #google_stock (#GEOGLE_DATE ، OPEN_PRICE ، CLOSE_PRICE ، HIGH_PRICE ، 619 ، LOW_PRICE)) ، 6249 ،، 624. 75 ، 619. 98 ، 625. 40 ، 619. 98) وارد #google_stock (quote_date ، open_price ، close_price ، high_price ، low_price) مقادیر ('20100104' ، 626. 95 ، 626. 75 ، 629. 51 ، 629. 51 ، 629. 24. 24) Insert insert (، مقادیر Low_price) ('20100105' ، 627. 18 ، 623. 99 ، 627. 84 ، 621. 54) در #google_stock (quote_date ، open_price ، close_price ، high_price ، low_price) مقادیر ('20100106' ، 625. 86 ، 608. 26 ، 625. 86 ، 606. 36) وارد #google_stock ، chooke_stock (upeptock ، open_stock ، 625. 86 ، 625. 86 ، 625. 86).) مقادیر ('20100107' ، 609. 40 ، 594. 10 ، 610. 00 ، 592. 65) وارد #google_stock (QUOTE_DATE ، OPEN_PRICE ، CLOSE_PRICE ، LOW_PRICE) مقادیر ('20100108' ، 592. 00 ، 602. 02 ، 603. 25 ، 589. 1111) Insert insert (، Open_Price ،

Close_price ، High_price ، Low_price) مقادیر ('20100111' ، 604. 46 ، 601. 11 ، 604. 46 ، 594. 04) در #google_stock (QUOTE_DATE ، OPEN_PRICE ، CLOSE_PRICE ، HIGH_PRICE ، LOW_PRICE) مقادیر ('20100112' ، 597. 65 ، 597. 65 ، 597. 65 ،) مقادیر ('20100119' ، 581. 20 ، 587. 62 ، 590. 42 ، 576. 29) وارد کردن #google_stock (quote_date ، open_price ، insprice ، insprice ، high_price ، insogelogle) مقادیر ('20100120' ، 585. 98 ، 580. 1vo، open_price ، close_price ، high_price ، loW_Price) مقادیر ('20100121' ، 583. 44 ، 582. 98 ، 586. 82 ، 572. 25) وارد کردن به #google_stock (quote_date ، Open_price ، close_price ، high_price ، high_price) مقادیر ('20100122' ، 564. 50 ، 564. 50 ، 550. 50. 50. 050 ، 550. 50. 050. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50.#Google_Stock (QUOTE_DATE)

select a.quote_date, a.close_price, AVG(b.close_price) [20_day_sma] from #google_stock a join #google_stock b on a.quote_date>= b.quote_date and b.quote_date>از آنجا که ما تمام فیلترهای خود را در ستون تاریخ انجام خواهیم داد ، این انتخاب آشکار برای شاخص خوشه ای ما است.

استراتژی شماره 1 - با گروه توسط

این استراتژی احتمالاً راه حلی است که اکثر مردم در ابتدا به آن ارائه می دهند. این شامل پیوستن به جدول بر روی خود است ، با شرایطی که تاریخ جدول دوم را مانند آن فیلتر می کند:

= گروه dateadd (dd ، -20 ، a. quote_date) توسط a. quote_date ، a. close_price سفارش توسط 1

اکنون عملکرد عاقلانه ، این یک پرس و جو بد نیست - ما می توانستیم خیلی بدتر عمل کنیم. برای دستگاه من ، این منجر به حدود 125 خواندن منطقی می شود. با این حال این راه حل ایده آل ما نیست زیرا 1) ما می توانیم عملکرد بهتری ارائه دهیم ، و 2) این مشخصات را برآورده نمی کند. حتی اگر آن را میانگین 20 روزه نامیده شود ، در واقع به 20 روز معاملاتی گذشته اشاره دارد ، که (برای بازار سهام) M-F به استثنای تعطیلات است. بنابراین حتی اگر زیر مجموعه های خود را تا 20 روز فیلتر کردیم ، این پرس و جو به دلیل تعطیلات آخر هفته و تعطیلات بیش از 16 روز معاملاتی بر نمی گردد. برای تحقق مشخصات راه حل ما - باید یک ستون شماره اضافه کنیم که توسط quote_date مرتب شده باشد و از آن برای فیلتر کردن استفاده کنیم. در اینجا کد ایجاد جدول اصلاح شده ما است:<20 then null else b.close_price end) as decimal(8,2)) [20_day_sma] from #mod_goog_data a join #mod_goog_data b on b.n a.n - 20 group by a.quote_date, a.close_price order by 1

SELECT ROW_NUMBER () بیش از (سفارش توسط QUOTE_DATE) n ، QUOTE_DATE ، CLOSE_PRICE ، CAST (NULL AS DECIMAL (8،2)) [SMA] به #MOD_GOOG_DATA از #google_stock ایجاد شاخص خوشه ای IX_N در #MOD_GOOG_DATA (n)

اکنون می توانیم به جای تاریخ ، پرس و جو را برای فیلتر کردن توسط قسمت شماره ردیف n اصلاح کنیم. همچنین ، با پرس و جو قبلی ، اگر قبل از پردازش ردیف کمتر از 20 رکورد وجود داشته باشد ، هیچ کاری برای اجرای این امر وجود ندارد که میانگین اندازه نمونه ثابت خود را حفظ کند. در نتیجه ، ردیف اول فقط 1 ردیف به طور متوسط ، ردیف دوم فقط 2 ردیف به طور متوسط ، 3 تنها 3 و غیره داشت. در این پرس و جو ، ما یک عبارت موردی را به عملکرد AVG () اضافه خواهیم کرد تا اطمینان حاصل کنیم که دارای 20 ردیف به طور متوسط است (در غیر این صورت تهی می کند):

A. QUOTE_DATE ، A. CLOSE_PRICE ، بازیگران را انتخاب کنید (AVG (مورد A. N

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

استراتژی شماره 2 - با استفاده از کمی ریاضی /W در حال اجرا

به منظور کاهش عملکرد این پرس و جو بیشتر ، بیایید دوباره بررسی کنیم که چگونه SMA از نظر ریاضی کار می کند. SMA = مبلغ ما (20 قیمت نزدیک آخر)/20 ، و راه حل قبلی ما ما را ملزم به بازیابی 20 ردیف قبلی برای محاسبه مبلغ می کند. با این حال ، هنگامی که مبلغ اول محاسبه شده (در ردیف 20) را داشته باشیم ، در واقع دیگر نیازی به گرفتن مبلغ 20 قیمت پایانی گذشته نداریم. برای کسانی که پارتیشن بندی پنجره کشویی را انجام داده اند ، این مفهوم آشنایی را ارائه می دهد. اگر می توانید پنجره متحرک مبلغ کل را تجسم کنید ، دو چیز اتفاق می افتد که ما به جلو حرکت می کنیم: 1) قیمت بسته شدن ردیف جدید به مبلغ اضافه می شود و 2) قیمت بسته شدن ردیف 20 پیش از آن کم می شود. فرمول تکرار:

مبلغ فعلی = مبلغ قبلی + قیمت نزدیک فعلی - قیمت نزدیک 20 روز معاملاتی قبل

اگر به طور کامل درک این مفهوم را ندارید ، درک بصری در صفحه گسترده آسانتر است:

شکل 1 - تنظیم پایه

این نشان می دهد مورد پایه ای که در آن باید جمع بندی اولیه قیمت نزدیک را در 20 ردیف اول انجام دهیم. برای این راه حل به یاد داشته باشید ، روی مبلغ تمرکز کنید ، نه به طور متوسط. مبلغ 20 روزه برای 11/20/2009 11154. 43 است. حال بیایید به روز معاملاتی بعدی - 11/23/09 حرکت کنیم:

شکل 2 - اولین تکرار

برای محاسبه مبلغ این بار ، ما دیگر به 20 نقطه داده احتیاج نداریم - ما فقط به سه مورد نیاز داریم: مبلغ روز قبل (C21) ، قیمت نزدیک فعلی (B22) و قیمت نزدیک از 10/26/2009 (B2). با وصل کردن آن به فرمول ما ، ما دریافت می کنیم:

مبلغ فعلی

= مبلغ قبلی (11154. 43) + قیمت نزدیک فعلی (582. 35) - قیمت نزدیک از 20 روز پیش (554. 21)

= 11182. 57

تنها کاری که باید انجام دهیم این است که این تعداد را 20 تقسیم کنیم و میانگین 20 روزه خود را برای 11/23/09 (559. 12 دلار) دریافت می کنیم. بیایید یک بار دیگر آن را به جلو حرکت دهیم.

شکل 3 - تکرار دوم

در این مرحله شما باید شروع به دیدن "پنجره کشویی" همانطور که از طریق ردیف ها تکرار می کنیم. با فرمولی که قبلاً از آن استفاده کردیم و داده های موجود در شکل 3 ، این تکرار را امتحان کنید. با توجه به این موضوع ، بیایید به SQL برگردیم و جدول #MOD_GOOG_DATA را با یک قسمت اضافی که حاوی قیمت نزدیک از 20 روز معاملاتی قبل است ، تغییر دهیم:<@intervals then null when n = @intervals then @initial_sum when n>-جدول #MOD_GOOG_DATA // در صورت لزوم جدول DROP-ایجاد یک CTE WorkTable T1 را ایجاد کنید تا به ما اجازه دهیم تا به منظور انجام پیوستن با T1 به عنوان (Select Row_number () از قسمت N-Field استفاده کنیم (سفارش توسط QUOTE_DATE)n ، quote_date ، close_price از #google_stock) A. N ، a. quote_date ، a. close_price ، بازیگران (تهی به عنوان اعشاری (8،2)) را انتخاب کنید [sma] -close_price را از 20 ردیف قبل از این یکی ، بازیگران (b. close_price به عنوان اعشاری (8،2)) [20_day_old_close] به #mod_goog_data از T1 A پیوستن به سمت چپ T1 B در A. N - 20 = B. N

با این جدول جدید #MOD_GOOG_DATA ، اکنون به 2 از 3 نقطه داده در هر ردیف دسترسی داریم. با این حال ما هنوز به داده های ردیف قبلی نیاز داریم. خوشبختانه ، ما می توانیم اطلاعات مفیدی را که توسط جف مودن در مقاله خود در مورد اجرای کل ارائه شده است ، بگیریم (اطمینان حاصل کنید که قبل از تلاش برای این کار ، تمام قوانین را خوانده اید) و یک بیانیه به روزرسانی را تنظیم کنید که به ما امکان می دهد SMA 20 روزه را در یک پاس محاسبه کنیم(بعد از جمع آوری مبلغ 20 روزه اولیه):

DELDREANTINTVALS int ، initial_sum Decimal (8،2) اعلام کننده anchor int ، moving_sum decimal (8،2) setIntervals = 2 0-مقدار مبلغ اولیه را در ردیف 20 انتخاب کنید initial_sum = جمع (close_price) از#MOD_GOOG_DATA که در آن عبارت n-پرونده برای رسیدگی به متغیر moving_su m-به مقدار n set setmoving_sum = case ne n n.

intervals سپس moving_sum + [close_price] -[20_day_old_close] پایان ، sma = @moving_sum/cast (intervals as decimal (8،2)) ، anchor = n-anchor به طوری که حمل و نقل از #MOD_GOOG_DATA T1 با (کار می کند (tablockx) گزینه (maxdop 1) quote_date ، close_price ، sma از #mod_goog_data را انتخاب کنید

حتی اگر ما در حال اجرای 3 جمله جداگانه برای این راه حل هستیم ، هر یک فقط 2 خواندن منطقی را انجام می دهند. علاوه بر این ، بروزرسانی اصلی ما فقط برای محاسبه 20 روزه SMA به یک پاس واحد نیاز دارد. من فکر می کنم ما می توانیم قبول کنیم که شما نمی توانید عملکرد خیلی بهتری از این داشته باشید. دوباره مطمئن شوید که مقاله جف را قبل از ادامه خوانده اید. اگر از استفاده از راه حل Totals Jeff ناراحت هستید ، توصیه می کنم در استراتژی شماره 1 به راه حل بپیوندید. از لحاظ تئوریکی بازگشتی CTE باید با این نوع مشکل خوب کار کند ، اما تمام آزمایشات من عملکرد ضعیف تری را فراهم کرده است - بیشتر طول می کشد ، و خواندن بسیار منطقی تری نسبت به راه حل در استراتژی شماره 1 انجام می دهد.

میانگین های متحرک نمایی

با تکیه بر راه حل خود برای SMA ، ما در واقع می توانیم از همان استراتژی برای محاسبه EMA استفاده کنیم. میانگین های نمایی کمی متفاوت هستند زیرا وزن بیشتری را در داده های اخیر و کمتر در مورد داده های قدیمی تر قرار می دهد. در محاسبه EMA ، بر خلاف SMA (که الگوریتم ها به 20 روز گذشته متکی است) ، EMA در واقع فقط به EMA ردیف قبلی و قیمت نزدیک فعلی نیاز دارد. در اینجا فرمول است:

ema = (قیمت نزدیک * k) + (EMA قبلی) * (1 - k)

k = 2/(1 + n)

n = تعداد دوره ها

EMA بیشتر برای محاسبه یک شاخص فنی به نام میانگین متحرک Converenge / Divergence (MACD) استفاده می شود. مانند SMA ، همچنین یک روند زیر است و برای تعیین حرکت بازار استفاده می شود (در اینجا اطلاعات بیشتری از ویکی پدیا در مورد MACD وجود دارد). فرمول MACD به سادگی است:

MACD = 12 روز EMA - 26 روز EMA

در مثال ما ، EMA 12 روز و 26 روزه را محاسبه خواهیم کرد تا یک مثال عملی ارائه دهیم. از آنجا که محاسبه EMA به مقدار EMA روز قبل نیاز دارد ، برای تولید اولین مقدار EMA باید یک مورد پایه را تنظیم کنیم. این کار به سادگی با محاسبه میانگین منظم تمام روزهای قبل از اولین محاسبه EMA ما انجام می شود. اگر همه اینها چیزهای زیادی برای درک آن وجود دارد ، نگران نباشید که در واقع بسیار ساده است. باز هم ، در اینجا مثالی با صفحه گسترده برای 12 روز EMA وجود دارد:

در ردیف داده یازدهم (D12) ، میانگین اولیه با محاسبه 11 قیمت نزدیک اول انجام می شود و تقسیم 11 (اگرچه در صفحه گسترده این در ستون EMA 12 روز ظاهر می شود ، در واقعیت ما نمی خواهیم این مقدار ظاهر شودکاربر ، زیرا یک EMA واقعی نیست). پس از رسیدن به ردیف داده دوازدهم (D13) ، اولین تکرار فرمول EMA را می بینیم (K با . 153 در هر فرمول در سلول D6 جایگزین شده است). از این نقطه به بعد ، فرمول EMA تا زمان رسیدن به انتهای مجموعه داده استفاده می شود. یک روش مشابه برای محاسبه EMA 26 روزه استفاده می شود. تنها تفاوت این است که برای یافتن میانگین 25 روزه از ردیف داده 25 شروع می شود و K با استفاده از n = 26 محاسبه می شود.

ابتدا بیایید جدول #MOD_GOOG_DATA را برای استفاده برای محاسبه دو معیار EMA بازآفرینی کنیم:<@ema_1_intervals then close_price else null end), @initial_sma_2 = avg(case when n <@ema_2_intervals then close_price else null end) from #mod_goog_data where n <@ema_1_intervals or n <@ema_2_intervals --Carry over update statement update t1 set @prev_ema_1 = case when n <@ema_1_intervals then null when n = @ema_1_intervals then t1.close_price * @K1 + @initial_sma_1 * (1-@K1) when n>-جدول #MOD_GOOG_DATA // در صورت لزوم جدول DROP-جدول کار ما را برای انتخاب EMA Row_number () بیش از (سفارش توسط QUOTE_DATE) n ، quote_date ، close_price ، بازیگران (NULL AS DECIMAL (8،2)) [EMA12] تنظیم کنید.، بازیگران (تهی به عنوان اعشاری (8،2)) [ema26] به #mod_goog_data از #google_stock ایجاد شاخص خوشه ای ix_n در #mod_goog_data (n)<@ema_2_intervals then null when n = @ema_2_intervals then t1.close_price * @K2 + @initial_sma_2 * (1-@K2) when n>باز هم از آنجا که MACD یک تفریق ساده از 12 روز EMA منهای 26 روز EMA است ، می توانیم هنگام انتخاب مقادیر از جدول ، MACD را در پرواز محاسبه کنیم. اکنون برای شروع محاسبه EMA ، ابتدا میانگین اولیه (میانگین 11 روز و میانگین 25 روز) را محاسبه می کنیم. پس از این کار ، ما می توانیم به روزرسانی حمل و نقل را درست مانند آنچه برای SMA انجام دادیم (به روزرسانی 2 قسمت این بار به جای یکی) انجام دهیم.

-متغیرهای declare نیاز به DELLARE @ema_1_intervals int ، @ema_2_intervals int ، @k1 اعشاری (4،3) ، @k2 decimal (4،3) delare @prev_ema_1 (8،2) ، @prev_ema_2 (8،2).@inital_sma_1 اعشاری (8،2) ، @riald_sma_2 اعشاری (8،2) اعلام می کنند anchor in t-مجموعه فواصل پیش فرض MACD را تنظیم کنید @ema_1_intervals = 12 set @ema_2_intervals = 26 set @k1 = 2/(1 + @ema_1_intervals + +. 000) set @k2 = 2/(1 + @ema_2_intervals + . 000) -میانگین ها را قبل از شروع دوره فاصله ema انتخاب کنید @اولیه_SMA_1 = avg (موردی که n

@ema_1_intervals سپس t1. close_price * @k1 + @prev_ema_1 * (1- @k1) پایان ، @prev_ema_2 = مورد وقتی n

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

برچسب : نویسنده : مرجان محتشم بازدید : <-PostHit-> تاريخ : پنجشنبه 8 تير 1402 ساعت: 21:24