„Niniejsza prezentacja jest efektem wspólnych prac Domu Maklerskiego TMS Brokers S.A. oraz Pana Tomasza
                Waszczyka
                Materiały zawarte w niniejszej prezentacji mają charakter edukacyjny i nie stanowią działalności
                maklerskiej polegającej na doradztwie inwestycyjnym lub wydawaniu rekomendacji o charakterze ogólnym.
                Zaprezentowane podczas warsztatów (w tym w niniejszej prezentacji) algorytmy mają charakter jedynie
                poglądowy w celu zobrazowania i nauki języka programowania modułu Expert Advisor dla systemu
                transakcyjnego MetaTrader. Korzystając z algorytmów klient powinien mieć na względzie, że:
                1. Klient wykorzystuje mechanizmy algorytmiczne na własne ryzyko i odpowiedzialność.
                2. Klient ponosi pełną odpowiedzialność za straty lub utracone korzyści związane z realizacją zleceń za
                pomocą mechanizmów algorytmicznych. Dotyczy to także prowizji, jakie Klient będzie zobowiązany pokryć w
                związku z transakcjami, które będą zawierane w oparciu o algorytm, nawet przy ich znacznej ilości.
                3. Klient odpowiada za opóźnione wygenerowanie lub niewygenerowanie lub błędne wygenerowanie zleceń za
                pomocą mechanizmów algorytmicznych. W szczególności Klient ponosi odpowiedzialność za ww. zdarzenia
                powstałe w wyniku błędów w oprogramowaniu mechanizmów algorytmicznych.
                4. Nie można zagwarantować osiągnięcia określonego wyniku finansowego na transakcjach zawartych z
                wykorzystaniem mechanizmów algorytmicznych.
                5. Transakcje realizowane za pomocą mechanizmów algorytmicznych traktowane są jako transakcje zawierane
                przez Klienta.
                6. Składanie, usuwanie lub modyfikowanie zleceń z wykorzystaniem mechanizmów algorytmicznych traktowane
                jest jako zlecenia złożone przez Klienta.
                7. W wersji webowej oraz mobilnej systemu transakcyjnego może nie istnieć możliwość uruchomienia
                strategii automatycznych.
                8. Wszelkie przykładowe strategie algorytmiczne zaprezentowane w czasie niniejszego szkolenia mają
                jedynie charakter edukacyjny i nie powinny być stosowne na rachunkach rzeczywistych.
                Dom Maklerski TMS Brokers S.A. podlega nadzorowi Komisji Nadzoru Finansowego i prowadzi działalność
                maklerską na podstawie zezwolenia z dnia 26 kwietnia 2004 r. (KPWiG-4021-54-1/2004). Kontakt: Skylight
                Ul. Złota 59; 00-120 Warszawa, Polska; Tel.: +48 22 27 66 200”
            
        Agenda
            - Metody ustawiania zlecenia stop loss
- Zarzadzanie portfelem - wielkość pozycji
- Zmienne predefiniowane
- Architektura MetaTrader
- Zmiana przedziału czasowego
- Zaktualizowany MQL
- Engulfing pattern w MQL
- Jakie IDE do MQL?
- Gdzie szukać pomocy technicznej
- Wersjonowanie naszych automatów
- . . .
Metody ustawiania SL
						int liczbaSwiec = 10;
int LowestShift = iLowest(NULL,0,MODE_LOW,liczbaSwiec,0);
double BuyStopLoss = Low[LowestShift];
        Alternatywny sposób ustawiania SL - Parabolic SAR
            
					SAR(i) = SAR(i-1)+PRZYSPIESZENIE*(CENA_POPRZEDNIA(i-1)-SAR(i-1))
        Zarzadząnie wielkoscia pozycji
            // External variables
 extern bool DynamicLotSize = true;
 extern double EquityPercent = 2;
 extern double FixedLotSize = 0.1;
 // Start function
 if(DynamicLotSize == true)
 {
 double RiskAmount = AccountEquity() * (EquityPercent / 100);
 double TickValue = MarketInfo(Symbol(),MODE_TICKVALUE);
 if(Digits == 3 || Digits == 5) TickValue *= 10;
 double CalcLots = (RiskAmount / StopLoss) / TickValue;
 double LotSize = CalcLots;
 }
 else LotSize = FixedLotSize;
        Do jakich informacji mamy dostęp z MQL - zmienne predefiniowane
        Zmiana przedzialu czasowego - programujemy !
            						//+------------------------------------------------------------------+
//|                                                      zmienTF.mq4 |
//|                                                  Tomasz Waszczyk |
//|                                         https://www.waszczyk.com |
//+------------------------------------------------------------------+
#property copyright "Tomasz Waszczyk"
#property link      "https://www.waszczyk.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
#property show_inputs
#import "user32.dll"
int      PostMessageA(int hWnd,int Msg,int wParam,int lParam);
int      GetWindow(int hWnd,int uCmd);
int      GetParent(int hWnd);
#import
int eintTF=PERIOD_M5;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnStart()
{
bool blnContinue=true;
int intParent= GetParent(WindowHandle(Symbol(),Period()));
int intChild = GetWindow(intParent,0);
int intCmd;
switch(eintTF)
{
case PERIOD_M1:   intCmd = 33137;  break;
case PERIOD_M5:   intCmd = 33138;  break;
case PERIOD_M15:  intCmd = 33139;  break;
case PERIOD_M30:  intCmd = 33140;  break;
case PERIOD_H1:   intCmd = 35400;  break;
case PERIOD_H4:   intCmd = 33136;  break;
case PERIOD_D1:   intCmd = 33134;  break;
case PERIOD_W1:   intCmd = 33141;  break;
case PERIOD_MN1:  intCmd = 33334;  break;
}
if(intChild>0)
{
if(intChild!=intParent) PostMessageA(intChild,0x0111,intCmd,0);
}
else      blnContinue=false;
while(blnContinue)
{
intChild=GetWindow(intChild,2);
if(intChild>0)
{
if(intChild!=intParent) PostMessageA(intChild,0x0111,intCmd,0);
}
else   blnContinue=false;
}
// Now do the current window
PostMessageA(intParent,0x0111,intCmd,0);
return 0;
}
//+------------------------------------------------------------------+
        Jakie IDE do programowania ? 
        Z automatami na kilka rynków spotkałem się przy przeglądaniu konkursu MQL organizowanej przez firmę Metaquotes, tam cześć uczestników używało automatów na kilka rynków, stąd wiem że technicznie
                jest to możliwe....
                ...Ale bardziej mi zależy żeby się dowiedzieć jak najwięcej o zmianach które weszły do nowej...
                ... wersji MQL4. , Stąd mam prośbę o przekazanie dużej dawki informacji z nowości. Z góry dziękuje i pozdrawiam serdecznie.
            Co nowego w języku MQL ? 
            Obiektowość - OOP czyli klasy
            Nowe typy danych - uklon w stronę C++
            Zmiana struktury katalógow
            Szablony funkcji - sekcja naprawde zaawansowana
            Optymalizacja języka - przykład pętla "if"
            MQL5 Storage
        Szablony funkcji
                        template< typename T>
T ArrayMax(T &arr[])
{
uint size=ArraySize(arr);
if(size==0) return(0);
T max=arr[0];
for(uint n=1;n < size ;n++)
if(max < arr[n]) max=arr[n];
//---
return(max);
}
        Dlaczego wazne jest odswiezanie ceny?
            RefreshRates()
        Wielowatkowosc w MQL
           while(IsTradeContextBusy()) Sleep(10);
int Ticket = OrderSend(Symbol(),OP_BUY,LotSize,Ask,UseSlippage,0,0,"Buy Order",MagicNumber,0,Green);
        Gdzie szukać pomocy technicznej ?
        Wersjonowanie naszego kodu zrodlowego
            MQL5 Storage
            Wlasny VCS
            GIT
            SVN
        
                „Niniejsza prezentacja jest efektem wspólnych prac Domu Maklerskiego TMS Brokers S.A. oraz Pana Tomasza
                Waszczyka
                Materiały zawarte w niniejszej prezentacji mają charakter edukacyjny i nie stanowią działalności
                maklerskiej polegającej na doradztwie inwestycyjnym lub wydawaniu rekomendacji o charakterze ogólnym.
                Zaprezentowane podczas warsztatów (w tym w niniejszej prezentacji) algorytmy mają charakter jedynie
                poglądowy w celu zobrazowania i nauki języka programowania modułu Expert Advisor dla systemu
                transakcyjnego MetaTrader. Korzystając z algorytmów klient powinien mieć na względzie, że:
                1. Klient wykorzystuje mechanizmy algorytmiczne na własne ryzyko i odpowiedzialność.
                2. Klient ponosi pełną odpowiedzialność za straty lub utracone korzyści związane z realizacją zleceń za
                pomocą mechanizmów algorytmicznych. Dotyczy to także prowizji, jakie Klient będzie zobowiązany pokryć w
                związku z transakcjami, które będą zawierane w oparciu o algorytm, nawet przy ich znacznej ilości.
                3. Klient odpowiada za opóźnione wygenerowanie lub niewygenerowanie lub błędne wygenerowanie zleceń za
                pomocą mechanizmów algorytmicznych. W szczególności Klient ponosi odpowiedzialność za ww. zdarzenia
                powstałe w wyniku błędów w oprogramowaniu mechanizmów algorytmicznych.
                4. Nie można zagwarantować osiągnięcia określonego wyniku finansowego na transakcjach zawartych z
                wykorzystaniem mechanizmów algorytmicznych.
                5. Transakcje realizowane za pomocą mechanizmów algorytmicznych traktowane są jako transakcje zawierane
                przez Klienta.
                6. Składanie, usuwanie lub modyfikowanie zleceń z wykorzystaniem mechanizmów algorytmicznych traktowane
                jest jako zlecenia złożone przez Klienta.
                7. W wersji webowej oraz mobilnej systemu transakcyjnego może nie istnieć możliwość uruchomienia
                strategii automatycznych.
                8. Wszelkie przykładowe strategie algorytmiczne zaprezentowane w czasie niniejszego szkolenia mają
                jedynie charakter edukacyjny i nie powinny być stosowne na rachunkach rzeczywistych.
                Dom Maklerski TMS Brokers S.A. podlega nadzorowi Komisji Nadzoru Finansowego i prowadzi działalność
                maklerską na podstawie zezwolenia z dnia 26 kwietnia 2004 r. (KPWiG-4021-54-1/2004). Kontakt: Skylight
                Ul. Złota 59; 00-120 Warszawa, Polska; Tel.: +48 22 27 66 200”
            
         
            Programowanie automatycznych strategii transakcyjnych
            Część trzecia - zaawansowana 4.11.2015
            
                Stworzone przez Tomasz Waszczyk / Twitter @Boomattache