Tuesday 19 December 2017

Mql4 ic custom moving average


Wyobrażałbym sobie, że miałoby to coś wspólnego z ponownym zapisem niestandardowego wskaźnika MA, który wygląda na średnie wartości wskaźnika, który chcesz. Powinno być tylko przypadkiem zastąpienia wartości cen w bieżącym wskaźniku MA z wartościami iStochastic, a następnie można użyć iCustom () do wywołania wskaźnika niestandardowego. Myślę. heres prosty ruchomy średni kod z wskaźnika MA, który pochodzi z MT4, powinien być tylko przypadek zastąpienia Closepos z iStochastic wartości (.post) myślę, że void sma () double sum0 int i, posBars-ExtCountedBars-1 --- - początkowe skumulowanie, jeśli (posltMAPeriod) posMAPeriod for (i1iltMAPeriodi, pos--) sumClosepos ---- główna pętla obliczeniowa podczas gdy (posgt0) sumClosepos ExtMapBufferpossumMdługość początkowa-CloseposMAPeriod-1 pos-- ---- początkowe zero bary jeśli (ExtCountedBarslt1) dla (i1iltMAPeriodi) ExtMapBufferBars-i0 Wyobrażam sobie, że miałoby to coś wspólnego z ponownym zapisem niestandardowego wskaźnika MA, który wygląda na średnie wartości wskaźnika, który chcesz. Powinno być tylko przypadkiem zastąpienia wartości cen w bieżącym wskaźniku MA z wartościami iStochastic, a następnie można użyć iCustom () do wywołania wskaźnika niestandardowego. Myślę. heres prosty ruchomy średni kod z wskaźnika MA, który pochodzi z MT4, powinien być tylko przypadek zastąpienia Closepos z iStochastic wartości (.post) myślę, że void sma () double sum0 int i, posBars-ExtCountedBars-1 --- - początkowe skumulowanie, jeśli (posltMAPeriod) posMAPeriod for (i1iltMAPeriodi, pos--) sumClosepos ---- główna pętla obliczeniowa podczas gdy (posgt0) sumClosepos ExtMapBufferpossumMdługość początkowa-CloseposMAPeriod-1 pos-- ---- początkowe zero bary jeśli (ExtCountedBarslt1) dla (i1iltMAPeriodi) ExtMapBufferBars-i0 Dzięki za pomoc, mrwindowski, ale to jeszcze nie pomogło. Wyobraź sobie po prostu chciałbym obliczyć średnią ruchomą x okresów na woluminach, czy masz kod dla tego Ive zrobił prosty MA objętości, jeśli spojrzeć na wskaźnik Moving Averages, że pochodzi z MT4 można zobaczyć, co zrobiłem . To dość proste. Problem ze Stochastic MA polega na tym, że stochastycy zwracają wartości dodatnie i ujemne, a więc sumy są dokładne. Tworzenie własnych wskaźników Przy tworzeniu strategii handlowej deweloper często stoi w obliczu graficznej grafiki w oknie zabezpieczeń określonej zależności obliczonej przez użytkownika ( programista). W tym celu MQL4 oferuje możliwość tworzenia niestandardowych wskaźników. Wskaźnik niestandardowy to program aplikacji kodowany w MQL4, który jest zasadniczo przeznaczony do graficznego wyświetlania wstępnie obliczonych zależności. Struktura wskaźników niestandardowych Konieczność buforów Główną zasadą, na podstawie wskaźników niestandardowych, jest przekazywanie wartości tablic wskaźników do terminala klienta (do rysowania linii wskaźników) za pośrednictwem buforów wymiany. Bufor to obszar pamięci zawierający wartości liczbowe tablicy wskaźników. Norma MQL4 sugeruje możliwość rysowania do ośmiu linii wskaźników za pomocą jednego wskaźnika niestandardowego. Jedna tablica wskaźników i jeden bufor są wprowadzane do korespondencji z każdą linią wskaźników. Każdy bufor ma własny indeks. Indeks pierwszego buforu wynosi 0, drugi - 1, itd., Ostatni ma indeks 7. Rys. 115 pokazuje, jak informacje z niestandardowego wskaźnika są przekazywane przez bufory do terminala klienta dla wskaźnika rysowania kwestia. Rys. 115. Przekazywanie wartości tablic wskaźników za pośrednictwem bufora do terminala klienta. Ogólny porządek linii wskaźników budynku jest następujący: 1. Obliczenia są przeprowadzane w niestandardowym wskaźniku, w wyniku którego wartości liczbowe przypisywane są do elementów tablicy wskaźników. 2. Wartości elementów tablicy wskaźników są przesyłane do terminala klienta za pośrednictwem buforów. 3. Na podstawie tablic wartości otrzymanych z buforów terminal klienta wyświetla linie wskaźników. Składniki niestandardowego wskaźnika Umożliwia analizowanie prostego niestandardowego wskaźnika, który pokazuje dwie linie - jedna linia jest zbudowana w oparciu o maksymalne ceny pasków, druga używa minimalnych cen. Przykład prostego niestandardowego wskaźnika userindicator. mq4 Umożliwia szczegółową analizę części wskaźników. W każdym programie aplikacyjnym napisanym w MQL4 można wskazać parametry konfiguracji, które zapewniają poprawną obsługę programu przez terminal klienta. W tym przykładzie część programu głównego (patrz Struktura programu) zawiera kilka linii z właściwościami dyrektyw. Pierwsza dyrektywa wskazuje, w jakim oknie terminal klienta powinien rysować linie wskaźników: w MQL4 znajdują się dwa warianty linii wskaźników rysunku: w głównym oknie zabezpieczeń iw oddzielnym oknie. Okno główne to okno zawierające tablicę zabezpieczeń. W tym przykładzie wskaźnik parametru wskazywany w katalogu właściwości wskazuje, że terminal klienta powinien rysować linie wskaźników w głównym oknie. Następna linia pokazuje liczbę buforów używanych w wskaźniku: W analizowanym przykładzie są rysowane dwie linie wskaźników. Do każdego buforu przypisywany jest jeden bufor, więc całkowita liczba buforów wynosi dwa. Następne linie opisują kolory linii wskaźników. Parametry indicatorcolor1 i indicatorcolor2 określają ustawienie koloru dla odpowiednich buforów - w tym przypadku buforów z indeksami 0 (niebieski) i 1 (czerwony). Warto zauważyć, że liczby w nazwach parametrówcolor1 i color2 wskaźników nie są indeksami buforu. Te liczby są częściami stałych nazw, które są ustawione zgodnie z buforami. Dla każdego stałego koloru można ustawić według uznania użytkownika. W kolejnym wierszu tablic wskaźników są zadeklarowane: wskaźnik jest przeznaczony do rysowania dwóch linii wskaźników, dlatego musimy zadeklarować dwie globalne tablice jedno wymiarowe, po jednym dla każdej linii. Nazwy tablic wskaźników są dostępne dla użytkownika. W tym przypadku używane są nazwy tablic Buf0 i Buf1, w innych przypadkach można używać innych nazw, na przykład Line1, Alfa, Integral itd. Konieczne jest zadeklarowanie tablic na poziomie globalnym, ponieważ wartości elementów tablicy muszą być zachowane między połączeniami specjalnego startu funkcji (). Opisany niestandardowy wskaźnik jest zbudowany na podstawie dwóch specjalnych funkcji - init () i start (). Funkcja init () zawiera część kodu użytego w programie tylko raz (patrz Funkcje specjalne). W wierszu jest wykonywana bardzo ważna operacja: Używając funkcji SetIndexBuffer (), potrzebny bufor (w tym przypadku indeks 0) umieszcza się w korespondencji z tablicą (w tym przypadku Buf0). Oznacza to, że konstrukcja pierwszej linii wskaźników terminalu klienta akceptuje dane zawarte w tablicy Buf0, używając do tego buforu zerowego. Dalej styl linii jest zdefiniowany: Dla buforu zerowego (0) terminal klienta powinien używać następujących stylów rysowania: prosta linia (DRAWLINE), linia ciągła (STYLESOLID), szerokość linii 2. Następne dwie linie zawierają ustawienia dla drugiej linii : Tak więc, zgodnie z kodem specjalnej funkcji init () obie linie wskaźników zostaną zapisane w głównym oknie bezpieczeństwa. Pierwszym będzie stała niebieska linia o szerokości 2, druga czerwona kropkowana linia (STYLEDOT) o normalnej szerokości. Linie wskaźników można rysować innymi stylami (patrz Style linii wskaźników). Obliczanie wartości elementów tablicy wskaźników (zachowaj ostrożność) Wartości elementów tablic wskaźników są obliczane w funkcji specjalnej start (). Aby zrozumieć prawidłowo zawartość kodu start (), zwróć uwagę na kolejność pasków indeksowania. Sekcja Arrays opisuje szczegółowo metodę indeksowania tablic czasowych. Zgodnie z tą metodą indeksowanie paska rozpoczyna się od zera. Pasek zerowy to pręt jeszcze nie uformowany. Najbliższy indeks bary to 1. Następny jest 2 i tak dalej. Gdy nowe okna pojawiają się w oknie zabezpieczeń, zmieniane są już indeksy istniejących (historycznych) pasków. Nowy (aktualnie, właśnie uformowany, prawy) pasek pobiera indeks zera, jeden po jego lewej stronie (który właśnie został w pełni ukształtowany) pobiera indeks 1, a wartości indeksów wszystkich pasków historii są również powiększane o jeden. Opisana metoda indeksowania prętów jest jedynym możliwym dla całego systemu transakcyjnego on-line MetaTrader i jest brany pod uwagę przy rysowaniu linii za pomocą zarówno wskaźników technicznych, jak i niestandardowych. Powiedziano wcześniej, że linie wskaźników są skonstruowane na podstawie informacji liczbowych zawartych w tablicach wskaźników. Tablica wskaźników zawiera informacje o współrzędnych punktów, na których jest rysowana linia wskaźników. I współrzędna Y każdej kropki jest wartością elementu tablicy wskaźników. a współrzędna X jest wartością wskaźnika tablicy wskaźników. W analizowanym przykładzie pierwsza linia wskaźników jest rysowana przy użyciu maksymalnych wartości batonów. Fig. 116 przedstawia tę linię wskaźników (niebieskiego koloru) w oknie zabezpieczeń, jest ona oparta na tablicy wskaźników Buf0. Rys. 116. Korespondencja współrzędnych linii wskaźników do wartości tablicy wskaźników. Wartość indeksu tablicy wskaźników jest wyprowadzana przez terminal klienta do korespondencji z indeksem słupkowym - te wartości indeksu są takie same. Należy również wziąć pod uwagę fakt, że proces tworzenia linii wskaźników przebiega w trybie czasu rzeczywistego w warunkach, gdy w oknie zabezpieczeń pojawiają się nowe paski od czasu do czasu. Wszystkie paski historii są przesuwane w lewo. Aby linia wskaźnika była rysowana poprawnie (każda linia nad jej paskiem), należy ją również przesunąć w poprzek z prętami. Więc istnieje potrzeba (potrzeba techniczna) ponownego indeksowania tablicy wskaźników. Podstawowa różnica tablicy wskaźników ze zwyczajowej tablicy jest następująca: W chwili tworzenia nowego paska wartości indeksu elementów tablicy wskaźników są automatycznie zmieniane przez terminal klienta, mianowicie - wartość każdego indeksu tablicy wskaźników jest zwiększana przez jeden i rozmiar tablicy wskaźników jest powiększany o jeden element (ze zerowym indeksem). Na przykład zerowy pręt na Fig. 116 (ramka H1) ma czas otwarcia 6:00. O godzinie 7:00 pojawi się nowy pasek w oknie zabezpieczeń. Pasek otwarty o godzinie 6:00 automatycznie osiągnie indeks 1. Aby linia wskaźników została prawidłowo narysowana na tym pasku, terminal klienta zmieni indeks elementu tablicy wskaźników odpowiadający paskowi otwartemu o godzinie 6:00. W tabeli na rys. 116 ten element jest zapisany w pierwszej linii. Razem z tymi indeksami wszystkich elementów tablicowych zostanie zwiększony o jeden terminal klienta. Indeks elementu tablicy odpowiadający paskowi otwartemu o godzinie 6:00 otrzyma wartość 1 (przedtem to było równe 0). Tablica wskaźników stanie się większa o jeden element. Indeks nowego dodanego elementu będzie równy 0, wartość tego elementu będzie nową wartością odzwierciedlającą współrzędną linii wskaźnika na zerowym kresce. Ta wartość jest obliczana w funkcji specjalnej start () na każdym z nich. Obliczenia w funkcji specjalnej start () należy prowadzić tak, aby nie były wykonywane żadne dodatkowe czynności. Zanim wskaźnik zostanie dołączony do wykresu, nie odzwierciedla on żadnych linii wskaźników (ponieważ wartości tablic wskaźników nie są jeszcze zdefiniowane). To dlatego, że przy pierwszym uruchomieniu specjalnych wartości początkowych funkcji start () wartości tablic muszą być obliczone dla wszystkich prętów, na których powinna być rysowana linia wskaźnika. W analizowanym przykładzie są to wszystkie paski obecne na wykresie (wstępne obliczenia mogą być przeprowadzone nie dla wszystkich dostępnych pasków, ale dla jakiejś ostatniej części historii jest ona opisana w dalszych przykładach). Ar wszystkie kolejne uruchomienia funkcji specjalnej start () nie ma potrzeby ponownego obliczania wartości tablicy wskaźników dla wszystkich pasków. Wartości są już obliczone i są zawarte w tablicy wskaźników. Konieczne jest obliczenie bieżącej wartości linii wskaźników tylko na każdym nowym kresku zera. Do implementacji opisanej technologii jest bardzo przydatna funkcja standardowa w MQL4 - IndicatorCounted (). Wskaźnik działaniaCounted () Ta funkcja zwraca liczbę pasków, które nie zostały zmienione od ostatniego wywołania wskaźnika. Jeśli wskaźnik był nigdy dołączony do wykresu, przy pierwszym uruchomieniu () wartość wartości zliczonych pasków będzie równa zero: oznacza to, że tablica wskaźników nie zawiera żadnego elementu z wcześniej określoną wartością, dlatego cały układ wskaźników musi być obliczana od początku do końca. Tablica wskaźników jest obliczana z najstarszego paska do zera. Indeks najstarszego paska, począwszy od którego trzeba rozpocząć obliczenia, oblicza się następująco: Załóżmy, że w chwili przymocowania wskaźnika w oknie wykresu znajduje się 300 pasków. Jest to wartość predefiniowanej zmiennej Bary. Jak zdefiniowano wcześniej, Countedbars jest równa 0. W rezultacie otrzymujemy indeks i pierwszego niezliczonego paska (ostatni, zaczynając od którego obliczenia powinny być przeprowadzone) wynosi 299. Wszystkie wartości elementów tablicy wskaźników są obliczany w pętli while (): Podczas gdy i jest w zakresie od pierwszego niezliczonego paska (299) do bieżącego (0) włącznie, wartości obu elementów wskaźników są obliczane dla obu linii wskaźników. Uwaga, brakujące wartości elementów tablicy wskaźników są obliczane podczas jednego (pierwszego) uruchomienia funkcji specjalnej start (). Podczas obliczeń terminal klienta pamięta elementy, dla których obliczono wartości. Ostatnia iteracja while () jest wykonywana, gdy i jest równe 0, tzn. Wartości tablic wskaźników są obliczane dla paska zerowego. Gdy pętla się skończy, specjalna funkcja start () kończy jego wykonanie, a sterowanie przechodzi do terminala klienta. Z kolei terminal klienta będzie rysował wszystkie (w tym przypadku dwa) linie wskaźników zgodnie z obliczonymi wartościami elementów tablicy. W następnym kroku start () zostanie uruchomiony ponownie przez terminal klienta. Dalsze działania będą zależeć od sytuacji (będziemy kontynuować analizowanie przykładu dla 300 barów). Wariant 1. Nowy znak pojawia się podczas tworzenia aktualnego zerowego paska (najczęstszej sytuacji). Na rys. 117 przedstawiono dwa kleszcze odebrane przez terminal w momentach t1 i t2. Analizowana sytuacja będzie taka sama dla obu kleszczy. Pozwala śledzić uruchomienie startu (), które zostało uruchomione w momencie t 2. Podczas wykonywania funkcji start () zostanie wyświetlona następująca linia: IndicatorCounted () zwróci wartość 299, tzn. Od ostatniego wywołania () 299 poprzednich pasków nie zmieniono. W rezultacie wartość indeksu i będzie równa 0 (300-299-1): oznacza to, że w następnej (while) pętli obliczane będą wartości elementów tablicy z indeksem zerowym. Innymi słowy, zostanie obliczona nowa pozycja linii wskaźników na zerze. Po zakończeniu cyklu start () przestanie się uruchamiać i przejdzie kontrolę do terminala klienta. Wariant 2. Nowy znak jest pierwszym znakiem zerowego paska (zdarza się co pewien czas). W tym przypadku ważny jest fakt pojawienia się nowego paska. Przed przejściem do specjalnej funkcji start (), terminal klienta ponownie narysuje wszystkie paski obecne w oknie zabezpieczeń i ponownie indeksuje wszystkie zadeklarowane tablice wskaźników (ustawione w korespondencji z buforami). Poza tym terminal klienta będzie pamiętał, że w oknie wykresu znajduje się już 301 batonów, a nie 300. Rys. 118 zawiera sytuację, gdy na ostatnim zaznaczeniu poprzedniego paska (w chwili t2) uruchomiono funkcję i uruchomiono funkcję. To dlatego, że chociaż teraz pierwszy pasek (z indeksem 1) zakończył się w chwili t2 został obliczony przez wskaźnik, funkcja IndicatorCounted () zwróci wartość, która znajdowała się na poprzednim pasku. tj. 299: w następnym indeksie linii i zostanie wyliczony, w tym przypadku dla pierwszego zaznaczenia nowego paska będzie równe 1 (301-299-1): oznacza obliczanie wartości tablicy wskaźników w pętli while () po pojawieniu się nowego paska będzie wykonywany zarówno dla ostatniego paska, jak i dla nowego zera. Nieco wcześniej podczas ponownej indeksacji tablic wskaźników terminal klienta zwiększył rozmiary tych tablic. Wartości elementów tablicy ze zerowymi indeksami nie zostały zdefiniowane przed obliczeniami w pętli. Podczas obliczeń w pętli elementy te uzyskują pewne wartości. Kiedy obliczenia na początku () są zakończone, sterowanie jest zwracane do terminala klienta. Następnie terminal klienta będzie rysował linie wskaźników na pasku zera na podstawie właśnie obliczonych wartości elementów tablicy z indeksem zerowym. Wariant 3. Nowy znak jest pierwszym znakiem nowego zerowego paska, ale ostatni, ale jeden nie zostanie przetworzony (rzadko). Rys. 119 przedstawia sytuację, w której uruchomiono start () na pierwszym zaznaczeniu nowego paska w chwili t 5. Poprzedni czas uruchomiono tę funkcję w chwili t 2. Zaznaczyć, że doszło do terminala w chwili t3 ( czerwona strzałka) nie był przetwarzany przez wskaźnik. Stało się tak dlatego, że czas wykonania t2 - t4 jest większy niż przedział pomiędzy tikami t2 - t 3. Ten fakt zostanie wykryty przez terminal klienta podczas uruchamiania startu () uruchomionego w chwili t 5. Podczas obliczenia w wierszu: IndicatorCounted () zwróci wartość 299 (). Ta wartość jest prawdziwa - od momentu ostatniego wywołania wskaźnika 299 bary nie zostały zmienione po (teraz już) 301. Z tego powodu obliczony indeks pierwszego (lewego) paska, z którego muszą zostać uruchomione obliczenia wartości elementów tablicy, będzie równy 1 (301-299-1): oznacza to, że podczas wykonywania while () wykonywane są dwa iteracje. Podczas pierwszej wartości zostaną obliczone wartości elementów tablicowych z indeksem i 1, tj. Buf01 i Buf11. Nie, w momencie rozpoczęcia obliczeń, tablice bary i tablice wskaźników są już ponownie indeksowane przez terminal klienta (ponieważ uruchomiono nowy pasek pomiędzy początkami specjalnej funkcji start ()). Dlatego obliczenia elementów macierzy z indeksem 1 będą obliczane na podstawie współczynników czasowych tablic (maksymalnych i minimalnych wartości ceny paska), również z indeksem 1: Podczas drugiej iteracji while () wartości dla elementów zerowych indeksy, tzn. dla paska zerowego, obliczane są na podstawie ostatnich znanych wartości tablic czasowych. Zastosowanie opisanej technologii do obliczania wskaźników niestandardowych pozwala po pierwsze na zagwarantowanie kalkulacji wartości wszystkich elementów tablicy wskaźników, niezależnie od charakteru historii kleszcza, a po drugie, w celu przeprowadzenia obliczeń tylko w przypadku niezliczonych pasków, tzn. Wykorzystywać ekonomicznie obliczające zasoby . Nie, pasek jest uważany za nieokreślony, jeśli nie zostanie obliczona obliczanie wartości elementów tablicy wskaźników co najmniej dla jednego ostatniego kreski paska. Uruchomienie niestandardowego wskaźnika userindicator. mq4 w oknie wykresu zobaczysz dwie linie - grubą, niebieską linię zbudowaną na maks. Prętach i kropkowaną czerwoną linię, zbudowaną na jej minimalnych wartościach (rys. 120). Należy zauważyć, że można zbudować własny wskaźnik, którego linie wskaźników pokrywają się z liniami analogicznego wskaźnika technicznego. Można to zrobić, jeśli jako wskaźniki obliczeniowe w wskaźniku niestandardowym użyto takich samych wzorów jak w wskaźniku technicznym. Aby to zilustrować, można poprawić kod programu analizowany w poprzednim przykładzie. Niech wskaźnik rysuje linie na średnich wartościach maksimum i minimum kilku ostatnich pasków. Łatwe przeprowadzanie niezbędnych obliczeń: po prostu musimy znaleźć średnie wartości elementów macierzy i czasów. Na przykład, wartość tablicy wskaźników z indeksem 3 (tzn. Współrzędna linii wskaźników dla trzeciego paska) na podstawie ostatnich pięciu maksymalnych oblicza się następująco: Buf03 (High3 High4 High5 High6 High7) 5 Można przeprowadzić analogiczne obliczenia dla linii wskaźników zbudowanych na minimum. Przykład prostego wskaźnika niestandardowego averagevalue. mq4. Linie wskaźników są zbudowane przy średnich minimalnych i maksymalnych wartościach N barów. W tym przykładzie istnieje zmienna zewnętrzna AverBars. Za pomocą tej zmiennej użytkownik może podać liczbę pasków, dla których obliczana jest średnia wartość. Na początku () ta wartość jest używana do obliczania średniej wartości. W pętli suma maksymalnych i minimalnych wartości oblicza się dla liczby prętów odpowiadających wartości zmiennej AverBars. W kolejnych dwóch wierszach programu wartości elementów tablicy wskaźników są obliczane dla linii wskaźników odpowiadających minimalnym i maksymalnym wartościom. Stosowana tutaj metoda uśredniania jest również stosowana do obliczeń w wskaźniku technicznym Moving Average. Jeśli dołączymy analizowany wskaźnik niestandardowy averagevalue. mq4 i wskaźnik techniczny Moving Average, zobaczymy trzy linie wskaźników. Jeśli dla obu wskaźników zostanie ustawiony ten sam okres uśredniania, linia Moving Average będzie pokrywać się z jedną z linii wskaźników niestandardowych (w tym celu należy określić parametry opisane na rys. 121 w ustawieniach wskaźników technicznych). Rys. 121. Zbiegi linii wskaźnika technicznego i wskaźnika niestandardowego (czerwona linia). Zatem za pomocą wskaźnika technicznego użytkownik może skonstruować odzwierciedlenie wszelkich prawidłowości niezbędnych w praktycznej pracy. Opcje wskaźników niestandardowych Linia wskaźników rysowania w osobnym systemie Windows MQL4 oferuje dużą usługę do tworzenia niestandardowych wskaźników, które czynią je bardzo wygodnymi. W szczególności linie wskaźników można rysować w osobnym oknie. Jest to wygodne, gdy bezwzględne wartości amplitudy linii wskaźników są znacznie mniejsze (lub większe) niż ceny bezpieczeństwa. Na przykład, jeśli jesteśmy zainteresowani różnicą między średnimi wartościami maksymalnych wartości minimalnych i minimalnych w pewnym przedziale historycznym, w zależności od harmonogramu ta wartość będzie wynosić około 0 do 50 punktów (na przykład dla M15). Nie jest trudne budowanie linii wskaźników, ale w oknie zabezpieczeń linia ta będzie rysowana w zakresie od 0 do 50 punktów ceny zabezpieczenia, tzn. Znacznie niższa niż powierzchnia wykresu odzwierciedlona na ekranie. To jest bardzo niewygodne. Aby narysować linie wskaźników w osobnym oknie (znajdującym się w dolnej części okna zabezpieczeń), w indeksie właściwym dla dyrektywy (na początku programu) należy określić oddzielne wskaźniki: w chwili, gdy taki wskaźnik jest dołączony do okna zabezpieczeń , terminal klienta utworzy oddzielne okno poniżej wykresu, w którym będą rysowane linie wskaźników obliczone w wskaźniku. W zależności od ustawień kolorystycznych i typów linii wskaźników będą rysowane w tym lub tym stylu. Ograniczanie historii obliczania W większości przypadków linie wskaźników zawierają przydatne informacje tylko w najnowszej historii. Część linii wskaźników utworzonych na starych prętach (na przykład w ramce 1 miesiąca) nie może być uznana za przydatną do podejmowania decyzji handlowych. Poza tym, jeśli w oknie wykresu znajduje się wiele słupków, czas poświęcony na obliczanie i rysowanie linii wskaźników jest zbyt duży. Może to być krytyczne w debugowaniu programu, gdy program jest często kompilowany, a następnie uruchamiany. Dlatego konieczne jest przeprowadzenie obliczeń nie dla całej historii, ale dla ograniczonej części najnowszej historii paska. W tym celu w następującym programie stosuje się zewnętrzną historię zmiennych. Wartość tej zmiennej uwzględnia się przy obliczaniu indeksu pierwszego (lewego) paska, zaczynając od którego muszą być obliczane tablice wskaźników. Kolejne obliczenia w pętli while () będą prowadzone w odniesieniu do liczby ostatnich pasków historii nie większej niż wartość History. Zauważ, że analizowana metoda ograniczania historii obliczania dotyczy tylko części obliczeń, które są przeprowadzane podczas pierwszego uruchomienia funkcji specjalnej start (). Ponadto po pojawieniu się nowych słupków, w prawej części zostaną dodane nowe części linii wskaźników, a obraz w lewej części zostanie zachowany. W ten sposób długość linii wskaźników zostanie zwiększona podczas całego czasu pracy wskaźnika. Wspólna wartość parametru History jest uważana za około 5000 barów. Przykładowy prosty wskaźnik niestandardowywindow. mq4. Linie wskaźników są rysowane w osobnym oknie. Podobne obliczanie linii wskaźników odbywa się w technicznym wskaźniku AverageTrue Range. Na rys. 122 przedstawiono linię wskaźników skonstruowaną przez wskaźnik customwindow. mq4 w osobnym oknie i linię wskaźników skonstruowaną przez ATR w innym oknie. W tym przypadku linie są w pełni identyczne, ponieważ okres uśredniania jest taki sam dla obydwu wskaźników - 5. Jeśli ten parametr zostanie zmieniony w którymkolwiek z wskaźników, odpowiadająca mu linia wskaźników ulegnie zmianie. Rys. 122. rysowanie niestandardowej linii wskaźników w osobnym oknie. Identyczne linie wskaźnika technicznego (ATR) i wskaźnik niestandardowy (separatewindow. mq4). Jest oczywiste, że niestandardowa linia wskaźników jest zbudowana nie dla całej szerokości ekranu, ale dla 50 najnowszych słupków określonych w zmiennej zewnętrznej Historia. Jeśli przedsiębiorca musi używać większego przedziału historii, zmienna zewnętrzna zmienna może być łatwo zmieniona za pomocą okna ustawień wskaźnika niestandardowego. Na rysunku 123 przedstawiono okno zabezpieczeń, w którym wskaźnik namierzył nas w innym stylu - jako histogram. Aby uzyskać taki wynik, jedna z linii została zmieniona w kodzie programu ownwindow. mq4 - inne style linii są oznaczone: wszystkie inne części kodu pozostają niezmienione. Rys. 123. Rysowanie linii niestandardowej w oddzielnym oknie (histogram). Podobieństwo rysunków wskaźnika technicznego (ATR) i wskaźnika niestandardowego (separatewindow. mq4). Przesuwanie linii wskaźników w pionie iw poziomie W niektórych przypadkach konieczne jest przesunięcie linii wskaźników. Można to łatwo wykonać za pomocą MQL4. Pozwala analizować przykład, w jakim miejscu linii wskaźników w oknie zabezpieczeń oblicza się zgodnie z wartościami określonymi przez użytkownika. Przykład niestandardowego wskaźnika przesunięcia. mq4. Przesuwanie linii wskaźników w poziomie iw pionie. W celu wyrównywania linii przesunięcia na wykresie istnieją dwie zmienne zewnętrzne - Lewy Lewy dla przesunięcia poziomego wszystkich linii i Przesunięcie w górę dla przesuwania dwóch linii przerywanych w pionie. Algorytm użyty do obliczania wartości odpowiednich elementów tablicy opiera się na bardzo prostych regułach: przesuwanie linii w poziomie, przyporządkowanie obliczonej wartości do elementu tablicy, którego indeks jest większy niż LeftRight (dla przesunięcia w prawo i mniej dla przesunięcia po prawej) niż indeks paska, dla którego przeprowadzane są obliczenia w celu przesunięcia linii pionowo, należy dodać UpDownPoint (do przesuwania się w górę lub zmniejszania w celu przesunięcia w dół) do każdej wartości tablicy wskaźników charakterystycznej dla początkowej pozycji linii W analizowanej przykładowe indeksy są obliczane w wierszu: Oto i jest indeksem paska, dla którego wykonywane są obliczenia, k jest indeksem elementu tablicy wskaźników. Czerwona linia wskaźników wyświetlana przez terminal klienta na podstawie tablicy wskaźników Linia 0 zostaje przesunięta w lewo o 5 barów (zgodnie z własnymi ustawieniami, patrz rys. 124) z początkowej linii. W tym przypadku linią początkową jest średnia ruchoma z okresem uśredniania równym 5 formuła obliczenia MA (HighiLowi) 2. W tym przykładzie położenie czerwonej linii jest podstawą do obliczania wartości tablicy wskaźników dla dwóch innych linii, tzn. Ich pozycji na wykresie. Kropki są obliczane w ten sposób: Użycie indeksu k dla elementów wszystkich tablic wskaźników umożliwia wykonywanie obliczeń elementów tablic Line1, Line2 na tym samym pasku, co używane do obliczania wartości odpowiedniej podstawowej tablicy Line0. W rezultacie linie przerywane są przesuwane względem czerwonej linii o wartość określoną w oknie ustawień wskaźnika, w tym przypadku o 30 punktów (rys. 124). Rys. 124. Czerwona linia wskaźników zostaje przesunięta w lewo o 5 barów. Kropkowane linie wskaźników są przesuwane w stosunku do czerwonej linii o 30 punktów. Ograniczenia wskaźników niestandardowych Istnieją pewne ograniczenia w MQL4, które należy uwzględnić przy programowaniu wskaźników niestandardowych. Istnieje grupa funkcji, które mogą być użyte tylko w wskaźnikach niestandardowych i nie mogą być stosowane w eksperckich Doradcach i skryptach: IndicatorBuffers (), IndicatorCounted (), IndicatorDigits (), IndicatorShortName (), SetIndexArrow (), SetIndexBuffer (), SetIndexDrawBegin ), SetIndexEmptyValue (), SetIndexLabel (), SetIndexShift (), SetIndexStyle (), SetLevelStyle (), SetLevelValue (). Z drugiej strony funkcje handlowe nie mogą być użyte w wskaźnikach: OrderSend (), OrderClose (), OrderCloseBy (), OrderDelete () i OrderModify (). Dzieje się tak, ponieważ wskaźniki działają w przepływie interfejsu (w odróżnieniu od ekspertów i skryptów pracujących we własnym przepływie). To dlatego algorytmy oparte na pętli nie mogą być użyte w wskaźnikach niestandardowych. Uruchomienie niestandardowego wskaźnika zawierającego pętlę bez końca (w odniesieniu do rzeczywistego czasu wykonania) może powodować zawieszenie się klienta z inną koniecznością ponownego uruchomienia komputera. Ogólna charakterystyka porównawcza Doradców Specjalnych, Skryptów i Wskaźników znajduje się w Tabeli 2 Wykorzystanie Programów Powiedziano wcześniej, że zgodnie z regułami MQL4 funkcje handlowe nie mogą być użyte w wskaźnikach niestandardowych, dlatego też dla ekspertów ds. używany. Jednakże technologia oszczędzania zasobów używana do obliczania wskaźników (patrz Tworzenie wskaźników niestandardowych) jest szeroko stosowana przy tworzeniu programów handlowych. W większości przypadków w wskaźnikach niestandardowych można efektywnie obliczyć wartości elementów macierzy wskaźników niezbędnych do tworzenia kryteriów handlowych i podejmowania decyzji handlowych w Expert Advisors. Obliczenia przeprowadzane w wskaźnikach niestandardowych mogą również zostać wdrożone w ekspertów, ale może to prowadzić do powielania obliczeń w różnych programach aplikacyjnych i nieracjonalnych stratach zasobów, aw niektórych przypadkach (gdy przeprowadzane są długotrwałe obliczenia) - decyzja o handlu podjęta późno. W przypadkach, w których konieczne jest użycie wyników obliczeniowych wskaźników niestandardowych w Doradcy Eksperta lub skrypcie, można użyć funkcji iCustom (). Funkcja iCustom () Obliczanie danego wskaźnika niestandardowego. Wskaźnik niestandardowy musi być skompilowany (plik. ex4) i znajduje się w katalogu Katalog terminów. symbol - nazwa symbolu zabezpieczenia, na danych, z których będzie obliczony wskaźnik. NULL oznacza bieżący symbol. termin - okres. Może być jednym z okresów wykresów. 0 oznacza okres bieżącego wykresu. nazwa - nazwa niestandardowego wskaźnika. . - Lista parametrów (w razie potrzeby). Parametry przekazane muszą odpowiadać kolejności deklarowania i typu zewnętrznych zmiennych niestandardowego wskaźnika. tryb - indeks linii wskaźników. Może wynosić od - do 7 i musi odpowiadać indeksowi używanemu przez którąkolwiek z funkcji SetIndexBar. shift - indeks otrzymanej wartości z bufora wskaźników (przesunięcie względem bieżącego paska o określoną liczbę prętów). Pozwala zastanowić się jak iCustom () może być używany w praktyce. Rozwiążmy następujący problem: Problem 30. Strategia handlowa jest oparta na danych wskaźnika niestandardowego rocseparate. mq4. Jeśli linia ROC w bieżącej ramce czasowej (pomarańczowej) przekroczy linię przeciętnie wyrównaną (grubą czerwień) poniżej określonego poziomu od dołu do góry, jest to właściwe kryterium zakupu (otwarte Kup i zamknij sprzedaż). Jeśli istnieją sprzeczne warunki, uznaj to za istotne kryterium do sprzedaży. Napisz kod implementujący tę strategię. Zasadę budowy wskaźnika niestandardowego rocseparate. mq4 opisano szczegółowo w sekcji Wskaźnik niestandardowy ROC (cena zmienności). Na rysunku 131 przedstawiono dwa punkty, w których linia ROC w bieżącej ramce czasowej (M15) przebiega przez wygładzoną linię zmian. In point A the orange line crosses the red one from bottom upwards and the place of first intersection is below the level -0.001. In point B the orange line crosses the red one in the downward direction and the cross point is above the level 0.001. The fact of this crossing must be detected in the Expert Advisor and be considered as a signal to buy (point A - close Sell and open Buy) or to sell (point B - close Buy and open Sell). Fig. 131. Crossing of custom indicator lines is considered as a trading criterion. When solving such problems a ready Expert Advisor can be used, changing the order of calculation trading criteria in it. In this case we can take as a basis the Expert Advisor tradingexpert. mq4 described in the section Simple Expert Advisor. The EA shared. mq4 calculating trading criteria on the basis of a custom indicator will look loke this: Let us analyze what amendments were made in the source code (tradingexpert. mq4 ). The main part of the Expert Advisor used as basic has not changed. Changes have been made in two blocks - block 1-2- and block 5-6. In the block 5-6 trading criteria are calculated. In the described EA a trading strategy is based on two trading criteria - criterion to open Buy and criterion to open Sell. The strategy used in the Expert Advisor allows the presence of only one opened market order, pending orders are not allowed. The strategy also presupposes closing an opposite order when a criterion for opening triggers for example, if criterion to open a Buy order is relevant, it means that a Sell order must be closed. For using in the EA shared. mq4 results of calculations performed in the custom indicator rocseparate. mq4, function iCustom() must be executed: In this case formal parameters specified in iCustom() call denote the following: NULL - calculations in the indicator are performed based on data of the current security in this case the EA is attached to EURUSD window, so data of EURUSD will be used (see Fig. 131 ) 0 - in calculations data of the current timeframe are used in this case the current timeframe is M15, so data corresponding to M15 will be used quotrocseparatequot - name of a custom indicator, in which calculations will be made. H, P,B, A - list of adjustable parameters. In this case the custom indicator rocseparate. mq4 has adjustable parameters (block 2-3 of rocseparate. mq4 code). For a user to be able to set up values of these parameters from the EA, they are specified in the list of passed parameters of the function iCustom(). In the Expert Advisor values of these parameters can differ from those specified in the indicator. In such a case during calculations in the indicator exactly these passed values will be used. These parameters denote the following: H - number of bars in calculation history P - period of calculation MA B - number of bars for rate calculation A - number of bars for smoothing. (the meaning of these parameters is explained in details in the section Custom Indicator ROC (Price Rate of Change) . 1 ( 5 ) - index line of the indicator. In the custom indicator rocseparate. mq4 6 indicator arrays are used. ROC line in the current timeframe (orange) is constructed on the basis of Line1 values, for which buffer with index 1 is used. Smoothed average rate line is based on values of Line5 array elements, index of the used buffer is 5. 0 - index of value obtained from an indicator buffer (shift back relative to a current bar by the specified number of periods). In this case values of indicator lines on the zero bar are used, that is why index 0 is specified. For a user to be able to change the adjustable indicator parameters in the EA manually, external variables are specified in block 1a-1b (of the Expert Advisor ). In block 5-5a values of these parameters are assigned to other variables with shorter names - this is done for convenience of code presentation in block 5a - 5b. Thus a user can specify in shared. mq4 parameters, with which calculations in the custom indicator rocseparate. mq4 will be conducted. After execution iCustom() function will return value corresponding to a specified element value of specified indicator array calculated in the indicator using specified values of adjustable parameters. During practical operation it is convenient to see in a security window lines of the indicator, array elements of which are used in the Expert Advisor (see Fig. 131 ). At the same time execution of iCustom() is not connected with the presence of the indicator in the security window, as well as with the values of its adjustable parameters. The execution of iCustom() does not require the attachment of a corresponding indicator to a security window. As well as the call of iCustom() from any application program does not result in the attachment of a corresponding indicator to a security window. Attachment of a technical indicator to a security window also does not lead to the call of iCustom in any application program. Trading criteria in the EA (block 5-6) are calculated on the basis of array element values obtained using iCustom() function. For example a criterion for opening Buy and closing Sell are calculated the following way: If the last known value of a smoothed average rate line (L5) is less than the specified level (value of the adjustable parameter Level 0.001) and the last known value of ROC line in the current timeframe (L1) is larger than the smoothed average rate line (L5), the criterion for opening a Buy order and closing a Sell order is considered relevant. For the confirmation of relevance of opposite criteria reflecting conditions are used. Trading criteria accepted in this example are used for educational purpose only and must not be considered as a guideline when trading on a real account. Moving Average The Moving Average Technical Indicator shows the mean instrument price value for a certain period of time. Kiedy obliczy się średnią ruchoma, średnia cena instrumentu dla tego okresu. Wraz ze zmianą ceny jego średnia ruchoma wzrasta lub maleje. Istnieją cztery różne typy średnich kroczących: Proste (zwane również arytmetykiem), Wykładowe. Wygładzony i ważony. Średnia przemieszczeniowa może być obliczona dla każdego zbioru danych sekwencyjnych, w tym cen otwarcia i zamknięcia, najwyższych i najniższych cen, wolumenu obrotu lub innych wskaźników. Jest to często przypadek, gdy używane są podwójne średnie ruchome. Jedyną rzeczą, w której średnie ruchome różnych typów różnią się znacznie od siebie, jest to, że współczynniki wagi, które są przypisane do najnowszych danych, są różne. Jeśli chodzi o Simple Moving Average. wszystkie ceny danego okresu są równe wartości. Średnie ruchy wykładnicze i liniowe ważone Moving Average przywiązują większą wartość do najnowszych cen. Najczęstszym sposobem interpretowania średniej ruchomej jest porównanie jego dynamiki z akcjami cenowymi. Kiedy cena instrumentu wzrasta powyżej średniej ruchomej, pojawi się sygnał kupna, jeśli cena spadnie poniżej średniej ruchomej, co mamy w sprzedaży. Ten system handlowy, oparty na średniej ruchomej, nie ma na celu umożliwienia wejścia na rynek w najniższym punkcie, a jego prawo wyjścia na szczyt. Pozwala to działać zgodnie z następującą tendencją: kupić wkrótce po osiągnięciu cen i sprzedać wkrótce po osiągnięciu przez nich szczytu. Średnie ruchome mogą być również stosowane do wskaźników. W tym przypadku interpretacja wskaźników średnich kroczących jest podobna do interpretacji średnich zmian cen: jeśli wskaźnik wzrasta powyżej jego średniej ruchomej, oznacza to, że ruch wskaźników rosnących prawdopodobnie będzie kontynuowany: jeśli wskaźnik spadnie poniżej średniej ruchomej, to oznacza, że ​​prawdopodobnie będzie ona nadal spadać w dół. Oto typy średnich kroczących na wykresie: Średni ruchoma (SMA) Wytrzymałość średnia ruchoma (SMMA) Średnia średnia ruchoma (LWMA) Można przetestować sygnały handlowe tego wskaźnika, tworząc Doradcę ds. Ekspertów w Kreatorze MQL5. Obliczanie Proste średnie ruchome (SMA) Proste, innymi słowy, arytmetyczna średnia ruchoma jest obliczana przez zsumowanie cen zamknięcia przyrządu przez pewną liczbę pojedynczych okresów (na przykład 12 godzin). Wartość ta jest podzielona przez liczbę takich okresów. SMA SUM (ZAMKNIJ (i), N) N SUMA suma ZAMKNIĘCIE (i) bieżąca cena okresu zamknięcia N liczba okresów obliczeniowych. Wyjściowa średnia ruchoma (EMA) Wytworzona wyrafinowana średnia ruchoma jest obliczana przez dodanie pewnej części aktualnej ceny zamknięcia do poprzedniej wartości średniej ruchomej. Przy średnich ruchliwych wykładniach najświeższe ceny są o większej wartości. Średnia wartość średniej ruchomej P-percent będzie wyglądała następująco: EMA (CLOSE (i) P) (EMA (i - 1) (1 - P)) CLOSE (i) bieżąca cena zamknięcia okresu EMA (i - 1) poprzedniego okresu P procent wykorzystania wartości cenowej. Średnia średnia ruchoma (SMMA) Pierwsza wartość tej wygładzonej średniej ruchomej jest obliczana jako średnia ruchoma (SMA): SUM1 SUM (CLOSE (i), N) Druga średnia ruchoma jest obliczana według tego wzoru: SMMA (i) (SMMA1 (N-1) ZAMKNIĘCIE (i)) N Następujące średnie ruchome oblicza się według poniższego wzoru: PREVSUM SMMA (i - 1) N SMMA (i) (PREVSUM - SMMA (i - 1) ZAMKNIĘCIE (i)) N SUM sum SUM1 suma cen zamknięcia dla okresów N jest liczona z poprzedniego paska PREVSUM wygładzona suma poprzedniego paska SMMA (i-1) wygładzona średnia ruchoma poprzedniego paska SMMA (i) wygładzona średnia ruchoma prądu (z wyjątkiem pierwszego) ZAMKNIĘCIE (i) bieżąca cena zamknięcia N okres wygładzania. Po konwersjach arytmetycznych można uprościć wzór: SMMA (i) (SMMA (i-1) (N-1) ZAMKNIĘCIE (i)) N Średnia ważona średnia liniowa (LWMA) W przypadku ważonej średniej ruchomej, więcej niż wczesnych danych. Weighted moving average is calculated by multiplying each one of the closing prices within the considered series, by a certain weight coefficient: LWMA SUM (CLOSE (i) i, N) SUM (i, N) SUM sum CLOSE(i) current close price SUM (i, N) total sum of weight coefficients N smoothing period.

No comments:

Post a Comment