Prosta ruchoma średnia ea mq4


MetaTrader 4 - Experts Moving Average - ekspert dla MetaTrader 4 Ekspert w dziedzinie ruchomych średnich do tworzenia sygnałów handlowych wykorzystuje jedną średnią ruchomą. Otwieranie i zamykanie pozycji odbywa się, gdy średnia ruchoma jest zgodna z ceną ostatnio utworzonego taktu (wskaźnik słupkowy wynosi 1). Wielkość partii zostanie zoptymalizowana zgodnie ze specjalnym algorytmem. Doradca ekspertów analizuje zgodność średniej ruchomej i ceny rynkowej. Sprawdzanie odbywa się za pomocą funkcji CheckForOpen (). Jeśli średnia ruchoma spełnia poprzeczkę w taki sposób, że pierwsza jest wyższa niż cena otwarta, ale niższa niż cena zamknięcia, pozycja BUY zostanie otwarta. Jeżeli średnia ruchoma spełnia poprzeczkę w taki sposób, że ta pierwsza jest niższa niż cena otwarta, ale wyższa niż cena zamknięcia, pozycja SELL zostanie otwarta. Zarządzanie pieniędzmi wykorzystywane w ekspercie jest bardzo proste, ale skuteczne: kontrolę nad każdą pozycją zajmuje się w zależności od poprzednich wyników transakcji. Algorytm ten jest implementowany przez funkcję LotsOptimized (). Podstawowy rozmiar partii jest obliczany na podstawie maksymalnego dopuszczalnego ryzyka: parametr MaximumRisk wyświetla podstawowy procent ryzyka dla każdej transakcji. Zwykle ma on wartość od 0,01 (1) do 1 (100). Na przykład, jeśli wolny depozyt zabezpieczający (AccountFreeMargin) wynosi 20 500, a zasady zarządzania kapitałem nakazują stosowanie ryzyka 2, podstawowa wielkość partii wyniesie 20500 0,02 1000 0,41. Bardzo ważne jest, aby kontrolować dokładność wielkości partii i normalizować wynik z dopuszczalnymi wartościami. Zwykle partie frakcji o kroku 0,1 są dozwolone. Transakcja o objętości 0,41 nie zostanie wykonana. Aby znormalizować, funkcja NormalizeDouble () jest używana z dokładnością do 1 znaku po punkcie. Powoduje to podstawową partię 0,4. Podstawowa kalkulacja partii na podstawie marży dopuszczalnej pozwala na zwiększenie wolumenu operacji w zależności od sukcesu handlowego, tj. Na obrocie z reinwestowaniem. Jest to podstawowy mechanizm z obowiązkowym zarządzaniem kapitałem w celu zwiększenia efektywności handlowej. DecreaseFactor to zakres, w którym wielkość partii zostanie zmniejszona po nierentownym handlu. Normalne wartości to 2,3,4,5. Jeśli poprzednie transakcje były nieopłacalne, kolejne wolumeny zmniejszą się o współczynnik Zmniejsz współczynnik, aby przeczekać okres nieopłacalny. Jest to główny czynnik algorytmu zarządzania kapitałem. Pomysł jest bardzo prosty: jeśli handel wzrasta, ekspert pracuje z podstawową partią, która zapewnia maksimum zysku. Po pierwszej nieopłacalnej transakcji ekspert ograniczy prędkość do momentu dokonania nowej pozytywnej transakcji. Algorytm pozwala wyłączyć redukcję prędkości, w tym celu należy określić ZmniejszenieFlag. Kwota ostatnich kolejnych nierentownych transakcji jest obliczana w historii handlu. Podstawowa partia zostanie przeliczona na tej podstawie: dzięki temu algorytm pozwala skutecznie zmniejszyć ryzyko występujące w wyniku szeregu nierentownych transakcji. Wielkość partii jest obowiązkowo sprawdzana pod kątem minimalnej dopuszczalnej wielkości partii pod koniec funkcji, ponieważ wcześniejsze obliczenia mogą powodować partię 0: Ekspert jest przeznaczony głównie do pracy z dziennym okresem i w trybie testowym - za robienie tego w bardzo krótkich cenach. Będzie handlował tylko przy otwieraniu nowego paska, dlatego tryby modelowania każdego tyka nie są potrzebne. Wyniki testów są reprezentowane w raporcie. Zazwyczaj dwie średnie kroczące można wykorzystać do stworzenia strategii forex (EA dla MT4) z następującymi regułami: Kupuj, gdy średnia krocząca z krótkiego okresu jest powyżej średniej ruchomej z długiego okresu Sprzedaj, gdy długi okres jest w ruchu średnia jest powyżej średniej kroczącej z krótkiego okresu Na poniższym wykresie z MetaTrader Terminal żółtą linią jest średnia krocząca z krótkim okresem (Period9), a czerwona linia to średnia krocząca z długiego okresu (Period18). Analizując wykres, możemy przepisać reguły handlowe lub sygnały walutowe jako: Kup, gdy żółta linia jest powyżej czerwonej linii Sprzedaj, gdy żółta linia jest poniżej czerwonej linii Zamiast spędzać długi czas na kodowaniu tej strategii forex, z Molanis Strategy Builder możesz utworzyć wykres handlu, który przedstawia strategię średniej ruchomej w minutach. Po prostu przeciągnij i upuść dwa bloki analizy technicznej, jeden blok kupna i jeden blok sprzedaży. Połącz je i ustaw parametry bloku, aby uzyskać schemat podobny do poniższego: Ten diagram handlu ma dwie ścieżki handlowe. Lewy jest podświetlony. Przechodzi z bloku START do bloku END. Można go przeczytać jako: Kup 1 lot EURCAD (z zyskiem 100 pipsów i 50 pipsów), gdy średnia krocząca z krótkiego okresu (9) przekracza średnią ruchomą w długim okresie (18). Pamiętaj, aby zapoznać się z diagramem handlowym w odwrotnym kierunku do przepływu handlowego. Właściwą ścieżkę handlową można odczytać jako: Sprzedaj 1 lot w EURCAD (ze 100 pipsem Take Profit i 50 pip Stop Loss), gdy średnia długoterminowa w ruchu ruchomym (18) jest wyższa niż średnia krocząca z krótkiego okresu (9). Generowanie kodu MQL dla MetaTrader za pomocą jednego kliknięcia W menu Diagram handlu kliknij Wygeneruj kod MQL4, aby uzyskać okno Kod MQL4. Molanis Strategy Builder umożliwia otwieranie twojego eksperta bezpośrednio z MetaTrader lub zapisanie go jako pliku MQ4. Nie przegap naszego poradnika wideo na temat prostego Expert Advisor Problem 29. Stwórz handlowego Expert Advisor. Wstępne argumenty Przed rozpoczęciem programowania eksperta handlowego, konieczne jest zdefiniowanie ogólnych zasad przyszłego programu. Nie ma ścisłych zasad tworzenia programów. Jednak po utworzeniu programu, programista zwykle go ulepsza. Aby móc łatwo zrozumieć program w przyszłości, musi on zostać utworzony zgodnie z przemyślanym i łatwym do zrozumienia schematem (szczególnie ważne jest, aby program został ulepszony przez innego programistę). Najwygodniejszym programem jest ten, który składa się z bloków funkcjonalnych, z których każdy odpowiada za część obliczeń. Aby utworzyć algorytm handlowego Expert Advisor, przeanalizujmy, co powinien zrobić program operacyjny. Jednym z najważniejszych danych w tworzeniu zamówień handlowych jest informacja o zamówieniach, które już istnieją w terminalu klienta. Niektóre strategie transakcyjne dopuszczają tylko jedno zamówienie jednokierunkowe. Zasadniczo, jeśli pozwala na to strategia handlowa, kilka zamówień może być jednocześnie otwartych w terminalu, chociaż ich liczba powinna być rozsądnie ograniczona. Przy stosowaniu dowolnej strategii decyzje handlowe powinny być podejmowane z uwzględnieniem bieżącej sytuacji. Zanim zostanie podjęta decyzja handlowa w programie, należy wiedzieć, jakie zamówienia handlowe zostały już otwarte lub złożone. Przede wszystkim program musi zawierać blok księgowania zleceń, który jest jednym z pierwszych do wykonania. Podczas realizacji EA należy podejmować decyzje handlowe, których realizacja prowadzi do realizacji operacji handlowych. Część kodu odpowiedzialna za tworzenie zleceń handlowych jest lepiej napisana w osobnym bloku. Doradca ekspercki może utworzyć zlecenie handlowe, aby otworzyć nowe zlecenie oczekujące lub zlecenie rynkowe, zamknąć lub zmodyfikować jakiekolwiek istniejące zamówienia lub nie podejmować żadnych działań. EA musi również obliczyć ceny zamówień w zależności od potrzeb użytkowników. Decyzje handlowe powinny być podejmowane w programie opartym na kryteriach handlowych. Powodzenie całego programu zależy od poprawności wykrycia kryteriów handlowych w programie. Podczas obliczania kryteriów handlowych program może (i musi) brać pod uwagę wszystkie informacje, które mogą być użyteczne. Na przykład Expert Advisor może analizować kombinację wartości wskaźników technicznych, czasu ważnych informacji prasowych, aktualnego czasu, wartości niektórych poziomów cen itp. Dla wygody część programu odpowiedzialna za obliczanie kryteriów handlowych powinna być napisana w oddzielnym blok. Ekspert handlowy Expert musi koniecznie zawierać blok przetwarzania błędów. Analiza błędów, które mogą wystąpić w trakcie wykonywania operacji handlowych, pozwala z jednej strony powtórzyć zlecenie handlowe, az drugiej strony poinformować użytkownika o możliwej sytuacji konfliktu. Struktura prostego doradcy eksperta Poniżej znajduje się schemat strukturalny prostego Expert Advisor skonstruowanego na podstawie kilku bloków funkcjonalnych, w każdym bloku pewna oddzielona część obliczeń. Na następującym etapie rozwoju EA nie ma jeszcze kodu programu. Jednocześnie algorytm programu jest w znacznym stopniu uformowany. Sposób, w jaki EA opiera się na podstawach oferowanego schematu, może być łatwo zrozumiany, po prostu patrząc na schemat i orientując się na nazwy bloków i tablice zależności (przejścia kontroli) między nimi. Po uruchomieniu programu kontrola przechodzi do bloku wstępnego przetwarzania. W tym bloku można analizować niektóre parametry ogólne. Na przykład, jeśli w oknie nie ma wystarczającej liczby pasków (paski niezbędne do obliczenia parametrów wskaźników technicznych), EA nie będzie w stanie działać poprawnie. W takim przypadku EA musi zakończyć działanie, uprzednio informując o tym użytkownika i informując o przyczynie zakończenia. Jeśli nie ma przeciwwskazań o charakterze ogólnym, kontrola jest przekazywana do bloku księgowania zleceń. W bloku zleceń księgowych wykrywana jest liczba i jakość zamówień istniejących w terminalu klienta dla zabezpieczenia (do którego okna jest dołączony EA). W tym bloku należy eliminować zamówienia innych papierów wartościowych. Jeśli zaprogramowana strategia handlowa wymaga użycia wyłącznie zleceń rynkowych (i nie używa zamówień oczekujących), należy wykryć fakt obecności oczekujących zleceń. Jeśli strategia dopuszcza tylko jedno zlecenie rynkowe i faktycznie istnieje kilka zleceń, fakt ten również powinien być znany. Zadaniem bloku księgowania zleceń (w tym schemacie) jest ustalenie, czy bieżąca sytuacja handlowa odpowiada oczekiwanej, czyli takiej, w której EA może właściwie działać. Jeśli sytuacja się zgadza, kontrola musi zostać przekazana do następnego bloku, aby kontynuować operację EA, jeśli nie, operacja EA musi zostać zakończona, a fakt ten musi zostać zgłoszony użytkownikowi. Jeśli w terminalu nie ma zamówień, a liczba i jakość istniejących zamówień jest zgodna z oczekiwaniami, kontrola przechodzi do bloku definiującego kryteria handlowe. W tym bloku obliczane są wszystkie kryteria niezbędne do podejmowania decyzji handlowych, a mianowicie kryteria otwierania, zamykania i modyfikowania zamówień. Dalsza kontrola jest przekazywana do bloku zleceń zamknięcia. Łatwo zrozumieć, dlaczego w oferowanym schemacie blok zamówień zamknięcia jest wykonywany wcześniej niż blok zleceń otwarcia. Zawsze rozsądniej jest przetwarzać pierwsze istniejące zamówienia (zamykać lub modyfikować), a dopiero potem otwierać nowe zamówienia. Ogólnie rzecz biorąc, należy kierować się pragnieniem posiadania jak najmniejszych zamówień. Podczas wykonywania tego bloku wszystkie zlecenia, dla których zostało aktywowane kryterium zamknięcia, muszą zostać zamknięte. Po zamknięciu wszystkich niezbędnych zamówień kontrola jest przekazywana do bloku obliczania wielkości nowego zamówienia. Istnieje wiele algorytmów do obliczania wielkości zamówienia. Najprostszym z nich jest użycie stałej, stałej wielkości partii. Wygodnie jest użyć tego algorytmu w programie do testowania strategii. Bardziej popularną metodą definiowania wielkości zamówienia jest ustalanie liczby części w zależności od kwoty wolnego marginesu, na przykład 30-40. Jeśli wolny margines nie wystarcza, program kończy działanie, informując użytkownika o przyczynie. Po określeniu liczby lotów do otwarcia nowych zamówień sterowanie przechodzi na blok otwierający zamówienie. Jeżeli którekolwiek z obliczonych wcześniej kryteriów wskazuje na konieczność otwarcia zlecenia określonego rodzaju, w tym bloku tworzy się zlecenie handlowe dotyczące otwarcia zlecenia. Istnieje również blok analizy błędów w Expert Advisor. Jeśli jakakolwiek transakcja nie powiodła się, kontrola (tylko w tym przypadku) jest przekazywana do bloku przetwarzania błędów. Jeśli błąd zwracany przez serwer lub terminal klienta nie jest istotny, podejmowana jest jeszcze jedna operacja handlowania. W przypadku zwrócenia krytycznego błędu (na przykład konto jest zablokowane), EA musi zakończyć swoją działalność. Pamiętaj, że w MQL4 nie ma możliwości zakończenia programu operacji EA w oknie zabezpieczeń (w odróżnieniu od skryptów, zobacz Funkcje specjalne). Co można zrobić w sposób programowy to zakończenie start (). Przy nowym uruchomieniu funkcji start () na nowym ticku można zanalizować wartość pewnej flagi zmiennej zabraniającej handlowania (w tym przypadku aktywowanej w wyniku błędu krytycznego) i można ją kontrolować w celu zakończenia operacja specjalnej funkcji w ten sposób tworzenie nowych zleceń handlowych jest niedozwolone. W oferowanym schemacie wartość flagi jest analizowana w bloku wstępnego przetwarzania. Strategia handlowa Ceny rynkowe nieustannie się zmieniają. Stan rynku w dowolnym momencie można warunkowo scharakteryzować jako trend - silną jednokierunkową zmianę ceny (wzrost lub spadek) lub jako płaski - boczny ruch cenowy ze słabymi odchyleniami od określonej średniej. Te cechy rynkowe są warunkowe, ponieważ nie ma jasnych kryteriów, według których można zidentyfikować trend lub płaskość. Na przykład długie ruchy boczne z silnymi odchyleniami, których nie można przypisać ani płaskiem, ani trendem. Ogólnie przyjmuje się, że rynek jest głównie w stanie ruchu bocznego, a trendy zwykle mają miejsce 15-20 czasu. Wszystkie strategie handlowe można również podzielić na dwie główne grupy. Pierwsza grupa zawiera strategie ukierunkowane na płeć. Główną ideą takich strategii jest to, że po ewidentnym odchyleniu cena musi wrócić do poprzedniej pozycji, dlatego też zamówienia są otwierane w kierunku przeciwnym do ostatniego ruchu cenowego. Druga strategia grupowa to strategie trendów, kiedy zlecenia są otwierane w tym samym kierunku, co ruch cen soli. Są bardziej skomplikowane (połączone) strategie. Takie strategie uwzględniają wiele różnych czynników, które charakteryzują rynek, w wyniku czego handel może być realizowany zarówno na poziomie płaskim, jak i trendowym. Nie jest trudno realizować transakcje zgodnie z tą strategią - technicznie MQL4 zawiera wszystkie niezbędne środki. Główna praca przy tworzeniu własnej strategii polega na wyszukiwaniu kryteriów handlowych. Kryteria handlowe W tym przykładzie spróbujemy skonstruować trend Expert Advisor, tj. Ten, który otworzy zlecenia w kierunku zmiany ceny. Musimy znaleźć wśród różnych wskaźników technicznych te, które wykrywają początek trendu. Jedna z najprostszych metod wyszukiwania kryteriów handlowych opiera się na analizie połączenia MA z różnymi okresami uśredniania. Rys. 111 i Rys. 112 pokazują położenie dwóch różnych MA (z okresami uśredniania 11 i 31) na różnych częściach rynku. Średnie z małym okresem uśredniania (czerwone linie) są bliższe wykresowi cen, krętym i ruchomym. Średnie ruchome z większym okresem uśredniania (niebieska linia) są bardziej bezwładne, mają większe opóźnienie i znajdują się dalej od cen rynkowych. Zwróćmy uwagę na miejsca, gdzie krzyżują się IZ o różnych okresach uśredniania i starają się zdecydować, czy fakt przekroczenia MA może być stosowany jako kryterium czytania. Rys. 111. Przekroczenie MA (11) i MA (31), gdy zmienia się kierunek zmiany ceny. Na Rys. 111 widzimy część rynkową, na której uzasadnione jest otwieranie zleceń w kierunku ruchu cen na przejściu MA. W punkcie A czerwona linia przecina niebieski od dołu do góry, po czym cena rynkowa nadal rośnie przez jakiś czas. Dalsze odwrotne przejście MA wskazuje zmianę kierunku ruchu ceny. Jeśli otworzymy zamówienie Buy w punkcie A i zamkniemy je w B, otrzymamy zysk proporcjonalny do różnicy cen A i B. Rys. 112. Przekroczenie MA (11) i MA (31), gdy zmienia się kierunek zmiany ceny. Jednocześnie są inne momenty na rynku, gdy MA przechodzi, ale to nie prowadzi do dalszego znacznego wzrostu lub spadku cen (Rys. 112). Zamówienia otwierane w momencie przekroczenia MA powodują straty. Jeśli Sell zostanie otwarty w A i zamknięty w B, taki obrót przyniesie straty. To samo można powiedzieć o zleceniu Buy otwieranym w B i zamkniętym w C. Sukces całej strategii realizowanej na podstawie przejścia MA zależy od liczby części, które można scharakteryzować jako trend i płaski. W mieszkaniu często przejście MA jest regularnym wydarzeniem, które koliduje z jakąkolwiek strategią trendu. Liczne fałszywe sygnały z reguły prowadzą do strat. Dlatego ten znak - przejście MA z różnym okresem uśredniania - może być wykorzystany do budowania strategii handlowych tylko w połączeniu z innymi oznakami świadczącymi o tendencji. W tym przykładzie (do skonstruowania prostego Expert Advisor) będziemy musieli odmówić użycia tego znaku. Użyjemy innego znaku. Analizując wizualnie charakter zmian cen na rynku, widzimy, że długi jednokierunkowy wzrost lub spadek cen często pojawia się w wyniku krótkiego silnego ruchu. Innymi słowy, jeśli w krótkim okresie nastąpiłby silny ruch, możemy oczekiwać jego kontynuacji w średnim okresie. Rys. 113 pokazuje okres rynkowy, kiedy silny ruch spowodował kontynuację zmiany cen w tym samym kierunku. Jako silny ruch kwotowy możemy wykorzystać różnicę MA z różnymi okresami uśredniania. Im silniejszy ruch, tym większe opóźnienie MA z większym okresem uśredniania od MA z niewielkim okresem uśredniania. Co więcej, nawet silne nieciągłe ruchy cen z dalszym powrotem nie powodują dużej różnicy między MA, to jest nie pojawiają się liczne fałszywe sygnały. Na przykład skok cenowy o 50 punktów z dalszym powrotem (w centrum na ryc. 113) spowodował wzrost różnicy między MA tylko o 20 punktów. Jednocześnie bardzo silny ruch (który zwykle nie towarzyszy znacznej korekcie) w punkcie A spowodował wzrost różnicy do 25 - 30 punktów. Jeśli zlecenie kupna zostanie otwarte po osiągnięciu pewnej wartości różnicy między wartościami MA, na przykład w A, najprawdopodobniej zamówienie będzie opłacalne, gdy cena osiągnie ustaloną wartość zlecenia stop. Użyjmy tej wartości jako kryterium handlowego w naszym Expert Advisor. Liczba zamówień W tym przykładzie analizujemy doradcę eksperta, który przyznaje, że istnieje tylko jedno zamówienie rynkowe, zamówienia oczekujące nie są dostarczane. Takie podejście jest uzasadnione nie tylko w tym konkretnym przykładzie, ale może być wykorzystane jako podstawa każdej strategii. Zamówienia oczekujące są zwykle używane, gdy deweloper ma dość wiarygodne kryterium przewidywania przyszłej zmiany ceny z wysokim prawdopodobieństwem. Jeśli nie ma takiego kryterium, nie ma potrzeby korzystania z oczekujących zamówień. Sytuacja, w której kilka przeciwnych zamówień na jedno zabezpieczenie jest również otwartych, nie może być uznana za rozsądną. Napisano wcześniej, że z ekonomicznego punktu widzenia przeciwne zamówienia są uważane za pozbawione sensu, zwłaszcza jeśli ceny zamówień są równe (zobacz Zamykanie i usuwanie zamówień). W takim przypadku powinniśmy zamknąć jedno zamówienie przez drugie i czekać na sygnał, aby otworzyć jedno zlecenie rynkowe w określonym kierunku. Relacja kryteriów handlowych Z tego miejsca staje się jasne, jakie są możliwe relacje między kryteriami handlowymi. Rys. 114 pokazuje trzy warianty korelacji kryteriów handlowych, gdy każde kryterium jest ważne (ważne). Akcje (otwierania i zamykania zleceń rynkowych) odbywają się zgodnie z ruchem wskazówek zegara na następujących zdjęciach. Rys. 114. Korelacja między kryteriami otwierania i zamykania zamówień (a i b - poprawne, c - niepoprawne). Najpopularniejszym wariantem prawidłowo uformowanych kryteriów handlowych jest wariant a. Po otwarciu zlecenia rynkowego Kup trwa do momentu, w którym kryterium wymagające jego zamknięcia się uruchamia. Potem następuje przerwa, gdy nie są otwierane żadne zamówienia. Dalej zlecenie rynkowe Sell może zostać otwarte. Warunki zamknięcia zlecenia Sell (zgodnie z poprawnie sformułowanymi kryteriami) występują wcześniej niż warunki otwarcia zlecenia Buy. Jednak zamówienie Buy można ponownie otworzyć, jeśli wymaga tego kryterium handlowe. Ale zgodnie z tym wariantem zlecenie rynkowe nie może zostać otwarte, jeżeli istnieje zlecenie otwarte w przeciwnym kierunku. Podobne korelacje kryteriów występują w wariancie b. Różnica polega na tym, że kryterium otwarcia jakiegokolwiek zlecenia rynkowego jest jednocześnie kryterium zamknięcia przeciwnej kolejności. Ten wariant podobny do wariantu a nie pozwala na jednoczesne otwarcie kilku zamówień w terminalu na jednym zabezpieczeniu. Wariant korelacji kryteriów jest nieprawidłowy. Zgodnie z tym wariantem otwarcie zlecenia rynkowego jest dopuszczalne, gdy zamówienia przeciwne nie są jeszcze zamknięte, co jest bezsensowne. Mogą występować rzadkie przypadki, gdy ten wariant jest częściowo uzasadniony. Otwarcie odwrotnej kolejności jest czasami dopuszczalne dla kompensacji strat występujących przy małych korektach po silnych ruchach cen. W takich przypadkach odwrotna kolejność może zostać otwarta o tej samej lub mniejszej wartości niż już istniejąca, a następnie zamknięta po zakończeniu korekty. Taka taktyka pozwala nie ingerować w porządek kwerendy otwartej w kierunku trendu. W ogólnym przypadku możliwe są również zamówienia w jednym kierunku. Może to być uzasadnione, gdy wcześniej otwarte zlecenie jest chronione zleceniem Stop, a kryterium wskazujące na rozwój cen w tym samym kierunku zostaje ponownie uruchomione. Jednak przy tworzeniu takiej strategii deweloper musi być w pełni świadomy, że w przypadku ostrej zmiany ceny, złożone zlecenia stop mogą być niewykonane przez niektórych brokerów przy pierwszym kontakcie cenowym. Strata będzie proporcjonalna do całkowitej wartości jednokierunkowych zleceń rynkowych. W naszym przykładzie używamy wariantu b korelacji kryteriów handlowych. Wszystkie otwarte zlecenia rynkowe są zamykane przez zlecenie stop lub po spełnieniu kryterium otwarcia zlecenia w przeciwnym kierunku (tutaj kryterium zamknięcia Kup pokrywa się z otwarciem Sell i vice versa). Rozmiar otwartych zamówień W dowolnej kolejności zamówień na strategię handlu należy rozsądnie ograniczyć rozmiary. W prostym przypadku w Expert Advisor stosowany jest stały rozmiar zamówienia. Przed rozpoczęciem operacji EA użytkownik może ustawić dowolny rozmiar przyszłych zamówień i pozostawić go bez zmian przez jakiś czas. Dalej, jeśli zmienia się równowaga, użytkownik może ustawić nową wartość numerów partii otwartych zamówień. Zbyt mała wielkość zamówienia zapewnia większe zaufanie do działania przy nieprzewidywalnych zmianach na rynku, ale zysk w przypadku sukcesu nie będzie tak duży. Jeśli wielkość zamówienia jest zbyt duża, można uzyskać duży zysk, ale taki EA będzie zbyt ryzykowny. Zwykle ustawia się wielkość otwartych zamówień, więc wymagania dotyczące depozytu zabezpieczającego nie przekraczają 2-35 procent salda lub marży (jeżeli strategia dopuszcza tylko jedno otwarte zlecenie, saldo i marżę w momencie poprzedzającym otwarcie zamówienia; równy). W tym przykładzie zaimplementowano oba warianty. Użytkownik może wybrać bezpośrednie wartości zamówień lub ustawić wartość procentową z wolnego marginesu. Szczegóły programowania Prosty trend Expert Advisor tradingexpert. mq4 skonstruowany na podstawie poprzednich argumentów może wyglądać tak: Opisywanie zmiennych Kolejnym kryterium oceny programu jest jego czytelność. Program jest uważany za poprawnie napisany, jeśli może być łatwo odczytany przez innych programistów, dlatego wszystkie główne części programu i główne momenty charakteryzujące strategię muszą zostać skomentowane. Z tego powodu zaleca się deklarowanie i komentowanie wszystkich zmiennych na początku programu. W bloku 1-2 opisane są zmienne zewnętrzne i globalne. Zgodnie z regułami zmienne zewnętrzne i globalne muszą być otwarte przed pierwszym użyciem (patrz Typy zmiennych), dlatego deklarowane są w części głównej programu. Wszystkie zmienne lokalne funkcji start () są gromadzone i opisane w górnej części funkcji (blok 2-3) bezpośrednio po nagłówku funkcji. Zasady deklarowania zmiennych lokalnych nie wymagają tego, ale również nie zabraniają. Jeśli programista ma trudności ze zrozumieniem znaczenia zmiennej podczas czytania programu, może odnieść się do górnej części programu i dowiedzieć się znaczenia i typu dowolnej zmiennej. Jest to bardzo wygodne w praktyce programistycznej. Blok wstępnego przetwarzania W tym przykładzie wstępne przetwarzanie składa się z dwóch części (blok 3-4). Program kończy działanie, jeśli w oknie zabezpieczeń nie ma wystarczającej liczby pasków, w takim przypadku niemożliwe jest prawidłowe wykrycie (w bloku 5-6) wartości średnich ruchomych niezbędnych do obliczenia kryteriów. Poza tym analizowana jest wartość zmiennej Praca. W normalnej operacji EA wartość zmiennej jest zawsze prawdziwa (jest ustawiana raz podczas inicjalizacji). Jeśli wystąpi błąd krytyczny w działaniu programu, wartość false jest przypisana do tej zmiennej, a funkcja start () kończy działanie. Ta wartość nie zmieni się w przyszłości, dlatego poniższy kod nie zostanie wykonany. W takim przypadku należy zatrzymać działanie programu i wykryć przyczynę błędu krytycznego (w razie potrzeby należy skontaktować się z centrum dealerskim). Po rozwiązaniu sytuacji program można ponownie uruchomić, tj. EA można dołączyć do okna bezpieczeństwa. Zlecenia księgowe Opisany Expert Advisor umożliwia pracę tylko z jednym zleceniem rynkowym. Zadaniem bloku rozliczania zleceń (blok 4-5) jest zdefiniowanie cech otwartego zlecenia, jeżeli takie istnieje. W pętli sprawdzane są zamówienia na wszystkie istniejące rynki i zlecenia oczekujące, a mianowicie od pierwszego (int i1) do ostatniego (iampltOrdersTotal ()). W każdej iteracji cyklu kolejna kolejność jest wybierana za pomocą funkcji OrderSelect (). Wybór dokonywany jest ze źródła otwartych i oczekujących zamówień (SELECTBYPOS). Jeśli wybór zostanie wykonany pomyślnie (tj. W terminalu jest jeszcze jedno zamówienie), należy przeanalizować kolejność tego zamówienia i sytuację: czy zamówienie zostało otwarte dla zabezpieczenia, na którym działa EA, czy zamówienie jest rynkowe czy oczekujące należy również wziąć to pod uwagę przy liczeniu zamówień. W wierszu: wszystkie zamówienia otwarte na inne zabezpieczenia są eliminowane. Operator kontynuuje zatrzymuje iterację, a charakterystyka takiego zamówienia nie jest przetwarzana. Ale jeśli zamówienie zostanie otwarte dla zabezpieczenia, do okna, do którego dołączona jest EA, jest ono dalej analizowane. Jeśli funkcja OrderType () zwróci wartość większą niż 1 (patrz Typy transakcji), wybrana kolejność jest oczekująca. Ale w tym Expert Advisor zarządzanie zleceniami oczekującymi nie jest zapewniane. Oznacza to, że wykonanie polecenia start () musi zostać zakończone, ponieważ wystąpił konflikt. W takim przypadku po odebraniu komunikatu o rozpoczęciu działania start () zostaje zatrzymany przez operatora. Jeżeli ostatnia kontrola wykazała, że ​​analizowane zamówienie jest zleceniem rynkowym, oblicza się i analizuje całkowitą liczbę zamówień na zabezpieczenie. Dla pierwszego z takich zamówień są określone wszystkie niezbędne cechy. Jeśli w kolejnej iteracji licznik zleceń (zmienna Total) znajdzie drugie zlecenie rynkowe, sytuację uznaje się również za konflikt, ponieważ EA nie może zarządzać więcej niż jednym zleceniem rynkowym. W takim przypadku wykonanie start () jest zatrzymywane po wyświetleniu odpowiedniego komunikatu. W wyniku wykonania bloku księgowania zleceń (jeśli wszystkie kontrole zakończyły się powodzeniem) zmienna Total zachowuje swoją wartość zerową, jeśli nie ma zleceń rynkowych, lub otrzymuje wartość 1, jeśli istnieje zlecenie rynkowe dla naszego papieru wartościowego. W tym ostatnim przypadku niektóre zmienne ustawione zgodnie z charakterystyką zamówienia (liczba, rodzaj, cena otwarcia, poziomy zatrzymania i wartość zamówienia) również otrzymują swoje wartości. Obliczanie kryteriów handlu W analizowanym przykładzie definicja kryteriów handlowych (blok 5-6) jest obliczana na podstawie różnicy między ruchomymi średnimi z różnymi okresami uśredniania. Zgodnie z przyjętymi kryteriami wykres jest kierowany przez byk, jeśli aktualna wartość MA z mniejszym okresem jest większa niż wartość MA z dłuższym okresem, a różnica między wartościami jest większa niż pewna wartość. W ruchu MA niedźwiedzia z mniejszym okresem jest niższy niż MA z dłuższym okresem, a różnica jest również większa niż pewna wartość krytyczna. Na początku bloku wartości MA z okresami uśredniania obliczane są okresy MA1 i PeriodMA2. Fakt znaczenia dowolnego kryterium handlowego wyrażany jest przez wartość odpowiedniej zmiennej. Zmienne OpnB i OpnS oznaczają kryterium wyzwalające otwieranie zleceń Buy and Sell, zmiennych Cls i ClsS - dla zamknięcia. Na przykład, jeśli kryterium otwarcia Buy nie zostało uruchomione, wartość OpnB pozostaje fałszywa (ustawiona przy inicjalizacji zmiennej), jeśli została uruchomiona, OpnB otrzymuje wartość true. W tym przypadku kryterium zamknięcia Sell pokrywa się z kryterium otwarcia Buy, kryterium otwarcia Sell pokrywa się z tym dla zamknięcia Buy. Kryteria transakcji przyjęte w tym przykładzie są wykorzystywane wyłącznie w celach edukacyjnych i nie mogą być traktowane jako wskazówka przy handlu na rachunku rzeczywistym. Zlecenia zamknięcia Wcześniej napisano, że ten Expert Advisor jest przeznaczony do działania tylko z jednym zleceniem rynkowym otwartym dla zabezpieczenia, do którego dołączone jest okno EA. Do chwili, gdy kontrola w programie jest przekazywana do bloku zamawiania zamówień, wiadomo na pewno, że w danej chwili nie ma żadnych zamówień na bezpieczeństwo, lub jest tylko jedno zlecenie rynkowe. Właśnie dlatego kod w bloku zamykającym zlecenia jest tak napisany, że tylko jedno zamówienie może zostać zamknięte z powodzeniem. Ten blok jest oparty na nieskończonej pętli, a jego ciało składa się z dwóch analogicznych części: jednej zamykającej zamówienie Buy, drugiej zamykającej zamówienie Sell. Chociaż jest tu stosowany w celu, że w przypadku niepowodzenia operacji handlowej, można go powtórzyć jeszcze raz. W nagłówku pierwszego operatora, jeśli obliczany jest warunek zamknięcia zlecenia kupna (zlecenia sprzedaży są zamykane w analogiczny sposób). Jeśli typ wcześniejszego zamówienia odpowiada Kup (patrz Typy transakcji) i znak zamknięcia Kupno jest istotny, kontrola jest przekazywana do organu operatora, w przypadku gdy formułowane jest żądanie zamknięcia. Jako cena zamknięcia zlecenia w funkcji OrderClose () wyświetlana jest wartość dwustronnej oferty odpowiadającej rodzajowi zlecenia (patrz Wymagania i ograniczenia w dokonywaniu transakcji). Jeśli operacja handlowa zostanie wykonana pomyślnie, po wyświetleniu komunikatu o zamknięciu zlecenia zostanie wyświetlony bieżący komunikat, gdy iteracja zostanie zatrzymana, a wykonanie bloku zamykającego zamówienie zostanie zakończone. Ale jeśli operacja się nie powiedzie, zostanie wywołana funkcja zdefiniowana przez użytkownika dla przetwarzania błędów FunError () (blok 10-11). Błędy przetwarzania Jako przekazany parametr w funkcji FunError () używany jest ostatni kod błędu obliczony przez GetLastError (). W zależności od kodu błędu funkcja FunError () zwraca 1, jeśli błąd nie jest krytyczny, a operacja może zostać powtórzona, a 0, jeśli błąd jest krytyczny. Błędy krytyczne dzielą się na dwa typy - te, po których można kontynuować wykonywanie programu (na przykład wspólny błąd) oraz te, po których należy wstrzymać wykonywanie wszelkich operacji handlowych (na przykład zablokowane konto). jeśli po nieudanej operacji handlu funkcja zdefiniowana przez użytkownika zwróci 1, prąd podczas iteracji zostanie zakończony i podczas następnej iteracji zostanie podjęta kolejna próba wykonania operacji - w celu zamknięcia zamówienia. Jeśli funkcja zwróci 0, bieżące uruchamianie () zostanie zatrzymane. Na następnym haczyku start () zostanie ponownie uruchomiony przez terminal klienta i jeśli warunki zamknięcia celu zostaną zachowane, zostanie podjęta kolejna próba zamknięcia zamówienia. Jeśli podczas przetwarzania błędów okaże się, że dalsze wykonywanie programu jest bezsensowne (na przykład program działa na starej wersji terminala klienta) podczas następnego uruchomienia, wykonywanie funkcji specjalnej start () zostanie zakończone w bloku przetwarzania wstępnego, gdy analizowanie wartości zmiennej Praca. Obliczanie ilości towarów dla nowych zamówień Ilość partii można obliczyć zgodnie z ustawieniami użytkowników według jednego z dwóch wariantów. Pierwszy wariant to pewna stała wartość ustawiona przez użytkownika. Zgodnie z drugim wariantem ilość partii jest obliczana na podstawie sumy równej pewnej wartości procentowej (ustalonej przez użytkownika) wolnej marży. Na początku bloku definiowania ilości partii dla nowych zamówień (blok 7-8) obliczane są niezbędne wartości niektórych zmiennych - minimalna dopuszczalna ilość partii i krok zmiany partii ustalony przez brokera, wolny margines i cena jedna partia za bezpieczeństwo. W tym przykładzie podano poniżej. If a user has set up a certain non-zero value of the external variable Lts, for example 0.5, it is accepted as the amount of lots Lts when a trade request to open an order is formed. If 0 is assigned to Lts, the number of lots Lts is defined on the basis of the variable Prots (percentage), free margin and conditions set up by a broker. After Lts is calculated, a check is conducted. If this value is lower than the minimal allowed value, the minimal allowed value is accepted. but if free margin is not enough, after a corresponding message the start() execution is terminated. Opening Orders The block of opening orders (block 8-9) like the bloke of opening orders is an infinite loop while. In the header of the first operator if conditions for opening a Buy order are calculated: if there are no orders for the security (variable Total is equal to 0) and the sign for opening a Buy order is relevant (OpnB is true ), control is passed to if operator body for opening an order. In such a case after rates are refreshed prices for stop levels are calculated. Values of stop levels are initially set by a user in external variables StopLoss and TakeProfit. In a general case a user can set values for this parameters smaller that a broker allows. Besides a broker may change the minimal allowed distance at any moment (it is an often case at strong market movements, for example, before important news release). Thats why before each order opening stop levels must be calculate taking into account values set bu a user and the minimal allowed value set up by a broker. For calculating stop levels the user-defined function NewStop() is used as a passed parameter the stop level value set by a user is used. In NewStop() first the current minimal allowed distance is calculated. If the value set by a user corresponds to a brokers requirements, this value is returned. If it is smaller than the allowed value, the value allowed by a broker is used. Prices of stop requests are calculated from the corresponding two-sided quote (see Requirements and Limitations in Making Trades ). A trade request to open an order is formed using the function OrderSend(). For the calculation of order opening price and prices of stop requests the two-sided quote values corresponding to the order type are used. If a trade operation was successful (i. e. a server returned the number of an opened order) after a message about a successful order opening is shown. start() execution is finished. If an order was not opened and the client terminal returned an error, the error is processed according to the algorithm described earlier. Some Code Peculiarities The analyzed Expert Advisor code is oriented to the implementation of a certain strategy. Note, some program lines contain variables and calculations that would be changed, if the strategy were changed. For example, according to the accepted strategy the Expert Advisor is developed to work only with one order. This allowed to use the variable Ticket both for the identification of a closing order number (in block of closing 6-7) and for the identification of a success of a trade operation execution when opening an order (in the block of opening 8-9). In this case such a solution is acceptable. However, if we take the analyzed code as the basis for the implementation of another strategy (for example allow opposite orders) we will have to introduce one or several variables to be able to recognize numbers of opened orders and identify the success of trade operations. In further strategy modifications we will have to change come program lines containing part of logics contained in the source strategy. Namely in the order accounting block we will not have to terminate the program operation if there are several open orders for a security. Besides, conditions for opening and closing orders will alslo change. This will entail the code changing in blocks of opening and closing orders. On the basis of this analysis we can easily conclude that the described simple Expert Advisor is not perfect. In a general case, for the implementation of order accounting one should use a universal function based on using data arrays and not containing logics of a certain strategy. The same can be said about the blocks of opening and closing orders. A more complete program must contain a main analytical function, all other user-defined functions must be subordinate to it. This analytical function must contain a program code, in which all conditions for the implementation of any strategy are analyzed all subordinate functions must perform limited actions. The function of accounting orders must only account orders, functions of opening and closing orders must only open and close orders, and the analytical function must quotthinkquot and manage all other functions, i. e. call them when needed. EA Moving Average And if you use the colors to make the EA Ex: when the blue line crossing over the red line, close buy open sell. When the blue line crossing below the red line, close sell open buy . If it works. Please, send me a copy. rodrigokaus: We wanna EA with the determined parameters: 1 - TO DEVELOP EA OPENS The ORDERS CORRECTLY Thus The MAIN DIRECTION IS IDENTIFIED WHEN The SHORT MOVING AVERAGE CROSSES WITH the LONG One In The HOURLY DETERMINED ONES. 2 - LOTS, TRAILLING STOP, STOP LOSS And TAKE PROFIT FUNCTIONING CORRECTLY 3 - CLOSED EA FOR DETERMINED PAIR AND SCHEDULE (WITH POSSIBILITY OF ALTERATION FOR CHANGE) Already, I tested some versions of EAs of crossing of moving averages, including EMA, EMACROSS, LSMA, etc, but none of them opens the positions correctly when the short average crosses the long average. I send the chart to see the correct momento to the exatly moment of EA OPEN and CLOSE the positions. Couse anybody help me, I thank this

Comments