SKRYPT SZKOLENIOWYpjuszczuk.pl/wp-content/uploads/2015/03/Skrypt.pdfSKRYPT SZKOLENIOWY . 2 Spis...
Transcript of SKRYPT SZKOLENIOWYpjuszczuk.pl/wp-content/uploads/2015/03/Skrypt.pdfSKRYPT SZKOLENIOWY . 2 Spis...
SKRYPT SZKOLENIOWY
2
Spis treści 1.PLATFORMA METATRADER4 ...................................................................... 5
1.1 NAJWAŻNIEJSZE CECHY PLATFORMY METATRADER 4 ....................... 5
1.6 OTWIERANIE POZYCJI ....................................................................... 17
1.7 ZLECENIA PO BIEŻĄCEJ CENIE RYNKOWEJ ........................................ 18
1.9 MODYFIKOWANIE POZYCJI ............................................................... 18
1.10 MODYFIKOWANIE I USUWANIE ZLECEO OCZEKUJĄCYCH ............... 19
1.11 ZAMYKANIE POZYCJI ....................................................................... 19
1.12 GODZINY HANDLU .......................................................................... 20
1.13 WYMAGANIE DEPOZYTOWE I RÓŻNE OPŁATY ............................... 20
1.14 SKRÓTY KLAWISZOWE .................................................................... 20
2. PODSTAWY PROGRAMOWANIA W MQL 4 .............................................. 21
2.1 PODSTAWY SKŁADNI ........................................................................ 23
2.3 TYPY ZMIENNYCH ............................................................................. 26
2.4 OPERACJE NA ZMIENNYCH ............................................................... 28
2.5 OPERATOR WARUNKOWY ................................................................ 30
2.6 OPERATORY RELACJI ......................................................................... 32
2.7 PĘTLE ................................................................................................ 33
2.8 PRZYKŁADY ....................................................................................... 36
3. FUNKCJE I ELEMENTY DEBUGOWANIA .................................................... 36
3.1 DEFINICJA FUNKCJI ........................................................................... 37
3.2 FUNKCJE WBUDOWANE ................................................................... 39
3.3 DEBUGOWANIE KODU ...................................................................... 41
3
3.4 PRZYKŁADY ....................................................................................... 43
4. STRUKTURY DANYCH I FUNKCJE MATEMATYCZNE .................................. 44
4.1 TABLICE JEDNOWYMIAROWE ........................................................... 44
4.2 TABLICE WIELOWYMIAROWE ........................................................... 47
4.3 FUNKCJE MATEMATYCZNE ............................................................... 48
4.4 BUDOWA WŁASNEJ FUNKCJI MATEMATYCZNEJ............................... 50
4.5 PRZYKŁADY ....................................................................................... 51
5. ZMIENNE PREDEFINIOWANE ................................................................... 52
5.1 ŚWIECE JAPOOSKIE A ZMIENNE PREDEFINIOWANE ......................... 53
5.2 ZMIENNE BID I ASK ........................................................................... 54
5.3 FUNKCJE SYMBOL() I PERIOD() ......................................................... 55
5.4 PROSTY SYSTEM TRANSAKCYJNY ...................................................... 57
5.5 PRZYKŁADY ....................................................................................... 58
6. FUNKCJE DODATKOWE ............................................................................ 59
6.1 FUNKCJE DO ZARZĄDZANIA KONTEM ............................................... 59
6.2 FUNKCJE DATY I CZASU ..................................................................... 61
6.3 DANE HISTORYCZNE I INNE INSTRUMENTY ...................................... 62
6.4 UŻYTECZNE FUNKCJE ........................................................................ 64
6.5 PRZYKŁADY ....................................................................................... 65
7. WSKAŹNIKI .............................................................................................. 66
7.2 ŚREDNIE KROCZĄCE .......................................................................... 68
7.3 OSCYLATORY ..................................................................................... 70
7.4 ATR I STOP LOSS ............................................................................... 72
7.5 ŁĄCZENIE WSKAŹNIKÓW .................................................................. 74
7.6 PRZYKŁADY ....................................................................................... 75
8. FORMACJE ŚWIECOWE ............................................................................ 76
4
8.1 WARUNKI ISTNIENIA FORMACJI ....................................................... 77
8.2 FORMACJE MŁOTA I GWIAZDY ......................................................... 79
8.3 KRZYŻ HARAMI ................................................................................. 80
8.4 OBJĘCIE HOSSY/ OBJĘCIE BESSY ....................................................... 81
8.5 ANALIZA ZŁOŻONYCH FORMACJI ...................................................... 82
8.6 PRZYKŁADY ....................................................................................... 83
9. FUNKCJE TRANSAKCJI .............................................................................. 83
9.1 SYSTEMY AUTOMATYCZNE ............................................................... 84
9.2 SKŁADANIE ZLECEO ........................................................................... 85
9.3 MODYFIKACJE I USUWANIE ZLECEO ................................................. 87
9.4 ZAMKNIĘCIE ZLECENIA ..................................................................... 87
9.6 PRZYKŁADY ....................................................................................... 88
5
1.PLATFORMA METATRADER4 Platforma transakcyjna MetaTrader4 stanowi kompletne i
w pełni profesjonalne narzędzie służące do inwestowania na rynku
walutowym FOREX i amerykaoskim rynku funduszy STOCK.
Umożliwia obserwację rynku oraz składanie zleceo przez 24h na
dobę. Platforma posiada wysokiej jakości moduł informacyjny oraz
aktualizowany na bieżąco moduł wykresowy wraz z wbudowanymi
instrumentami do analizy technicznej.
MetaTrader4 ma prosty i przyjazny dla użytkownika
interfejs, który pozwala traderowi kontrolowad swoje transakcje i
rachunek, jak również dokonywad analizy technicznej i rozwijad
własne strategie handlowe.
1.1 NAJWAŻNIEJSZE CECHY PLATFORMY
METATRADER 4 -umożliwia pracę z rynkiem: Forex i CFD;
-wykonywanie zleceo: zlecenie natychmiastowe i zlecenie
oczekujące;
- poufny charakter wszystkich działao handlowych;
- nieograniczona ilośd wykresów;
- rozmaite interwały czasowe (od minuty do miesiąca);
- duża liczba technicznych wskazówek;
- możliwośd wgrania własnych wskaźników i skryptów;
- wielojęzyczny interfejs;
- export realnych danych za pomocą protokołu DDE;
- sygnały i systemy w trakcie gry;
- bieżące newsy online z rynku;
- wewnętrzna skrzynka e-mail;
- drukowanie wykresów i raportów z transakcji.
6
1.2 OBSŁUGA PLATFORMY
OTWIERANIE RACHUNKU
Platforma MetaTrader4 pozwala na pracą w systemie
dwóch i rachunków: demo i rzeczywistym. Mimo, iż środki na
rachunku demo są wirtualne, nie odbiera to możliwości testowania
strategii inwestycyjnych w rzeczywistych warunkach rynkowych.
OTWIERANIE RACHUNKU
Aby otworzyd rachunek demo należy wybrad zakładkę:
"Plik" -> "Otwórz rachunek". Następnym krokiem jest rejestracja,
polegająca na wypełnieniu ankiety. Po pomyślnym zakooczeniu
rejestracji pojawi się okno zawierające informacje o rachunku:
- Login - unikalny identyfikator, w postaci ciągu cyfr nadany nam
przez firmę brokerską.
- Hasło - można je zmienid po zalogowaniu, wchodząc poprzez
„Narzędzia" -> „Opcje".
- Investor — hasło inwestorskie, dzięki któremu można przeglądad
dane rynkowe lecz bez możliwości dokonywania transakcji;
UWAGA! Nie zaleca się zaznaczania opcji „Zapisz dane rachunku",
gdyż osoby niepowołane, posiadające dostęp do komputera, na
którym została zainstalowana platforma, miałyby tym samym
dostęp do rachunku - łącznie z możliwością zawierania transakcji.
Zalogowanie na rachunek następuje po podaniu loginu i hasła,
otrzymanych po rejestracji.
AKTUALIZACJE
Platforma MetaTrader4 w posiada wbudowany system
automatycznej aktualizacji. Pozwala to na szybką instalację
najnowszej wersji programu.
System automatycznej aktualizacji jest zawsze włączony i
nie ma możliwości wyłączenia go. Podczas połączenia z serwerem,
system sprawdza dostępnośd najnowszej wersji. Jeżeli nowa wersja
zostanie wykryta, system zapyta o chęd jej pobrania i instalacji. Aby
7
rozpocząd aktualizację należy wybrad przycisk „Start". Po pobraniu
plików aktualizacyjnych należy wybrad przycisk „Update and
Restart".
ZARZĄDZANIE WYKRESAMI Wykresy umożliwiają analizę zmian kursów i są pomocne w
analizie graficznej, korzystaniu z różnorodnych wskaźników i
wyznaczaniu linii trendu. Do opcji zarządzania wykresami zalicza się:
TYP WYKRESU: - Bar Charts (Wykres słupkowy) - sekwencja słupków w wybranych
interwałach. Pozioma kreseczka z lewej strony oznacza kurs
otwarcia, z prawej strony kurs zamknięcia, natomiast maksymalna i
minimalna cena wyznaczona jest przez pionową rozpiętośd słupka.
- Candlestick Charts (Wykres świecowy) - sekwencja świec
podobnych do słupków. Pojedyncza świeca składa się z korpusu
(szersza cześd) oraz ceni (cieosze części na dole i górze korpusów).
Cieo dolny wyznacza kurs minimalny, górny - maksymalny. W
przypadku świec wzrostowych dolna jej krawędź odpowiada
kursowi otwarcia, górna zaś - zamknięcia. Dla świec spadkowych
odwrotnie.
- Line Charts (Wykres liniowy) - łamana linia łącząca ceny
zamknięcia.
WSKAŹNIKI ANALIZY TECHNICZNEJ: Wskaźniki analizy technicznej są matematyczną
transformacją cen i wolumenu. Na podstawie osiąganych przez nie
wartości generowane są sygnały wejścia i opuszczenia rynku, lub
powstrzymania się od jakichkolwiek działao.
- Obiekty graficzne: Obok wskaźników analizy technicznej, użyteczną
rolę analityczną pełnią także obiekty graficzne. Platforma daje
możliwośd załączenia linii poziomych, pionowych, trendu oraz
poziomów Fibonacciego.
8
- Zmiana interwałów: Wykresy na platformie można przeglądad na
jednym z 9 interwałów: od interwału minutowego (Ml) do
miesięcznego (MN).
- Przybliżanie/oddalanie wykresu: Wykresy mogą byd oddalane i
przybliżane, co wpływa na ilośd wyświetlanych słupków i precyzją
wyświetlania cen.
-Przewijanie, automatyczne przewijanie i przesunięcie wykresu.
Analiza cen historycznych wymaga czasem przesunięcia
wykresu do okresów wcześniejszych. Przewinięcia wykresu w lewo
(do okresów wcześniejszych) i prawo (do okresów bliższych
teraźniejszości) dokonad można za pomocą przycisku znajdującego
się pod wykresem. Na wykresie można także włączyd funkcję auto
przewijania - wykres będzie się automatycznie przesuwał w prawo,
do aktualnej ceny.
HANDEL (TRADE) Okno handel zawiera informacje o aktualnym stanie
rachunku, otwartych pozycjach i wystawionych zleceniach
oczekujących. Wszystkie pozycje są posortowane po dacie otwarcia
- od otwartej najwcześniej do otwartej ostatnio. Lista zleceo
oczekujących, również posortowana po dacie, znajduje się pod
paskiem salda.
Jeżeli cena aktywacji zlecenia oczekującego zostanie
osiągnięta, zlecenie zostaje wykonane. Następuje automatyczne
usunięcie go z listy zleceo oczekujących i przeniesienie na listę
otwartych pozycji.
NOWE ZLECENIE Otwiera okno składania zleceo, za pomocą którego można
otworzyd nową pozycję lub wystawid zlecenie oczekujące. Aby
złożyd nowe zlecenie należy sprecyzowad jego parametry:
9
instrument będący przedmiotem transakcji, wolumen zlecenia w
lotach, typ zlecenia (po cenie rynkowej lub oczekujące), a także
opcjonalnie poziomy Take Profit i Stop Loss. Więcej o składaniu
zleceo w sekcji "Zarządzanie pozycją".
ZAMKNIJ ZLECENIE Otwiera okno zamykania pozycji. Okno zostanie otwarte tylko wtedy, jeżeli naciśniemy szybko dwa razy rysikiem w otwartą pozycję. Zarządzanie pozycją: - MODYFIKACJA ZLECENIA - Po kliknięciu w otwartą pozycję lub
prawym przyciskiem myszki, otworzy się okno, gdzie widad
polecenie modyfikacji lub usunięcia zlecenia. W przypadku zleceo
oczekujących można dokonad modyfikacji ceny aktywacji, a także
poziomu Stop Loss i Take Profit. W otwartych pozycjach modyfikacji
można poddad jedynie poziom Stop Loss i Take Profit.
- POKAŻ ZLECENIE - po kliknięciu w wybrane zlecenie w nowym
oknie wyświetlone zostaną informacje na temat zlecenia.
W oknie znajdziemy wszystkie informacje na temat zlecenia:
- NUMER ZLECENIA;
- CZAS OTWARCIA POZYCJI - data i godzina otwarcia pozycji w
formacie RRRR.MM.DD GG:MM;
- TYP POZYCJI - buy (kupno) albo sell (sprzedaż);
- LOTY - suma towaru jaką kupiliśmy (mierzona w jednostkach
zwanych lotami);
- SYMBOL - nazwa instrumentu, na jakim została dokonana operacja
kupna albo sprzedaży;
- CENA OTWARCIA - pokazuje cenę po jakiej otwarto pozycję;
- „T/P" (Take Profit) - pokazuje poziom Take Profit, jeżeli został on
ustawiony dla zlecenia;
- „S/L" (Stop Loss ) - pokazuje poziom Stop Loss, jeżeli został on
ustawiony dla zlecenia;
- AKTUALNA CENA - pokazuje aktualną cenę.
10
- ZYSK - pokazuje wynik z zawartej transakcji: w pipsach (punktach) i
walucie depozytowej - USD.
Kolejny pasek pokazuje:
- BALANCE (Saldo) - informacje o saldzie rachunku;
- EQUITY (Wartośd rachunku) - informacje o wartości rachunku.
Wartośd rachunku równa jest saldzie rachunku skorygowanemu o
wynik z otwartych pozycji. Jeżeli nie ma żadnych otwartych pozycji,
wartości rachunku i salda są sobie równe.
- MARGIN (Depozyt) - informacje na temat depozytu
zabezpieczającego.
- FREE MARGIN (Dostępny depozyt) - informacje na temat środków
dostępnych pod depozyt potrzebny do zawarcia nowych transakcji.
Dostępny depozyt równy jest wartości rachunku pomniejszonej o
depozyt. Wyświetlana obok wartości nominalnej wartośd
procentowa, odpowiada poziomowi zabezpieczenia. Poziom
zabezpieczenia równy jest wartości rachunku podzielonej przez
zablokowany depozyt.
HISTORIA RACHUNKU (HISTORY) Okno historii zawiera informacje o przeprowadzonych
operacjach, uwzględniających pozamykane pozycje i usunięte bądź
odrzucone zlecenia oczekujące. Okno historii wyświetlane jest w
postaci tabeli, która zawiera następujące informacje:
- Zlecenie zawiera informacje na temat zamkniętych pozycji, w
szczególności rodzaju zlecenia, instrumentu i wolumenu zlecenia w
lotach.
- Cena - zawiera ceny otwarcia zamkniętych pozycji.
- Wynik - zawiera wyniki lub komentarze zamkniętych pozycji.
WIADOMOŚCI (NEWS) Okno „News" zawiera listę otrzymanych wiadomości
rynkowych. Lista zawiera czas otrzymania oraz nagłówki
przychodzących wiadomości. Nagłówki wyświetlone są w kolejności
11
przychodzenia. Lista jest automatycznie aktualizowana po nadejściu
nowej wiadomości.
ALARMY (ALERTS)
Zakładka ta umożliwia zarządzanie alarmami dźwiękowymi.
Alarmy, w przeciwieostwie do sygnałów dźwiękowych wydarzeo,
dotyczą poziomów cen osiąganych przez instrumenty. Ustawiony
alarm zadziała w momencie spełnienia żądanego warunku,
informując nas o tym, że określony poziom ceny lub czas został
osiągnięty.
SKRZYNKA POCZTOWA (MAIL)
Zakładka otwiera skrzynkę pocztową, za pośrednictwem
której, można odbierad i wysyład maile wewnętrzne. Nagłówki
wiadomości e-mail wyświetlane są w tabeli. Po naciśnięciu prawym
przyciskiem myszy w tabeli z listą maili otworzy się jej menu
kontekstowe. Za pomocą menu można odczytad wybraną
wiadomośd, utworzyd nową wiadomośd lub usunąd wybraną
wiadomośd.
STRATEGIE (STRATEGY)
Miejsce, gdzie przechowywana jest informacja nt.
utworzonych i wykorzystanych przez nas strategii handlowych.
DZIENNIK (DIARY)
Zawiera historię wszystkich operacji dokonywanych na
platformie MetaTrader4.
OBIEKTY GRAFICZNE (OBJECTS)
Obiekty graficzne nakładane na wykresy w celu
wyznaczenia linii trendu, istotnych poziomów wsparcia i oporu oraz
zaznaczania istotnych dat. W platformie na wykresy nakładad można
linie pionowe, poziome, trendu oraz poziomy Fibonacciego.
12
NAZWA OBIEKTU
- Linia Pozioma - Służy do zaznaczania na wykresie poziomów cen. W oknie właściwości obiektu edytowad można kolor, styl i grubośd linii, a także wprowadzid nowy poziom ceny, dla której linia ma byd wyświetlana. - Linia Pionowa - Służy do zaznaczania na wykresie przedziałów czasowych. W oknie właściwości obiektu edytowad można kolor, styl i grubośd linii, a także wprowadzid nową datę dla której linia ma byd wyświetlana. - Linia Trendu - Pozwala zaznaczyd na wykresie trend. Aby ją nałożyd, należy wybrad na wykresie jeden punkt i przytrzymując przeciągnąd do drugiego. W oknie właściwości obiektu edytowad można kolor, styl i grubośd linii, a także wprowadzid nowe poziomy cen i dat, dla których linia ma byd wyświetlana. Po zaznaczeniu opcji „Promieo", linia zostaje przeciągnięta w nieskooczonośd. - Poziomy Fibonacciego - Pozwala na nałożenie linii poziomów Fibonacciego, wzdłuż linii trendu. Aby ją nałożyd, należy wybrad na wykresie jeden punkt i przytrzymując przeciągnąd do drugiego. W oknie właściwości obiektu edytowad można kolor, styl i grubośd linii, a także wprowadzid nowe poziomy czasu, ceny i kolejnych linii na nałożonym obiekcie. WSKAŹNIKI ANALIZY TECHNICZNEJ (INDICATORS) Wskaźniki analizy technicznej są matematyczną transformacją cen i/lub wolumenu. Na podstawie ich wartości dokonuje się predykcji cen i wyznaczania kierunku i siły trendu. Dzięki temu ułatwiają one podejmowanie decyzji o zajęciu pozycji. Platforma posiada zestaw 30 wbudowanych wskaźników. W zależności od rodzaju wskaźnika, zostanie on nałożony bezpośrednio na wykres cenowy lub otworzony w nowym oknie pod wykresem. Wskaźniki mogą byd załączane również do innych wskaźników (np. Średnia ruchoma z wartości innego wskaźnika). NAJBARDZIEJ POPULARNE TYPY WSKAŹNIKÓW WYKORZYSTYWANYCH W ANALIZIE TECHNICZNEJ: -Wskaźniki trendu - trend oznacza utrzymywanie się tendencji kursu w określonym czasie. Trendy mogą się poruszad w trzech kierunkach
13
— w górę, w dół lub w bok. Wskaźniki trendu korzystają z różnych danych kursowych, aby stworzyd wypadkowy kierunek rynku (np. średnie ruchome, linie trendu, Parabolic SAR, Price Oscillator). - Wskaźniki siły rynku - siła rynku oznacza intensywnośd opinii rynkowej w odniesieniu do ceny, za pomocą oceny pozycji rynkowej zajmowanej przez poszczególnych jego uczestników. We wskaźniku liczą się wolumen i liczba otwartych pozycji. Sygnały z nich płynące zbiegają się z rynkiem lub go wyprzedzają (np. Accumulation/Distribution,Wolumen). - Wskaźniki zmienności - zmiennośd to pojęcie określające rozmiar lub zakres dziennych wahao cen, niezależnie od ich kierunku. Zmiana w zmienności wskazuje zwykle zbliżające się zmiany cen (np. Wstęgi Bollingera). - Wskaźniki cyklu - cykl oznacza powtarzalny schemat zachowania rynku, zależny od powtarzalnych wydarzeo, np. pór roku, wyborów itp. Wiele rynków wykazuje cyklicznośd. Wskaźniki cyklu określają ustalony czas schematów rynkowych (np. Elliott Wave). - Wskaźniki wsparcia i oporu - wsparcie i opór oznaczają poziomy cen w sytuacjach, gdy rynki na zmianę rosną i spadają. Ma to związek z podstawową koncepcją popytu i podaży (np. Linie trendu). - Wskaźniki impetu - impet to szybkośd, z jaką ceny zmieniają się w danym okresie. Wskaźniki impetu świadczą o sile lub słabości trendu w czasie jego trwania. Impet jest największy w początkowej fazie trendu, a najmniejszy w punktach zwrotnych. Najmniejsze odchylenie kierunku ceny czy impetu ostrzega o słabości; wystąpienie skrajnych cen przy słabym impecie sygnalizuje zakooczenie poruszania się w danym kierunku. Impet utrzymujący się przy niezmiennych cenach sygnalizuje możliwą zmianę w kierunku cen (np. Oscylator stochastyczny, MACD, Wskaźnik siły zmiennej RSI). HANDEL
Fundamentalną zasadą zyskownego handlu na rynkach finansowych jest kupowanie taniej i sprzedawanie drożej (zamknięcie zlecenia), albo sprzedawanie drożej a kupowanie taniej (zamknięcie zlecenia). System umożliwia składanie zleceo kupna lub sprzedaży po bieżącym kursie rynkowym a także zleceo
14
oczekujących zawierających warunki realizacji Buy Limit, Buy Stop, Sell Limit oraz Sell Stop. Dodatkowo każde zlecenie może zawierad poziom realizacji zysków lub/i ograniczenia straty.
1.3 RODZAJE ZLECEO Zlecenia na platformie można podzielid na zlecenia
zawierane po cenach rynkowych, zlecenia oczekujące oraz zlecenia
typu Stop Loss i Take Profit.
Zlecenia po cenach rynkowych - otwierane są po aktualnych cenach
rynkowych:
- cenie bid instrumentu dla zleceo sprzedaży;
- cenie ask instrumentu dla zleceo kupna.
Można także ustawid poziomy Stop Loss i Take Profit dla tego
rodzaju zleceo.
ZLECENIA OCZEKUJĄCE
Są to zlecenia, które będą zrealizowane, jeżeli zostaną
spełnione zadane przez inwestora warunki jego realizacji, w
szczególności dotyczące ceny danego instrumentu, którego zlecenie
oczekujące dotyczy. Są cztery typy zleceo oczekujących:
- Zlecenie Buy Limit - Zlecenie oczekujące otwierające długą pozycję
w wybranym instrumencie, po spełnieniu zadanych wcześniej
warunków realizacji. Cena aktywacji zlecenia jest niższa od ceny
rynkowej ask w chwili jego składania. W czasie notowao
instrumentu zlecenia typu Buy Limit realizowane są po określonej w
warunku realizacji cenie. Aby warunek był spełniony, rynkowa cena
ask musi byd niższa lub równa cenie aktywacji. Jeżeli na otwarciu
notowao danego instrumentu cena otwarcia jest niższa lub równa
cenie aktywacji, to zlecenie realizowane jest po cenie otwarcia.
- Zlecenie Buy Stop - Zlecenie oczekujące, otwierające długą pozycję
w wybranym instrumencie, po spełnieniu zadanych wcześniej
warunków realizacji. Cena aktywacji zlecenia jest wyższa od
rynkowej ceny ask w chwili składania zlecenia. Zlecenia typu Buy
Stop są realizowane zawsze po pierwszej cenie rynkowej ask,
wyższej lub równej warunkowi realizacji.
15
- Zlecenie Sell Limit - Zlecenie oczekujące, otwierające krótką
pozycję na wybranym instrumencie, po spełnieniu zadanych
wcześniej warunków realizacji. Cena aktywacji zlecenia jest wyższa
od rynkowej ceny bid w chwili składania zlecenia. W czasie
kwotowania instrumentu, zlecenia typu Sell Limit są realizowane po
określonej w warunku realizacji cenie. Jeżeli na otwarciu notowao
cena otwarcia jest wyższa lub równa cenie aktywacji, to zlecenie
zostaje realizowane po cenie otwarcia.
- Zlecenie Sell Stop - Zlecenie oczekujące, otwierające krótką
pozycję w wybranym instrumencie, po spełnieniu zadanych
wcześniej warunków realizacji. Cena aktywacji zlecenia jest niższa
od rynkowej ceny bid w chwili składania zlecenia. Zlecenia typu Sell
Stop są realizowane po pierwszej cenie rynkowe bid, niższej lub
równej warunkowi realizacji.
Stop Loss
Zlecenie mające na celu ograniczenie strat z tytułu otwartej
pozycji. Dla pozycji długich cena aktywacji zlecenia wyznaczana jest
poniżej aktualnej ceny rynkowej bid. Analogicznie, cena aktywacji
zlecenia Stop Loss dla pozycji krótkich, musi byd wyższa od aktualnej
ceny rynkowej ask. Gdy kurs rynkowy osiągnie poziom ceny
aktywacji, pozycja zostaje automatycznie zamknięta. Zlecenia Stop
Loss realizowane są zawsze po pierwszej cenie spełniającej warunek
aktywacji. Oznacza to, że w przypadku wystąpienia luki cenowej
(wewnątrz której znajduje się cena aktywacji), pozycja długa
zostanie zamknięta po kursie niższym od ceny aktywacji.
Wystąpienie luki, zawierającej cenę aktywacji zlecenia Stop Loss dla
pozycji krótkiej, oznacza zamknięcie tej pozycji po cenie wyższej, niż
cena aktywacji. Zlecenie Stop Loss nie musi zamykad pozycji
stratnych. Jeżeli otwarta pozycja jest zyskowna, to dzięki zleceniu
Stop Loss, można zachowad częśd zysku, nie rezygnując
jednocześnie z szansy na jego zwiększenie. W takich sytuacjach
przydatny okazuje się Stop Loss kroczący, podążający za ceną. Stop
Loss kroczący opisany został w sekcji Trailing Stop.
Take Profit
16
Zlecenie mające na celu automatyczne zamknięcie pozycji
po cenie lepszej, niż aktualna cena rynkowa. Oznacza to, że dla
pozycji długich, cena aktywacji zlecenia Take Profit jest wyższa niż
bieżąca cena rynkowa bid. Analogicznie, dla pozycji krótkich, cena
aktywacji jest niższa od aktualnej ceny rynkowej ask. W czasie
kwotowao, zlecenia Take Profit realizowane są po kursie równym
cenie aktywacji. Na otwarciu kwotowao instrumentu, zlecenia te
realizowane są po cenie otwarcia, jeżeli spełnia ona warunek
aktywacji. Oznacza to, że jeżeli na otwarciu wystąpiła luka cenowa,
w której zawiera się cena aktywacji, to pozycja długa zostanie
zamknięta po cenie wyższej, niż cena aktywacji. Luka cenowa na
otwarciu, zawierająca cenę aktywacji zlecenia Stop Loss dla pozycji
krótkiej, sprawia, że zlecenie to zostanie zrealizowane po cenie
niższej niż cena aktywacji. Dla każdej otwartej pozycji można
wyznaczyd jednocześnie zlecenie Stop Loss i Take Profit
Trailing Stop
Zlecenie to jest bardzo podobne do zlecenia Stop Loss, z tą
różnicą, że w przypadku ruchu ceny w kierunku zgodnym z naszymi
przewidywaniami poziom Stop Loss zostanie automatycznie
przesunięty o odpowiednią ilośd punktów w celu ochrony
wypracowanego zysku. Dlatego zlecenie to jest często nazywane
„podążającym Stop Lossem" lub „ruchomym Stop Lossem". Zlecenia
te są bardzo użyteczne podczas gry z trendem gdyż pozwalają na
zachowanie dużej części wypracowanych zysków bez konieczności
ciągłego, manualnego modyfikowania zlecenia stop loss. Należy
pamiętad, że trailing stop zostanie aktywowany dopiero w
momencie gdy nasza transakcja osiągnie zysk w wysokości Trailing
Stopa plus 1 pips, a minimalna wartośd tego zlecenia to 15 pipsów.
Aby ustawid Trailing Stop należy zaznaczyd zlecenie, do którego ma
byd załączony Trailing Stop, a następnie otworzyd menu
kontekstowe. Z listy menu należy wybrad „Trailing Stop" i wielkośd
w pipsach, o jaką ma się przesuwad Stop Loss.
1.4 RODZAJE EGZEKUCJI ZLECEO
17
Egzekucja natychmiastowa
W przypadku egzekucji natychmiastowej zlecenie jest
realizowane po cenie wysłanej przez inwestora do brokera. Jeżeli
broker akceptuje zawartą w zapytaniu cenę, zlecenie jest
realizowane. Jeżeli broker nie akceptuje ceny w związku z jej
zmianą, nastąpi rekwotowanie („requote"). Wówczas system
wyświetli okno zawierające wolumen, instrument oraz stronę
transakcji (BUY/SELL), a także nową cenę i poprosi o ponowne
kwotowanie.
1.5 ZARZĄDZANIE POZYCJĄ Fundamentalną zasadą zyskownego handlu na rynkach
finansowych jest kupowanie taniej i sprzedawanie drożej. System
transakcyjny MetaTrader4 umożliwia składanie zleceo kupna lub
sprzedaży po bieżącym kursie rynkowym a także zleceo
oczekujących zawierających warunki realizacji Buy Limit, Buy Stop,
Sell Limit oraz Sell Stop. Złożone zlecenia można także modyfikowad,
zamykad częściowo lub w całości, a w przypadku zleceo
oczekujących - także usuwad.
- otwieranie pozycji — sprzedaż lub kupno instrumentów w wyniku
złożenia zlecenia lub aktywacji zlecenia oczekującego;
- modyfikowanie zleceo — zmienianie poziomów Stop Loss i Take
Profit w otwartych pozycjach;
- składanie zleceo typu Buy Stop, Sell Stop, Buy Limit, Sell Limit;
- modyfikowanie i usuwanie zleceo oczekujących, które nie zostały
zrealizowane;
- zamykanie pozycji — częściowe lub całkowite.
1.6 OTWIERANIE POZYCJI Otwieranie pozycji polega na wejściu na rynek, przez zakup
lub sprzedaż określonego instrumentu. Wejście to może nastąpid po
złożeniu zlecenia kup/sprzedaj w trybie natychmiastowym lub po
aktywacji zlecenia oczekującego.
18
1.7 ZLECENIA PO BIEŻĄCEJ CENIE RYNKOWEJ System posiada dwa tryby realizacji zleceo po bieżącym
kursie rynkowym. Należy pamiętad, iż otwarcie pozycji długiej (BUY)
odbywa się zawsze po cenie ASK, a otwarcie pozycji krótkiej (SELL)
zawsze po cenie BID. Aby złożyd zlecenie należy otworzyd okno
składania zleceo.
1.8 SKŁADANIE ZLECEO OCZEKUJĄCYCH Składanie zleceo oczekujących przebiega według
podobnego procesu jak zleceo po cenie rynkowej. Różnica polega na
określaniu parametrów dodatkowych zlecenia. W oknie „Nowe
zlecenie" należy dodatkowo określid:
- Typ - wybieramy „Zlecenie oczekujące";
- Typ - wybieramy typ zlecenia oczekującego (Buy Stop, Buy Limit,
Sell Stop, Sell Limit);
- Po cenie - ustalamy ceną aktywacji zlecenia oczekującego;
- Wygaśnięcie - opcjonalnie możemy określid okres ważności
zlecenia oczekującego. Jeżeli do tego czasu zlecenie nie zostanie
zrealizowane, system je usunie. Niezrealizowane zlecenia
oczekujące bez określonego terminu ważności usuwane są
automatycznie po roku. Po ustaleniu parametrów zlecenia,
wybieramy przycisk „Złóż zlecenie", aby je złożyd.
1.9 MODYFIKOWANIE POZYCJI Modyfikowanie otwartych pozycji sprowadza się do
zmiany, wyznaczenia nowych lub całkowitego usunięcia, poziomów
Stop Loss i Take Profit. Aby otworzyd okno modyfikacji otwartych
pozycji, należy zaznaczyd wybraną pozycję w oknie Zlecenia, a
następnie otworzyd menu kontekstowe i wybrad polecenie
„Modyfikuj zlecenie". Aby zmienid wartośd poziomu Stop Loss i Take
Profit, należy wprowadzid cenę S/L i/lub T/P w komórkach „S/L"
„T/P". Wprowadzając wartośd „0", wyłączamy Stop Loss i Take
Profit. Wybierając określone wartości w komórkach „Poziom"
ustawimy poziomy Stop Loss i Take Profit w zadanej odległości od
19
aktualnej ceny rynkowej. Aby wprowadzid zmiany wybieramy
przycisk „Modyfikuj".
1.10 MODYFIKOWANIE I USUWANIE ZLECEŃ
OCZEKUJĄCYCH Zlecenia oczekujące również mogą byd poddane
modyfikacji. Aby otworzyd okno modyfikacji zleceo oczekujących
należy zaznaczyd wybrane zlecenie w oknie „Zlecenie", a następnie
otworzyd menu kontekstowe i wybrad polecenie „Modyfikuj
zlecenie". Aby zmienid parametry zlecenia oczekującego, zmieniamy
wartości w określonych komórkach:
- Symbol - określa instrument którego zlecenie dotyczy i nie
wymaga zmiany;
- Typ - domyślną wartośd-„Modyfikuj zlecenie" - pozostawiamy bez
zmian;
- Cena - w komórce możemy ustawid nową cenę aktywacji zlecenia
oczekującego;
- S/L, T/P - w komórkach możemy zmienid poziomy Stop Loss i Take
Profit dla danego zlecenia;
- Wygaśnięcie - możemy określid datę wygaśnięcia zlecenia, lub
odznaczając ją nie określad daty ważności zlecenia.
- Po wprowadzeniu zmian możemy je zaakceptowad przyciskiem
„Modyfikuj". Aby usunąd zlecenie oczekujące wybieramy przycisk
„Usuo".
1.11 ZAMYKANIE POZYCJI Aby zamknąd pozycję, należy otworzyd okno zamykania
pozycji. Można to zrobid na 3 sposoby:
- Zaznaczyd otwarte zlecenie, otworzyd menu kontekstowe w oknie
„Zlecenia" i wybrad polecenie „Zamknij zlecenie";
- Kliknąd dwukrotnie rysikiem w zlecenie, które chcemy zamknąd;
- Wybrad przycisk w pasku narzędzi.
20
- W oknie zamykania pozycji należy ustawid parametry zamykania
pozycji:
- Symbol - określa instrument w którym pozycja ma zostad
zamknięta;
- Wolumen - określa jaką częśd zlecenia chcemy zamknąd, zlecenie
może zostad zamknięte częściowo lub w całości.
1.12 GODZINY HANDLU Klient może dokonywad transakcji dwadzieścia cztery (24)
godziny na dobę, przez 5 dni w tygodniu, zaczynając ok. godziny
24:00 z niedzieli na poniedziałek, a koocząc ok. godz. 22:30 w
piątek.
1.13 WYMAGANIE DEPOZYTOWE I RÓŻNE OPŁATY Wszystkie depozyty są rozliczane w dolarach
amerykaoskich USD. Jeżeli klient chciałby zasilid swój rachunek inną
walutą wówczas bank obsługujący brokera zamieni deponowaną
walutę na USD zgodnie z obowiązującym kursem rynkowym.
Aby otworzyd rachunek wymagany jest minimalny depozyt
w wysokości dwóch tysięcy dolarów 2.000 USD. Depozyty mogą byd
realizowane przelewem bankowym. Rachunek zostanie zasilony
środkami z czeku dopiero w momencie otrzymania przelewu
bankowego przez bank obsługujący brokera. W przypadku
MARATONÓW suma potrzebna do rozpoczęcia pracy na realnych
pieniądzach wynosi od 300 do 1000 USD. Rachunki PAMM (Master
Account - Konta Mistrzowskie) od 1.100 USD w górę.
1.14 SKRÓTY KLAWISZOWE
Ctrl +Tab = Przechodzenie
pomiędzy zakładkami
Ctrl + F = Krzyżyk
Ctrl + G = Włączenie siatki
Ctrl + L = Włączanie
wolumenu
21
Ctrl + I = Lista wskaźników
Ctrl + E = Włączanie strategii
Ctrl + D = Okno danych
Ctrl + M = Rynek
Ctrl + N = Okno Nawigator
Ctrl + P = Wydruk grafiki
Ctrl + T = Okno Terminal
Ctrl + O = Okno opcje
Ctrl + Y = Okresy czasowe
Shift + F12 = Przesunięcie o
jedną świeczkę w prawo
F8 = Właściwości wykresu
F9 = Nowe zlecenie
Fil = Aktywny grafik na pełny
ekran
F12 = Przesunięcie o jedną
świeczkę w lewo
Alt + 1 = Wykres słupkowy
Alt + 2 = Wykres świecowy
Alt + 3 = Wykres liniowy
Alt + F4 = Zamknięcie
platformy
Backspace = Usuo ostatni
obiekt
+ = Zwiększ
- = Zmniejsz
2. PODSTAWY PROGRAMOWANIA W MQL 4 MetaQuotes Language 4 (MQL 4) jest językiem
umożliwiającym programowanie strategii handlowych. Silna
kontrola typów i brak wskaźników powoduje to, że nawet źle
napisany program nie zdestabilizuje pracy systemu. MQL 4
umożliwia tworzenie wskaźników, strategii i skryptów, co pozwala
na automatyzację procesów handlowych i opracowanie własnych
pomysłów. Dodatkowo, często używane funkcje mogą zostad dla
wygody zebrane w bibliotekach. MQL w połączeniu z testerem
strategii dostarczonym wraz z platformą MetaTrader pozwala na
niemal natychmiastowe przetestowanie własnych pomysłów na
danych historycznych.
Najczęściej pomijaną kwestią w przypadku powyższego
języka jest możliwośd tworzenia systemów ekspertowych. Należy
tutaj jednoznacznie określid granicę pomiędzy tymi dwoma
podejściami:
strategia automatyczna (ang. Expert Advisor) jest znacznie
szerzej opisywaną w literaturze koncepcją, gdzie od
22
użytkownika wymagana jest minimalna znajomośd obsługi
platformy. Cały proces handlu przebiega automatycznie, a
żadna dodatkowa zgoda użytkownika przy podejmowaniu
działao przez program nie jest wymagana.
główną ideą systemu ekspertowego jest niejako wspieranie
gracza w podejmowaniu decyzji. Program sugeruje
potencjalne punkty wejścia na rynek, jednak ostateczna
decyzja należy już tylko do użytkownika. Takie podejście
pozwala w pełni kontrolowad sytuację na rynku przy
jednoczesnym ograniczeniu czasu spędzonego na handlu.
Niestety w tym wypadku wymagana jest od użytkownika
podstawowa wiedza z zakresu analizy fundamentalnej oraz
technicznej.
Znajomośd zagadnieo związanych z rynkiem walutowym
oraz przyswojenie podstaw programowania w języku MQL 4 pozwoli
na tworzenie systemów znacznie ułatwiających śledzenie wielu par
walutowych jednocześnie oraz skuteczny na nich handel.
MQL 4 jest językiem, który dużo czerpie z języka ANSI C,
znanego również jako C99 (norma ISO/IEC 9899: 1999). Programiści
języka C oraz C++ a także języków pochodnych, takich jak Java czy
C#, w MQL odnajdą się w nowym środowisku bardzo szybko.
Do tworzenia programów w omawianym języku, oprócz
środowiska, wymagany jest również kompilator (dostarczany wraz z
platformą MetaTrader). MQL jest językiem kompilowanym.
Kompilowanie tłumaczy kod programu pisanego w języku
formalnym na język maszynowy. Pliki zawierające wykonywalne
kody maszynowe muszą posiadad rozszerzenie EX4. Rozszerzenie to
przez terminal kliencki jest rozpoznawane jako pliki wykonywalne.
Edytor tekstu MetaEditor jest programem typu IDE
(zintegrowane środowisko programowania) posiadającym funkcję
podświetlania składni. W edytorze zastosowane zostało inteligentne
podpowiadanie tekstu (rozwiązanie analogiczne do IntelliSense w
23
środowisku Microsoft Visual Studio). Komunikaty dotyczące błędów
są przekierowane i wyświetlone w zakładce "Błędy" w polu "Tekst".
Po skompilowaniu programu tworzony jest plik wynikowy
posiadający nazwę identyczną z plikiem źródłowym zawierający
rozszerzenie EX4. W przypadku błędów podczas kompilacji, w
zakładce "Błędy" pojawi się pełna ich lista. Oprócz poważnych
błędów, uniemożliwiających kompilację, określanych jako "Errors",
zdarzają się też ostrzeżenia (ang. Warnings). Ostrzeżenia nie mają
bezpośredniego wpływu na działanie programu, jednak stanowią
informację o potencjalnie niebezpiecznych/nadmiarowych
fragmentach kodu.
MetaEditor posiada zintegrowany system pomocy
dostępny w zakładce "Pomoc" (alternatywnie klawisz F1). Samo
środowisko jest stosunkowo elastyczne i pozwala użytkownikowi na
dostosowanie licznych elementów do własnych preferencji.
Wielkośd i krój czcionki, kolory, układ okien to tylko nieliczne z
możliwych do edycji elementów.
2.1 PODSTAWY SKŁADNI Podstawowym elementem tworzenia rozbudowanych
programów są instrukcje wysokiego poziomu - czyli czynności, które
ma wykonad program. Instrukcje takie mogą występowad jako
pojedyncze wyrażenia:
24
Powyżej widoczna jest prosta instrukcja, gdzie zmiennej o
nazwie a przypisywana jest wartośd 1. Najistotniejsza częśd
programu znajduje się w części init(). Funkcje szczegółowo opisane
zostaną w kolejnym rozdziale. Natomiast fragment kodu nad funkcją
init() pełni rolę informacyjną: możliwe jest tutaj podanie adresu
strony internetowej, czy też danych autora.
Z kolei bloki stanowią bardziej złożone fragmenty kodu,
gdzie zbiór instrukcji prostych traktowany jest jako całośd. W
powyższym kodzie, blok instrukcji stanowi cała funkcja init(), gdzie
kolejno zdefiniowana została zmienna, następnie przypisana została
jej wartośd oraz nastąpił powrót z funkcji.
Wszystkie bloki instrukcji w kodzie zaznaczane są przy
pomocy nawiasów klamrowych. W każdym bloku może znaleźd się
dowolna liczba instrukcji prostych. Zaleca się także, aby w
przypadku instrukcji warunkowych (zagadnienie to opisane zostanie
szerzej w dalszej części rozdziału) zawierających pojedyncze
instrukcje również stosowad oznaczenia bloków. Pomijanie
nawiasów w takich sytuacjach nie stanowi błędu, jednak w
25
przypadku późniejszych modyfikacji kodu może już prowadzid do
trudnych do zidentyfikowania błędów.
2.2 KOMENTARZE I ZNAKI PUSTE Język MQL posiada wolny format. Oznacza to, że układ linii
oraz znaki puste nie są zaliczane do kodu programu (w
przeciwieostwie do np. języka Python, gdzie układ wcięd jest
istotnym elementem kodu). Umożliwia to pisanie wielu instrukcji w
jednej linii kodu, oddzielenie fragmentów dowolną liczbą
separatorów, a nawet pisanie jednej instrukcji w kilku wierszach. O
ile zwłaszcza pierwsza z tych możliwości jest niezalecana (a w
przypadku pisania programu przez kilka osób wręcz zabroniona), o
tyle oddzielanie części kodu pozwala na opracowanie przejrzystych i
starannie opisanych jego fragmentów.
Bardzo ważnym elementem programu (szczególnie w sytuacji, kiedy
konieczne mogą byd dodatkowe modyfikacje kodu) są szczegółowe
komentarze. Komentarze w kodzie to fragmenty programu
pomijane w procesie kompilacji, w których znajdują się informacje
dla programisty.
W MQL dostępne są dwa rodzaje komentarzy: liniowe oraz
blokowe. Komentarze liniowe stosowane są najczęściej do krótkiego
opisu wybranej zmiennej. Z kolei długie komentarze blokowe
umieszczane są przed funkcją i służą do opisu większego fragmentu
kodu, listy parametrów i udostępnianego przez funkcję typu.
26
Sama treśd komentarza jest szczególnie istotna. Tekst powinien byd
krótki i przejrzysty. Nie należy także opisywad oczywistych
fragmentów kodu.
2.3 TYPY ZMIENNYCH Każda stosowana w programie nazwa musi zostad
zadeklarowana. Chodzi tutaj o podanie informacji, że opisuje ona
obiekt danego typu. W języku MQL dostępne są 4 typy
fundamentalne:
integer - typ całkowitoliczbowy;
double - liczby rzeczywiste;
string - typ łaocuchowy;
bool - wartości prawda/fałsz;
Każdy z powyższych typów stosowany jest w odmiennych
sytuacjach i może opisywad różne zmienne. Powyższe typy stanowią
jeden z najistotniejszych elementów języka MQL.
Najprawdopodobniej najbardziej oczywistym typem wyda się
integer. Jest to typ przeznaczony do reprezentacji liczb całkowitych.
W języku MQL możliwy jest też zapis wartości w systemie
27
ósemkowym i szesnastkowym. Opisywany typ oznaczany jest
słowem kluczowym int. Każda liczba całkowita może ponadto zostad
przedstawiona ze znakiem + lub -.
Typ wartości rzeczywistych double przeznaczony jest do
reprezentacji 8 - bajtowych wartości przeliczalnego zbioru liczb
wymiernych w formacie dziesiętnym (o ograniczonej dokładności).
Innymi słowy chodzi tutaj o liczby z ułamkiem dziesiętnym.
Trzeci typ danych to typ tekstowy. Przeznaczony jest do
reprezentowania ciągu znaków w fizycznie ciągłej tablicy.
Maksymalna długośd słowa/zdania wynosi 255 znaków.
28
Należy dodatkowo zaznaczyd, że ciąg znaków nie musi
ograniczad się tylko do jednej linii tekstu. Możliwe jest podzielenie
tekstu na kilka linii. Służy do tego znak kooca linii /n. Ostatnim
prezentowanym typem jest typ logiczny bool. Chodzi tutaj o
dwuwartościową zmienną logiczną przyjmującą wartości
prawda/fałsz (true oraz false). Typ ten najczęściej stosowany jest do
sprawdzenia, czy spełnione zostało dane założenie. Złożone
instrukcje sprowadzane są do prostego pytania:Tak/Nie. W
zależności od tego, czy udało się spełnid postawiony warunek, czy
też nie, wykonywane są inne bloki instrukcji.
2.4 OPERACJE NA ZMIENNYCH Zarówno proste, jak i złożone operacje na zmiennych
możliwe są po uprzednim ich zdefiniowaniu i określeniu typu.
Przykładowo, prosta operacja dodawania liczb całkowitych
widoczna jest poniżej:
W tym wypadku instrukcja dwuargumentowa może zostad
wykonana po wcześniejszym podaniu nazw dwóch zmiennych typu
int. Na szczególną uwagę zasługują tutaj dwie linie służące do
wypisania danych na ekran. MessageBox(...) to funkcja (więcej o
funkcjach w kolejnym rozdziale), której parametrem jest łaocuch.
Niestety typ int nie jest w tym wypadku uznany za łaocuch. Istnieją
jednak metody służące przekształceniu jednego typu w inny - chodzi
tutaj o funkcje konwersji. DoubleToStr(...) to funkcja pozwalająca
na właśnie taką konwersję, gdzie na wejście funkcji przekazywany
jest parametr int, natomiast na wyjście - zmienna łaocuchowa. W
kolejnej linii natomiast zastosowana jest funkcja Alert(...), która
29
otrzymuje dowolną zmienną łaocuchową, która następnie wypisana
jest na ekran. W języku MQL obowiązują wszystkie znane z
matematyki zależności i priorytety operatorów. Przykładowo,
mnożenie jest instrukcją dwuargumentową, więc wymagane jest
podanie dwóch wartości o tym samym typie. Oczywiście operacje
mnożenia mają priorytet równy dzieleniu, dodawanie ma priorytet
niższy, a wyrażenia w nawiasach mają priorytet najwyższy. Poza
wymienionymi operacjami dwuargumentowymi jest też kilka
operacji jednoargumentowych, których działanie może nie byd tak
oczywiste. Przykładowo, w MQL dostępny jest operator zmiany
znaku, który pozwala zmienid znak zmiennej na przeciwny (nie
należy mylid tego operatora z dwuargumentowym odejmowaniem).
Oczywiście operacje na zmiennych najczęściej kooczą się na
przypisaniu, czyli wpisaniu nowej wartości danej zmiennej, do
jednej ze zmiennych już istniejących. Przypisanie określane jest przy
pomocy znaku rówości. Znak = może byd w tym przypadku
interpretowany jako: "od teraz wartośd zmiennej jest równa...".
Jednym z najczęściej popełnianych na początku błędów jest zamiana
znaku równości na znak przypisania. Znak równości opisany zostanie
dokładnie w następnym podrozdziale dotyczącym operatorów
relacji.
Możliwe jest też zastosowanie pewnego uproszczenia w
kodzie, gdzie dwuargumentowe operacje matematyczne łączone są
w jednej instrukcji z przypisaniem.
Jest to pewne uproszczenie niepolecane początkującym
programistom. Zwłaszcza na początku lepiej przygotowad programy
nieco dłuższe i przejrzyste.
30
2.5 OPERATOR WARUNKOWY Operator warunkowy jest jedną z podstawowych
konstrukcji właściwie w każdym języku programowania. Opisane
dotychczas przykłady instrukcji prostych, instrukcji blokowych i
operatorów opisują prosty, liniowy kod. Operator warunkowy IF
pozwala na wprowadzenie rozgałęzienia w kodzie: gdzie w
zależności od podjętej decyzji (decyzji użytkownika, lub też decyzji
ustalonej na podstawie innych zmiennych) możliwe jest wykonanie,
lub też pominięcie pewnych fragmentów kodu.
W języku MQL najczęściej stosowane w operatorze IF typy
zmiennych to int oraz bool. Zmienna boolowska wydaje się w tym
przypadku naturalna: przyjmuje dwie wartości oraz możliwe jest
wykonanie dwóch odmiennych fragmentów kodu.
Rozwinięciem operatora IF jest operator IF - ELSE. Pozwala on na
tworzenie znacznie bardziej rozbudowanych programów, gdzie
31
możliwośd opcji do wyboru zależy od liczby dodatkowych
warunków:
Ciekawe możliwości daje również zagnieżdżanie operatorów, gdzie
przy spełnieniu warunku pojawia się następny warunek - warunek
zagnieżdżony:
Jednym z najpopularniejszych przykładów dotyczących wyrażenia IF
ELSE jest problem wyznaczania pierwiastków równania
kwadratowego, gdzie w zależności od wartości delta równanie
posiada jeden, dwa lub nie posiada żadnych miejsc zerowych.
32
2.6 OPERATORY RELACJI Operatory relacji pozwalają łączyd proste warunki w
instrukcji IF w bardziej złożone wyrażenia. Przykładowo, zamiast
stosowad zagnieżdżonych wyrażeo IF, możliwe jest połączenie jest
ich w jedną instrukcję:
Wszystkie dostępne w MQL operatory relacji przedstawione zostały
poniżej:
== równy;
!= różny;
< mniejszy;
33
> większy;
<= mniejszy lub równy;
>= większy lub równy.
Szczególnie istotny jest tutaj operator równości ==, który nierzadko
mylony jest z operatorem przypisania.
2.7 PĘTLE Oprócz instrukcji warunkowej IF, konieczne jest również
zapoznanie się z zagadnieniem pętli. Są to instrukcje pozwalające na
wykonywanie pojedynczej instrukcji, lub też całego bloku instrukcji
określoną liczbę razy. Prosty schemat blokowy pętli przedstawiony
został poniżej:
Pętle stosowane są najczęściej do przeglądu pewnego zbioru
wartości, np. tablic (więcej o tablicach w dalszych rozdziałach).
Innym popularnym zastosowaniem pętli jest wielokrotne
wykonanie powtarzającej się instrukcji. Przedstawiona powyżej
pętla FOR składa się części sterującej pętlą oraz bloku instrukcji. W
34
części sterującej wymagane jest określenie warunku początkowego
pętli, czyli wartości, od jakiej zaczyna się odliczanie (np. od 0 do 100,
lub od 10 do 1). Drugi element to właśnie wartośd koocowa pętli.
Wreszcie ostatnia częśd to wartośd, o jaką zmienia się pętla przy
każdym przejściu przez blok instrukcji.
Interesujący jest tutaj ostatni element pętli FOR, w tym przypadku
jest to dekrementacja. Operacja dekrementacji w każdym przebiegu
pętli to odjęcie wartości 1 od zmiennej sterującej pętlą. Istnieje też
odpowienik dekrementacji dla zwiększania wartości zmiennej o 1:
jest to inkrementacja.
Drugi rodzaj pętli dostępny w MQL to pętla WHILE.
Stosowana najczęściej w przypadku, gdy nie jest znana dokładna
liczba powtórzeo pętli a blok kodu wykonywany jest aż do
spełnienia zadanego warunku. Przykładowo:
Dodatkowe elementy pomocne przy sterowaniu pętlą to
instrukcje break oraz continue. W przypadku pierwszej z nich chodzi
o przerwanie wykonywania pętli w momencie wystąpienia
określonego warunku. Przykładowo, w pętli dana wartośd dzielona
35
jest przez kolejne liczby, jednak w przypadku dzielenia przez zero
wybrana wartośd jest pomijana.
Instrukcją zbliżoną do continue jest break. Zasadnicza
różnica polega jednak na tym, iż break natychmiast przerywa
wykonywanie pętli, w której jest zawarta.
W powyższym kodzie kolejne iteracje pętli są wykonywane, do
momentu spełnienia warunku, czyli znalezienia takiej wartości pętli,
która jest podzielna przez 17 - w tej sytuacji dalsze przebiegi pętli są
zaniechane i następuje wykonanie pozostałej części kodu.
36
2.8 PRZYKŁADY 1. Napisz program, który dla dwóch zmiennych typu double
realizuje operacje dodawania, odejmowania, mnożenia oraz
dzielenia.
2.Napisz program realizujący operację mnożenia liczb rzeczywistych,
dodawania łaocuchów i przypisania dla wartości bool.
3. Napisz program, w którym podane są 3 zmienne: int oraz dwie
zmienne double. Zmienna int może przyjmowad wartości 1,2 lub 3.
Każda inna wartośd skutkuje komunikatem "Błąd". W przypadku,
gdy wartośd int jest równa 1, na zmiennych double realizowana jest
operacja dodawania. Dla int równego dwa: operacja odejmowania.
Dla zmiennej 3: do pierwszej zmiennej przypisana jest wartośd
zmiennej drugiej i na odwrót. POMOC: do wyświetlenia komunikatu
użyj funkcji MessageBox. Do przepisania zmiennych wprowadź
zmienną pomocniczą.
4. Napisz program, który wypisuje na ekran sumę liczb od 1 do 50,
wypisuje liczbę elementów podzielnych przez 2 oraz liczbę
elementów podzielnych przez 3.
5. Napisz program, który wypisuje, ile liczb niepodzielnych przez 2, 3
i 5 znajduje się w przedziale zadanym przez użytkownika.
6. Napisz program, który wypisuje trójkąt prostokątny z gwiazdek.
3. FUNKCJE I ELEMENTY DEBUGOWANIA MQL jest językiem proceduralnym, gdzie pewne fragmenty
kodu powinny tworzyd jedną całośd. Takie elementy określane są
jako funkcje. Dwie podstawowe przesłanki do tworzenia bloków
kodu to:
spójnośd kodu. W przypadku funkcji całe bloki instrukcji
wywoływane są przy pomocy jednej linii kodu, co znacznie
wpływa na jego bezpieczeostwo. Liczba miejsc, w których
programista może popełnid błąd jest istotnie ograniczona.
powtarzające się fragmenty. W przypadku stałych i często
powtarzających się bloków instrukcji działaniem
37
pożądanym jest w tym przypadku zamknięcie ich w funkcji i
następnie jej wywoływanie. Ogranicza to nadmiarowośd
kodu i wpływa pozytywnie na jego czytelnośd.
Jednym z ciekawszych przykładów zastosowania funkcji w pisaniu
strategii automatycznych jest wyszukiwanie formacji na wykresie.
Metody te opisane zostaną w późniejszych rozdziałach.
Warto również stosowad jednolitą konwencję nazwową,
która pozwoli bez problemu w przyszłości modyfikowad wybrane
fragmenty kodu. Przykładowy fragment programu:
Wskazane zostały tutaj dwie metody nazywania zmiennych.
Pierwsza, określana jako notacja węgierska, to sposób zapisu, w
ktorej nazwa zmiennej poprzedzona jest pierwszą literą jej typu. Z
kolei notacja wielbłądzia zakłada, iż pojedyncza zmienna może
składad się z kilku połączonych słów, gdzie każde z nich pisane jest z
dużej litery. Dodatkowo pierwsza litera nazwy zmiennej pisana jest z
małej litery, natomiast nazwa funkcji rozpoczyna się wielką literą.
3.1 DEFINICJA FUNKCJI Lista parametrów to zmienne przekazywane do wnętrza
funkcji stosowane przy obliczeniach. W pewnych sytuacjach lista
parametrów jest pusta, a wszystkie obliczenia odbywają się tylko na
zmiennych wewnątrz funkcji. Kolejnym istotnym elementem jest
38
udostępniany typ. Każda funkcja po zakooczeniu swojego działania
oddaje sterowanie do miejsca, w którym została wywołana. W
miejscu powrotu do głównej części programu możliwe jest
odczytanie wartości zwracanego typu. W pewnych sytuacjach
zwracanym typem jest void, czyli typ pusty. Można to
interpretowad, jako fragment kodu, który nie przekazuje dalej
żadnej wartości:
Na powyższym przykładzie widad fragment programu, do którego
przekazane zostają dwa parametry, a jedynym efektem jego
działania jest wypisanie na ekran pewnych informacji. Zamiast
stosowad kilka linii kodu zawsze, kiedy na ekran podawana jest
identyczna informacja - warto taki kod przekształcid w funkcję.
Dzięki temu możliwe jest wywołanie jej po raz kolejny, jednak z
innymi parametrami. Dobrym zwyczajem jest także określenie
udostępnianego przez funkcję typu jako int.
39
Wartośd zero na wyjściu funkcji oznacza brak błędów. Każda inna
wartośd może byd kodem błędu.
Nieco bardziej złożonym zagadnieniem są same konwencje
nazwowe, a także typy udostępniane przez funkcję. Nazwa funkcji
powinna byd w miarę krótka i co ważniejsze - przejrzysta. Już po
nazwie i po liście parametrów, użytkownik powinien byd w stanie
określid, jakie jest ogólne przeznaczenie takiego fragmentu kodu.
3.2 FUNKCJE WBUDOWANE MQL 4 predefiniuje trzy funkcje specjalne, są to funkcje o
identyfikatorach: init(), start() oraz deinit(). Funkcja init()
udostępnia wartośd typu prostego i może zostad zdefiniowana z listą
parametrów. Natychmiast po uruchomieniu programu (przez
dodanie go do wykresu i uruchomienie strategii), program
rozpoczyna pracę od predefiniowanej funkcji init() - o ile jej ciało
jest zdefiniowane. Fragment ten pełni niejako funkcję konstruktora,
gdzie np. ustalane są wartości najważniejszych zmiennych (ustalanie
ścieżek na dysku, typu wykresu, na jakim odbywa się handel).
Funkcja init() wywoływana jest tylko raz: po uruchomieniu
programu.
40
Natomiast w trakcie pojawiania się nowych danych
giełdowych wywoływana jest funkcja start(). Jest to najważniejsza
funkcja w całej strategii - zawiera wszystkie funkcje dodatkowe
związane z obliczeniami i ruchami cenowymi na wykresie. W funkcji
start() mogą na przykład znaleźd się fragmenty kodu
odpowiedzialne za wyszukiwanie formacji świecowych na wykresie,
wyszukiwanie przecięd średnich, czy też informujące o poziomie
wyprzedania instrumentu. Funkcja start() wywoływana jest dla
każdego napływającego odczytu (nie dla każdej nowej świecy).
Oznacza to, że przy szczególnie złożonych systemach pewne odczyty
mogą nie zostad przeanalizowane. W przypadku, gdy funkcja
analizuje poprzednie notowania, wtedy nowe notowanie jest
pomijane przez program (funkcja uruchomiona zostaje ponownie w
momencie zakooczenia poprzedniej analizy). Narzuca to pewne
ograniczenia na użytkownika - funkcja powinna byd w miarę prosta,
a cały kod powinien byd optymalny (bez zbędnych powtórzeo i
niepotrzebnych, dodatkowych wywołao).
Każdy program dołączony do wykresu kooczy pracę przez
wywołanie predefiniowanej funkcji deinit() (o ile jest ona
zdefiniowana).
41
Funkcja ta wywoływana jest automatycznie przed zamknięciem
skryptu, programu skojarzonego z wykresem, samego wykresu,
wyłączenia terminala, przed zmianą okna czasowego, zmianą
parametrów i zmianą konta. Funkcje init() oraz deinit() są tutaj
opcjonalne, jednak warto dodad chociaż krótką informację o
przebiegu działania programu.
3.3 DEBUGOWANIE KODU Niestety jednym z poważniejszych problemów przy pisaniu
strategii automatycznych w MQL 4 jest brak debuggera, czyli tzw.
"odpluskwiacza". Jest to program umożliwiający śledzenie na
bieżąco zmian w programie w trakcie jego wykonywania. Brak
takiego narzędzia jest szczególnie odczuwalny przy analizie
złożonych programów, gdzie błędy są bardzo trudne do
zlokalizowania. Poniżej przedstawiony zostanie jeden ze sposobów
na radzenie sobie z wyszukiwaniem błędów w kodzie.
42
Po pierwsze oczywiście, należy starad się ograniczad liczbę
błędów - głównie poprzez pisanie przejrzystych fragmentów kodu,
które najlepiej na bieżąco testowad.
Należy zacząd od tego, że spora ich częśd to np. łatwe do
znalezienia błędy składni. W takiej sytuacji wystarczy spojrzed na
okno "Błędy", odczytad i przeanalizowad informację. Należy mied
jednak świadomośd, że najpoważniejsze błędy, to tak zwane błędy
logiczne: kiedy to sam program działa bez zarzutu, jednak sygnały
kupna/sprzedaży płynące do nas z systemu nie pokrywają się z
rzeczywistością. W tym miejscu warto sprawdzid, czy opracowany
system "ma szansę w ogóle działad". Innymi słowy, czy na wykresie
można wskazad moment, w którym system powinien dad sygnał, a
jeżeli tak, to co było przyczyną braku takiego sygnału.
Okazuje się, że funkcja Alert() pełni tutaj bardzo istotną
rolę. Jest to jedna z funkcji wbudowanych, która pozwala wypisad
dowolny tekst na ekran (alternatywą może byd funkcja
MessageBox()). Przyczyną braku sygnału może byd niewłaściwa
interpetacja sygnału płynącego z danej pary walutowej. W tym
miejscu warto mied pod ręką szczegółowy opis funkcji generującej
sygnał wraz z danymi, jakie powinna ona udostępniad. Przekazując
wartośd udostępnianą do funkcji Alert(), można sprawdzid, co było
rezultatem działania fragmentu programu (jednocześnie
porównując wynik z wartością, której oczekiwano na wyjściu).
43
Analiza wszystkich funkcji pozwala wskazad fragment
programu generujący błędne sygnały. Badanie poszczególnych
fragmentów wewnątrz funkcji umożliwi określenie konkretnych linii
kodu, które są przyczyną błędu. Oczywiście w pewnych sytuacjach
już na etapie wstępnej analizy kodu może okazad się, że funkcja
generująca sygnał jest zbudowana błędnie. Opisany powyżej proces
debugowania może wydad się uciążliwy, jednak przy odrobinie
praktyki pozwala wyeliminowad właściwie 100% błędów w
programie. Na koniec należy wspomnied o dośd istotnej kwestii:
mianowicie korekty kodu przy użyciu wspomnianej metody możliwe
są tylko w godzinach, kiedy rynek walutowy nie jest zamknięty.
3.4 PRZYKŁADY 1. Napisz funkcję, która jako parametr dostaje napis, a na wyjściu
udostępnia liczbę samogłosek w łaocuchu.
2. Napisz funkcję, która jako parametr dostaje napis, a na wyjściu
udostępnia odpowiednio zakodowany napis. Np. a + 3 = d, c + 2 = e,
y + 2 = a. Drugim parametrem funkcji jest wartośd o jaką następuje
przesunięcie.
3. Napisz funkcję, która jako parametr otrzymuje dwa łaocuchy
znaków, a na wyjściu udostępnia jeden łaocuch, który zawiera na
zmianę znaki z dwóch powyższych.
44
4. Napisz program, który zlicza odczyty danych z wykresu i podaje
ich liczbę w funkcji.
5. Napisz program, który w funkcji init() ustawia wartośd pewnej
zmiennej double na wartośd 100.0. Dla każdego odczytu sprawdza
jego numer: jeżeli odczyt jest podzielny przez 7, to od zmiennej z
początku odejmuje 5.3, w przeciwnym wypadku dodaje 0.2.
Wartośd ta wyświetlana jest dla każdego odczytu podzielnego przez
5.
4. STRUKTURY DANYCH I FUNKCJE
MATEMATYCZNE W rozdziale drugim przedstawione zostały fundamentalne
typy danych. Należy jednak zauważyd, że wszystkie narzędzia
służące interpretacji kursu par walutowych opierają się na okresach
obejmujących minimum kilka świec. Stąd oczywiście prosty wniosek,
iż potrzebne są struktury danych umożliwiające przechowywanie
tych wartości w jednym miejscu tak, aby były one ze sobą logicznie
powiązane. W tym celu stosowane są właśnie tablice jedno oraz
wielowymiarowe.
Dodatkowo, do przetwarzania tablic często stosuje się
funkcje matematyczne, których pewien zbiór dostępny jest w języku
MQL. Oczywiście w dośd prosty sposób można opracowad własne
funkcje matematyczne.
4.1 TABLICE JEDNOWYMIAROWE Każda zdefiniowana w programie tablica posiada typ.
Możliwe jest tworzenie tablic o dowolnym typie podstawowym (np.
integer, double czy bool). Większośd danych na wykresie
prezentowana jest w formie jednowymiarowej tablicy typu double,
gdzie każdy element odpowiada jednemu odczytowi.
45
Elementy każdej tablicy w programie numerowane są od
zera. Przykładowo, 10-elementowa tablica indeksowana jest
numerami 0 - pierwszy element tablicy, aż do 9 - ostatni element
tablicy.
Oczywiście możliwe jest przechowywanie wszystkich
istotnych wartości w pojedynczych zmiennych, jednak przykładowo
dla zwykłej świecy japooskiej potrzeba aż 4 wartości: otwarcie,
zamknięcie, minimum oraz maksimum. Każda następna świeca, to
kolejne wartości. W MQL 4 dostępne są 4 tablice jednowymiarowe
wartości double przechowujące powyższe wartości świec:
Open[] - tablica przechowująca wartości otwarcia
kolejnych świec,
Close[] - tablica z wartościami zamknięcia,
High[] - wartości maksymalne dla świec,
Low[] - wartości minimalne dla świec.
Powyższe predefiniowane zmienne w oczywisty sposób ułatwiają
wszelkie możliwe analizy danych.
46
Do skutecznego stosowania tablic wymagane jest również
opanowanie kilku prostych funkcji. Jedną z najważniejszych jest
ArraySize(...), jako parametr przyjmuje dowolną tablicę, natomiast
udostępnia jej liczbę elementów. Należy zdad sobie sprawę, że
bardzo często dokładna liczba elementów tablicy nie jest znana.
Możliwe jest jednak wywołanie funkcji, której parametrem jest
dowolna tablica, a udostępnianą wartością właśnie jej liczba
elementów. Połączenie ArraySize(...) z pętlą FOR pozwala na
przegląd dowolnej struktury w zaledwie kilku krokach.
Przy pomocy ArraySize(...) w prosty sposób można określid też, czy
w tablicy przechowywana jest parzysta liczba elementów.
Inną użyteczną funkcją jest ArrayMinimum(...), która
udostępnia element minimalny w tablicy przekazywanej jako
parametr. Możliwe jest napisanie własnej wersji opisywanej funkcji,
która udostępnia minimum z tablicy z przedziału zadanego jako
parametr.
47
Kolejną ciekawą funkcją jest ArrayInitialize(...), która ustala
wartości tablicy według zadanego parametru. Można jednak
przygotowad własną wersję funkcji, która wypełnia tablicę
wartościami losowymi z zadanego przedziału. Przykład taki
przestawiony zostanie podczas opisu funkcji matematycznych w
dalszej części tego rozdziału.
4.2 TABLICE WIELOWYMIAROWE Oprócz zwykłych, jednowymiarowych tablic, możliwe jest
też stosowanie tablic wielowymiarowych. Tablica dwuwymiarowa
interpretowana jest jako struktura posiadająca określoną liczbę
wierszy i kolumn. Pojedyncze wartości znajdują się na przecięciu
wierszy i kolumn. Analogicznie, tablica trójwymiarowa posiada
również trzeci wymiar, a każdy z elementów znajduje się na
przecięciu wszystkich trzech wymiarów.
48
O ile bez tablic jednowymiarowych, przygotowanie
jakiejkolwiek strategii jest praktycznie niemożliwe, to stosowanie
struktur wielowymiarowych można zastąpid odpowiednią liczbą
elementów jednowymiarowych.
4.3 FUNKCJE MATEMATYCZNE W MQL 4 dostępny jest szereg funkcji matematycznych
pozwalających znacznie uprościd obliczenia. Dla osób niezwiązanych
z programowaniem, nieco dziwny może byd brak operatora
potęgowania. Oczywiście proste obliczenia można wykonad przy
pomocy wielokrotnego mnożenia, jednak dla formuł, w których w
49
wykładniku potęgi jest duża liczba warto zastosowad funkcję
MathPow(...):
Podobna sytuacja występuje przy pierwiastkowaniu
wartości, kiedy to należy skorzystad z funkcji MathSqrt(...). Jedną z
funkcji stanowi wbudowany w MQL 4 generator liczb
pseudolosowych (platforma MetaTrader nie posiada rzeczywistego
generatora liczb losowych).
W połączeniu z funkcjami tablicowymi, można przygotowad wiele
interesujących struktur.
Wreszcie jedną z najważniejszych funkcji jest MathAbs(...),
która pozwala obliczyd wartośd bezwzględną dowolnego wyrażenia.
Należy zdad sobie sprawę, jak istotna jest to funkcja w kontekście
analizy danych giełdowych. Nierzadko dochodzi do sytuacji, że
wymagane jest obliczenie ruchu ceny w dwie strony, czyli po prostu
zasięgu ceny. Dzięki funkcji MathAbs(...) możliwe jest obliczenie
różnicy pomiędzy dwoma wartościami bez względu na to, która z
nich jest większa.
50
Charakterystyczną cechą wbudowanych funkcji
matematycznych (podobnie zresztą jak innych typów funkcji w MQL
4) jest ich spójna definicja. Każda z nich posiada nazwę zaczynającą
się od "Math...", następnie do nazwy dołączona jest nazwa
właściwa, np. "Pow" - potęga (ang. Power). Wartością udostępnianą
jest double.
4.4 BUDOWA WŁASNEJ FUNKCJI
MATEMATYCZNEJ Pomimo licznych funkcji wbudowanych, często okazuje się,
że kodu potrzebnego użytkownikowi w danej strategii niestety nie
ma wśród elementów języka MQL 4. W takiej sytuacji możliwe są
dwa wyjścia:
opracowanie własnej funkcji wykorzystującej jedną (lub
kilka) funkcji wbudowanych. Zabieg taki wydaje się dużo
prostszy z punktu widzenia użytkownika i często wymaga
tylko kilku dodatkowych linii kodu. Niestety w MQL 4 nie
ma możliwości tzw. przeciążania, co ma miejsce w językach
obiektowych i pozwala dosd prosto zmodyfikowad kod
istniejących funkcji.
drugim rozwiązaniem jest zaprojektowanie i napisanie
własnej funkcji matematycznej od początku. Jest to zadanie
znacznie trudniejsze, ponieważ trzeba dokładnie wiedzied,
jak działa funkcja wbudowana, lub też wymyślid własne
rozwiązanie.
Funkcja do wyszukiwania elementu minimalnego przedstawiona
została poniżej.
51
Funkcja udostępniająca drugi od kooca element minimalny
(z zastosowaniem funkcji Min(...)) przedstawiona została poniżej.
4.5 PRZYKŁADY 1. Napisz funkcję sortującą i wypisującą na ekran kolejne elementy
tablicy.
2. Napisz własną wersję funkcji ArrayMin(...), która dla podanej
tablicy udostępnia wartośd minimalną.
3. Napisz funkcję, która jako parametr dostaje dwie liczby:
przedziały oraz trzeci: tablicę. Funkcja wypełnia określony fragment
tablicy elementami losowymi. Fragment tablicy zadany jest swoma
52
pierwszymi argumentami. Na koocu funkcja udostępnia sumę tych
elementów tablicy.
4. Napisz program, który 4 tablice: Open[], Close[], Low[] oraz
High[] przepisuje do tablicy dwuwymiarowej, gdzie każdy wiersz
tablicy to odpowiednio tablice Open[], Close[], Low[] oraz High[]
powiększone o 1 puste pole. Na ostatnim elemencie wpisane
zostanie maksimum z każdego wiersza. Napisz również funkcję,
która udostępnia iloczyn elementów znajdujących się na ostatnich
polach każdego wiersza.
5. Napisz funkcję, która nie przyjmuje żadnych parametrów.
Wewnątrz funkcji tworzona jest trójwymiarowa tablica 5x5x5
inicjalizowana elementami losowymi. Następnie wyzerowane
powinny zostad elementy znajdujące się na środku każdego
wymiaru oprócz środka tablicy (element 3x3x3). Wszystkie
pozostałe, parzyste elementy tablicy powinny zostad do siebie
dodane, a uzyskana wartośd udostępniona na wyjściu funkcji.
5. ZMIENNE PREDEFINIOWANE W poprzednim rozdziale opisany został szereg
podstawowych funkcji wbudowanych w MQL 4 ułatwiających pracę
z danymi. Należy jednak pamiętad, że podstawowym zadaniem
strategii automatycznych i systemów ekspertowych w handlu
walutowym jest śledzenie w czasie rzeczywistym danych
napływających z rynku. Jednocześnie w tworzonym programie
muszą znaleźd się informacje o typach realizowanych zleceo
(zlecenia krótkie i zlecenia długie) a także o instrumencie. Możliwe
jest opracowanie systemu grającego tylko na parze walutowej
EURUSD - jednak od programisty wymagane jest, aby ta informacja
podana była jawnie w kodzie. Podobnie wygląda sytuacja z oknem
czasowym, na jakim może odbywad się handel. Do poprawnego
działania systemu należy określid, czy strategia działa dla dowolnych
danych, czy np. tylko na wykresie czterogodzinnym. Są to informacje
dla tradera dośd oczywiste i nie zwraca się na nie uwagi. Niestety
53
strategie automatyczne rządzą się swoimi prawami i wymagają
opracowania szeregu dodatkowych założeo.
5.1 ŚWIECE JAPOŃSKIE A ZMIENNE
PREDEFINIOWANE Świece japooskie w MQL to tablice wartości double, gdzie
każdy z elementów tablicy odpowiada jednej świecy. Jest to
zasadnicza różnica pomiędzy interpretacją wykresów przez
użytkownika, gdzie świece i formacje świecowe po prostu "widad" a
świecami w kodzie. Każda, nawet najprostsza formacja świecowa
musi zostad opisana szeregiem warunków, aby można było ją w
prosty sposób wskazad w tablicach Open[], Close[], High[] oraz
Low[]. Pewnym ułatwieniem jest tutaj zależnośd, że np. wartośd
otwarcia 5 świecy znajduje się w tablicy Open[] na 5 miejscu (czyli
Open[4] - indeksy od zera), a wartośd zamknięcia w tablicy Close[]
również na 5 miejscu. Dzięki temu w prosty sposób można odróżnid
świece wzrostowe oraz spadkowe:
Długie cienie świecy, to nic innego jak sytuacja, kiedy
wartości skrajne oddalone są dośd wyraźnie od wartości
otwarcia/zamknięcia świecy. Dla kilku świec o długich cieniach u
góry można wysnud hipotezę, iż cena instrumentu napotkała pewien
opór. Do opisania sytuacji w programie należy sprawdzid długośd
cieni kilku ostatnich świec.
54
Oczywiście bardziej złożone analizy wymagają większej
liczby warunków opisujących nawet pojedynczą świecę. Dodatkowo
należy pamiętad o istotnej zależności: duża liczba warunków wpływa
negatywnie na liczbę generowanych sygnałów. Sygnały są
pewniejsze, jednak jest ich dużo mniej. W przypadku strategii
automatycznej użytkownik stawia przede wszystkim na skutecznośd
systemu. Dla systemu ekspertowego duża liczba sygnałów (z których
częśd osoba obserwująca rynek może na bieżąco odrzucid) może
wydad się znacznie trafniejszym rozwiązaniem.
5.2 ZMIENNE BID I ASK Dwie zmienne predefiniowane określające aktualne ceny
instrumentów. Ask określa ostatnio znaną cenę dla kupującego, po
której aktualny instrument jest oferowany. Kurs Ask jest zawsze
wyższy od kursu Bid. Pamiętad należy o zasadzie, że długa pozycja,
czyli zakup instrumentu takiego jak pary walutowe, indeksu czy
surowca dokonywana jest po cenie Ask, czyli po cenie wyższej. Z
kolei Bid określa ostatnio znaną cenę oferowaną przez kupującego
dla sprzedającego na aktualnym instrumencie. Kurs Bid jest zawsze
niższy od kursu Ask.
Powyższe wartości są ważne w szczególności dla strategii
automatycznych, w których ustalana jest cena dla zajęcia pozycji.
55
Przy każdym odczycie możliwe jest sprawdzenie aktualnej wartości
Bid lub Ask oraz porównanie tych wartości z ustaloną wcześniej
ceną.
Kolejnym zastosowaniem wspomnianych zmiennych jest
szacowanie wartości Stop Loss oraz Take Profit podczas składania
zlecenia. W momencie pojawienia się dogodnego sygnału do zajęcia
pozycji sprawdzana jest aktualna cena wybranego instrumentu.
Następnie ustalany jest poziom Stop Loss - np. na podstawie
wskaźnika ATR (więcej o tej metodzie w rozdziale 7), lub też na
podstawie wcześniej ustalonej wartości.
5.3 FUNKCJE SYMBOL() I PERIOD() Funkcje Symbol() oraz Period() związane są z problemem
opisanym na początku tego rozdziału. Chodzi tutaj o automatyczny
handel na z góry założonych instrumentach oraz na określonym
oknie czasowym. Funkcja Symbol() udostępnia zmienną łaocuchową
(String), która opisuje instrument na aktualnym wykresie. Jednym z
podstawowych zastosowao funkcji Symbol() może byd tutaj
sprawdzenie, jakiej wartości jest równy jeden pips.
56
Popularnym zabiegiem jest też opracowanie oddzielnych
funkcji generujących sygnały dla par walutowych. Przykładowo,
jeżeli aktualnie wybranym wykresem jest EURUSD, wtedy
wywoływane są funkcje związane ze średnimi kroczącymi.
Natomiast w przypadku par z jenem mogą to byd funkcje generujące
sygnały oparte na oscylatorach.
57
Drugą wspomnianą funkcją jest tutaj Period(), czyli
sprawdzenie, jakie okno czasowe jest aktualnie wybrane na danym
wykresie. Należy przy tym pamiętad, iż wartości udostępniane przez
tę funkcję podawane są w minutach: przykładowo dla wykresów
godzinnych wartośd funkcji Period() wynosi 60. Najczęściej
opracowane systemy automatyczne wymagają konkretnego okna
czasowego, na którym strategia działa najlepiej.
Przykładowo, strategie oparte o skalpowanie mogą sprawdzad się
bardzo dobrze dla wykresu 5 - minutowego, a dla 30 - minutowych
nie działad.
5.4 PROSTY SYSTEM TRANSAKCYJNY Przy tworzeniu prostego systemu transakcyjnego, który
informuje użytkownika o punkcie wejścia na rynek należy brad pod
uwagę kilka czynników. Przede wszystkim sytuacja wejścia na rynek
powinna zostad dokładnie opisana. Użytkownik powinien np. w
punktach wskazad najistotniejsze elementy strategii:
1. Strategia dla instrumentu EURUSD na oknie czasowym
minimum 15 minut;
2. Tylko pozycje krótkie;
3. Wystąpienie świecy wzrostowej o długim korpusie;
4. Długie cienie nad świecą;
5. Korekta kursu do około połowy wartości długiej świecy
wzrostowej.
58
Na tym etapie można stworzyd szkielet programu, lub od razu
przejśd do kodowania:
Podczas przygotowania nawet najprostszego systemu
konieczne jest jego gruntowne przetestowanie. W przypadku
strategii automatycznych służy do tego wbudowany tester strategii,
z kolei w przypadku systemów ekspertowych niezbędne jest ciągłe
śledzenie sygnałów generowanych przez program. Należy
oczywiście założyd, że konieczne będzie również przeprowadzenie
procesu debugowania (opisanego szerzej w rozdziale 3) a także
wprowadzenie modyfikacji kodu.
5.5 PRZYKŁADY 1. Napisz program, który oblicza liczbę świec wzrostowych oraz
spadkowych dla ostatnich 50 świec, a także informuje, czy pojawiły
się na wykresie świece Doji.
2. Napisz program, który działa tylko na wykresie 15 - minutowym
na parze EURUSD i informuje użytkownika o pojawieniu się tylko
nowej świecy. Dodatkowo podawana jest informacja, która świeca z
kolei została odczytana podczas działania programu.
59
3. Napisz program, który dla aktywnego instrumentu oblicza spread.
Następnie dodaje go do TP oraz odejmuje od SL. Wartości TP oraz SL
powinny zostad podane z menu. Dodatkowo, w opcjach powinna
byd możliwośd wybrania opcji zlecenia: kupno oraz sprzedaż. Dla
kupna TP > SL, dla sprzedaży TP < SL. Pomoc: skorzystaj ze
zmiennych extern.
4. Napisz program, który dla dowolnej pary z jenem oblicza liczbę
pipsów o jakie zmienił się kurs pary w ciągu ostatnich n odczytów
świecy (dla dowolnego wykresu o oknie czasowym mniejszym od
godziny) - n jest liczbą świec braną pod uwagę.
5. Napisz program, w którego menu podawana jest oczekiwana
liczba pipsów zysku. Następnie program sprawdza liczbę świec
wzrostowych oraz spadkowych w ciągu ostatnich 50 odczytów.
Następnie obliczany jest średni wzrost dla jednej świecy. Wreszcie
podawana jest szacowana liczba odczytów, po których osiągnięty
zostanie założony zysk.
6. FUNKCJE DODATKOWE Oprócz licznych funkcji i zmiennych predefiniowanych w
poprzednich rozdziałach, w języku MQL 4 jest też ogromna liczba
funkcji związanych z zarządzaniem kontem, funkcji daty i czasu a
także pozwalających na handel na innych instrumentach niż
aktualnie wyświetlony. Opisywane w tym rozdziale funkcje z jednej
strony nie są kluczowym elementem strategii automatycznych -
stanowią tylko ich dopełnienie. Z drugiej jednak strony poznanie ich
w znacznym stopniu ułatwi tworzenie programów automatycznych,
które pozwalają ograniczyd funkcję użytkownika do minimum.
6.1 FUNKCJE DO ZARZĄDZANIA KONTEM Pierwszą grupę stanowią funkcje do zarządzania kontem.
Przy realizacji większości transakcji jedną z ważniejszych wartości (z
punktu widzenia użytkownika) jest wielkośd dostępnego kapitału.
Oczywiście podczas handlu każdy z użytkowników konta sam
60
dobiera wielkośd zlecenia i szacuje ryzyko. W wypadku strategii
automatycznych nawet ogólne określenie poziomu ryzyka jest
często niemożliwe, a jednym z podstawowych narzędzi jest w tym
wypadku funkcja AccountFreeMargin(...), która sprawdza liczbę
dostępnych na koncie środków.
Obok wspomnianej funkcji kolejnym istotnym elementem
jest AccountFreeMarginCheck(...), czyli funkcja sprawdzająca
wartośd środków na koncie po złożeniu zlecenia podanego jako
parametr. Zabieg taki umożliwia np. zablokowanie możliwości
wykonywania dalszych transakcji po przekroczeniu pewnej kwoty na
koncie.
Powyższe funkcje stosowane są przede wszystkim podczas
strategii automatycznych, gdzie do programu należy każdy aspekt
61
handlu: od wyznaczenia potencjalnego poziomu wejścia na rynek,
poprzez ustalenie parametrów zlecenia, złożenie zlecenia, jego
zarządzanie a także zamknięcie. W przypadku systemów
ekspertowych możliwe jest pominięcie stosowania powyższych
funkcji, jednak to do użytkownika należy decyzja, do jakiego stopnia
jest skłonny oddad sterowanie handlem do programu.
Drugą grupę funkcji związanych z handlem stanowią
elementy takie jak AccountCompany(), czy AccountNumber(). W
pierwszej chwili może wydawad się, że ich zastosowanie w handlu
jest znikome, jeżeli jednak użytkownik przygotowuje program
dedykowany dla konkretnego konta, użytkownika, bądź też
działający tylko u danego brokera, wtedy dobrze jest sprawdzid
wartości takie, jak numer konta. Pozwoli to ograniczyd dostęp do
strategii osobom nieupoważnionym.
6.2 FUNKCJE DATY I CZASU W systemach transakcyjnych, jednym z pomijanych
elementów jest analiza fundamentalna. W prostym systemie
automatycznym nie jest możliwa dynamiczna analiza napływających
danych. Należy jednak pamiętad, że obecnie większośd serwisów
związanych z rynkiem podaje istotne informacje o ważnych
62
wydarzeniach na cały tydzieo. Dzięki temu możliwe jest np.
określenie dni, w których handel jest zbyt ryzykowny (wielu
traderów rezygnuje z gry w piątek przed weekendem). W takiej
sytuacji możliwe jest zastosowanie funkcji DayOfWeek(), która
udostępnia aktualny dzieo tygodnia.
Warto też przyjrzed się jednej z metod na wprowadzenie
własnego niestandardowego okna czasowego. Dzięki funkcji
TimeCurrent(), która udostępnia liczbę sekund, jakie minęły od 1
stycznia 1970 roku (notacja systemów UNIX), możliwe jest
określenie liczby sekund od ostatniego odczytu. Przykładowo
sprawdzenie zależności "aktualny czas = poprzedni odczyt + 20
sekund" daje dostęp do okna czasowego równego 20 sekund. Jest
to jeden ze sposobów na analizę danych tylko w określonych
momentach czasu - przydatne dla bardzo złożonych funkcji, które w
okresach największej aktywności na giełdzie nie są w stanie
analizowad każdego odczytu z osobna.
6.3 DANE HISTORYCZNE I INNE INSTRUMENTY Interesującym aspektem automatycznych systemów
transakcyjnych jest możliwośd analizy danych a także składania
zleceo na innych instrumentach, niż aktualnie wyświetlany. Oznacza
to, że uruchamiając strategię EURUSD możliwe jest złożenie zlecenia
63
na parze USDJPY (oczywiście bez otwierania dodatkowego okna). W
prostych systemach transakcyjnych jest to raczej rzadko spotykana
cecha, jednak warto pamiętad o tym, iż jeden wykres z włączoną
strategią może sprawdzad sytuację na kilku parach walutowych.
Odpowiednikiem tablic Close[], Open[], High[] oraz Low[] dla
innych instrumentów są funkcje iClose(...), iOpen(...), iHigh(...) oraz
iLow(...). Co ciekawe nie są to tablice, lecz funkcje udostępniające
wartośd double dla wybranego instrumentu, okna czasowego oraz
przesunięcia względem aktualnego odczytu. W dośd prosty sposób
można jednak wartości te wpisad do tablicy.
Jednym z ciekawych zagadnieo może byd analiza par, gdzie
w jednej z nich dolar jest walutą bazową, a w innej - kwotowaną.
Obserwując spadki na jednej z par walutowych możliwa jest
natychmiastowa reakcja na innym instrumencie.
64
6.4 UŻYTECZNE FUNKCJE Oprócz opisanych w powyższym rozdziale funkcji
związanych z zarządzaniem kontem oraz pozycją warto wspomnied
o funkcjach istotnych z dwóch powodów. Po pierwsze, zwłaszcza w
przypadku nowych strategii automatycznych istotne jest dokładne
sprawdzenie ich skuteczności. Funkcja IsDemo() umożliwia
sprawdzenie, czy konto, na którym aktualnie odbywa się handel jest
w rzeczywistości kontem demonstracyjnym, co nie narazi
użytkownika na żadne dodatkowe straty. Innym ciekawym
rozwinięciem (szczególnie dla firm) dla funkcji IsDemo() może byd
przygotowanie wersji demonstracyjnej funkcji, z której korzystanie
na koncie rzeczywistym jest możliwe dopiero po wykupieniu
abonamentu.
Można przyjąd, że obok funkcji IsTradeAllowed(), która
umożliwia handel dla wybranej strategii, są to funkcje zapewniające
pewnego rodzaju bezpieczeostwo.
65
Wreszcie ostatnią opisywaną w tym rozdziale funkcją jest
IsConnected() - niestety awarie związane z serwerem czasami się
zdarzają i nie można ich uniknąd. W przypadku częstych awarii
można zamknąd zlecenie minimalizując ewentualne straty gracza.
6.5 PRZYKŁADY 1. Napisz program, który może zostad uruchomiony tylko na
platformie firmy Iron Fx. W menu możliwe jest podanie minimalnej
liczby środków na koncie. Program informuje o możliwości złożenia
zlecenia, kiedy 3 ostatnie świece były jednego koloru (odpowiednio
możliwośd kupna lub sprzedaży), przy czym liczba środków na
koncie musi byd większa, niż podana w menu wartośd.
2. Napisz program, który w menu posiada parametry: liczba świec
przy odczycie, kierunek trendu: kupno/sprzedaż oraz oczekiwany
zysk w pipsach. Program sprawadza numer konta użytkownika (nr
podany w menu powinien zgadzad się z numerem w MetaTrader).
Następnie dla każdej świecy obliczany jest ruch ceny - różnica
pomiędzy ceną otwarcia, a ceną zamknięcia. Program informuje
użytkownika, czy dla takich parametrów udałoby się zrealizowad
zysk, lub ewentualnie ile pipsów braknie do realizacji zysku.
Program działa na parach EURUSD oraz USDJPY.
3. Napisz program, który w przypadku spadku na kursie EURUSD w
ciągu 3 ostatnich świec, sprawdza, czy na parze USDCHF nastąpił
66
wzrost w ciągu trzech ostatnich świec i ewentualnie podaje
informację o wzroście. Przy czym wzrost na parze USDCHF musi
mied zasięg minimum 3/4 spadku na parze EURUSD.
4. Napisz program, którzy tworzy trójwymiarową macierz:
pierwszym wymiarem są 4 pary walutowe: EURUSD, USDJPY,
USDCHF oraz USDCAD. Kolejny wymiar to ceny otwarcia,
zamknięcia, maksimum oraz minimum. Wreszcie ostatni wymiar to
liczba odczytów: 4. W takiej macierzy 4x4x4 należy wskazad: która
para walutowa zanotowała największą zmianę kursu (w pipsach).
5. Napisz program, który dla podanego w programie poziomu SL
oblicza, czy zlecenie jest możliwe do realizacji: uwzględniając n
ostatnich odczytów (n jako parametr w menu) ustalid lokalne
maksimum (dla pozycji krótkiej) lub minimum (dla pozycji długiej) i
sprawdzid, czy różnica pomiędzy ceną (Bid lub Ask w zależności od
zlecenia) o lokalnym optimum jest mniejsza niż wartośd SL podana
w menu. Rodzaj zlecenia wybierany jest z menu.
7. WSKAŹNIKI Zdecydowana większośd systemów automatycznych w
większym stopniu opiera się na wykorzystaniu wskaźników analizy
technicznej. Określenie kierunku ruchu ceny na wykresie opiera się
na obserwacji, natomiast w przypadku języka MQL 4 wszystkie
wskaźniki zamienione zostają na wartości liczbowe (podobnie, jak
ma to miejsce w przypadku świec japooskich). Interpretacja i analiza
takich danych odbiega istotnie od tradycyjnej analizy technicznej i
wymaga pewnych dodatkowych umiejętności. Informacje
przedstawione w dwóch kolejnych rozdziałach mają na celu
nakreślenie najistotniejszych elementów i sposobów wyznaczania
punktów wejścia na rynek. Informacje te mogą byd stosowane z
powodzeniem w systemach ekspertowych ułatwiających handel
(gdzie informacja o sygnale przekazywana jest do wiadomości
użytkownika), jak i strategiach automatycznych, gdzie użytkownik
obserwuje tylko efekty działania strategii. Ze względu na
zachowanie spójności niniejszego skryptu, informacje o systemach
67
automatycznych i składaniu zleceo w programie przedstawione
zostaną w rozdziale 9.
7.1 LISTA PARAMETRÓW FUNKCJI Wszystkie funkcje wbudowane dotyczące wskaźników w
MQL 4 mają podobną konstrukcję - chodzi tutaj przede wszystkim o
listę parametrów funkcji. Przed szczegółowym opisem tej listy,
należy zdad sobie sprawę, jak dokładnie działa wskaźnik w MQL 4.
Dowolny wskaźnik (średnia krocząca, oscylator, SAR) to wartośd
liczbowa naniesiona na wykres jako obiekt graficzny: i tak, średnia
krocząca to linia łącząca ze sobą odczyty z poszczególnych chwil
czasu. Mając to na uwadze interpretacja funkcji wskaźnika w MQL 4
wydaje się już oczywista: jest to funkcja, która dla zadanego
instrumentu udostępnia wartośd double, czyli punkt, który powinien
zostad umieszczony na wykresie. Z każdym odczytem świecy z
wykresu sytuacja wygląda dokładnie tak samo, dlatego kluczowym
problemem jest tutaj znalezienie odpowiedniej zależności pomiędzy
ceną instrumentu w danej chwili, a wartością wskaźnika dla tego
instrumentu.
Mając powyższe wiadomości, oczywista w interpretacji jest
również lista parametrów funkcji. Każdy wskaźnik udostępnia
wartośd dla konkretnego instrumentu, konkretnej chwili czasu - stąd
nie powinny dziwid wymagane parametry takie jak: nazwa
instrumentu, czy okno czasowe. Funkcja udostępnia wtedy wartośd
odczytu dla danego instrumentu w podanej chwili. Powtarzalnym
parametrem jest też przesunięcie (ang. shift) występujące
przeważnie jako ostatni parametr na liście. Chodzi tutaj o to,
względem której świecy obliczany będzie dany wskaźnik. Nic nie stoi
na przeszkodzie, aby obliczyd wartośd wykładniczej średniej
kroczącej z ostatnich 20 okresów względem 9 świecy wstecz - wtedy
przesunięcie będzie właśnie równe 9.
Oprócz opisanych powyżej zmiennych z listy argumentów,
dla każdego wskaźnika istnieje też kilka parametrów unikalnych,
68
takich jak np. lista okresów, na podstawie której liczona jest wartośd
średniej kroczącej.
7.2 ŚREDNIE KROCZĄCE Jednym z najprostszych, a jednocześnie najskuteczniejszych
systemów automatycznych jest strategia oparta na średnich
kroczących. Sygnały generowane przez średnie generowane są w
momencie przecięcia wykresu przez średnią. Oczywiście w
przypadku wykresów świecowych należy przyjąd spójny sposób
obliczania wartości wykresu - np. na podstawie cen otwarcia
poszczególnych świec. Samo sprawdzenie punktu przecięcia
wskaźnika z wykresem daje tylko sygnał. Następnie należy wskazad
potencjalny kierunek ruchu ceny:
69
przecięcie wykresu przez średnią od góry to sygnał kupna;
przecięcie wykresu przez średnią od dołu to sygnał
sprzedaży.
W tym kontekście przecięciem od góry można określid sytuację,
kiedy wartości średniej są większe od wartości wykresu i w miarę
zbliżania się do aktualnego odczytu maleją:
Analogiczną sytuację można opisad w przypadku sygnału
sprzedaży, kiedy to wartości średniej są mniejsze od wartości
wykresu i w miarę zbliżania się do aktualnego odczytu rosną.
Wiele systemów transakcyjnych opartych jest na kilku
średnich kroczących. Jedną z najpopularniejszych wersji jest
sytuacja, kiedy to na wykresie znajdują się dwie średnie kroczące, a
sygnały generowane są w momencie przecięcia średnich.
70
Nieco trudniejsze jest tutaj wskazanie oczekiwanego
kierunku ruchu instrumentu. Można jednak wskazad to, wybierając
główną średnią, np. tę o mniejszym okresie, która szybciej reaguje
na zmiany cen instrumentu. Wynikiem tego jest przecinanie średniej
o dłuższym okresie przez średnią o okresie krótszym. Przecięcie
średniej od dołu to sygnał sprzedaży, natomiast przecięcie od góry,
to sygnał kupna. Może to zostad przedstawione w podobny sposób,
jak powyższy przykład. Jedyną różnicą tutaj jest to, że pod uwagę
brane są odczyty dwóch różnych średnich kroczących, których
różnica w miarę zbliżania się do aktualnych odczytów maleje.
7.3 OSCYLATORY Pomimo niewątpliwej skuteczności dobrze dobranych
średnich kroczących ważne jest, aby do analizy włączyd dodatkowe
wskaźniki weryfikujące poprawnośd sygnałów. Dobrym przykładem
może byd tutaj np. CCI, czy też oscylator stochastyczny. Co ciekawe,
wskaźniki widoczne w osobnym oknie (takie jak dwa powyższe)
oparte są na tych samych zasadach. Lista parametrów zawierająca
71
nazwę symbolu, przedział czasowy i parametry charakterystyczne
dla siebie przekazywana jest do funkcji, która następnie udostępnia
wartośd wskaźnika. Interpretacja wskaźnika CCI jest bardzo prosta:
chodzi tutaj o poziomy: poniżej -100 oraz powyżej 100. Wskaźnik
poniżej poziomu -100 przecinający linię na tym poziomie od dołu
świadczy o sygnale kupna. W przypadku poziomu 100 chodzi
oczywiście o przecięcie tej wartości od góry.
Liczba odczytów wstecz stosowanych do wygenerowania
sygnału świadczy o jego dokładności. Przykładowo, jeden ze
scenariuszy dla wskaźnika CCI wygląda następująco:
wartośd wskaźnika znajduje się nad poziomem -100 lecz
maleje;
przecięcie poziomu -100 przez wskaźnik;
dalszy spadek wartości wskaźnika;
stopniowy wzrost wartości CCI;
przecięcie poziomu -100;
wzrost ponad poziom -100 - sygnał kupna.
Niestety tak szczegółowa interpretacja wskaźnika może
doprowadzid do sytuacji, kiedy liczba wygenerowanych sygnałów
wejścia na rynek jest bliska zeru.
72
Nieco bardziej złożonym wskaźnikiem do analizy jest
oscylator stochastyczny.
Na wykresie oscylatora obecne są dwie średnie, jednak funkcja
udostępnia tylko jedną wartośd. W tym wypadku należy zwrócid
uwagę na jeden z parametrów charakterystycznych dla tego
oscylatora: przełącznik, która ze średnich jest aktualnie aktywna. Dla
MODE_MAIN funkcja udostępnia wartośd głównej średniej,
natomiast dla MODE_SIGNAL jest to wartośd średniej sygnałowej.
Dla poprawnej interpretacji tego wskaźnika należy wywoład funkcję
dwa razy z różnymi parametrami signal, a następnie przeanalizowad
wyniki. Jedną z możliwych interpretacji są tutaj dwa poziomy
analogiczne, jak w przypadku wskaźnika CCI.
7.4 ATR I STOP LOSS Wszystkie powyższe przykłady odnoszą się tylko do
generowania sygnałów, jednak równie istotnym elementem jest
ustalenie poziomów Stop Loss i Take Profit. Jednym ze sposobów
może byd tutaj wykorzystanie wskaźnika ATR do obliczenia dynamiki
73
zmiany cen na rynku. Często określa się zależnośd pomiędzy ATR
oraz Stop Loss jako: Stop Loss = ATR *n, gdzie n jest tutaj
szacowanym wskaźnikiem ryzyka. Przykładowo, dla wartości n=1.5,
wartośd Stop Loss powinna zostad ustalona na ATR*1.5. Kolejnym
etapem jest wyznaczenie lokalnego minimum/maksimum na
wykresie w obrębie kilku najbliższych świec.
W przypadku, gdy oszacowana wartośd Stop Loss jest mniejsza niż
odległośd do lokalnego dołka - transakcja może zostad uznana za
bezpieczną.
Sam wskaźnik ATR może byd również stosowany jako
generator sygnałów. Tutaj jednak interpretacja wyników zależy od
indywidualnych preferencji użytkownika. Duża zmiennośd wskaźnika
oznacza dużą dynamikę cen. Dla jednego gracza może to byd
miejsce do szukania punktów wejścia na rynek, z kolei dla innych -
sygnał na przeczekanie.
74
7.5 ŁĄCZENIE WSKAŹNIKÓW Zwłaszcza w przypadku bardziej złożonych systemów
automatycznych konieczne jest stosowanie kilku sygnałów
jednocześnie, co pozwala istotnie ograniczyd liczbę błędnych wejśd
na rynek. W przypadku systemów ekspertowych nie jest to
najistotniejsze, ponieważ każdy z sygnałów weryfikowany jest przez
użytkownika. Należy pamiętad o stosowaniu różnych wskaźników, tj.
należących do różnych grup. Możliwe jest oczywiście opracowanie
systemu opartego na kilku średnich kroczących o różnym okresie,
jednak poprawna implementacja wszystkich jego cech może byd
kłopotliwa dla początkującego programisty. Na początku zaleca się
stosowanie przede wszystkim średniej kroczącej połączonej z
dowolnym oscylatorem. Taka strategia pozwala generowad sporo
istotnych sygnałów wejścia na rynek. Przecięcie średniej kroczącej z
wykresem to potencjalny sygnał, który następnie weryfikowany jest
przez potwierdzenie sygnału na oscylatorze.
Oczywiście tak przygotowany system powinien zostad
poddany szczegółowym testom - sprawdzeniu jego skuteczności dla
różnych par walutowych, okresów oraz okien czasowych. O ile w
przypadku systemów ekspertowych błędny sygnał może zostad
szybko odrzucony, to w przypadku strategii automatycznych każda
pomyłka oznacza stratę gracza.
Problem handlu z trendem może nie byd oczywisty w
systemach automatycznych. Opracowanie metody pozwalającej
wskazad kierunek trendu samo w sobie może byd zadaniem
trudnym. Niestety nie istnieje wskaźnik pozwalający na wyznaczenie
kierunku ruchu danego instrumentu. Jedną z metod może byd tutaj
wyznaczenie globalnego oraz lokalnych maksimów, co pozwoli
potwierdzid, iż kolejne szczyty cenowe znajdują się coraz niżej (w
przypadku trendu spadkowego).
75
7.6 PRZYKŁADY 1. Napisz program, gdzie w menu dla średniej kroczącej można
podad typ średniej (wykładnicza, prosta), sposób obliczania ceny
(otwarcie, zamknięcie, średnia z max i min) oraz okres. Program
generuje przy każdym odczycie informacje o tym, jaka jest różnica
pomiędzy ceną a wartością średniej. Dodatkowo powinna zostad
wyświetlona informacja o tym, czy aktualnie średnia znajduje się
nad czy pod wykresem ceny.
2. Napisz program, który jako parametr dostaje dwa parametry:
górną oraz dolną granicę dla wskaźnika CCI. W momencie przecięcia
górnej granicy od góry pojawia się informacja o sygnale sprzedaży.
76
Natomiast przy przecięciu dolnej granicy od dołu - informacje o
sygnale kupna.
3. Napisz program, który generuje sygnał wejścia na rynek w
momencie, kiedy średnia o okresie podanym jako parametr przecina
wykres świecowy, przy czym wysokośd świecy musi wynosid
minimum n pipsów, gdzie n jest parametrem podanym w menu.
Przy przecięciu wykresu od góry generowany jest sygnał wzrostowy,
tak więc świeca powinna byd również wzrostowa. Przy
uruchomieniu programu powinna zostad również wyświetlona
informacja o brokerze, numerze konta i nazwie użytkownika.
Sygnały generowane są tylko, jeżeli uruchomione jest konto demo.
4. Napisz program, który dla par EURUSD oraz USDCHF i okresów od
15 minut do godziny włącznie sprawdza, ile razy wykładnicza
średnia krocząca przecinała wykres od góry.
5. Napisz program, który dla średniej kroczącej (wykładniczej lub
prostej w zależności od parametru) generuje sygnały przy przecięciu
wykresu - od góry, lub od dołu. Przy każdym przecięciu wykresu
dodatkowo sprawdzane jest, czy wskaźnik CCI znajduje się w strefie
wykupienia/wyprzedania. Przykładowo, dla sygnału spadkowego
wygenerowanego przez średnią i wskaźnika CCI znajdującego się w
strefie wykupienia generowana jest informacja "Silny sygnał". Dla
sygnału spadkowego i wskaźnika CCI w strefie wyprzedania "Duże
ryzyko". W pozostałych przypadkach "Słaby sygnał". Analogicznie
należy rozpatrzyd przypadek sygnału wzrostowego.
8. FORMACJE ŚWIECOWE W poprzednim rozdziale przedstawionych zostało kilka
przykładów zastosowania analizy technicznej w handlu
automatycznym. Kolejnym istotnym czynnikiem wspomagającym
generowanie sygnałów wejścia na rynek jest analiza formacji (na
kursie zajmujemy się tylko formacjami świec japooskich). Połączenie
tych dwóch elementów może dad bardzo dobre wyniki w przypadku
systemów automatycznych. Z kolei dla systemów ekspertowych, już
sama analiza formacji na wykresie i generowanie sygnałów na ich
77
podstawie może dad bardzo dobre rezultaty. Należy przy tym
pamiętad, że skutecznośd formacji świecowych zależy w dużym
stopniu od stosowanego okna czasowego - gdzie duże okno czasowe
(godzina, 4 godziny a nawet jeden dzieo) to silne sygnały, a
ewentualne dane ekonomiczne przeważnie nie są w stanie odwrócid
głównego ruchu cenowego. Niestety liczba takich sygnałów jest
odwrotnie proporcjonalna do wielkości okna czasowego. Na
wykresie 5-minutowym liczba takich sygnałów może byd bardzo
duża, ale są to najczęściej ruchy o zasięgu kilku- kilkunastu pipsów. Z
kolei dla świec na wykresie 4-godzinnym należy uwzględnid bardzo
duży SL (nierzadko nawet ponad 100 pipsów).
8.1 WARUNKI ISTNIENIA FORMACJI Każda formacja to pewien charakterystyczny wygląd świecy
lub świec na wykresie. Najistotniejszymi elementami są tutaj:
kolor świecy i kolor świec poprzednich;
cienie i ich długośd;
punkty otwarcia i zamknięcia świecy w stosunku do świec
poprzednich;
długośd świecy.
Już na podstawie powyższych elementów można opisad dowolną
formację operując pewnymi warunkami. Przykładowo dla świecy
wzrostowej będzie to: cena otwarcia jest niższa od ceny zamknięcia.
Długośd świecy można określid na podstawie różnicy pipsów
pomiędzy ceną otwarcia a ceną zamknięcia. Oczywiście, jeżeli kolor
świecy nie jest tutaj istotny, warto posłużyd się wartością absolutną
z różnicy pomiędzy ceną otwarcia a ceną zamknięcia. Liczba pipsów
może byd w tym przypadku zdefiniowana jako parametr. Świeca
długa na wykresie 5-minutowym może mied tylko 15 pipsów, z kolei
długa świeca na wykresie dziennym to np. 500 pipsów. Warto
dostosowad dany fragment kodu do z góry założonego okna
czasowego.
78
Teraz w zależności od wybranego okna czasowego oraz
początkowych założeo wskazana zostanie tylko świeca spełniająca
warunki.
Dla złożonych formacji składających się z 3 i więcej świec
liczba koniecznych do podania warunków może byd znacznie
większa. Nierzadko wymagane jest także, aby oprócz określenia
szczegółów formacji, podad kilka cech ogólnych dla elementów
poprzedzających formację. Dla odwrócenia trendu spadkowego
warto sprawdzid, czy trend utrzymywał się długo, lub czy formację
odwrócenia poprzedzały znaczne spadki. W takiej sytuacji
wygenerowany sygnał jest znacznie istotniejszy.
Dla formacji świecowych liczba generowanych sygnałów
wygląda podobnie, jak w przypadku analizy technicznej.
Szczegółowy opis formacji i liczne warunki dodatkowe wpływają
istotnie na jakośd sygnału, jednak ograniczają ich liczbę do
minimum.
79
8.2 FORMACJE MŁOTA I GWIAZDY Formacje młota oraz gwiazdy są jednymi z
najpopularniejszych świec wskazujących na odwrócenie trendu.
Formacje odwrócenia to układy wskazujące na załamanie
aktualnego trendu. Młot charakteryzuje się długim cieniem pod
korpusem, krótszym korpusem oraz brakiem cienia nad nim. Kolor
świecy nie ma tutaj znaczenia, jednak można przygotowad dwie
funkcje odpowiednio dla świecy wzrostowej oraz spadkowej.
Przedstawiona powyżej wersja formacji młota jest bardzo prosta i
nie uwzględnia wcześniejszych świec. Wpływa to niestety
negatywnie na jakośd generowanych sygnałów. Uważa się, że jest to
bardzo silny sygnał otwarcia pozycji, niestety w systemie
automatycznym zastosowanie tylko tej formacji może nie przynosid
oczekiwanych rezultatów.
Bardzo podobną formacją jest gwiazda. Przy czym tutaj
długi cieo znajduje się nad korpusem. Kolor świecy również nie ma
znaczenia. Można jednak przygotowad zdecydowanie bardziej
złożoną funkcję, w której oprócz samej świecy, sprawdzone zostają
świece ją poprzedzające.
80
8.3 KRZYŻ HARAMI Krzyż harami jes specyficzną formacją zbliżoną do formacji
harami składającą się z dwóch świec. Druga ze świec w formacji to
świeca Doji, w której cena otwarcia i cena zamknięcia znajdują się
na tym samym poziomie. Analizując podaną formację warto
zauważyd, iż w rzeczywistości opisana sytuacja występuje bardzo
rzadko (cena zamknięcia równa cenie otwarcia), co przekłada się na
małą liczbę sygnałów generowaną przez wspomnianą formację.
Jednak zakładając niewielki margines błędu, kiedy to cena otwarcia
oraz cena zamknięcia różnią się od siebie tylko o kilka (np. 2-3
pipsy). Krzyż harami występuje zarówno w trendzie wzrostowym,
jak i spadkowym. Wskazane jest tutaj wyraźne wyróżnienie
wzrostowego oraz spadkowego krzyża harami. Druga ze świec w
formacji (poprzedzająca Doji) jest również bardzo istotna.
Dodatkowo, np. w przypadku harami na trendzie wzrostowym,
świece poprzedzające świecę drugą w formacji powinny byd również
wzrostowe. Liczba uwzględnionych tutaj świec zależy już od
interpretacji użytkownika.
81
8.4 OBJĘCIE HOSSY/ OBJĘCIE BESSY Formacje objęcia hossy i bessy składają się tylko z dwóch
świec, jednak istotną trudnośd stanowi tutaj określenie stosunku
korpusu jednej świecy do korpusu drugiej świecy. Ponadto każda z
tych świec może posiadad cienie. W przypadku objęcia hossy, gdzie
formacja następuje po trendzie spadkowym, należy dodatkowo
przyjąd założenie, że górne cienie świecy nie są zbyt długie. Długie
cienie mogą w tym wypadku świadczyd o nieudanej próbie objęcia
hossy i w konsekwencji doprowadzid do dalszych spadków.
Analogicznie sytuacja przedstawia się dla objęcia bessy, która to
formacja powinna pojawid się po wcześniejszych świecach
wzrostowych. Tutaj z kolei długie górne świece mogą stanowid
dodatkowy element potwierdzający możliwośd odwrócenia trendu.
82
8.5 ANALIZA ZŁOŻONYCH FORMACJI Przy analizie dowolnej formacji najistotniejszym
elementem jest określenie warunków jej wystąpienia. W przypadku
układów 3 i więcej świec, liczba warunków może wynosid nawet
kilkanaście elementów. Przede wszystkim należy zwrócid uwagę,
aby poszczególne warunki nie wykluczały się. W sytuacji, kiedy
łącznikiem w wyrażeniu warunkowym jest "LUB", możliwe jest
wystąpienie jednej z kilku możliwych sytuacji. Przykładowo dla
formacji młota sprawdzenie koloru świecy nie jest wymagane.
Natomiast jeżeli w danym systemie świeca wzrostowa implikuje
dodatkowo inny warunek (przykładowo korpus świecy dwa razy
krótszy od cienia), wtedy warto skorzystad z wyrażenia "LUB".
Każda formacja powinna byd przygotowana w formie jednej
funkcji udostępniającej wartośd bool lub int. Zaistnienie formacji na
wykresie to wartośd true z kolei brak formacji to wartośd false.
Podejście takie pozwoli łączyd formacje świecowe ze sobą a także w
prosty sposób modyfikowad przygotowane formacje w przyszłości.
83
8.6 PRZYKŁADY 1. Napisz program, w którym dla liczby świec zadanej parametrem
sprawdzane jest, ile z nich to formacja młota. Należy rozdzielid tę
liczbę w zależności od koloru młota.
2. Napisz program, w którym dla ostatnich 100 świec sprawdzane
jest, ile z nich miało korpus o długości liczba_minut*2. Program ma
wypisad informację w ilu przypadkach (procent przypadków)
nastąpiła korekta długiej świecy - przynajmniej do połowy jej
długości.
3. Napisz program zliczający dla n ostatnich świec (n jako parametr)
liczbę krzyży harami, gdzie ewentualna różnica pomiędzy ceną
otwarcia i zamknięcia określana jako błąd podawana jest jako
parametr. Przykładowo cena otwarcia - cena zamknięcia = 3 pipsy.
Błąd ustalony na 5 pipsów - to formacja uznana jest za krzyż harami.
4. Napisz program, który dla n ostatnich świec sprawdza, w ilu
przypadkach 3 świece pod rząd były tego samego koloru.
Dodatkowo, każda ze świec powinna mied wysokośd minimum
0.5*m pipsów (gdzie m to okno czasowe: 15 min = 15 pipsów).
Następnie należy wskazad, w ilu przypadkach nastąpiły dalsze
wzrosty, a w ilu spadki.
5. Napisz program, który wyszukuje formacje młota i gwiazdy, a przy
wystąpieniu formacji sprawdza, czy wskaźnik CCI również generuje
sygnał. Jeżeli sygnał jest potwierdzony, wtedy pojawia się
komunikat o sygnale.
9. FUNKCJE TRANSAKCJI Istotnym elementem dowolnego systemu automatycznego
są specjalne funkcje odpowiedzialne za składanie zleceo oraz
zarządzanie nimi. Funkcje transakcyjne są wbudowanymi
elementami języka MQL 4 umożliwiającymi opracowanie gotowej
strategii automatycznej. Oprócz samego składania zlecenia istotne
jest też zarządzanie zleceniami i ich ewentualne modyfikacje (w
szczególności zmiany dotyczące Stop Loss oraz Take Profit), a w
84
przypadku zleceo oczekujących także ich usuwanie w przypadku
nieprzewidzianych ruchów cenowych na rynku.
9.1 SYSTEMY AUTOMATYCZNE W przypadku systemów automatycznych, gdzie każde
zlecenie składane jest automatycznie, wymagane jest dopracowanie
znacznie większej liczby elementów, niż w przypadku systemów
ekspertowych. W tych pierwszych oprócz funkcji generującej dobre
sygnały należy też zadbad o odpowiednie zarządzanie kontem,
monitorowanie sytuacji na rynku (kierunek trendu, istotne poziomy
wsparcia i oporu). Oczywiście po wygenerowaniu sygnału należy
sprawdzid, czy złożenie zlecenia jest możliwe, a następnie jego
złożenie, lub też ustawienie zlecenia oczekującego. Następnym
etapem jest zarządanie takim zleceniem i ewentualne wcześniejsze
zamknięcie lub też usunięcie (w przypadku zleceo oczekujących). Te
wszystkie elementy sprawiają, że samo przygotowanie skutecznego
systemu generującego dobra sygnały wejścia na rynek to tylko
połowa sukcesu. Następnym krokiem (nierzadko równie
pracochłonnym) jest wyposażenie systemu w funkcje umożliwiające
poprawny handel.
Drugą opcją jest tutaj system ekspertowy generujący
sygnały, które następnie analizowane są przez tradera. Ich
niewątpliwą zaletą jest fakt, że użytkownik skupia się przede
wszystkim na sposobie wyznaczania punktów wejścia na rynek, a
samo zarządzanie zleceniem schodzi tutaj na dalszy plan, albo
nawet jest całkowicie pomijane. Jest to ważne szczególnie w
przypadku osób mających stycznośd z MQL 4 po raz pierwszy.
System ekspertowy uczy przede wszystkim podstaw języka oraz
sposobu przekształcenia swoich pomysłów w gotowe programy.
Dopiero opanowanie tych elementów pozwoli na opracowanie w
pełni automatycznego systemu.
85
9.2 SKŁADANIE ZLECEŃ W momencie pojawienia się sygnału, który pozwala na
złożenie zlecenia, konieczne jest wywołanie specjalnej funkcji
transakcyjnej OrderSend(...) odpowiedzialnej za ten proces. Jest to
jedna z najbardziej skomplikowanych funkcji wbudowanych w MQL,
gdyż wymaga podania bardzo dużej liczby parametrów. Oprócz
podstawowego parametru Symbol, który pozwala wskazad dla
jakiego instrumentu zlecenie jest składane, konieczne jest też
podanie szeregu innych:
typ zlecenia - do systemu musi trafid jawna informacja, czy
jest to zlecenie kupna, sprzedaży, czy też zlecenie
oczekujące;
wielkośd zlecenia - można ustawid wielkośd domyślną na
początku działania programu, lub też dla każdego zlecenia
podawad wielkośd osobno. Jest to przydatne zwłaszcza z
niewielką liczbą środków na koncie, gdzie złożenie zlecenia
o wielkości 1 lota może nie byd możliwe;
ustalenie poziomów SL i TP - możliwe jest też złożenie
zlecenia bez tych wartości oraz ich późniejsza modyfikacja
przy pomocy innej funkcji.
Samych argumentów jest oczywiście znacznie więcej, jednak
podane powyżej są jednymi z najistotniejszych.
86
Złożenie zlecenia w momencie pojawienia się sygnału jest
oczywiście najprostszą sytuacją. Niestety należy też uwzględniad
sytuację, kiedy złożenie zlecenia z jakiegoś powodu nie jest możliwe
(problem z serwerem, brak środków na koncie, nieodpowiednie
wartości SL/ TP). W tym momencie warto skorzystad z funkcji do
zarządzania kontem, które pozwolą sprawdzid np. dostępne środki
na koncie, a także (co nawet ważniejsze) dostępne środki po
ewentualnym złożeniu zlecenia. Pozwoli to na uniknięcie przykrych
niespodzianek dotyczących wyczyszczenia rachunku przez program.
Warto też zastanowid się nad licznikiem zleceo. Otóż zdecydowana
większośd graczy na bieżąco śledzi swoje otwarte pozycje i nimi
zarządza. Podobnie sytuacja powinna wyglądad z systemem
automatycznym - co jakiś czas otwarte pozycje powinny byd
sprawdzane i ewentualnie modyfikowane. Stąd sugestia, aby ustalad
maksymalny licznik otwartych zleceo - w zależności od wielkości
dostępnego kapitału może to byd 5, 10 lub nawet więcej zleceo.
Każde zlecenie posiada unikalny numer - tzw. bilet (ang.
Ticket) pozwalający śledzid historię zlecenia. Pozwala to w pełni
kontrolowad sytuację na swoim koncie. Warto wspomnied tutaj o
funkcji OrderSelect(...), która umożliwia przegląd wszystkich
aktywnych zleceo (z użyciem pętli FOR).
87
9.3 MODYFIKACJE I USUWANIE ZLECEŃ W momencie złożenia zlecenia przy pomocy funkcji
OrderSend(...) możliwe jest jego modyfikowanie. Dzięki temu
możliwa jest szybka modyfikacja dowolnego zlecenia z listy
spełniającego wybrany warunek.
Do zmian wartości zlecenia służy z kolei funkcja
OrderModify(..), która pozwala na wprowadzenie takich zmian jak
nowe poziomy SL oraz TP. W przypadku zleceo oczekujących
możliwości modyfikacji są tutaj znacznie większe. Możliwa jest np.
zmiana czasu, w którym dane zlecenie wygasa. Przykładowo
zlecenia oczekujące na koniec tygodnia, lub nie uruchomione przez
kilka dni mogą zostad zmodyfikowane.
9.4 ZAMKNIĘCIE ZLECENIA Ostatnim etapem zarządzania pozycją jest zamknięcie
zlecenia, czyli funkcja OrderClose(...). Funkcja ta jest dośd
charakterystyczna, gdyż udostępnia ona wartośd bool, gdzie true
oznacza, iż zamknięcie danej pozycji powiodło się, z kolei false to
błąd. Sama możliwośd zaistnienia błędów podczas zamknięcia
transakcji może przysporzyd sporo problemów. Bez użycia systemu
automatycznego, użytkownik od razu widzi, czy udało się bez
problemów zamknąd dane zlecenie, ewentualnie wymusid
zamknięcie po nowej cenie. W przypadku zleceo zamykanych
88
automatycznie problemem może byd duży skok ceny w krótkiej
chwili czasu. W funkcji OrderClose(...) nie ma możliwości ponownej
próby zamknięcia zlecenia, jest natomiast wartośd określana jako
slippage. Jest to liczba punktów, o jaką maksymalnie może różnid się
aktualna cena i oczekiwana cena zamknięcia.
Co ciekawe, jednym z parametrów jest też wielkośd pozycji do
zamknięcia. Oznacza to możliwośd realizacji części zysków oraz
jednoczesne przesunięcie wartości TP dla danego zlecenia.
Przykładowo, zlecenie 1 lota może zostad zrealizowane w połowie
przez zamknięcie zlecenia na wielkośd 0.5 lota.
9.6 PRZYKŁADY 1. Napisz program, który przy każdym odczycie danych sprawdza,
liczbę aktywnych pozycji - jeżeli ta liczba jest mniejsza od liczby
założonej w menu, a handel odbywa się na koncie demo i
dodatkowo dwie ostatnie świece były wzrostowe, to składane jest
zlecenie. Poziomy TP i SL oraz wielkośd zlecenia ustalana jest na
podstawie wartości podanych w menu. Handel może odbywad się
tylko na parze EURUSD.
89
2. Napisz program, który przy każdej nowej świecy (i tylko wtedy)
przegląda istniejące aktywne pozycje, a następnie, w przypadku, gdy
cena danego instrumentu zbliży się na odległośd mniejszą niż n (n
pipsów jako wartośd w menu) od poziomu TP, to następuje
przesunięcie TP o 100 pipsów (w górę dla zleceo długich oraz w dół
dla zleceo krótkich).
3. Napisz program, który przy każdej nowej świecy sprawdza
zlecenia oczekujące. Jeżeli poziom instrumentu zblizył się do SL o
więcej niż 50 pipsów w ciągu ostatniego odczytu - zlecenie to
powinno zostad usunięte. Program działa tylko na instrumencie
USDCHF.
4. Napisz progam, który przy każdej nowej świecy sprawdza
przecięcie średnich kroczących o poziomach 7 oraz 12 okresów.
Każde takie przecięcie średniej wolniejszej przez szybszą to
potencjalny sygnał otwarcia pozycji. Pozycja może zostad otwarta
tylko, jeżeli liczba aktywnych pozycji jest mniejsza niż 5, a kwota na
jaką złożone zostanie zlecenie nie stanowi więcej niż 5%
całkowitego kapitału. Wielkośd zlecenia w lotach jak i poziomy SL/TP
powinny zostad ustalone w menu.
5. Napisz program, który przy każdej formacji młota oraz gwiazdy
otwiera zlecenie ze SL odpowiednio 5 pipsów poniżej (w przypadku
młota) oraz powyżej (w przypadku gwiazdy). Zlecenie to zostaje
zamknięte zaraz po pojawieniu się kolejnej świecy. Strategia działa
na wszystkich instrumentach z wyłączeniem par z jenem.
Dodatkowo na oknie czasowym od 30 minut do 1 dnia włącznie.
Maksymalny możliwy SL ustalany jest w menu.