Wednesday 27 December 2017

Ruchoma średnia zmienna długość


Jeśli na wykresie zrobiliśmy dwa pręty, które są niższe od co najmniej dwóch słupków wcześniej i zamieniamy linię z powrotem na słupek z tego bieżącego paska, który jest co najmniej tak niski, jak bieżący pasek, będzie najwyższy pasek między tymi dwoma taktami. Średnia ruchoma, której potrzebuję, ma długość okresu od wysokiego taktu do aktualnej długości taktu, włącznie. Jeśli więc pomiędzy tymi dwoma łączonymi prętami znajduje się 5 pasków, to długość okresu mającego znaczenie MA wynosiłaby 5. Jeśli został wygenerowany inny niższy słupek, a wysoki słupek między tym i prętem przed tym był równie niska cena byłaby tym samym słupkiem, a następnie długość okresu MA zainteresowania wynosiłaby 6. Czy istnieje wskaźnik, który wytwarza to MA lub może być zakodowany? Być może nawet coś podobnego byłoby dobrym miejscem do rozpoczęcia. Tak, można to zrobić. ale potrzebujesz metody identyfikacji najniższych i najwyższych poziomów. najprawdopodobniej wskaźnik odświeży ostatnią zmianę. jeśli spojrzysz na moją stronę, znajdziesz wskaźnik, który jest prawie taki sam Jak mogę dostać się do twojej strony Dopasowane wysokie i niskie wartości: Jeśli bieżący pasek jest niższy niż dwa poprzednie paski, narysuj linię od bieżącego paska do pasek, który jest co najmniej tak niski. Następnie znajdź pasek pomiędzy bieżącym taktem a historycznym tak małym słupkiem, który jest wyższy niż wszystkie inne paski znajdujące się pomiędzy nimi. To jest pasek zakotwiczenia. Liczba słupków od tego wysokiego słupka do bieżącego słupka jest długością okresu MA. Jeśli następny pasek po bieżącym słupku jest wyższy, długość okresu MA pozostaje taka sama. Jeśli jest niższy, musisz powtórzyć wszystkie powyższe dla nowego paska. W takim przypadku wskaźnik, o który prosisz, odmaluje ostatnie 3 paski. Ps, wysłałem ci po południu, ponieważ podlinkowanie jest tutaj uważane za reklamę. Nie jestem pewien, czy zrozumiałem twoją metodę highlow. Jeśli aktualny słupek jest wyższy niż poprzednie dwa, rozpoczęło się wznowienie Jeśli bieżący pasek jest niższy niż poprzednie dwa rozpoczęło się zmniejszanie, okres Ma jest dostosowywany do długości huśtawki. Nie widzę systemu w tym wskaźniku: (Próbuję uzyskać prosty kod VBA jako część makra, który wstawi w kolumnie B średnią wartości dla każdego wiersza.) Mam kod, który generuje szereg czasowy i wypełnia kolumna na symulację taka, że ​​każda kolumna jest szeregiem czasowym rozpoczynającym się od kolumny C. Liczba symulacji jest różna, więc potrzebuję po prostu czegoś, co uśrednia wartość dla każdego punktu w czasie (tj. dla każdego rzędu we wszystkich symulacjach), jednocześnie dostosowując do liczby przeprowadzane symulacje (kolumny, które są wypełnione), a następnie chciałbym, aby wygenerował pojedynczy wykres wszystkich szeregów czasowych podkreślających wartości średnie, które są obliczane. Wielkie dzięki, jeśli możesz pomóc Tutaj, na przykład, jest kod, który bierze wartości dla przedziałów czasowych od arkusza 1 i umieszczają go w kolumnie A arkusz 2. Chciałbym, aby makro umieściło teraz średnią w odpowiednim wierszu w dół Kolumna B: Zapytano 13 lipca 12 o 1:58 Dzięki za komentarze. włącz tę funkcję jako część makra wh Ich generuje automatycznie te serie czasowe. Ponieważ nie wiem, ile kolumn będzie (być może setek) i być może będę musiał powtórzyć symulację wiele razy, to będzie trzeba włączyć jako część tego makra. Zaktualizowałem to pytanie i wprowadziłem je bardziej szczegółowo jako prosisz. ndash Mary Jul 13 12 o 10:35 Dziękuję za pomoc. Zawsze będą dane po kolumnie C, ponieważ planuję uruchomić tysiące serii czasowych. Zastanawiam się, czy masz kod automatycznie wykrywający zakres danych w arkuszu roboczym, tak aby wykreślić wykres, tj. Zamienić część zakresu poniższego kodu na coś odpowiedniego. Widzę, że doradziłeś coś podobnego w poprzednim wpisie, ale mam nie byłem w stanie dostosować go do mojego. Sub Graph () ActiveSheet. Shapes. AddChart. Select ActiveChart. ChartType xlXYScatterSmoothNoMarkers ActiveChart. SetSourceData Źródło: Range (quotSheet2A1: E101quot) End Sub ndash Mary 13 lipca 12 o 16:03 Cześć chłopaki. Dziękuję bardzo. Oba wkłady naprawdę dobrze sprawdzają się przy obliczaniu średnich dla pokazanego przykładu. Liczba kolumn będzie jednak różna, więc średnia będzie musiała być obliczona z kolumny C na kwotowanie w zależności od liczby powtórzeń generowanych przez symulację. Mam problem z rozpoznaniem, ile kolumn musi zostać uśrednionych przed wykonaniem obliczeń, które są ładnie zapisane. Każda pomoc w generowaniu wykresu będzie również świetnym bonusem). Naprawdę doceniam twoją pomoc w tej sprawie. Jeszcze raz dziękuję ndash Mary Jul 13 12 o 13: 29Twoja wewnętrzna dla iteruje całą tablicę, więc dlaczego zawsze dostajesz tę samą średnią (tę dla całej tablicy), powinieneś iterować od 0 do bieżącego numeru zewnętrznego, zamiast tego . Twoja średnia ruchoma jest aktualizowana w oparciu o j wewnętrznego, co oznacza, że ​​będzie przesłonić poprzednie wartości każdej nowej pętli, to powinno być wewnątrz zewnętrznej zamiast wewnętrznej, używając i jako indeksu. Dzielicie sumj, aby obliczyć średnie, każda nowa wewnętrzna pętla j zostanie podzielona przez 0 pierwszą sumę. Uważam, że zamierzałeś użyć j1 zamiast tego, indeks nie jest taki sam jak aktualna długość Wskazówki do rozwiązywania problemów: Unikaj używania zmiennych do pętli tablic, powinieneś używać array. length zamiast. Aby odtworzyć problem, możesz podać nam wyizolowany problem zamiast obecnego kodu. tzn .: Wyobraź sobie, że błąd leży w twoich danych wejściowych, jak możemy sądzić, że naprawdę ich użyłeś Za każdym razem zapętlasz wszystkie dane. Powinieneś mieć (int j (igtaverageLengthi-averageLength2: 0) jlt iaverageLength2 ampamp jltnumDataPoints j) (lub coś podobnego) dla twojej najskromniejszej średniej. Ponadto, moveAverageisumj powinno zostać zmodyfikowane, aby obsłużyć przypadek, gdy j jest równe 0. W szczególności prawdopodobnie powinno się poruszać AverageisumaverageLength i powinno być stosowane do gniazda movingAveragei poza pętlą uśredniającą. odpowiedziało 4 października 13 o 20:42 Następnym razem, zanim opublikujesz, odrzuć komentarze na temat zadania. Ale ponieważ wydajesz się całkiem nowy w tym, pomyśl o tym, jak przeglądasz dane i spraw, żeby to robił. Powinieneś spróbować upewnić się, że każda pętla zatrzymuje się we właściwym miejscu, i pamiętaj, że jeśli zatrzymasz się, gdy nie będzie więcej liczb (np. Kiedy robisz wewnętrzną pętlę i możesz uzyskać tylko 3 dodatkowe liczby zamiast 4) program także musi się zatrzymać. Upewnij się, że Twój kod sprawdza to. odpowiedz Oct 4 13 at 20:56 Bez żadnych dodatkowych informacji, prawdopodobnie potrzebujesz nieważonej średniej kroczącej. W dowolnym punkcie Ai w macierzy wejściowej A o długości N (z 0ltiltN), jest to po prostu średnia z poprzednich wpisów K tablicy, do Ai włącznie. Jeśli nie ma takich wartości K, wówczas średnie wartości (i1) od A0 do Ai. włącznie. Trochę myśli pokaże ci, że nie musisz dodawać wszystkich wartości K za każdym razem. Po prostu zatrzymaj sumę i, przechodząc do następnego punktu (jest to średnia ruchoma), odejmij wartość, która jest zastępowana, i dodaj nową wartość, która ją zastąpi. (Podczas pierwszych punktów K-1, po prostu dodasz nową wartość do sumy i zwiększysz swój licznik o 1.) W dowolnym punkcie tego procesu średnia ruchoma jest bieżącą sumą podzieloną przez bieżącą wartość zliczania. odpowiedziało 4 października 13 o 21:05 W średniej ruchomej musisz mieć jakiś rozmiar okna. Twój rozmiar okna to averageLength, więc będzie wyglądał mniej więcej tak: pętla for rozpoczyna się od bieżących danych i cofa punkty danych o średniej długości i dodaje je. Średnia krocząca będzie mieć tylko wtedy, gdy masz wystarczającą ilość punktów danych, a średnia będzie sumą podzieloną przez średnią długość. Uwaga: Nie testowałem tylko kodu sudo, ale taki jest pomysł. odpowiedz Oct 4 13 o 21:05 Your Answers 2017 Stack Exchange, Inc

No comments:

Post a Comment