Strona główna  Edukacja  FOREX  Analiza  Rozmowy  Downloads  Moje konto
WYSZUKIWARKA  Analiza->Systemy transakcyjne->->Expert Advisor LOGOWANIE 
Google
Web TE
Analiza 
Wprowadzenie
Strategia inwestycji
Tworzenie systemów transakcyjnych
Język MQL II
Struktura języka
Funkcje wbudowane
Wskaźniki wbudowane
Funkcje i wskaźniki użytkownika
Expert Advisor
Advantage Systems
Opis
Rynek FOREX
Rynek giełdowy
Zamówienie

Tworzenie strategii i systemu transakcyjnego z wykorzystaniem Expert Advisor


Poniżej znajduje się przykład pokazujący jak utworzyć strategię w oparciu o wskaźnik MACD wraz z możliwością ustalenia poziomów Take Profit oraz Trailing Stop oraz maksymalnym zabezpieczeniu prowadzonych operacji. W poniższym przykładzie handel będzie polegał na otwarciu i monitorowaniu jednej pozycji.
Podstawa działania strategii:
Otwarcie długiej pozycji - wskaźnik MACD ma wartość poniżej 0, posuwa się w górę i jest przecięty przez spadającą linię sygnału.
Otwarcie krótkiej pozycji - wskaźnik MACD ma wartość większą od 0, posuwa się w dół i krzyżuje się ze wzrastającą linią sygnału.
Zamkniecie długiej pozycji - poprzez wykonanie T/P bądź S/L lub w sytuacji, gdy MACD ma wartość wiekszą od zera i kieruje się w dół przy jednoczesnym przecięciu z idacą w górę linią sygnału.
Zamknięcie krótkiej pozycji - wykonanie limitów T/P bądź S/L lub w sytuacji gdy MACD ma wartość niższą od zera i kieruje się w górę przy jednoczesnym przecięciu ze spadającą linią sygnału.

Ważna informacja: aby zignorować niewielkie zmiany wskaźnika MACD ("małe górki" na wykresie) na działanie strategii, wprowadzamy dodatkową miarę kontrolowania wielkości zaplanowanych "górek": wielkość wskaźnika powinna wynosić co najmniej równowartość 5 pipsów (przykładowo dla USD / CHF = 0.0005, a dla USD / JPY = 0.05).

Krok I: Opis Strategii

Po wybraniu folderu Strategie z okna Nawigator należy wybrać "Utwórz nową Strategię" (Create a new Expert). Następnie pojawi się Kreator Strategii (The Initializing Wisard of the Expert Advisor), żądając wpisania pewnych danych. W otwartym oknie należy wpisać nazwę strategii - MACD Sample, autora strategii, oraz w komentarzu - Test przykładowej strategii MACD.

Krok II: Tworzenie głównej struktury programu

Kod przykładowego programu będzie zawierał tylko kilka stron, ale korzystnie jest na początku zaprojektować strukturę programu co pozwoli łatwiej zobrazować nam poszczególne jego części i ułatwi użytkownikowi poruszanie się po programie.

Poniżej znajduje się przykład opisu struktury programu:

Sprawdzenie danych początkowych;
Sprawdzenie wykresu oraz ilości danych na wykresie;
Sprawdzenie wartości zmiennych zewnętrznych (S/L, T/P, T/S);
Przygotowanie szybkiego dostępu do zmiennych wewnętrznych;
Sprawdzenie terminala transakcyjnego;
Sprawdzenie dostępność środków na rachunku;
Sprawdzenie możliwość zawierania transakcji (otwarcie i zamknięcie pozycji);
Kontrola pozycji otwartych w poprzednim cyklu;
Czy pozycje długie powinny zostać zamknięte;
Czy T/S dla długich pozycji powinien zostać zresetowany;
Czy pozycje krótkie powinny zostać zamknięte;
Czy T/S dla krótkich pozycji powinien zostać zresetowany;

Dla tak opisanej struktury będziemy generować fragmenty kodu programu dla każdej wymienionej sekcji.

Sprawdzenie danych początkowych
Ta część kodu praktycznie znajduje się w każdym programie (z niewielkimi zmianami) i jest standardowym blokiem kontroli.
If Bars<200 Then Exit; // jeżeli wykres ma mniej niż 200 jednostek danych - zakończ
If TakeProfit<10 Then Exit; // jeżeli poziom T/P jest błędny - zakończ

Przygotowanie szybkiego dostępu do zmiennych wewnętrznych
W trakcie kodowania programu często okazuje się niezbędne, aby uzyskać dostęp do wartości wskaźnika albo obliczonych wcześniej wartości. Aby uprościć kodowanie i przyspieszyć dostęp do danych można na początku przypisać dane do zmiennych wewnętrznych.
MacdCurrent=iMACD(12,26,9,0,MODE_MAIN); // bieżąca wartość MACD
MacdPrevious=iMACD(12,26,9,1,MODE_MAIN); // poprzednia wartość MACD
SignalCurrent=iMACD(12,26,9,0,MODE_SIGNAL); // bieżąca wartość linii sygnału
SignalPrevious=iMACD(12,26,9,1,MODE_SIGNAL);// poprzednia wartość linii sygnału
MaCurrent=iMA(MATrendPeriod,MODE_EMA,0); // bieżąca wartość średniej kroczącej
MaPrevious=iMA(MATrendPeriod,MODE_EMA,1); // poprzednia wartość średniej kroczącej
Teraz, zamiast monstrualnej notacji iMACD(12,26,9,MODE_MAIN,0) możemy po prostu napisać MacdCurrent.
Wszystkie zmienne użyte przez Strategie muszą zostać wstępnie opisane, zgodnie ze standardem języka MQII. Dlatego wstawiamy opis tych zmiennych na początku programu:
var: MacdCurrent(0), MacdPrevious(0), SignalCurrent(0), SignalPrevious(0);
var: MaCurrent(0), MaPrevious(0);

Język MQII daje również możliwość zdefiniowania zmiennych użytkownika, które mogą zostać wprowadzone z zewnątrz bez ingerencji w kod źródłowy programu strategii. Ta cecha znacznie zwiększa elastyczność programu. Zmienna MATrendPeriod należy do zmiennych definiowanych przez użytkownika, tak więc zostaje zadeklarowana na początku programu:
defines: MATrendPeriod(56);

Sprawdzenie terminala transakcyjnego
Jeżeli terminal działa prawidłowo, wtedy należy sprawdzić, czy w terminalu nie ma wcześniej złożonych zleceń opóźnionych.
If TotalTrades < 1 then // nie zidentyfikowano żadnych zleceń
{
Sprawdzenia dostępnych środków na rachunku (w naszym przykładzie 1000):
If FreeMargin < 1000 then Exit; /* jeżeli wartość wolnych środków na rachunku mniejsza od 1000 - zakończ*/

Następnym krokiem zgodnie z planem jest wpisanie kodu który umożliwi zajęcie długiej pozycji zgodnie z wcześniej wysuniętymi warunkami, a więc: wartość MACD poniżej 0 i rośnie, przecięcie z opadającą linią sygnału:
If MacdCurrent < 0 and MacdCurrent > SignalCurrent and
MacdPrevious < SignalPrevious and // nastąpiło przebicie MACD linią sygnału
Abs(MacdCurrent) > (MACDOpenLevel*Point) and // znaczący wzrost MACD
MaCurrent > MaPrevious then // trend wzrostowy
{
SetOrder(OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,RED); // wykonanie zlecenia
Exit; // wyjście - od wykonania zlecenia następuje 10 -cio sekundowa przerwa
};

Powyżej wprowadziliśmy metodę monitorowania widocznych na wykresie "górek". Użyta zmienna MACDOpenLevel jest zmienną definiowaną przez użytkownika, która może zostać zmieniona bez ingerencji w tekst źródłowy programu, co zapewnia elastyczność. Podobnie jak w przypadku wcześniej użytych zmiennych wstawiamy jej opis na początku programu.
defines: MACDOpenLevel(3), MACDCloseLevel(2);

Kolejnym krokiem jest uwzględnienie w programie warunków otwarcia dla pozycji krótkiej, a więc: wartość MACD powyżej 0 i maleje, przecięcie z rosnącą linią sygnału:
If MacdCurrent > 0 and MacdCurrent < SignalCurrent and
MacdPrevious > SignalPrevious and MacdCurrent > (MACDOpenLevel*Point) and
MaCurrent < MaPrevious then
{
SetOrder(OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,RED); // wykonanie zlecenia
Exit; // wyjście
}
Exit; // nie otwarto nowych pozycji - wyjście
};

Kontrola pozycji otwartych w powyższym cyklu
for cnt=1 to TotalTrades
{
if OrderValue(cnt,VAL_TYPE)<=OP_SELL and // czy została otwarta pozycja
OrderValue(cnt,VAL_SYMBOL)=Symbol then // czy jest to pozycja z "naszego" wykresu
{

Cnt jest zmienną cyklu, która musi zostać opisana na początku programu co następuje:
var: Cnt(0);

Jeżeli otwarta pozycja jest pozycją długą:
If OrderValue(cnt,VAL_TYPE)=OP_BUY then // otwarta długa pozycja
{

Teraz wprowadzamy warunki, przy których pozycja długa powinna zostać zamknieta, czyli: MACD większe od 0 i spada, dodatkowo przecina wznoszącą się linię sygnału.

If MacdCurrent > 0 and MacdCurrent < SignalCurrent and
MacdPrevious > SignalPrevious and MacdCurrent > (MACDCloseLevel*Point) then
{
CloseOrder(OrderValue(cnt,VAL_TICKET),OrderValue(cnt,VAL_LOTS),Bid,3,Violet);
Exit; // zakończenie
};

Ustawiamy ruchomy S/L tylko w przypadku, gdy otwarta pozycja przynosi już zysk przewyższający poziom S/L wyrażony w punktach oraz gdy nowy poziom S/L jest korzystniejszy niż poprzedni.
If TrailingStop > 0 then // if trailing stops are used
{
If (Bid-OrderValue(cnt,VAL_OPENPRICE))>(Point*TrailingStop) then
{
If OrderValue(cnt,VAL_STOPLOSS)<(Bid-Point*TrailingStop) then
{
ModifyOrder(OrderValue(cnt,VAL_TICKET),OrderValue(cnt,VAL_OPENPRICE),
Bid-Point*TrailingStop,OrderValue(cnt,VAL_TAKEPROFIT),Red);
Exit;
};
};
};
}

W przypadku krótkiej pozycji mamy:
else // teraz jeżeli krótka pozycja
{

Tutaj musimy wstawić warunki dla zamknięcia krótkiej pozycji (MACD poniżej 0 i rośnie, skrzyżowanie z opadającą linią sygnału):
If MacdCurrent<0 and MacdCurrent>SignalCurrent and
MacdPrevious(MACDCloseLevel*Point) then
{
CloseOrder(OrderValue(cnt,VAL_TICKET),OrderValue(cnt,VAL_LOTS),Ask,3,Violet);
Exit; // wyjście
};

Podobnie jak dla długiej pozycyji określamy warunki dla limitu S/L.
If TrailingStop>0 then // the user has put a trailing stop in his settings
{ // so, we set out to check it
If (OrderValue(cnt,VAL_OPENPRICE)-Ask)>(Point*TrailingStop) then
{
If OrderValue(cnt,VAL_STOPLOSS)=0 or
OrderValue(cnt,VAL_STOPLOSS)>(Ask+Point*TrailingStop) then
{
ModifyOrder(OrderValue(cnt,VAL_TICKET),OrderValue(cnt,VAL_OPENPRICE),
Ask+Point*TrailingStop,OrderValue(cnt,VAL_TAKEPROFIT),Red);
Exit;
};
};
};

// koniec. Należy zamknąć nawiasy które pozostają otwarte.
};
};
};

Tym sposobem, krok po kroku zakończyliśmy kodowanie programu.

Krok III. Zebranie w całość fragmentów programu. W międzyczasie należy ustalić zewnętrzne parametry poprzez okno dialogowe w Ustawienia Strategii - menu Właściwości:

TU RYSUNEK

Kod programu jest do pobrania w zakładce downloads strategie.

Aby skompletować ustawienia dla naszej strategii musimy sprecyzować wartości dla zmiennych zewnętrznych: Lots = 1, S/L=0, T/P = 120 (rozsądny poziom dla godzinnych okresów), T/S = 30. Oczywiście w tym miejscu można wpisać także inne wartości. Następnie po wciśnięciu przycisku Weryfikuj (Verify) można zapisać program (przycisk Zapisz - Save), oczywiście pod warukiem, iż nie ma w nim żadnych błędów. W przypadku wystąpienia błędów otrzymamy komunikat.

Krok IV - Testowanie strategii na danych historycznych

Po napisaniu programu strategii można ocenić jej skuteczność w oparciu o dane historyczne. Dla przykładu wybierzemy 15 minutowy wykres EUR/USD (w przybliżeniu 4000 rekordów (bars)). Po otwarciu 15 - to minutowego wykresu EUR/USD należy załączyć opracowaną strategię (w naszym przypadku MACD sample), używając komendy Dołącz do wykresu (Attach to the chart)

Po załączeniu strategii należy dokonać zmiany ustawień zmiennych zewnetrznych (Lots, S/L, T/P, T/S) oraz zmiennych definiowanych przez użytkownika. Strategia może pełnić nie tylko funkcję doradczą ale również zostać załączona do naszego rzeczywistego konta w celu dokonywania transakcji na bazie odczytanych sygnałów. W tym celu należy aktywować funkcję Allow Live.

Aby przetestować strategię należy przejść do zakładki Tester Strategii oraz aktywować pole Arrows on chart, wciskając nstępnie przycisk Start.

login :
haslo :
KURSY WALUT
SONDA
Na jakich parach walut dokonujesz transakcji?

EURPLN
EURUSD
EURGBP
EURJPY
EURCHF
USDPLN
USDJPY
USDCHF
GBPUSD
INNE

forex

forex

forex

forex

forex
forex

analiza

analiza

analiza

analiza

analiza
analiza
Strona główna |  Mapa serwisu |  Wyłączenie odpowiedzialności |  Polityka prywatności |  Kontakt

Copyright © 2004 Trading Expert, All Rights Reserved.

Trading Expert - forex waluty kursy walut handel dolar euro analiza Forex dla kazdego! Zarabiaj pieniadze na rynku forex. Materialy edukacyjne, analizy, rekomendacje, oprogramowanie dla inwestorów. Analiza techniczna, analiza fundamentalna, efektywnosc rynku. analiza tradingexpert broker dolar euro forex handel inwestycje kursy walut notowania rynek rynku tradingexpert trader waluta waluty xtrade praca metastock