ساده ترین راه برای انجام این کار چیست؟من قبلاً داده ها را وارد کرده ام و قیمت سهام را به عنوان ماتریس "IBM" تنظیم کرده ام.
3 نظر
Muthu Aamalai در 8 اکتبر 2012
پیوند مستقیم به این نظر
کپی را به کلیپ بورد لغو کنید
پیوند مستقیم به این نظر
کپی را به کلیپ بورد لغو کنید سلام گیلهرم ،
شما می خواهید با خواندن آموزش عالی MATLAB در http://www. mathworks. com/help/matlab/getting-started-with-matlab. html شروع کنید ، و به طور خاص به عملیات آرایه/ماتریس کمک می کند.
با گفتن این حرف ، من فکر می کنم مشکل شما به 3 متغیر نیاز دارد - R ، P با شرایط اولیه P0 ، که آرایه هایی با همان طول هستند.
R = (P - P0) ./ P0 باید نرخ شما را محاسبه کند. موفق باشید. سوشیل در 4 آوریل 2013
پیوند مستقیم به این نظر
کپی را به کلیپ بورد لغو کنید
پیوند مستقیم به این نظر
کپی را به کلیپ بورد لغو کنید از r = diff (p) و سپس cumsum (r) استفاده کنید. موفق باشید Zoltan Torok در 2 فوریه 2022
پیوند مستقیم به این نظر
کپی را به کلیپ بورد لغو کنید
پیوند مستقیم به این نظر
کپی را به کلیپ بورد لغو کنید ویرایش: Zoltan Torok در 2 فوریه 2022 ret = p (1: en d-1) ./ p (2: پایان) -1 ret = diff (p) ./ p (2: پایان)
پاسخ ها (1)
ویلیام رز در 2 فوریه 2022
پیوند مستقیم به این پاسخ
کپی را به کلیپ بورد لغو کنید
پیوند مستقیم به این پاسخ
کپی را به کلیپ بورد لغو کنید
این سه پاسخ خوب از Muthu Aamalai و Sushil و Zoltan Torok در نظرات است. با این حال ، دو پیشنهاد زولتان ، بازگشت را به روشی که می خواهید محاسبه نمی کند. برای استفاده از همان معادله ای که درخواست کردید ، پیشنهادات زولتان باید باشد
ret1 = p (2: پایان) ./ p (1: en d-1) -1 ret2 = diff (p) ./ p (1: end-1)
نحو مورد استفاده در بالا ممکن است غیر جالب باشد. بنابراین من یک راه حل کم نظیر اما آسان تر برای درک را نشان خواهم داد.
P = 100+(0: 100) ؛٪ قیمت سهام برای 101 روز ، از 100 تا 200 با نرخ ثابت می رود ret1 = صفر (1،100) ؛آرایه قبل از اختصاص برای ret1 ret2 = صفر (1،100) ؛آرایه قبل از اختصاص برای ret2 برای I = 2: طول (P) ret1 (i-1) = p (i)/p (i-1) -1 ؛٪ مانند ret1 در بالا ret2 (i-1) = (p (i) -p (i-1))/p (i-1) ؛٪ مانند ret2 در بالا طرح (1: 100 ، ret1 ، '-rx' ، 1: 100 ، ret2 ، '-bo') ؛ xlabel ("روز") ؛ylabel ("بازگشت") ؛افسانه ('ret1' ، 'ret2')

البته RET1 و RET2 برابر هستند. نحو "Dot-Divide" ("./") همان کار را برای حلقه انجام می دهد. در مورد آن در استناد از muthu aamalai بخوانید. به کمک MATLAB برای Diff () مراجعه کنید.
5 نظر
Zoltan Torok در 3 فوریه 2022
پیوند مستقیم به این نظر
کپی را به کلیپ بورد لغو کنید
پیوند مستقیم به این نظر
کپی را به کلیپ بورد لغو کنید ویرایش: زولتان توروک در 3 فوریه 2022 بله ، حق با شماست ، متاسفم برای این اشتباه. پاسخ درست این است: ret1 = p (2: پایان) ./ p (1: en d-1) -1 ret2 = diff (p) ./ p (1: end-1)
با این حال، من همچنین به پاسخ شما اضافه می کنم که استفاده از ./ نه تنها ظریف تر است، بلکه بسیار سریعتر از حلقه for است.
ویلیام رز در 3 فوریه 2022
پیوند مستقیم به این نظر
کپی را به کلیپ بورد لغو کنید
پیوند مستقیم به این نظر
کپی را به کلیپ بورد لغو کنید
همچنین خوانده ام که حلقه های for کندتر از عملیات ایندکس شده هستند، اما همیشه درست نیست. من فقط آن را برای 1 میلیون محاسبه، هر دو روش امتحان کردم، و حلقه for سریعتر اجرا شد. من یک نوت بوک قدیمی Dell Latitude دارم، چیز جالبی نیست. جزئیات زیر.
>>N=1e6; p=100+(0:N); ret1=صفر(1, N); >>tic; برای i=2:N, ret1(i-1)=p(i)/p(i-1)-1; end, toc زمان سپری شده 0. 009728 ثانیه است. >>تیکret1=p(2:end)./p(1:end-1) -1; toc زمان سپری شده 0. 011142 ثانیه است.
10 میلی ثانیه با حلقه for و 11 میلی ثانیه با تقسیم نقطه طول کشید. این من را متعجب کرد، بنابراین هر عملیات را دو بار دیگر انجام دادم، در صورتی که CPU در حین عملیات نقطه ای با چیز دیگری مشغول شود. نتایج بود
برای زمان های حلقه: 0. 0097، 0. 0094، 0. 0089 ثانیه زمان تقسیم نقطه: 0. 0111، 0. 0116، 0. 0095 ثانیه
بنابراین عملیات تقسیم نمایه شده سریعتر در این مورد سریعتر از حلقه for نیست. اگر چیزی باشد، کمی کندتر است.
استراتژی برای تحلیل فاندمنتال...
ما را در سایت استراتژی برای تحلیل فاندمنتال دنبال می کنید
برچسب :
نویسنده : سعید شیخزاده
بازدید : <-PostHit->
تاريخ : شنبه
7 مرداد
1402 ساعت: 15:03