Komputerowe systemy na rynkach finansowych. wykład 3 funkcje MQL4



Podobne dokumenty
FOREX. Wprowadzenie Programowanie w MQL4

Komputerowe systemy na rynkach finansowych. wykład 5. MQL4 - funkcje operujące na obiektach wykresu

Instrukcja użytkownika mforex WEB

SUPERMAKLER FX INSTRUKCJA OBSŁUGI TERMINALA TRANSAKCYJNEGO

Instrukcja użytkownika

Instrukcja użytkownika Platformy BRE WebTrader

Pips, punkt, spread, kursy bid i ask

Pierwsze kroki w mforex Trader Instrukcja

Krok 4: Zamykamy pozycję

mforex WEB Instrukcja obsługi

Podstawy Przedsiębiorczości. wykład 4. MQL4 - wskaźniki analizy technicznej + przykłady

mforex API dokumentacja protokołu binarnego wersja 0.9.7

str.1 Informacje ogólne

SUPERMAKLER FX MODUŁ RAPORTÓW

Opis Experta Na Andrzeja by MMD

Zarządzanie Kapitałem

Platforma transakcyjna BOSSA FX. Platforma Metatrader 4 najpopularniejsza na świecie platforma transakcyjna

Instrukcja użytkownika Smart Orders

Spis treści. Wstęp. Pierwsze logowanie. Wygląd platformy po zalogowaniu. Składnianie zleceń. Widok nowego zlecenia na wykresie oraz w zakładce handel

Podstawy przedsiębiorczości kolokwium zakres materiału

Wielokrotne zamknięcie przez. Zlecenie po cenie rynkowej. Zlecenie oczekujące z limitem

Podstawy inwestowania na rynku Forex, rynku towarowym oraz kontraktów CFD

DIF Freedom WEB (CFD) Komputer, Tablet oraz Telefon Szybki Start

Komputerowe systemy na rynkach finansowych. wykład systemy mechaniczne

Jaki jest limit odległości ceny aktywacji od ceny rynkowej dla zleceń oczekujących? Czy mogę zająć pozycje przeciwstawne w jednym instrumencie?

Podstawy inwestowania na rynku Forex, rynku towarowym oraz kontraktów CFD

Rynek akcji a rynek Forex w Polsce

Analiza danych w biznesie

Instrukcja Noble Markets Webtrader MT4

1. Rynek Forex. a) Opis rynku

ONE WORLD BROKER WEB (FOREX) Komputer, Tablet oraz Telefon Szybki Start

Poradnik Inwestora część 3. Podstawy inwestowania na rynku Forex, rynku towarowym oraz kontraktach indeksowych

Spis treści. Wstęp 3. Logowanie 4. Ekran główny 5. Dodawanie instrumentów i wykresów 6. Składanie zleceń w panelu One Click 7. Zlecenia oczekujące 8

Rozdział ten zawiera informacje o sposobie konfiguracji i działania Modułu OPC.

Wprowadzenie do rynków walutowych

Podręcznik do platformy xtab

Informacje o Rynkach FX

Przed zapoznaniem się z poniższą instrukcję, zalecamy zapoznanie się z instrukcją Ustawienie platformy.

INSTRUKCJA APLIKACJI META TRADER 4 W SYSTEMIE APPLE IOS SPIS TREŚCI

HANDEL OPCJAMI W PLATFORMIE DEALBOOK 360

Biuro Maklerskie. Alior Trader Mobile. Podręcznik użytkownika System ios 1/20

Spis treści. 1 Moduł RFID (APA) 3

Alior Trader 2. Podręcznik użytkownika. Copyrights Alior Bank

I. RODZAJE ORAZ SKŁADANIE, ZAMYKANIE I MODYFIKACJA ZLECEŃ... 2

Krok 5: ZAMYKANIE ZLECENIA

Hosting na serwerach VPS: automaty rozpoznawania korzystnych transakcji. Równoległe przetwarzanie danych: szybsze wykonywanie zleceń

PKOFX MT 4 INSTRUKCJA OBSŁUGI TERMINALA TRANSAKCYJNEGO

Biuro Maklerskie. Alior Trader Mobile. Podręcznik użytkownika System Android 1/26

Cena Bid, Ask i spread

Forex PitCalculator INSTRUKCJA UŻYTKOWNIKA

Biuro Maklerskie. Alior Trader. Podręcznik użytkownika część II Zarządzanie zleceniami i pozycjami 1/23

FxCraft visual order editor

Podręcznik do platformy MetaTrader dla STP NDD

Spis treści: Uzyskiwanie dostępu do konta GWAZY 3. Sekcje platformy 4. Informacje o platformie 5. Lista obserwowanych 5.

UMOWA O SYSTEMIE KWOTOWANIA I PROCEDURACH TRANSAKCJI

Instrukcja użytkownika

One Click Trader Pro

0,20% nominału transakcji nie mniej niż 5 USD

API transakcyjne BitMarket.pl

Przykładowe scenariusze kosztów dla transakcji w systemie transakcyjnym TMS Trader MT5

Instrukcja użytkownika Platforma transakcyjna mforex Trader dla systemu MacOS

BANK ZACHODNI WBK S.A. SPÓŁKA AKCYJNA CZŁONEK ZARZĄDU BANKU

Poradnik Inwestora część 4. Podstawy inwestowania na rynku Forex, rynku towarowym oraz kontraktach indeksowych

0,20% nominału transakcji nie mniej niż 5 USD

Web Client. LMAX rekomenduje używanie przeglądarki internetowej Chrome lub Firefox do handlu na platformie transakcyjnej LMAX Exchange.

Podstawy inwestowania na rynku Forex, rynku towarowym oraz kontraktów CFD

System transakcyjny NS Forex Instrukcja obsługi

System transakcyjny Noble Markets

SYSTEM UTP NA GPW W WARSZAWIE

WebTrader w Noble Markets

INSTRUKCJA APLIKACJI META TRADER 4 W SYSTEMIE ANDROID

Programowanie komputerowe. Zajęcia 4

OPCJE WARSZTATY INWESTYCYJNE TMS BROKERS

Dokumentacja rozszerzenia bossafx-gpw BOSSAFX-GPW. Dom Maklerski Banku Ochrony Środowiska S.A. 1

Instrukcja obsługi NM Mobile na iphone

KROK 2 - SYSTEMY TRANSAKCYJNE

Instrukcja użytkownika

Podręcznik użytkownika

DIF Freedom WEB (AKCJE) Komputer stacjonarny, Tablet oraz Telefon Szybki strart

Wdrożenie modułu płatności eservice. dla systemu oscommerce 2.3.x

Wdrożenie modułu płatności eservice. dla systemu Zen Cart

Krok 2 Systemy transakcyjne

Wyciąg z Zarządzeń Dyrektora Domu Maklerskiego BOŚ S.A. według stanu na dzień 28 maja 2012 roku (zarządzenia dotyczące obrotu derywatami)

Pips, punkt, spread, kursy bid i ask

Instrukcja użytkownika

I. Tabela Opłat i Prowizji TMS Trader MT5. Tabela Opłat i Prowizji TMS Trader MT4

Kurs walut. Specyfikacja projektu. Marek Zając

Instrukcja użytkownika

Platforma Transakcyjna MetaTrader

Poziom przedmiotu: II stopnia. Liczba godzin/tydzień: 2W E, 2L PRZEWODNIK PO PRZEDMIOCIE

Platforma Transakcyjna X-Trade obsługa, analiza, transakcje

Zasady programowania Dokumentacja

Spis treści INTERFEJS (WEBSERVICES) - DOKUMENTACJA TECHNICZNA 1

Instrukcja użytkownika Platformy Walutowej

Instrukcja użytkownika Platforma transakcyjna mforex Trader dla systemu Linux

Prowizja za wykonanie transakcji na CFD na kryptowalutę 0.08% nominału transakcji brak prowizji 0.08% nominału transakcji brak prowizji

Ćwiczenie: JavaScript Cookies (3x45 minut)

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Transkrypt:

Komputerowe systemy na rynkach finansowych wykład 3 funkcje MQL4

Zmienne predefiniowane w MQL4 Język programowania MQL4 został opracowany i dostosowany do specyficznych wymagań tworzenia EA, wskaźników i skryptów czyli w większości przypadków do operowania na rynkach które mają dużą zmienność i szybkość zmian jeśli tak można określić kwotowania real-time. W celu przyspieszenia obliczeń i szybkiego dostępu do najczęściej wykorzystywanych zmiennych, którymi jest między innymi wartość kwotowań, udostępniono programistom tak zwane zmienne predefiniowane, którymi są Ask, Bid, Open, High, Close, Digits, Point, Time, Volume. Dostęp do zmiennych predefiniowanych jest z każdego rodzaju programu, czyli z EA, wskaźnika, skryptu, biblioteki. Aby zapewnić szybki i bezpieczny dostęp do tych danych, terminal klienta przechowuje lokalne kopie predefiniowanych zmiennych dla każdego niezależnie uruchomionego programu. Dane te są aktualizowane przy każdej zmianie wartości kwotowań czy parametrów symbolu typu Digits, Point. Można też dokonać programowej aktualizacji tych danych za pomocą funkcji RefreshRates(). Ask Ask przechowuje ostatnią znaną wartość ceny Ask dla symbolu wykresu, na którym został uruchomiony EA, wskaźnik, skrypt, biblioteka. Bid Bid przechowuje ostatnią znaną wartość ceny Bid dla symbolu wykresu, na którym został uruchomiony EA, wskaźnik, skrypt, biblioteka. Open Open[] jest zmienną tablicową i przechowuje wszystkie wartości ceny otwarcia dla każdego słupka wykresu, na którym został uruchomiony EA, wskaźnik, skrypt, biblioteka. Dostęp do poszczególnych wartości zmiennej Open jest taki sam jak do każdej zmiennej tablicowej, czyli przez indeks poczynając od 0 (zero), co jest pierwszą, najświeższą wartością ceny zamknięcia. Indeks najstarszej wartości ceny zamknięcia na wykresie równy jest zmiennej predefiniowanej Bars-1.

High High[] jest zmienną tablicową i przechowuje wszystkie wartości najwyższej ceny dla każdego słupka wykresu, na którym został uruchomiony EA, wskaźnik, skrypt, biblioteka. Dostęp do poszczególnych wartości zmiennej High jest taki sam jak do każdej tablicy, czyli przez indeks poczynając od 0 (zero), co jest pierwszą, najświeższą wartością najwyższej ceny. Indeks najstarszej wartości ceny zamknięcia na wykresie równy jest zmiennej predefiniowanej Bars-1. Low Low[] jest zmienną tablicową i przechowuje wszystkie wartości najniższej ceny dla każdego słupka wykresu, na którym został uruchomiony EA, wskaźnik, skrypt, biblioteka. Dostęp do poszczególnych wartości zmiennej Low jest taki sam jak do każdej tablicy, czyli przez indeks poczynając od 0 (zero), co jest pierwszą, najświeższą wartością najniższej ceny. Indeks najstarszej wartości ceny zamknięcia na wykresie równy jest zmiennej predefiniowanej Bars-1. Close Close[] jest zmienną tablicową i przechowuje wszystkie wartości ceny zamknięcia dla każdego słupka wykresu, na którym został uruchomiony EA, wskaźnik, skrypt, biblioteka. Dostęp do poszczególnych wartości zmiennej Close jest taki sam jak do każdej zmiennej tablicowej, czyli przez indeks poczynając od 0 (zero), co jest pierwszą, najświeższą wartością ceny zamknięcia. Indeks najstarszej wartości ceny zamknięcia na wykresie równy jest zmiennej predefiniowanej Bars-1. Volume Volume[] jest zmienną tablicową i przechowuje wszystkie wartości wielkości obrotu dla każdego słupka wykresu, na którym został uruchomiony EA, wskaźnik, skrypt, biblioteka. Dostęp do poszczególnych wartości zmiennej Volume jest taki sam jak do każdej zmiennej tablicowej, czyli przez indeks poczynając od 0 (zero), co jest pierwszą, najświeższą wartością ceny zamknięcia. Indeks najstarszej wartości ceny zamknięcia na wykresie równy jest zmiennej predefiniowanej Bars-1.

Time Time[] jest zmienną tablicową i przechowuje wszystkie wartości czasu dla każdego słupka wykresu, na którym został uruchomiony EA, wskaźnik, skrypt, biblioteka. Dostęp do poszczególnych wartości zmiennej Time jest taki sam, jak do każdej zmiennej tablicowej, czyli przez indeks poczynając od 0 (zero), co jest pierwszą, najświeższą wartością ceny zamknięcia. Indeks najstarszej wartości ceny zamknięcia na wykresie równy jest zmiennej predefiniowanej Bars-1. Bars Bars przechowuje liczbę słupków, jakie są dostępne na bieżącym wykresie, na którym został uruchomiony EA, wskaźnik, skrypt, biblioteka. // drukuje wszystkie ceny zamknięcia for(int i=0; i <= Bars-1; i++) { Print( Close[i] ); Digits Digits przechowuje wartość określającą ile dany symbol posiada pozycji po przecinku w cenie bieżących kwotowań. Point Zmienna Point przechowuje wartość punkta danego symbolu. Dla instrumentu kwotowanego z dokładnością do 5 miejsc po przecinku wartość ta wynosi 0.00001, dla instrumentu kwotowanego z dokładnością jedności wartość ta wynosi 1.

Dostęp do danych (spoza wykresu) Zmienne predefiniowane zapewniają szybki dostępu do najczęściej wykorzystywanych zmiennych typu Ask, Bid, Open, High, Close, Digits, Point, Time, Volume. Dostęp do zmiennych predefiniowanych jest z każdego rodzaju programu, czyli z EA, wskaźnika, skryptu, biblioteki, ale ograniczony tylko do wykresu na którym został uruchomiony program MQL4 dlatego wprowadzone funkcje pomocnicze umożliwiające dostęp do tych danych z innych okien wykresu. To co wyróżnia funkcje, które zostały poniej zamieszczone to konieczność podania parametrów określających dany wykres, czyli nazwa symbolu oraz zakres czasowy, a także nazwa funkcji poprzedzona literą i. Może się zdarzyć, że próbujemy pobrać dane z wykresu który nie istnieje lub nigdy nie był otwarty przez użytkownika i nie były pobrane dla tego wykresu dane historyczne z serwera. W takiej sytuacji otrzymamy komunikat błędu ERR_HISTORY_WILL_UPDATED (4066 - dane historyczne są właśnie aktualizowane). Uwaga! Podczas testowania strategii, dane z poza innych wykresów są wyznaczane i uśredniane poprzez algorytm testera strategii. iopen Funkcja zwraca cenę otwarcia ze słupka określonego parametrem indeks, na wykresie określonym parametrami symbol i skala czasowa. Indeks musi znajdować się po między wartością 0, a Bars-1 lub odczytanej za pomocą funkcji ibars()-1. : Parametry double iopen( string symbol, int timeframe, int shift) symbol nazwa symbol wykresu lub NULL co oznacza aktualny symbol z wykresu

timeframe zakres czasowy wykresu lub 0 co oznacza aktualny zakres czasowy z wykresu shift numer indeksu słupka z zakresu od 0 do Bars - 1 Wartość zwracana: cena otwarcia z określonego słupka Print( "Cena otwarcia EURUSD H1: ",iopen("eurusd",period_h1,0) ); Na tej samej zasadzie funkcjonują funkcje: double ihigh( string symbol, int timeframe, int shift) double ilow( string symbol, int timeframe, int shift) double iclose( string symbol, int timeframe, int shift ) double ivolume( string symbol, int timeframe, int shift)datetime itime( string symbol, int timeframe, int shift ) int ibars( string symbol, int timeframe ) Przykłady: Print( "Cena najwyższa EURUSD H1: ",ihigh("eurusd",period_h1,0) ); Print( "Cena najniższa EURUSD H1: ",ilow("eurusd",period_h1,0) ); Print( "Cena zamknięcia EURUSD H1: ",iclose("eurusd",period_h1,0) ); Print( "Wolumen słupka EURUSD H1: ",ivolume("eurusd",period_h1,0) ); Print( "Czas otwarcia słupka EURUSD H1: ",itime("eurusd",period_h1,0) ); Print( "Liczba słupków na wykresie 'EURUSD' skala 1 godzina =",ibars("eurusd",period_h1))

ibarshift Funkcja wyszukuje słupek z określoną datą na wykresie, określonym parametrami symbol i skala czasowa. Funkcja zwraca numer słupka lub wartość -1 jeśli słupek z podaną datą jako parametry nie został znaleziony. Dodatkowo można skorzystać z parametru exec który ustawiony na true szuka dokładnie sprecyzowanej daty lub jeśli jest ustawiony na false (wartość domyślna) to zwraca numer najbliższego słupka. : Parametry int ibarshift( string symbol, int timeframe, datetime time, bool exact=false ) symbol nazwa symbol wykresu lub NULL co oznacza aktualny symbol z wykresu timeframe zakres czasowy wykresu lub 0 co oznacza aktualny zakres czasowy z wykresu time czas otwarcia (Open) słupka który ma zostać znaleziony exact tryb szukania: false szuka najbliższego słupka o określonej dacie true szuka dokładnie tego słupka o określonej dacie lub zwraca -1 Wartość zwracana: numer poszukiwanego słupka lub wartość -1 jeśli nie znaleziono słupka datetime szukany_slupek = D'2009.09.21 12:00'; int shift = ibarshift("eurusd",period_m1, szukany_slupek); Print("Szukany słupek o dacie ",TimeToStr(szukany_slupek)," ma numer ",shift)

ihighest Funkcja wyszukuje i zwraca numer słupka (indeks) o najwyższej wartości w określonym zakresie. Wyszukiwania rozpoczyna się od słupka określonego parametrem start i kończy się na liczbie słupków określonych parametrem count. Najwyższa wartość może być przeszukiwana w stosunku do określonego typu danych z wykresu opisanych poniżej w tabeli : Parametry int ihighest( string symbol, int timeframe, int type, int count=whole_array, int start=0 ) symbol nazwa symbol wykresu lub NULL co oznacza aktualny symbol z wykresu timeframe zakres czasowy wykresu lub 0 co oznacza aktualny zakres czasowy z wykresu type typ określający jakiego rodzaju wartość ma być poszukiwana na wykresie count liczba słupków która ma być przeszukiwana od pozycji start lub wartość domyślna WHOLE_ARRAY oznaczająca wszystkie słupki start początkowy numer słupka od którego ma być poszukiwana najwyższa wartość Wartość zwracana: numer słupka o najwyższej wartości // wyznacza najwyższą cenę z 20 słupków od słupka 5 do 24 double wartosc; wartosc = High[iHighest(NULL,0,MODE_HIGH,20,5)]; Print(Wartość najwyższ =, wartosc);

ilowest Funkcja wyszukuje i zwraca numer słupka (indeks) o najniższej wartości w określonym zakresie. Wyszukiwania rozpoczyna się od słupka określonego parametrem start i kończy się na liczbie słupków określonych parametrem count. Najniższa wartość może być przeszukiwana w stosunku do określonego typu danych z wykresu opisanych poniżej w tabeli : Parametry int ilowest( string symbol, int timeframe, int type, int count=whole_array, int start=0 ) symbol nazwa symbol wykresu lub NULL co oznacza aktualny symbol z wykresu timeframe zakres czasowy wykresu lub 0 co oznacza aktualny zakres czasowy z wykresu type typ określający, jakiego rodzaju wartość ma być poszukiwana na wykresie count liczba słupków która ma być przeszukiwana od pozycji start lub wartość domyślna WHOLE_ARRAY oznaczająca wszystkie słupki start początkowy numer słupka od którego ma być poszukiwana najniższe wartość Wartość zwracana: numer słupka o najniższej wartości. // wyznacza najniższą cenę z 20 słupków od słupka 5 do 24 double wartosc; wartosc = Low[iLowest(NULL,0,MODE_LOW,20,5)]; Print(Wartość najniższa =, wartosc);

Funkcje informacyjne konta AccountBalance funkcja zwraca wartość stanu konta wszystkich zamkniętych pozycji w walucie bazowej konta klienta. Print( "Stan konta =" AccountBalance() ); AccountCredit funkcja zwraca wartość kredytu (zadłużenia) klienta w stosunku do brokera w walucie bazowej konta. Print( "Stan kredytu =" AccountCredit() ); AccountCompany funkcja zwraca nazwę brokera, do którego serwera aktualnie jest zalogowany klient. Print( "Nazwa brokera =" AccountCompany() ); AccountCurrency funkcja podaje walutę rachunku bieżącego klienta. Print( "Waluta rachunku bieżącego =" AccountCurrency() ); AccountEquity funkcja zwraca wartość rachunku obrotów bieżących. Podaje w walucie rachunku bieżącego wartość aktualnego stanu konta (balans) powiększoną/pomniejszoną o wartość aktualnie otwartych pozycji. Print( "Aktualny stan konta =" AccountEquity() );

AccountFreeMargin funkcja podaje wartość dostępnych środków w walucie konta bieżącego, które są dostępne do otwierania nowych pozycji. Print( "Dostępne środki na nowe pozycje=" AccountFreeMargin() ); AccountFreeMarginCheck funkcja zwraca informację na temat możliwości otworzenie określonej wielkości pozycji podawanej jako parametr. Jeśli brak wolnych środków na nowe pozycje to generowany jest błąd nr 134 (ERR_NOT_ENOUGH_MONEY). if ( AccountFreeMarginCheck( Symbol(), OP_BUY, 10) <= 0 GetLastError() == 134) Print( "Brak wolnych środków do otwarcia pozycji 10 lotów" ); AccountFreeMarginMode funkcja zwraca kod sposobu wyliczenia depozytu zabezpieczającego dla rynku, symbolu na którym została uruchomiona funkcja. Zwracana wartość sposobu wyliczenia może przyjąć poniższe wartości: 0 zysk/strata z otwartych pozycji nie są uwzględniane w wyliczeniach; 1 zysk/strata z otwartych pozycji są uwzględniane w wyliczeniach; Print( "Dostępne środki na nowe pozycje =" AccountFreeMargin() ); 2 tylko wartość zysku jest uwzględniana w wyliczeniach, a straty nie są uwzględniane; 3 tylko wartość zamkniętych strat jest wykorzystywany w wyliczeniach, a straty z aktualnie otwartych pozycji nie.

if ( AccountFreeMarginMode() == 0 ) Print ( "Tryb wyliczeń: zysk/strata z otwartych pozycji nie są uwzględnione w wyliczeniach"); AccountLeverage funkcja zwraca wartość dźwignię finansowej na danym koncie., "dźwignia finansowa", AccountLeverage ()); Print( "Numer konta=", AccountNumber(),"Stan konta=", AccountLeverage() ); AccountMargin funkcja zwraca wartość aktualnie wykorzystywanego marginesu na wszystkie otwarte pozycje w bieżącej walucie konta. Print( "Wykorzystany margines środków =" AccountMargin() ); AccountName funkcja zwraca nazwę konta aktualnie zalogowanego klienta. Print( "Nazwa konta =" AccountName() );

AccountNumber funkcja zwraca numer aktualnie zalogowanego klienta. Print( "Numer konta klienta =" AccountNumber() ); AccountProfit funkcja zwraca zysk na rachunku zalogowanego klienta w walucie bieżącego rachunku. Print( "Zysk na rachunku =" AccountProfit() ); AccountServer funkcja zwraca nazwę serwera brokera, do którego aktualnie zalogowany jest klient. Print( "Serwer brokera =" AccountServer() ); AccountStopoutLevel funkcja zwraca wartość minimalnego stanu konta klienta, przy którym pozycje będą automatycznie zamykane. Print( "Poziom zamykania pozycji stratnych =" AccountStopoutLevel() );

AccountStopoutMode funkcja zwraca kod sposobu wyliczania poziomu, przy którym będą zamykane stratne pozycje klienta i może przyjąć poniże wartości: 0 wyliczenia procentowego stanu konta na podstawie dostępnego marginesu zabezpieczającego oraz aktualnego stanu konta pozycji zamkniętych jak i otwartych; 1 wyliczenia na podstawie dostępnych środków na zabezpieczenie nowych pozycji oraz aktualnego stanu (bilansu) konta. int poziom = AccountStopoutLevel(); if( AccountStopoutMode() == 0) { Print( "poziom zamykania pozycji =" poziom "%"); else Print( "poziom zamykania pozycji =" poziom ", AccountCurrency());

Funkcje zarządzania zleceniami (transakcjami) Jednym z podstawowych rodzajów programów tworzonych w MQL4 są tak zwane doradcze systemy eksperckie (Expert Advisor), które oprócz wyznaczania sygnałów tradingowych na podstawie wyliczeń wskaźników, własnych algorytmów umożliwiają automatyczny handel. Uwaga! Aby korzystać z tej funkcji konieczne jest wcześniejsze zaznaczenie zlecenia za pomocą funkcji OrderSelect(). W celu umożliwienia realizacji automatycznego handlu przez oprogramowanie konieczne jest, aby broker miał włączoną możliwość automatycznego handlu, a po stronie terminala musi być włączony handel automatyczny, co można sprawdzić z poziomu programu MQL4 za pomocą funkcji IsTradeAllowed(). Uwaga! Funkcje handlowe mogą być używane tylko w EA oraz skryptach i nie mogą być używane z programach typu wskaźnik własny użytkownika.

OrderSend Funkcja umożliwia otwieranie zleceń natychmiastowych oraz oczekujących. Funkcja zwraca numer zlecenia, jeśli zakończy się powodzeniem lub wartość -1, jeśli wystąpił błąd wykonania funkcji (otwarcia nowego zlecenia). Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError(). Jest to podstawowa funkcja z operacji handlowych oraz jedyna służąca do otwierania nowych pozycji z poziomu własnego programu. Uwaga! W przypadku zleceń po cenie rynkowej typu OP_SELL lub OP_BUY, jako cenę otwarcia możemy podać tylko aktualną cenę Bid dla typu OP_SELL lub Ask dla typu OP_BUY i nie powinniśmy stosować wyliczanych, normalizowanych cen. Jeśli podamy cenę wyliczoną o nieprawidłowym formacie np. za mało pozycji po przecinku to otrzymamy błąd numer 129 (ERR_INVALID_PRICE). Jeśli podana cena będzie z aktualną ceną rynkową otrzymamy błąd numer 138 (ERR_REQUOTE), w tym przypadku możemy zastosować parametr slippage i określić maksymalne odchylenie od aktualnej ceny rynkowej, przy jakim zgadzamy się na otworzenie pozycji. Jeśli stosujemy parametr slippage to cena po której pozycja będzie otwarta określona jest przez widełki = aktualna cena +- parametr slippage. Wartość StopLoss i TakeProfit możemy określić podczas otwierania nowego zlecenia, ale muszą być większe niż dopuszczalna przez brokera minimalna wartość stopów (stop level), którą możemy odczytać korzystając z funkcji MarketInfo() parametr MODE_STOPLEVEL. W przypadku ustawienia nieprawidłowych, najczęściej za bliskich poziomów stop otrzymamy błąd o kodzie 130 (ERR_INVALID_STOPS). Jeśli otwieramy zlecenia oczekujące cena otwarcia nie może być ceną rynkową Ask lub Bid. Minimalny poziom odstępu od aktualnej ceny dla zleceń oczekujących określony przez brokera możemy odczytać za pomocą funkcji MarketInfo() parameter MODE_STOPLEVEL. W przypadku ustawienia nie prawidłowych cen oczekujących otrzymamy błąd o kodzie 130 (ERR_INVALID_STOPS). Broker może zablokować zlecenia oczekujące wówczas przy próbie wywołania takiego zlecenie otrzymamy błąd o kodzie 147 (ERR_TRADE_EXPIRATION_DENIED). Może też zostać nałożone ograniczenie na

maksymalna ilość zleceń otwartych i oczekujących wówczas zostanie wygenerowany błąd o kodzie 148 (ERR_TRADE_TOO_MANY_ORDERS). Parametry int OrderSend( string symbol, int cmd, double volume, double price, int slippage, symbol symbol rynku cmd identyfikator typ zlecenia double stoploss, double takeprofit, string comment=null, int magic=0, volume wielkość zlecenia wlotach price cena po jakiej ma zostać otwarte zlecenie datetime expiration=0, color arrow_color=clr_none ) slippage maksymalne dopuszczalne odchylenie ceny rynkowej w pipsach od powyższej ceny otwarcia stoploss poziom StopLoss takeprofit poziom TakeProfit comment komentarz tekstowy do zlecenia magic identyfikator dla EA expiration czas wygaśnięcia tylko dla zleceń oczekujących arrow_color kolor strzałki otwierającej zlecenie lub wartość domyślna CLR_NONE czyli brak koloru

Wartość zwracana: numer nowego zlecenia lub -1 jeśli błąd int zlecenie; zlecenie = OrderSend(Symbol(), OP_BUY, 1, Ask, 3, 0, 0, "Moje zlecenie kupna", 16384, 0, Green); if(zlecenie < 0 ) { Print("Błąd wykonania funkcji OrderSend ",GetLastError()); return(0);

OrderType Funkcja z wraca typ zlecenia dla aktualnie wybranego zlecenia. Zwracana wartość odpowiada dostępnym w terminalu typom zleceń, które zamieszczone zostały poniżej. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError(). Uwaga! Aby korzystać z tej funkcji konieczne jest wcześniejsze zaznaczenie zlecenia za pomocą funkcji OrderSelect(). Wartość zwracana: typ zlecenia if(orderselect(0 SELECT_BY_POS)==true) int OrderType() { Print("Typ zlecenia dla pozycji o indeksie 0", OrderType());

OrderTicket Funkcja zwraca numer zlecenia dla aktualnie wybranego zlecenia. Jeśli funkcja powiedzie się zwraca wartość true, w przeciwnym razie false. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError(). Uwaga! Aby korzystać z tej funkcji konieczne jest wcześniejsze zaznaczenie zlecenia za pomocą funkcji OrderSelect(). Wartość zwracana numer identyfikacyjny zlecenia int OrderTicket() if( OrderSelect(124, SELECT_BY_TICKET)==true ) { Print("Czas wygaśnięcia zlecenia #124 to ",TimeToStr(OrderExpiration())); else { Print("Błąd wykonania funkcji OrderSelect ",GetLastError());

OrderSymbol Funkcja zwraca ciąg znaków, który reprezentuje nazwę symbolu instrumentu finansowego dla aktualnie zaznaczonego zlecenia. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError(). Uwaga! Aby korzystać z tej funkcji konieczne jest wcześniejsze zaznaczenie zlecenia za pomocą funkcji OrderSelect(). Wartość zwracana nazwa symbolu rynku string OrderSymbol() if(orderselect(124, SELECT_BY_POS)==true) { Print("Symbol rynku dla zlecenia #124 ", OrderSymbol()); else { Print("Błąd wykonania funkcji OrderSelect ",GetLastError());

OrderClose Funkcja zamyka otwartą pozycje transakcyjną. Jeśli funkcja powiedzie się zwraca wartość true, w przeciwnym razie false. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError(). Parametry bool OrderClose( int ticket, double lots, double price, int slippage, color Color=CLR_NONE ) ticket identyfikator zlecenia lots wielkość zamykanej pozycji w lotach price preferowana cena zamknięcia slippage maksymalna wielkość odchylenia ceny kwotowanej od ceny zamknięcia color kolor strzałki symbolizującej zamknięcie pozycji lub wartość domyślna CLR_NONE brak koloru Wartość zwracana: true jeśli zamknięcie pozycji powiodło się false jeśli zamknięcie pozycji nie powiodło się int zlecenie; zlecenie = OrderSend(Symbol(), OP_BUY, 1, Ask, 3, 0, 0, "Moje zlecenie kupna", 16384, 0, Green); if( OrderClose( numer_zlecenia, 1, Ask, 3, Red) == false ) Print("Błąd wykonania funkcji OrderClose ",GetLastError()); return(0);

OrderSelect Funkcja wybiera i zaznacza jako aktualną pozycję do dalszego użycia przez inne funkcje operacji handlowych. Jest to podstawowa funkcja, którą musimy użyć za każdym razem, gdy chcemy pobrać informacje z terminala o aktualnie otwartych, oczekujących lub historycznych pozycjach. Jeśli funkcja powiedzie się zwraca wartość true, w przeciwnym razie false. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError(). Pozycje mogą być wybierane na podstawie niepowtarzalnego identyfikatora zlecenia, wówczas parametr select przyjmuje wartość SELECT_BY_TICKET lub poprzez indeks pozycji wówczas parametr select przyjmuje wartość SELECT_BY_POS. Pozycje mogę być wybierane z aktualnie otwartych lub historycznych co ustalamy parametrem pool, który przyjmuje wartość MODE_TRADES lub MODE_HISTORY. Parametry bool OrderSelect( int index, int select, int pool=mode_trades ) index identyfikator zlecenia zależny od drugiego parametru select select parametr oznaczający typ zaznaczanego indeksu: SELECT_BY_POS identyfikator indeksu pozycji SELECT_BY_TICKET identyfikator zlecenia pool stosowany tylko w trybie SELECT_BY_POS, może przyjmować poniższe wartości: MODE_TRADES (default) wybierane są zlecenia z otwarte i oczekujące MODE_HISTORY wybierane są zlecenia zamknięte z historii rachunku

Wartość zwracana true jeśli funkcja zakończona powodzeniem false jeśli funkcja zakończona niepowodzeniem if(orderselect(124, SELECT_BY_TICKET)==true) { Print("Cena otwarcia zlecenie 124 ", OrderOpenPrice()); else Print("Błąd wykonania funkcji OrderSelect ",GetLastError());

OrderDelete Funkcja usuwa wcześniej otwarte zlecenie oczekujące. Jeśli funkcja powiedzie się zwraca wartość true, w przeciwnym razie false. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError(). Parametry ticket numer zlecenia bool OrderDelete( int ticket, color Color=CLR_NONE) color kolor strzałki na wykresie oznaczającej usunięcie zlecenia lub wartość domyślna CLR_NONE czyli brak koloru Wartość zwracana true jeśli funkcja zakończona powodzeniem false jeśli funkcja zakończona niepowodzeniem... if( Ask > 1.5239) { OrderDelete( numer_zlecenia ); return(0);

OrderModify Funkcja modyfikuje wcześniej otwartą pozycję lub zlecenie oczekujące. Jeśli funkcja powiedzie się zwraca wartość true, w przeciwnym razie false. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError(). Uwaga! Aby korzystać z tej funkcji konieczne jest wcześniejsze zaznaczenie zlecenia za pomocą funkcji OrderSelect(). Parametry Uwaga! Cena otwarcia oraz czas wygaśnięcia może być modyfikowany tylko dla zleceń oczekujących. ticket identyfikator zlecenia bool OrderModify( int ticket, double price, double stoploss, double takeprofit, price cena otwarcia tylko dla zleceń oczekujących stoploss nowy poziom StopLoss takeprofit nowy poziom TakeProfit expiration czas wygaśnięcia zlecenia oczekującego datetime expiration, color arrow_color=clr_none) arrow_color color strzałek dla poziomów StopLoss/TakeProfit lub wartość domyślna CLR_NONE czyli brak koloru

Wartość zwracana true jeśli funkcja, modyfikacja zlecenie zakończona powodzeniem false jeśli funkcja, modyfikacja zlecenie zakończona niepowodzeniem... if( TrailingStop > 0 ) { OrderSelect(124,SELECT_BY_TICKET); if(bid-orderopenprice()>point*trailingstop) { if(orderstoploss()<bid-point*trailingstop) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid- Point*TrailingStop,OrderTakeProfit(),0,Blue); return(0);

OrdersTotal Funkcja z liczbą aktualnie otwartych pozycji wraz ze zleceniami oczekującymi. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError(). : Wartość zwracana: liczba aktualnie otwartych pozycji int OrdersTotal() int wszystkie_zlecenia = OrdersTotal(); for(int p=0;p<wszystkie_zlecenia;p++) { if(orderselect(p,select_by_pos)==false) continue; Print(OrderTicket());

OrderLots Funkcja zwraca wielkość, wolumen aktualnie wybranego zlecenia. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError(). Uwaga! Aby korzystać z tej funkcji konieczne jest wcześniejsze zaznaczenie zlecenia za pomocą funkcji OrderSelect(). Wartość zwracana wielkość pozycji w lotach double OrderLots() if( OrderSelect(124,SELECT_BY_POS)==true ) { Print("wielkość pozycji #124 ",OrderLots()); else { Print("Błąd wykonania funkcji OrderSelect ",GetLastError());

OrderCloseBy Funkcja zamyka zlecenia przeciwstawne. Jeśli funkcja powiedzie się zwraca wartość true, w przeciwnym razie false. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError(). bool OrderCloseBy( int ticket, int opposite, color Color=CLR_NONE) Parametry ticket identyfikator zlecenia opposite identyfikator zlecenia przeciwstawnego color kolor strzałki symbolizującej zamknięcie pozycji lub wartość domyślna CLR_NONE brak koloru OrderCloseBy(numer_zlecenia,numer_zlecenia_przeciwstawnego);

OrderClosePrice Funkcja zwraca cenę zamknięcia aktualnie zaznaczonego zlecenia. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError(). Uwaga! Aby korzystać z tej funkcji konieczne jest wcześniejsze zaznaczenie zlecenia za pomocą funkcji OrderSelect(). Wartość zwracana: cena zamknięcia zlecenia double OrderClosePrice() OrderCloseTime Funkcja zwraca datę i czasu zamknięcia wybranego zlecenia, które jest zamknięte lub zwraca wartość 0 dla zleceń otwartych oraz oczekujących. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError(). Uwaga! Aby korzystać z tej funkcji konieczne jest wcześniejsze zaznaczenie zlecenia za pomocą funkcji OrderSelect (). datetime OrderCloseTime() Wartość zwracana: data i czas zamknięcia zlecenia

OrderComment Funkcja zwraca łańcuch znakowy opisujący zlecenie, komentarz do zlecenia. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError(). Uwaga! Aby korzystać z tej funkcji konieczne jest wcześniejsze zaznaczenie zlecenia za pomocą funkcji OrderSelect (). Wartość zwracana: komentarz do zlecenia string OrderComment() string komentarz; if( OrderSelect(124,SELECT_BY_TICKET)==false ) { Print("Błąd wykonania funkcji OrderSelect ",GetLastError()); return(0); komentarz = OrderComment(); Print( komentarz );

OrderCommission Funkcja oblicza i zwraca wartość prowizji pobieranych od aktualnie zaznaczonego zlecenia. Jeśli funkcja powiedzie się zwraca wartość true, w przeciwnym razie false. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError(). Uwaga! Aby korzystać z tej funkcji konieczne jest wcześniejsze zaznaczenie zlecenia za pomocą funkcji OrderSelect (). : Wartość zwracana: wielkość opłat i prowizji double OrderCommission() if( OrderSelect(124,SELECT_BY_POS)==true ) { Print("Prowizje dla zlecenia 121 ",OrderCommission()); else { Print("Błąd wykonania funkcji OrderSelect ",GetLastError());

OrderExpiration Funkcja zwraca datę ważności dla aktualnie zaznaczonego zlecenia oczekującego. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError(). Uwaga! Aby korzystać z tej funkcji konieczne jest wcześniejsze zaznaczenie zlecenia za pomocą funkcji OrderSelect(). Wartość zwracana data i czas wygaśnięcia pozycji oczekującej datetime OrderExpiration() if( OrderSelect(124, SELECT_BY_TICKET)==true ) { Print("Czas wygaśnięcia zlecenia #124 to ",TimeToStr(OrderExpiration())); else { Print("Błąd wykonania funkcji OrderSelect ",GetLastError());

OrderMagicNumber Funkcja zwraca identyfikator (magic numer) aktualnie wybranego zlecenia. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError(). Uwaga! Aby korzystać z tej funkcji konieczne jest wcześniejsze zaznaczenie zlecenia za pomocą funkcji OrderSelect(). Wartość zwracana identyfikator pomocniczy MagicNumber int OrderMagicNumber() if( OrderSelect(2,SELECT_BY_POS)==true) { Print("MagicNumber dla zlecenia o identyfikatorze 2", OrderMagicNumber()); else { Print("Błąd wykonania funkcji OrderSelect ",GetLastError());

OrderOpenPrice Funkcja zwraca wartość ceny otwarcia pozycji dla aktualnie wybranego zlecenia. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError(). Uwaga: aby korzystać z tej funkcji konieczne jest wcześniejsze zaznaczenie zlecenia za pomocą funkcji OrderSelect(). Wartość zwracana cena otwarcia zlecenia double OrderOpenPrice() OrderOpenTime Funkcja zwraca datę i czas aktualnie wybranego zlecenia. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError(). Uwaga! Aby korzystać z tej funkcji konieczne jest wcześniejsze zaznaczenie zlecenia za pomocąm funkcji OrderSelect(). Wartość zwracana data i czas otwarcia zlecenia w formacie datetime datetime OrderOpenTime()

OrderPrint Funkcja wyświetla podstawowe informacje w Dzienniku na temat aktualnie wybranego zlecenia. Format informacji to: numer zlecenia czas otwarcia typ zlecenia wielkość pozycji cena otwarcia StopLoss Take Profit czas zamknięcia cena zamknięcia prowizje i opłaty Swap zysk/strata komentarz MagicNumber czas wygaśnięcia zlecenia oczekującego. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError(). Uwaga! Aby korzystać z tej funkcji konieczne jest wcześniejsze zaznaczenie zlecenia za pomocą funkcji OrderSelect(). void OrderPrint() if(orderselect(10, SELECT_BY_TICKET)==true) { OrderPrint(); else { Print("Błąd wykonania funkcji OrderSelect ",GetLastError());

OrderProfit Funkcja zwraca aktualny zysk/stratę otwartej i aktualnie zaznaczonej pozycji (bez swap i prowizji). W otwartej pozycji, jest uzwzględniony niezrealizowany zysk. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError(). Uwaga! Aby korzystać z tej funkcji konieczne jest wcześniejsze zaznaczenie zlecenia za pomocą funkcji OrderSelect(). double OrderProfit() Wartość zwracana zysk/strata z aktualnie otwartych pozycji (bez swap i prowizji) if(orderselect(10, SELECT_BY_POS)==true) { Print("Zysk/strata z pozycji #124 ",OrderProfit()); else { Print("Błąd wykonania funkcji OrderSelect ",GetLastError());

OrdersHistoryTotal Funkcja zwraca liczbę zamkniętych zleceń, które znajdują się w historii rachunku i zależy od zakresu daty wyświetlanej w zakładce pozycji historycznych rachunku. Wartość zwracana liczba zamkniętych pozycji znajdujących się w historii int OrdersHistoryTotal() OrderSwap Funkcja zwraca wartość Swap dla aktualnie wybranego zlecenia. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError(). Uwaga! Aby korzystać z tej funkcji konieczne jest wcześniejsze zaznaczenie zlecenia za pomocą funkcji OrderSelect(). Wartość zwracana wielkość pozycji Swapowych double OrderSwap()

OrderStopLoss Funkcja zwraca wartość StopLoss dla aktualnie zaznaczonego zlecenia. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError(). Uwaga! Aby korzystać z tej funkcji konieczne jest wcześniejsze zaznaczenie zlecenia za pomocą funkcji OrderSelect(). Wartość zwracana wartość StopLoss double OrderStopLoss() OrderTakeProfit Funkcja zwraca wartość TakeProfit dla aktualnie zaznaczonego zlecenia. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError(). Uwaga! Aby korzystać z tej funkcji konieczne jest wcześniejsze zaznaczenie zlecenia za pomocą funkcji OrderSelect(). Wartość zwracana wartość TakeProfit double OrderTakeProfit()

Kody błędów operacji handlowych W poniższej tabeli zamieszczono błędy krytyczne, które powodują natychmiastowe zatrzymanie wykonywania się programu: