Friday 17 November 2017

Przeprowadzka średnia perl


Z wektorem wagi mam na myśli wektor z odważnikami, które trzeba pomnożyć obserwacje w oknie, które przesuwa się nad Twoimi danymi, więc jeśli te produkty zostaną dodane razem, zwraca wartość EMA po prawej stronie okna. ważona średnia ruchoma wzór dla znalezienia wektora wagi wynosi 1 n suma 1 n w kodzie R Ta seria długości n dodaje do 1 Dla n 10 będzie to 0 01818182 0 03636364 0 05454545 0 07272727 0 09090909 0 10909091 0 12727273 0 14545455 0 16363636 0 18181818.je liczby od 1 do 10 55, z 55 sumą liczb od 1 do 10. Jak obliczyć wektor wagi dla wykładniczej średniej ruchomej EMA długości n. if n jest długością okna, a następnie alpha -2 n 1 i i -1 n, więc EmaWeightVector - alfa 1-alfa 1- i. Jest to poprawne. Chociaż EMA nie jest naprawdę ograniczony do okna z początkiem i końcem, nie powinno się zwiększać wagi do 1 podobnie jak w przypadku LWMA. Thanks Jason, wszelkie wskazówki, jak przybliżyć filtr EMA do dowolnej żądanej strony recision przez przybliżenie go za pomocą wystarczająco długiego filtra FIR Z tamtego skryptu perl uczyniłem obraz wektora ciężaru EMA, ale nie rozumiem go, jeśli ustawisz liczbę wagi na 15, dlaczego jest 20 czerwonych prętów zamiast 15 MisterH Dec 19 12 at 22 40. Ten rozdział zawiera informacje na temat tworzenia odnośników do modułów, pakietów i klas Perl. Pokazuje również, jak utworzyć kilka modułów próbek. Moduł Perla to zestaw kodu Perl, który działa jak biblioteka wywołania funkcji Termin modułu w Perl jest synonimem pakietu tekstowego Pakiety są cechą Perl 4, podczas gdy moduły są rozpowszechnione w Perl 5. Możesz zachować cały swój wielokrotny kod Perl do zestawu zadań w module Perla , wszystkie funkcje dotyczące jednego typu zadania są zawarte w jednym pliku Łatwiej jest zbudować aplikację na tych modułowych blokach W związku z tym, moduł tekstowy stosuje nieco więcej niż pakiet. Oto krótkie wprowadzenie do modułów Niektóre tematy z tej sekcji będą być cov szczegółowo w pozostałej części książki Przeczytaj uważnie poniższe paragrafy, aby uzyskać przegląd tego, co sprowadza się do pisania i używania własnych modułów. Co mylące jest to, że moduł i pakiet terminu są używane zamiennie we wszystkich dokumentach Perl i te dwa terminy oznaczają to samo Więc podczas czytania dokumentów Perl, po prostu pomyśl pakiet, gdy zobaczysz moduł i vice versa. So, co jest założeniem korzystania z modułów Cóż, moduły są tam, aby pakiet przebłagania zmiennych, symboli i wzajemnych połączeń elementy danych razem Przykładowo użycie zmiennych globalnych o bardzo popularnych nazwach, takich jak kj lub i w programie ogólnie nie jest dobrym pomysłem Również licznik pętli, powinienem mieć możliwość pracy niezależnie w dwóch różnych fragmentach kodu Deklarując jako i zmienna globalna, a następnie zwiększanie jej z poziomu podprogramu, spowoduje, że nie wystąpią problemy z kodem aplikacji, ponieważ podprogram mógł być wywołany z pętli, która również używa zmiennej ble called i Wykorzystanie modułów w Perl pozwala na tworzenie zmiennych o tej samej nazwie w różnych, różnych miejscach w tym samym programie. Symbole zdefiniowane dla zmiennych są przechowywane w tablicy asocjacyjnej, określanej jako tablica symboli Te tabele symboli są unikalne dla pakietu W związku z tym zmienne o tej samej nazwie w dwóch różnych pakietach mogą mieć różne wartości. Każdy moduł posiada własną tabelę symboli wszystkich symboli, które są zadeklarowane wewnątrz niej Tabela symboli w zasadzie izoluje nazwy synonimiczne w jednym module z innego symbolu tabela definiuje obszar nazw, czyli przestrzeń dla niezależnych nazw zmiennych w taki sposób, że użycie modułów, każdy z własną tabelą symboli, uniemożliwia zadeklarowanie zmiennej zadeklarowanej w jednej sekwencji wartości innych zmiennych o tej samej nazwie zadeklarowanej gdzie indziej w tym samym programie. W rzeczywistości wszystkie zmienne w Perl należą do pakietu Zmienne w programie Perl należą do pakietu głównego Wszystkie inne pakiety w ramach Perl pr ogram albo są zagnieżdżone w tym głównym pakiecie lub istnieją na tym samym poziomie Istnieją pewne naprawdę globalne zmienne, takie jak tablica SIG obsługi sygnału, które są dostępne dla wszystkich innych modułów w programie aplikacji i nie mogą być izolowane w przestrzeni nazw Tylko te zmienne identyfikatory zaczynające z literami lub podkreśleniami są przechowywane w tablicy symboli modułu Wszystkie pozostałe symbole, na przykład nazwy STDIN STDOUT STDERR ARGV ARGVOUT ENV Inc i SIG, są zmuszone do umieszczania w pakiecie main. Switching między pakietami dotyczy tylko przestrzeni nazw Wszystko co robisz, gdy użytkownik użyj jednego pakietu lub innego deklaruje, która tablica symboli ma być używana jako domyślna tablica symboli do wyszukiwania nazw zmiennych Tylko zmienne dynamiczne mają wpływ na wykorzystanie tabel symboli Zmienne zadeklarowane przez użycie słowa kluczowego są nadal rozwiązywane z blokiem kodu stało się zamieszkać i nie są odwoływane przez tabele symboli W rzeczywistości zakres deklaracji pakietowej pozostaje aktywny tylko w bloku kodu deklarowanym Dlatego też, jeśli przełączasz tabele symboli przy użyciu pakietu w podprogramie, oryginalna tabela symboli, która będzie obowiązywać podczas wykonywania połączenia, zostanie przywrócona po powrocie podprocedury. Przełączanie tabel symboli ma wpływ tylko na domyślne wyszukiwanie zmiennych nazw zmiennych nadal odnoszą się do zmiennych, uchwytów plików itp. w określonym pakiecie, przedkładając pakietName na nazwę zmiennej. Widziałaś, jakiego kontekstu pakietu jest użycie odniesień w Rozdziale 3 Kontekst pakietów oznacza po prostu użycie tabeli symboli przez Perl interpreter do rozwiązywania nazw zmiennych w programie Poprzez przełączanie tablic symboli zmieniamy kontekst pakietów. Wymagania mogą być zagnieżdżone w innych modułach Zagnieżdżony moduł może używać zmiennych i funkcji modułu, który jest zagnieżdżony wewnątrz W przypadku zagnieżdżonych modułów, musimy użyć modułuName nestedModuleName i tak dalej Użycie podwójnego dwukropka jest synonimem przy użyciu cytatu zwrotnego Jednak dwukropek jest preferowanym, przyszłościowym w ay adresowania zmiennych w obrębie modułów. Niezwykłe adresowanie zmiennych modułu zawsze odbywa się przy użyciu pełnego odniesienia Na przykład, jeśli masz moduł, Inwestycje, które jest domyślnym pakietem w użyciu, a chcesz zająć się innym modułem, Obligacje, które są zagnieżdżone w obrębie Moduł inwestycyjny W tym przypadku nie można używać obligacji zamiennych, należy użyć obligacji inwestycyjnych do adresowania zmiennych i funkcji w module obligacji. Zastosowanie obligacji oznaczałoby użycie pakietu obligacji, który jest zagnieżdżony w głównym module, a nie w Moduł inwestycyjny. Tabela symboli dla modułu jest rzeczywiście przechowywana w tablicy asocjacyjnej nazw modułów dołączonych do dwóch kolonów Tablica symboli modułu o nazwie Bond będzie określana jako tablica asocjacyjna Bond Nazwa tablicy symboli dla główny moduł jest główny i może być nawet skrócony do Podobnie, wszystkie zagnieżdżone pakiety mają swoje symbole zapisane w tablicach asocjacyjnych z podwójnymi dwukropkami oddzielającymi każdy poziom zagnieżdżenia Dla egzaminu w module Bond, który jest zagnieżdżony w module Inwestycyjnym, tablica asocjacyjna symboli w module Bond będzie oznaczona jako Investment Bond. A typeglob jest naprawdę typem globalnym dla nazwy symbolu Można wykonać operacje aliasingu, przypisując do typeglob W tablicy asocjacyjnej dla symboli zostanie użyty jeden lub więcej wpisów w tablicy asocjacyjnej symboli, przy czym przyporządkowanie następuje za pomocą typeglob. Rzeczywista wartość w każdym wpisie tablicy asocjacyjnej jest taka, o czym mówisz, gdy używasz notacji zmiennejNastępnie istnieją dwa sposoby odnoszące się do zmiennych nazw w pakiecie Inwestycyjne rachunki inwestycyjne. W pierwszej metodzie odwołujesz się do zmiennych poprzez odniesienie typeglob Użycie tabeli symboli, Inwestycja jest tu domniemana, a Perl zoptymalizuje wyszukiwanie symboli pieniędzy i rachunki Jest to szybszy i preferowany sposób adresowania symbolu Druga metoda polega na wyszukiwaniu wartości zmiennej adresowanej przez pieniądze i rachunki w tablicy asocjacyjnej używanej do symboli , Inwestowanie wyraźnie To przeszukiwanie zostanie wykonane dynamicznie i nie zostanie zoptymalizowane przez Perl Dlatego trasa będzie zmuszona do sprawdzenia tablicy asocjacyjnej za każdym razem, gdy instrukcja zostanie wykonana W rezultacie druga metoda nie jest wydajna i powinna być używana tylko dla demonstracja sposobu implementacji tabeli symboli. Innym przykładem w tym oświadczeniu kamran husain. causes zmiennych, podprogramów i uchwytów plików, które są nazywane za pomocą symbolu kamran, a także adresowane za pośrednictwem symbolu husain Oznacza to, że wszystkie wpisy symboli w bieżącym tabela symboli z kluczem kamran zawiera teraz odniesienia do tych symboli adresowanych przez klucz husain Aby zapobiec takiemu globalnemu przypisaniu, można użyć wyraźnych odniesień Na przykład poniższe stwierdzenie umożliwi Ci zajęcie się treścią husain poprzez zmienną kamran kamran husain . Jednak dowolne tablice, takie jak kamran i husain, nie będą takie same. Tylko, co wyraźnie zmieniono w odnośnikach. Podsumowując, kiedy y ou przypisać jeden typeglob do innego, wpływasz na wszystkie wpisy w tabeli symboli bez względu na typ zmiennej, do której się odnoszą Jeśli przypisujesz odwołanie z jednego typu zmiennego do innego, wpływasz tylko na jeden wpis w tabeli symboli. A Perl plik modułu ma następującą formułę formatu: ModuleName Wstaw kod modułu 1. Nazwa pliku musi być nazwana Nazwa modułu musi kończyć się ciągiem przez konwencję Instrukcja pakietu jest pierwszą linią pliku Ostatni wiersz pliku musi zawierać wiersz z instrukcją 1 W efekcie zwraca wartość true do programu aplikacyjnego za pomocą modułu Nie używając instrukcji 1 nie pozwala na prawidłowe załadowanie modułu. Instrukcja pakietu mówi tłumaczowi Perl, aby rozpocząć nową domenę nazw obszaru nazw zmienne w skrypcie Perl należą do pakietu o nazwie main Każda zmienna w głównym pakiecie może być określana jako główna zmienna. Oto składnia dla takich pakietów referenceName variableName. The singl e cytat jest synonimem operatora dwukropek okładki obejmującego więcej zastosowań operatora w następnym rozdziale Na razie musisz pamiętać, że następujące dwa zestawienia są równoważne packageName variableName packageName variableName. Składnia dwukropek jest uważana za standardową w Perl world W związku z tym, aby zachować czytelność, używam składni podwójnej dwukropka w dalszej części tej książki, chyba że absolutnie konieczne jest wprowadzenie wyjątków w celu udowodnienia punktu. Domyślne użycie zmiennej nazwy powoduje odejście od bieżącego pakietu aktywnego w tym czasie kompilacji Więc jeśli znajdujesz się w pakiecie i określ zmienną pv, to zmienna jest w rzeczywistości równa finansowi pv. Using Perl Modules używają vs require. You zawierają moduły Perl w swoim programie przy użyciu instrukcji use lub require To jest tak aby użyć jednego z tych stwierdzeń użyj ModuleName wymaga ModuleName. Zauważ, że rozszerzenie nie jest używane w kodzie wskazanym powyżej Należy również zauważyć, że żadna instrukcja nie zezwala na dodanie pliku więcej raz w programie Zwracana wartość true 1 jako ostatnia instrukcja jest wymagana, aby Perl wiedział, że wymagany moduł d lub moduł d ładowany poprawnie i umożliwia interpreterowi Perl ignorowanie jakichkolwiek ładowań W ogóle lepiej używać modułu Use zamiast wymagać instrukcji modułu w programie Perl, aby pozostawała kompatybilna z przyszłymi wersjami modułów Perl. For, warto rozważyć kontynuowanie użycia instrukcji wymagań Poniżej znajduje się instrukcja użycia, która działa nieco bardziej niż wymagana instrukcja w że zmienia to obszar nazw modułu, który zawiera inny moduł Chcemy, aby ta dodatkowa aktualizacja tego obszaru nazw została dokonana w programie Jednak podczas pisania kodu modułu może nie być konieczne zmienianie obszaru nazw, chyba że jest to wymagane jawnie to wydarzenie użyje instrukcji require. Instrukcja require zawiera pełną nazwę ścieżki pliku w tablicy Inc, tak aby funkcje i zmienne w pliku modułu znajdowały się w znanej lokalizacji podczas uruchamiania programu exe czas rozliczenia Zatem funkcje importowane z modułu są importowane za pośrednictwem jawnego odniesienia modułu w czasie wykonywania z instrukcją require Instrukcja użycia wykonuje to samo co żądanie require, ponieważ aktualizuje tablicę Inc z pełnymi ścieżkami ścieżek załadowanych modułów Kod dla funkcji używania również idzie o krok dalej i wywołuje funkcję importu w module używającym d, aby jawnie załadować listę wyeksportowanych funkcji w czasie kompilacji, oszczędzając czas wymagany do wyraźnej rozdzielczości nazwy funkcji podczas wykonywania. instrukcja użycia jest równoznaczna z wymaganiem importu ModuleName Nazwa modułuName lista importowanych funkcji. Korzystanie z instrukcji use powoduje zmianę obszaru nazw tego programu, ponieważ importowane nazwy funkcji są wstawiane do tabeli symboli. Instrukcja require nie zmienia obszaru nazw programu s W związku z tym, następujące oświadczenie używać ModuleName. is jest równoważne z tym oświadczeniem wymagają ModuleName. Functions są importowane z modułu e poprzez wywołanie funkcji zwanej importem Możesz napisać własną funkcję importu w module lub skorzystać z modułu Exporter i używać jego funkcji importowania W prawie wszystkich przypadkach moduł Exporter użyje modułu Exporter do dostarczania funkcji importowania zamiast Ponowne rozwinięcie krążka Dowiesz się więcej na ten temat w następnej sekcji Jeśli zdecydujesz się nie używać modułu Exporter, będziesz musiał napisać własną funkcję importowania w każdym module, który piszesz. O wiele łatwiej jest po prostu użyć modułu Exporter i pozwolić Perl wykonuje pracę dla Ciebie. Przykładowy moduł. Najlepszym sposobem na zilustrowanie semantyki tego, jak moduł jest używany w Perlu jest napisanie prostego modułu i pokazanie, jak go używać. Weźmy przykład lokalnego kredytu pożyczkowego, Rudious Maximus, który jest po prostu zmęczony wpisywaniem tej samej prośby o listy zapłaty. Będąc entuzjastycznym fanem komputerów i Perl, Rudious bierze leniwy programista i pisze moduł Perl, aby pomóc mu wygenerować notatki i notatki. Teraz zamiast pisać pola w am emo plik szablonu, wystarczy wpisać kilka wierszy, aby utworzyć ładną, groźną notatkę. Listing 4 1 pokazuje, co ma wpisać listing 4 1 Korzystanie z modułu Letter 1 usr bin perl - w 2 3 Usunięcie linii poniżej dołączyć bieżący katalog w Inc 4 push Inc, pwd 5 6 używać Letter 7 8 List do Mr Gambling Man, Pieniądze dla Lucky Dog, wyścig 2 9 List ClaimMoneyNice 10 List ThankDem 11 Letter Finish. Użycie instrukcji Letter jest obecne, aby wymusić interpreter języka Perl zawierający kod modułu w programie aplikacji Moduł powinien znajdować się w katalogu usr lib perl5 lub umieścić go w dowolnym katalogu wymienionym w tablicy Inc Tablica Inc to lista katalogów, które Perl interpreter będzie szukał podczas próby załadowania kodu dla wymienionego modułu Skomentowany numer wiersza 4 pokazuje jak dodać bieżący katalog roboczy do ścieżki Następujące cztery linie w pliku generują temat literki. Oto dane wyjściowe z użyciem Moduł do listów Do Mr Gambling Man Fm Rudious Maximus, Kredyt Shark Dt środa 7 lutego 35 35 CST 1996.Re Pieniądze na Lucky Dog, Wyścig 2.Pamiętam, że Twoje konto się skończyło Musisz nas zapłacić Czy chciałbyś, żebym przyszedł ovah. Thanks dla twojego wsparcia. Plik modułu Letter jest pokazywany w listingu 4 2 Nazwa pakietu jest zadeklarowana w pierwszej linijce Ponieważ funkcje tego modułu zostaną wyeksportowane, używam modułu Exporter , użycie instrukcji Użyj Eksportera do dziedziczenia funkcjonalności z modułu Exporter Kolejnym wymaganym krokiem jest umieszczenie słowa Exported w tablicy ISA, aby umożliwić wyszukiwanie. Tablica ISA jest specjalną tablicą w każdym pakiecie Każda pozycja na liście tablic, gdzie indziej poszukaj metody, jeśli nie można jej znaleźć w bieżącym pakiecie Kolejność, w jakiej znajdują się pakiety zawarte w tablicy ISA to kolejność, w jakiej Perl wyszukuje nierozwiązane symbole Klasa, która jest wymieniona w tablicy ISA jest określana jako klasa bazowa tej części klasa cular Perl zbuduje brakujące metody znalezione w klasach podstawowych dla przyszłych referencji Modyfikacja tablicy ISA spowoduje spłukanie pamięci podręcznej i spowoduje, że Perl ponownie wyszuka wszystkie metody. Teraz spójrz na kod z listingu 4 2 Listing 4 2 Moduł 1 paczka List 2 3 wymagać eksportera 4 ISA eksportera 5 6 head1 NAZWA 7 8 Letter - moduł próbki do wygenerowania nagłówka dla ciebie 9 10 head1 SKŁADNIA 11 12 użycie List 13 14 List Data 15 List Aby nazwa, firma, adres 16 17 Następnie jeden z następująco 18 List ClaimMoneyNice 19 List ClaimMoney 20 Letter ThreatBreakLeg 21 22 List z podziękowaniem 23 Wykończenie listu 24 25 head1 OPIS 26 27 Ten moduł zawiera krótki przykład wygenerowania listu 28 przyjaznego rekina pożyczki z pożywką 29 30 Kod zaczyna się po oświadczeniu skróconym 31 cięcie 32 33 Eksport qw Data, 34 Do, 35 ClaimMoney, 36 ClaimMoneyNice, 37 ThankDem, 38 Finish 39 40 41 Wydrukuj bieżącą datę 42 43 pod list Data 44 data daty 45 print n Dzisiaj jest data 46 47 48 pod List To 49 zmiana nazwy lokalnej 50 zmiana podmiotu lokalnego 51 druk n do nazwy 52 print n Fm Rudious Maximus, reklama pożyczki 53 print n Dt, data 54 druk n temat 55 drukowanie nn 56 drukowanie nn 57 58 sub Letter ClaimMoney 59 drukuj n Masz mi pieniądze Przygotuj swoje czynności 60 drukuj n Czy chcesz, żebym wysłał Bruno do 61 druków n zebrać je lub zamierzasz zapłacić 62 63 64 sub Letter ClaimMoneyNice 65 drukuj n Przypomnijmy, że Twoje konto wynosi 66 print n way nad nadejściem 67 drukuj n Powiesz nam wkrótce 68 drukuj n lub czy chcesz bym przyjechał ovah 69 70 71 sub Letter ThreatBreakLeg 72 print n apparently letters like these dont help 73 drukuj n będę musiał zrobić przykład dla ciebie 74 print nn Do zobaczenia w szpitalu, pal 75 76 77 sub List ThankDem 78 print nn Dziękujemy za wsparcie 79 80 81 sub Finish 82 printf nnnn Z poważaniem 83 printf n Rudious n 84 85 86 1.Linie zawierające ten sam znak są używane do dokumentacji Musisz dokumentować każdy moduł do własnych potrzeb Moduły Perl nie muszą być udokumentowane, ale dobrze jest napisać kilka wierszy na temat tego, co robi Twój kod Kilka lat od teraz możesz zapomnieć, co to jest moduł O dobrej dokumentacji jest zawsze koniecznością, jeśli chcesz zapamiętać zrobiłeś to w przeszłości. I opisuję style dokumentacji używane dla Perl w rozdziale 8 Dokumentowanie skryptów Perla W przypadku tego przykładowego modułu instrukcja head1 rozpoczyna dokumentację Wszystko co do instrukcji cut jest ignorowane przez interpreter Perl. Następny moduł wymienia wszystkie funkcje wyeksportowane przez ten moduł w tablicy EXPORT Tablica EXPORT definiuje wszystkie nazwy funkcji, które mogą być wywoływane przez kod zewnętrzny Jeśli nie została wyświetlona lista funkcji w tej tablicy EXPORT, nie została ona wyświetlona przez zewnętrzne moduły kodu. Za pomocą tablicy EXPORT jest ciało kodu, jedna podprocedura na raz Po wszystkie podprogramy są zdefiniowane, końcowe stwierdzenie 1 kończy plik modułu 1 musi być ostatnią linią wykonywalną w pliku. Na przykłady spójrz na niektóre funkcje zdefiniowane w tej modu le Pierwszą funkcją, na którą się zwraca, jest prosta funkcja Date, linie 43 do 46, która drukuje bieżącą datę i godzinę UNIXa Nie ma żadnych parametrów tej funkcji, a nie zwraca nic znaczącego z powrotem do wywołującego. my przed zmienną daty w wierszu 44 Moje słowo kluczowe używa się do ograniczenia zakresu zmiennej do wewnątrz klamer szesnastkowych funkcji Date. Kod między nawiasami klamrowymi nazywany jest zmiennymi blokowymi zadeklarowanymi w obrębie bloku i są ograniczone do zakresu w obrębie bloku nawiasy klamrowe W 49 i 50 nazwy zmiennych lokalnych i tematów są widoczne dla wszystkich funkcji. Można również zadeklarować zmienne z lokalnym kwalifikatorem Użycie lokalnego pozwala na zmianę w zakresie bieżącego bloku, jak również dla innych bloków kod zwany z tego bloku W ten sposób lokalny x zadeklarowany w obrębie jednego bloku jest widoczny dla wszystkich kolejnych bloków wywoływanych z tego bloku i może być odwołany W poniższym przykładzie kod zmiennej nazwa funkcji ToTitled może być dostępem ed, ale nie dane w iphone 1 sub List ToTitled 2 zmiana nazwy lokalnej 3 mój telefon shift. The przykładowy kod pokazał, jak wyodrębnić jeden parametr na raz Podprogram Aby wziąć dwa parametry, aby skonfigurować nagłówek dla memo. Using funkcji w module nie różni się aniżeli używanie i definiowanie modułów Perl w obrębie tego samego pliku kodu Parametry są przekazywane przez odniesienie, o ile nie określono inaczej Wielokrotne tablice przekazywane do podprogramu, jeśli nie są wyraźnie dereferencjonowane za pomocą ukośnika ukośnego, są łączone. Tablica wejściowa w funkcji jest zawsze tablicą wartości skalarnych Przesyłanie wartości przez odwołanie jest preferowanym sposobem w Perl, aby przekazać dużą ilość danych do podprogramu Zobacz rozdział 3 Materiały referencyjne. Nowy przykładowy moduł finansów. Filtr finansowy, pokazany na listingu 4 3, jest używany do proste obliczenia wartości pożyczek Korzystanie z modułu Finansowanie jest proste Wszystkie funkcje są zapisywane z tymi samymi parametrami, jak pokazano w formule dla funkcji. Spójrzmy na jak przyszła wartość inwestycji może być obliczona Na przykład, jeśli zainwestujesz kilka dolarów, pv w obligację, która oferuje stałą stopę procentową, r stosuje się w znanym przedziale czasowym w n okresach, jaka jest wartość obligacji w momencie jego wygaśnięcie W tym przypadku będziesz używać następującej formuły fv pv 1 r n Funkcja określająca wartość przyszła została zadeklarowana jako FutureValue Patrz Listing 4 3, aby zobaczyć, jak z niego korzystać Listing 4 3 Korzystanie z modułu Finance 1 usr bin perl - w 2 3 push Inc, pwd 4 use Finanse 5 6 pożyczki 5000 00 7 apr 3 5 kwietnia 8 lat 10 lat 9 10 -------------------- -------------------------------------------- 11 Obliczyć wartość na koniec pożyczki, jeśli odsetki 12 stosuje się co roku 13 -------------------------------------- -------------------------- 14 rok czasowy 15 fv1 Finanse Przyszłość kredytu future przedział czasowy 16 print n Jeżeli odsetki są stosowane na koniec roku 17 print n przyszła wartość kredytu pożyczki n 18 wydruk w kwietniu, przed, po czasie, lata 19 printf to 8 2f n fv1 20 21 --------------------------------------------- ------------------- 22 Obliczyć wartość na koniec pożyczki, jeśli odsetki 23 stosuje się co miesiąc 24 ------------- -------------------------------------------------- - 25 stawka apr 12 kwietnia 26 rok 12 miesięcy 27 fv2 Finanse Przyszłość kredytu, stopa procentowa, czas 28 29 drukuj n Jeżeli odsetki są stosowane na koniec każdego miesiąca 30 print n przyszła wartość pożyczki z pożyczki n 31 wydrukuj w APR, apr, czas, miesiące 32 printf jest 8 2f n fv2 33 34 printf n Różnica wartości to 8 2f, fv2 - fv1 35 printf n Dlatego przez zastosowanie odsetek w krótszych odstępach czasu 36 printf n jesteśmy w rzeczywistości coraz więcej pieniądze w odsetkach n. Oto przykładowe dane wejściowe i wyjściowe z listy 4 3 testme. If odsetki są stosowane na koniec roku Przyszła wartość pożyczki w wysokości 5000 w kwietniu 3 5 za 10 lat wynosi 7052 99. Jeśli odsetki są stosowane na koniec każdego miesiąca Przyszła wartość pożyczki wynoszącej 5000 w kwietniu 3 5 za 120 miesięcy wynosi 7091 72. Różnica i n wynosi 38 73 W związku z tym, stosując odsetki w krótszych okresach, uzyskujemy więcej pieniędzy w odsetkach. Oszacowanie w wyniku jest wynikiem porównania wartości pomiędzy fv1 i fv2 Wartość fv1 jest obliczana przy użyciu raz odsetek co roku w okresie obowiązywania obligacji fv2 jest wartością, jeśli odsetki są stosowane co miesiąc przy równoważnej miesięcznej stopie procentowej. Pakiet jest pokazany na listingu 4 4 na jego wczesnych etapach rozwoju. Listing 4 4 Pakiet 1 pakiet Finanse 2 3 wymagają Eksporter 4 ISA Eksporter 5 6 head1 7 8 Kalkulator finansowy - łatwe obliczenia finansowe z Perl 9 10 head 2 11 użyj Finanse 12 13 pv 10000 0 14 15 stawki 12 5 12 APR miesięcznie 16 17 czas 360 miesięcy na pożyczkę do dojrzałości 18 19 fv FutureValue 20 21 drukuj fv 22 23 cięcie 24 25 EKSPORT qw FutureValue, 26 PresentValue, 27 FVofAnnuity, 28 AnnuityOfFV, 29 getLastAverage, 30 getMovingAverage, 31 SetInterest 32 33 34 Globals, jeśli dotyczy 35 36 37 lokalne defaultInterest 5 0 38 3 9 sub Finance SetInterest 40 moja zmiana stopy 41 domyślnieInterest rate 42 printf n defaultInterest rate 43 44 45 ------------------------------- ------------------------------------- 46 Uwagi 47 1 Oprocentowanie r podane jest w wartości z 0-100 48 2 N podane w warunkach jest stopa, w której stosuje się odsetki 49 50 -------------------------- ------------------------------------------ 52 53 ------ -------------------------------------------------- ------------ 54 Wartość bieżąca inwestycji podana 55 fv - wartość przyszła 56 r - stawka za okres 57 n - liczba okresów 58 ------------ -------------------------------------------------- ------ 59 sub Finance FutureValue 60 mój pv, r, n 61 mój fv pv 1 r 100 n 62 powrót fv 63 64 65 ------------------- ----------------------------------------------- 66 Wartość bieżąca inwestycji przyznanej 67 fv - wartość przyszła 68 r - stawka za okres 69 n - liczba okresów 70 ------------------------- ------------------------------------------- 71 podrozdział Finanse PresentValue 72 mój pv 73 mój fv, r, n 74 pv f r 1 n 100 n 75 pv powrót 76 77 78 79 ------------------------ -------------------------------------------- 80 Zdobądź przyszłą wartość renta w wysokości 81 mp - miesięczna wypłata renty 82 r - stawka za okres 83 n - liczba lat 84 ------------------------------- ----------------------------------------- 85 86 pod FVofAnnuity 87 moje fv 88 moje jedenR 89 mój mp, r, n 90 91 jedenR 1 rn 92 fv mp 1R - 1 r 93 powrót fv 94 95 96 ------------------------ ---------------------------------------- 97 Zdobądź rentę z po bitych informacji 98 r - stawka za okres 99 n - liczba okresów 100 fv - wartość przyszła 101 ---------------------------- ---------------------------------------- 102 103 sub AnnuityOfFV 104 mój mp mp - miesięcznie Wypłata renty 105 mój jedenR 106 mój fv, r, n 107 108 aR 1 rn 109 mp fv r 1 R - 1 110 mp powrót 111 112 113 ------------------- -------------------------------------------------- 114 Pobierz średnią t ostatnio n wartości w tablicy 115 ------------------------------------------ Ostatni numer licznika elementów z tablicy w wartościach 117 Całkowita liczba elementów w wartościach jest w liczbie 118 119 sub getLastAverage 120 mój licznik, liczba, wartości 121 mój i 122 123 mój 0 124 zwrot 0 jeśli liczba 0 125 dla i 0 i count i 126 a liczba wartości - i - 1 127 128 zwraca liczbę 129 130 131 --- -------------------------------------------------- --------------- 132 Pobieranie średniej ruchomej wartości 133 -------------------------- ---------------------------------------- 134 Rozmiar okna jest pierwszym parametrem , liczba elementów w 135 przekazanych tablic jest następna To może być łatwo obliczone w funkcji 136 przy użyciu funkcji skalarnej, ale podprogram pokazany tutaj 137 jest również używany do ilustrowania sposobu przekazywania wskaźników Odniesienie do 138 tablicy wartości , a następnie odniesienie do miejsca 139, wartości zwracane należy zapisać 140 141 sub getMovingAve 142 mój licznik, liczba, wartości, ruchAve 143 moje i 144 moje 0 145 moje v 0 146 147 powrót 0 jeśli liczba 0 148 zwraca -1 jeśli liczba Liczba 149 powrót -2 jeśli liczba 2 150 151 ruchAve 0 0 152 movingAve liczba - 1 0 153 dla i 0 i count i 154 wartości v i 155 z liczby 156 movingAve i 0 157 158 dla i count i liczba i 159 wartości v i 160 av count 161 v wartości i - count - 1 162 a - v count 163 movingAve ia 164 165 return 0 166 167 168 1.Patrz na deklarację funkcji FutureValue ze znakami trzy dolara razem oznaczają trzy liczby skalarne przekazywane do funkcji Ta dodatkowa scoping jest obecna do sprawdzania typu parametrów przekazanych do function Jeśli miałbyś przekazać ciąg zamiast liczby do funkcji, otrzymasz wiadomość bardzo podobną do tego Zbyt wiele argumentów dla Finance FutureValue w linii 15, w pobliżu czasu Wykonanie przerwania z powodu błędów kompilacji. Korzystanie z prototypów przy definiowaniu funkcji zapobiega wysyłaniu va lues inne niż to, czego oczekuje funkcja Użyj lub przejdź do tablicy wartości Jeśli przechodzisz przez odniesienie, użyj lub, aby wyświetlić skalarne odniesienie do tablicy lub mieszania, odpowiednio Jeśli nie używasz odwrotnego ukośnika, wszystkie inne typy w prototyp listy argumentów są ignorowane Inne typy zdyskwalifikowanych obejmują znak i odniesienie do funkcji, gwiazdkę dowolnego typu i średnik, aby wskazywać, że wszystkie inne parametry są opcjonalne. Teraz spójrzmy na deklarację funkcji lastMovingAverage, która określa dwie liczby całkowite z przodu, a następnie tablica Sposób użycia argumentów w funkcji polega na przypisaniu wartości do każdego z dwóch skalar, liczby i numeru, podczas gdy wszystko inne jest wysyłane do tablicy Spójrz na funkcję getMovingAverage, aby zobaczyć, jak dwie tablice są przekazywane w celu uzyskania średniej ruchomej na liście wartości. Sposób na wywołanie funkcji getMovingAverage pokazano na listingu 4 5 Listing 4 5 Korzystanie z funkcji średniej ruchomej 1 usr bin perl - w 2 3 nacisnąć I nc, pwd 4 use Finanse 5 6 wartości 12,22,23,24,21,23,24,23,23,21,29,27,26,28 7 mv 0 8 wielkościowe wartości skalarne 9 print n Wartości do pracy z n 10 print Liczba wielkości wielkości n 11 12 ---------------------------------------- Oblicz średnią powyższej funkcji 14 ----------------- ----------------------------------------------- 15 ave Finanse getLastAverage 5, rozmiar, wartości 16 print n Średnia z ostatnich 5 dni ave n 17 18 Finanse getMovingAve 5, wielkość, wartości, mv 19 print n średnia ruchoma z 5-dniowym okienkiem n n. Nutaj wynik z listingu 4 5 Wartości do pracy z liczbą wartości 14. Skuteczność z ostatnich 5 dni 26 2. Funkcja getMovingAverage przyjmuje dwa skale, a następnie dwa odwołania do macierzy jako skalary W funkcji, dwa skalarne do tablic są dereferowane do użycia jako tablice numeryczne Zwracany zestaw wartości jest wstawiany w obszarze przekazywanym jako drugie odniesienie Jeśli parametry wejściowe nie zostały określone dla każdej tablicy referencyjnej, arrayAve tabela referencyjna byłaby pusta i spowodowałaby błędy w czasie wykonywania Innymi słowy, poniższe oświadczenie nie jest poprawne sub getMovingAve. W wyniku spew komunikatów o błędach z nieprawidłowego prototypu funkcji jest następująca Użycie niezainicjowanej wartości w wierszu 128 Użycie wartość niezainicjowana w wierszu 128 Użycie niezainicjowanej wartości w wierszu 128 Użycie niezainicjowanej wartości w wierszu 128 Użycie niezainicjowanej wartości w wierszu 128 Użycie niezainicjowanej wartości w wierszu 128 Użycie niezainicjowanej wartości w wierszu 133 Użycie niezainicjowanej wartości w wierszu 135 Użycie niezainicjowanej wartości w wierszu 133 Użycie niezainicjowanej wartości value at line 135 Use of uninitialized value at line 133 Use of uninitialized value at line 135 Use of uninitialized value at line 133 Use of uninitialized value at line 135 Use of uninitialized value at line 133 Use of uninitialized value at line 135 Use of uninitialized value at line 133 Use of uninitialized value at line 135 Use of uninitialized value at line 133 Use of uninitialized value at line 135 Use of uninitial ized value at line 133 Use of uninitialized value at line 135 Use of uninitialized value at line 133 Use of uninitialized value at line 135.Average of last 5 days 26 2.Moving Average with 5 days window. This is obviously not the correct output Therefore, it s critical that you pass by reference when sending more than one array. Global variables for use within the package can also be declared Look at the following segment of code from the module to see what the default value of the Interest variable would be if nothing was specified in the input The current module requires the interest to be passed in, but you can change this. Here s a little snippet of code that can be added to the end of the program shown in Listing 4 5 to add the ability to set interest rates 20 local defaultInterest 5 0 21 sub Finance SetInterest 22 my rate shift 23 rate -1 if rate 0 24 defaultInterest rate 25 printf n defaultInterest rate 26.The local variable defaultInterest is declared in line 20 The subroutine SetInterest to modify the rate is declared in lines 21 through 26 The rate variable uses the values passed into the subroutine and simply assigns a positive value for it You can always add more error checking if necessary. To access the defaultInterest variable s value, you could define either a subroutine that returns the value or refer to the value directly with a call to the following in your application program Finance defaultInterest. The variable holding the return value from the module function is declared as my variable The scope of this variable is within the curly braces of the function only When the called subroutine returns, the reference to my variable is returned If the calling program uses this returned reference somewhere, the link counter on the variable is not zero therefore, the storage area containing the returned values is not freed to the memory pool Thus, the function that declares my pv. and then later returns the value of pv returns a reference to the value stored at that location If the calling routine performs a call like this one Finance FVofAnnuity monthly, rate, time. there is no variable specified here into which Perl stores the returned reference therefore, any returned value or a list of values is destroyed Instead, the call with the returned value assigned to a local variable, such as this one fv Finance FVofAnnuity monthly, rate, time. maintains the variable with the value Consider the example shown in Listing 4 6, which manipulates values returned by functions Listing 4 6 Sample usage of the my function 1 usr bin perl - w 2 3 push Inc, pwd 4 use Finance 5 6 monthly 400 7 rate 0 2 i e 6 APR 8 time 36 in months 9 10 print n ------------------------------------------------ 11 fv Finance FVofAnnuity monthly, rate, time 12 printf n For a monthly 8 2f at a rate of 6 2f for d periods , 13 monthly, rate, time 14 printf n you get a future value of 8 2f , fv 15 16 fv 1 1 allow 10 gain in the house value 17 18 mo Finance AnnuityOfFV fv, rate, t ime 19 20 printf n To get 10 percent more at the end, i e 8 2f , fv 21 printf n you need a monthly payment value of 8 2f , mo, fv 22 23 print n ------------------------------------------------ n. Here is sample input and output for this function testme ------------------------------------------------ For a monthly 400 00 at a rate of 0 20 for 36 periods you get a future value of 1415603 75 To get 10 percent more at the end, i e 1557164 12 you need a monthly payment value of 440 00.Modules implement classes in a Perl program that uses the object-oriented features of Perl Included in object-oriented features is the concept of inheritance You ll learn more on the object-oriented features of Perl in Chapter 5 Object-Oriented Programming in Perl Inheritance means the process with which a module inherits the functions from its base classes A module that is nested within another module inherits its parent modules functions So inheritance in Perl is accomplished with the construct Here s the b asic syntax SuperClass NextSubClass ThisClass. The file for these is stored in SuperClass NextSubClass Each double colon indicates a lower-level directory in which to look for the module Each module, in turn, declares itself as a package with statements like the following package SuperClass NextSubClass package SuperClass NextSubClass EvenLower. For example, say that you really want to create a Money class with two subclasses, Stocks and Finance Here s how to structure the hierarchy, assuming you are in the usr lib perl5 directory. Create a Money directory under the usr lib perl5 directory. Copy the existing file into the Money subdirectory. Create the new file in the Money subdirectory. Edit the file to use the line package Money Finance instead of package Finance. Edit scripts to use Money Finance as the subroutine prefix instead of Finance. Create a file in the usr lib perl5 directory. The Perl script that gets the moving average for a series of numbers is presented in Listing 4 7 Listing 4 7 Using inheriting modules 1 usr bin perl - w 2 aa pwd 3 aa Money 4 push Inc, aa 5 use Money Finance 6 values 12,22,23,24,21,23,24,23,23,21,29,27,26,28 7 mv 0 8 size scalar values 9 print n Values to work with n 10 print Number of values size n 11 ---------------------------------------------------------------- 12 Calculate the average of the above function 13 ---------------------------------------------------------------- 14 ave Money Finance getLastAverage 5, size, values 15 print n Average of last 5 days ave n 16 Money Finance getMovingAve 5, size, values, mv 17 foreach i values 18 print n Moving with 5 days window mv i n 19 20 print n Moving Average with 5 days window n n. Lines 2 through 4 add the path to the Money subdirectory The use statement in line 5 now addresses the file in the Money subdirectory The calls to the functions within are now called with the prefix Money Finance instead of Finance Therefore, a new subdirectory is shown via the symbol when Perl is sear ching for modules to load. The file is not required Even so, you should create a template for future use Actually, the file would be required to put any special requirements for initialization that the entire hierarchy of modules uses The code for initialization is placed in the BEGIN function The sample file is shown in Listing 4 8 Listing 4 8 The superclass module for 1 package Money 2 require Exporter 3 4 BEGIN 5 printf n Hello Zipping into existence for you n 6 7 1.To see the line of output from the printf statement in line 5, you have to insert the following commands at the beginning of your Perl script use Money use Money Finance. To use the functions in the module, you use this line use Money Stocks. The file appears in the Money subdirectory and is defined in the same format as the file, with the exceptions that use Stocks is used instead of use Finance and the set of functions to export is different. A number of modules are included in the Perl distribution Check the usr lib perl 5 lib directory for a complete listing after you install Perl There are two kinds of modules you should know about and look for in your Perl 5 release, Pragmatic and Standard modules. Pragmatic modules, which are also like pragmas in C compiler directives, tend to affect the compilation of your program They are similar in operation to the preprocessor elements of a C program Pragmas are locally scoped so that they can be turned off with the no command Thus, the command no POSIX. turns off the POSIX features in the script These features can be turned back on with the use statement. Standard modules bundled with the Perl package include several functioning packages of code for you to use Refer to appendix B, Perl Module Archives, for a complete list of these standard modules. To find out all the modules installed on your system, issue the following command If you get an error, add the usr lib perl5 directory to your path find usr lib perl5 - name perl - print. Extension modules are written in C or a mixture of Perl and C and are dynamically loaded into Perl if and when you need them These types of modules for dynamic loading require support in the kernel Solaris lets you use these modules For a Linux machine, check the installation pages on how to upgrade to the ELF format binaries for your Linux kernel. The term CPAN Comprehensive Perl Archive Network refers to all the hosts containing copies of sets of data, documents, and Perl modules on the Net To find out about the CPAN site nearest you, search on the keyword CPAN in search engines such as Yahoo AltaVista, or Magellan A good place to start is the site. This chapter introduced you to Perl 5 modules and described what they have to offer A more comprehensive list is found on the Internet via the addresses shown in the Web sites and. A Perl package is a set of Perl code that looks like a library file A Perl module is a package that is defined in a library file of the same name A module is designed to be reusable You can do som e type checking with Perl function prototypes to see whether parameters are being passed correctly A module has to export its functions with the EXPORT array and therefore requires the Exporter module Modules are searched for in the directories listed in the Inc array. Obviously, there is a lot more to writing modules for Perl than what is shown in this chapter The simple examples in this chapter show you how to get started with Perl modules In the rest of the book I cover the modules and their features, so hang in there. I cover Perl objects, classes, and related concepts in Chapter 5.Moving Average. I have hundreds of thousands of data points stored in data and need to do 100 data point moving average Can anybody share the logic I know I have to do pop or shift but just can t figure out how to do the moving average. thanks in advance. RE Moving Average. KevinADC TechnicalUser 18 Sep 08 16 28.I think you are going to need to explain what you are trying to do in detail Or maybe some knows wh at 100 data point moving average means Sample in and sample out data will be helpful. RE Moving Average. rharsh TechnicalUser 18 Sep 08 16 31.There are a few different ways to define a moving average Not in terms of perl since that s your question what algorithm would you use to calculate the moving average. For example, a simple moving average for 100 data points would be something like. SMA p p-1 p-99 100.Is that what you re looking for. RE Moving Average. PinkeyNBrain IS IT--Management 18 Sep 08 17 02.This looks a little academic, so just in case I ll explain versus writing code here - Loop over your data pushing the data points into an array - Track a runningtotal of the values along the way - If size of array 99, goto start - calc print average - shift array and subtract that amount from your runningtotal - end of loop. Red Flag Submitted. Thank you for helping keep Tek-Tips Forums free from inappropriate posts The Tek-Tips staff will check this out and take appropriate action. Reply To Th is Thread. Posting in the Tek-Tips forums is a member-only feature. Click Here to join Tek-Tips and talk with other members.

No comments:

Post a Comment