Serwis AktywnyInwestor.pl koncentruje się na inwestycjach na polskim rynku kapitałowym, ale myślę, że należy się tutaj kilka słów o rynku Forex. Instytucje finansowe działająca na rynku FX i ich model biznesowy był do niedawna owiany tajemnicą.
Inwestorzy indywidualni korzystający z MetaTrader’a zapewne korzystają z niego w większości przypadków do zawierania transakcji na rynku FX i ogólnie na rynkach OTC (Over The Counter). Rynek ten, jak wiadomo charakteryzuje się dużą płynnością, jak również ‘niespodziewanymi’ wahaniami cen i ogólnie owiany jest złą sławą wśród inwestorów indywidualnych.
Dlaczego tak jest - otóż my, inwestorzy indywidualni (ang. Retail Traders), czyli ludzie mający kwotę poniżej 1 000 000 USD na rachunku, jesteśmy na samym końcu łańcucha pokarmowego na rynku - swoistym planktonem, tracącym w 90% przypadków, którym karmią się Brokerzy dla Klienta Indywidualnego (ang. Retail Forex Broker lub FCM - Futures Commision Merchant). Tacy Brokerzy są najczęściej określani jako ‘Market Makers’, a pracują dla nich Dealerzy (FX Dealers), którzy sprzedają nam produkt (kontrakty na pary walutowe). Prawdziwy rynek Forex (zależy od definicji słowa ‘prawdziwy’) to rynek międzybankowy, czyli handel walutami na ogromną skalę za pośrednictwem największych banków, gdzie transakcje zawierają zarówno rządy i największe korporacje. Ponad 3/4 światowego obrotu walutami jest generowane przez 10 banków:
Deutche Bank, UBS, CitiGroup, Barclay’s, RBS, Goldman Sachs, HSBC, BOA (Bank of America), JPMorgan Chase i Meryll Lynch.
Dokładne dane w 2010r. będą opublikowane 5 maja za pośrednictwem Euromoney FX Poll, dla zainteresowanych szczegóły na http://www.euromoney.com/
Wracając do tematu: wyobraźmy sobie, że rynek międzybankowy to hurtownia, w takim przypadku Retail Forex Broker to sklep, mający swój narzut (spread), jak również pracowników - Dealerów, którzy oferują nam produkt. W teorii usługi brokera ograniczają się do pośrednictwa i dostarczania płynności instrumentów finansowych, w praktyce jednak tak nie jest.
Biorąc pod uwagę statystyki, tj. duży procent inwestorów tracących pieniądze, większość kontraktów nie trafia na rynek i tak naprawdę inwestor indywidualny gra przeciwko Dealerowi. Jeszcze do niedawna nikt o tym nie wspominał, ale ostatnio np. XTB czy Bossa FX, działający na polskim rynku, otwarcie przyznają się do konfliktu interesów - polecam przeczytanie PDF’ów zapisanych małym druczkiem dostępnych na stronach internetowych brokerów.
Skoro wiemy, że stanęliśmy do nierównej walki, przydałoby się wiedzieć, jaką bronią dysponuje przeciwnik. Niezaprzeczalnie ma dostęp do informacji takich jak:
- statystyki zbierane w czasie rzeczywistym na temat wszystkich pozycji klientów
- średni koszt otwartych pozycji
- rozmiar i P/L wszystkich pozycji
- wszystkie zlecenia oczekujące
- lokalizacja i wolumen zleceń stop/loss
- informacja kto i na jakim rynku kupuje
- pozycje największych klientów
Typowe zagrywki Brokera FX to:
PRICING - czyli generowanie fałszywych cen (nagły skok ang. ’spike’), który odpala zlecenia stop/loss klienta, gdy wiadomo, że rynek pójdzie w jego stronę.
FRONT RUNNING - czyli zawieranie pozycji zgodnie z przewidywanym kierunkiem, mając informacje wcześniej niż ‘ulica’. Przykładowo - informacja, że wielka firma musi przewalutować kilka miliardów EUR przed zakończeniem sesji w Londynie. Jest to analogia do znanego nam z giełdy powiedzenia ‘kupuj plotki, sprzedawaj fakty’.
PRICE SHADING - najczęściej po publikacji danych, mamy skoki cen w obie strony, które wymiatają zlecenia klientów, część z nich jest celowo sztucznie generowana
STOP-LOSS HUNTING - czyli polowanie na zlecenia stop-loss klientów. Jeżeli wiadomo, że mamy wiele zleceń stop loss na ustalonych poziomach, opłaca się zejść niżej i ‘wyłapać’ zlecenia s/l. Niestety sam ostatnio stałem się ofiarą takiego zabiegu i myślę, że niejeden z Was: poniżej przykład jak na dłoni. Stop/loss postawiony kilka pipsów poniżej 61,8% zniesienia fibo (na pewno postawiony tam przez wiele osób) został zebrany, zanim rynek się cofnął.
Chciałbym polecić Wam ostatnio przeczytaną książkę A.Silvani pt. “Beat The Forex Dealer - An insider’s look into trading foreign exchange market” (wolne tłum. “Pokonaj Dealera Forex - spojrzenie insidera na handel na rynku walutowym”):
Książka ta pomoże rozwiać Wasze wątpliwości i z pewnością skłoni do przemyśleń na temat ostatnio dokonanych nieudanych transakcji.
Czy można w tej nierównej walce wygrać? Oczywiście, na rynku FX są duże pieniądze do zarobienia, należy tylko uważać, żeby zbytnio nie ułatwiać dealerom łatwego zarobku na nasz koszt. Pamiętajcie - znając ICH sposób myślenia, oraz słabości, stajemy się odporniejsi na ‘nieoczekiwane’ straty na rachunku.
Opublikowano 2 rok, 2 mies. temu o 11:39. 20 komentarzy
Wyobraźmy sobie, że zamiast kupna i sprzedaży akcji obracamy kontraktami, które odzwierciedlają kurs akcji notowanych na giełdzie. Cena kontraktu zmienia się równolegle do ceny instrumentu bazowego, czyli w tym przypadku akcji notowanych na GPW. Jeden kontrakt odpowiada 1 akcji w karnecie zleceń. Można zapytać, no dobrze, gdzie tu sens, gdzie logika? W jakim celu ktoś wprowadza takie kontrakty i w jaki sposób to jest dla niego opłacalne i jak my, inwestorzy, możemy na tym skorzystać?
Dzisiaj postaram się przybliżyć CFD na akcje, opisać ich wady i zalety oraz ogólne zasady rządzące obrotem takich kontraktów.
Obecnie wiadomo mi o dwóch brokerach, którzy w Polsce oferują CFD na akcje WIG20 - XTB oraz TMS Brokers. Przykłady zamieszczone poniżej opracowałem na podstawie platformy XTB, ale oświadczam, że nie jestem w żaden sposób związany z tym brokerem, ani nie zamierzam reklamować któregokolwiek brokera - Państwo ocenicie sami co dla Was najlepsze.
Skrót CFD oznacza Contract For Difference, czyli Kontrakt Na Różnicę. W przypadku zawarcia takiego kontraktu, obie strony zobowiązują się do pokrycia różnic finansowych wynikających z cen otwarcia i zamknięcia kontraktu. Zysk lub strata jest zatem różnicą ceny otwarcia i zamknięcia pozycji. W przypadku CFD na akcje WIG20 cena 1 kontraktu jest równa cenie 1 akcji. Prawie - bo jak zauważyłem z autopsji - cena 1 kontraktu w danej chwili jest ceną BID - czyli najwyższą ceną kupna w karnecie zleceń. Kupując zatem ‘po cenie rynkowej’, w rzeczywistości PKC, kupujemy po cenie ASK, czyli po najniższej cenie sprzedaży. Aby szybko oszacować obecną różnicę w cenach BID i ASK, napisałem wskaźnik ‘Spread-O-Meter’ w MQL4, pokazujący na żywo podczas sesji spread na wykresie, wskaźnik ten zaprezentuję w kolejnym artykule. Jeżeli transakcja nie może być w całości zrealizowana, stosowana jest metoda średniej ceny ważonej wolumenem - VWAP (volume weighted average price). Możliwe jest również ustawianie zleceń kupna typu: buy limit oraz buy stop, oraz zleceń sprzedaży sell limit i sell stop.
Buy limit - ustalamy, gdy cena akcji (i kontraktu) spada i chcemy je kupić na danym poziomie - wystawiamy wtedy cenę, będącą ceną ASK w karnecie zleceń, odpowiada to zleceniu kupna z limitem w karnecie zleceń.
Buy stop - cena akcji rośnie (np. mamy trójkąt symetryczny, z którego ‘grozi’ wybicie górą) - ustawiamy zlecenie kupna na odpowiednim poziomie i tu również uwaga - jest to zlecenie z ceną aktywacji ASK - czyli NIE jest to cena, po której inwestorzy zaczną kupować, tylko najwyższa cena po lewej stronie karnetu (jakby nie patrzeć, bardzo istotne), kupujemy natomiast PKC po cenie BID.
Sell limit - widzimy, że cena akcji rośnie i chcemy je sprzedać na określonym poziomie - zlecenie sell limit odpowiada wstawieniu w karnet sprzedaży zlecenia na daną liczbę akcji, zostanie ona zrealizowana, gdy po przeciwnej stronie zostanie postawiona cena z limitem kupna.
Sell stop - zabezpieczamy się przed spadkiem, jeżeli cena, znowu ASK w karnecie kupna spadnie do tej ceny, kontrakty (odpowiadające im akcje) są sprzedawane PKC (czyli mamy zlecenie stop loss z limitem aktywacji).
Dlaczego o tym piszę - ponieważ zlecenia FAKTYCZNIE trafiają na giełdę, to jest właśnie DMA, czyli Direct Market Access. Obsługa kupna i zleceń kontraktów opiera się o cenę faktycznie występującą na giełdzie. Każde zlecenie występujące jako CFD na akcje trafia rzeczywiście na WARSET! Nie jest tak, jak przypadku FOREX czy kontraktów na większość kontraktów towarowych, gdzie w platformach MT4 gramy przeciwko (niektórzy mogą być zdziwieni) market makerowi, czyli naszemu brokerowi. Na czym więc tym razem zarabia broker - na prowizjach od kupna/sprzedaży i prowizji od kredytu na lewar, o czym później.
Charakterystyczną cechą rozliczania CFD DMA jest, w przeciwieństwie do akcji, czas rozliczenia T+0, co oznacza: sprzedajemy w poniedziałek, robimy wypłatę w poniedziałek. W przypadku sprzedaży akcji sprzedajemy w poniedziałek, wypłacamy pieniądze w czwartek. Dwie kolejne istotne różnice między kontraktami CFD DMA na akcje, a futures to brak terminu wygasania ważności kontraktu (prawie, bo otwarte pozycje zostają zamknięte automatycznie po upływie 12 miesięcy od momentu otwarcia) i brak krótkiej sprzedaży, czyli nie możemy pożyczać akcji i grać na nich na spadki.
Przypadki szczególne to splity, dywidendy pieniężne i w akcjach, prawa poboru oraz prawa do głosu na WZA (Walnym Zgromadzeniu Akcjonariuszy).
Zacznę od końca - kontrakty nie dają żadnych praw do głosu na WZA - na minus, jeżeli ktoś jest np. pod progiem 5% i resztę uzupełnia kontraktami, lecz są to bardzo rzadkie przypadki (5% na akcjach WIG20 to znaczna suma).
Split jest rozwiązany w ten sposób, że liczba kontraktów jest uzupełniana do liczby akcji po splicie - przykładowo mieliśmy 1000 kontraktów, po splicie 1:5 stan posiadania kontraktów wzrasta do 5000.
Dywidenda pieniężna - dostajemy od razu dywidendę NETTO, czyli pomniejszoną o 19% podatku kapitałowego. Np. mając akcje 1000 kontraktów na akcje X, biorąc pod uwagę, że dywidenda wynosi 10zł/akcję, otrzymujemy na rachunek maklerski kwotę 8,10zł*1000 = 8100zł.
Dywidenda w akcjach - rachunek jest uzupełniany o liczbie kontraktów odpowiadających liczbie akcji przyznanych w dywidendzie.
Prawa poboru - na rachunek wpływa kwota będąca ekwiwalentem pieniężnym wartości praw poboru.
Konstrukcja CFD wpływa na możliwość lewarowania inwestycji, czyli obracania większą gotówką, niż się posiada, a reszta jest finansowana z kredytu, który w przypadku trzymania pozycji przez noc ulega odsetkom, w przypadku XTB jest to 3-miesięczny WIBOR + 2,5 punkta procentowego dla brokera. Czyli na dzisiaj WIBOR na poziomie 4,1% skutkuje kredytem na akcje (a w zasadzie na utrzymanie pozycji na kontraktach) w wysokości 4,1%+2,5%=6,6% od wartości pożyczki.
Depozyt zabezpieczający, czyli wartość konieczna na rachunku dla udzielanego kredytu jest różna i wynosi od 10% dla spółek PKO S.A., PKO BP, PKN Orlen, TP S.A. 15% BRE Bank SA, BZWBK SA, KGHM Polska Miedź SA, Polskie Górnictwo Naftowe I Gazownictwo (PGNIG), i 25% dla pozostałych spółek z indeksu WIG20. Można zatem stosować lewar maksymalnie do 10-krotnej wartości inwestycji. Przykładowo mając 10 000zł na akcje PKO S.A. i przyjmując arbitralnie bieżącą cenę ok. 100zł, możemy kupić 100 akcji na rynku kasowym, lub 100 * 10 = 1000 kontraktów CFD, odpowiadających zakupowi 1000 akcji (100 000zł). Przy zakupie kontraktów płacimy oczywiście prowizję od zakupu i sprzedaży od całej kwoty, przykładowe 0,19% z 100 000 to 190zł! Jeżeli sprzedamy kontrakty po tej samej cenie, co kupiliśmy w ten sam dzień, czyli wykluczając prowizję za kredyt, tracimy 380zł, co odpowiada 3,8% ryzyka na całym dostępnym kapitale! Należy się zatem BARDZO mocno zastanowić, jaką mamy tolerancję na ryzyko i jak duże lewarowanie jest nam potrzebne do osiągnięcia zamierzonego celu.
Przykładowo wklejam obliczenia dla kwoty inwestycji 10000zł dla lewarów 3x ,5x i 10x dla maksymalnej kwoty straty na pojedynczej transakcji wynoszącej 3% posiadanego kapitału i ceny akcji wynoszącej 97zł.
Jak widać, przy ustaleniach 3% straty dla 1 transakcji, nie ma najmniejszego sensu otwierać zlecenia DT dla lewara x10, ponieważ w przypadku sprzedaży po tej samej cenie co kupno, same prowizje przekroczą 3%!
Podsumowując, lewar jest to broń obosieczna, możemy więcej zyskać i więcej stracić, z tego względu trzeba koniecznie przeliczyć opłaty wynikające z trzymania pozycji w dłuższym terminie i wliczyć je w ryzyko ewentualnie poniesionej straty oraz oszacować koszty prowizji. Same kontrakty CFD DMA są ciekawe, a ewentualną decyzję o inwestycji w te instrumenty pozostawiam Wam inwestorzy.
Opublikowano 2 rok, 2 mies. temu o 23:12. 17 komentarzy
Witam po dłuższej przerwie! Dzisiaj zamieszczam skrypt konwertujący dane dzienne do danych tygodniowych. Jak obiecałem, algorytm, w przeciwieństwie do standardowego skryptu period_converter, liczy świeczki tygodniowe w sposób logiczny, od poniedziałku do piątku, tak jak np. w danych dostępnych w serwisie stooq.pl (przykładowo http://stooq.pl/q/d/?s=oil),
Jedna świeczka to jeden konkretny tydzień w danym roku, zatem dokładnie 52 świeczki tworzą jeden rok. Jeżeli przykładowo w tygodniu były tylko 3 sesje, w poniedziałek, środę i czwartek, to świeczka jest formowana na podstawie 3 dni sesyjnych. Szczegółowy algorytm podaję poniżej:
1 - sprawdź jaki dzień tygodnia jest dniem pierwszej świeczki
2 - oblicz datę kolejnego poniedziałku
3 - jeżeli kolejny poniedziałek jest dalej niż 31 grudnia, licz świeczkę do 31 grudnia i przeskocz do następnego roku
4 - powtarzaj powyższe kroki, aż do ostatniej świeczki
Dzisiaj nauczymy się z danych dziennych dostępnych w serwisie tworzyć dowolne wykresy tygodniowe, miesięczne, kwartalne, jak również wykresy oparte o dowolną liczbę dni - 2,3, 10 itd. Umiejętność ta jest szczególnie przydatna podczas analizy danych giełdowych lub indeksów, gdy stosujemy technikę analizy operającą się o wiele ram czasowych, jak np. impet podwójnej analizy czasu. W literaturze anglojęzycznej pojęcie inwestowania za pomocą wielu ram czasowych określa się mianem multi time-frame trading.
Do wygenerowania dowolnej ramy czasowej służy skrypt o nazwie ‘period_converter’, który jest standardowym skryptem dostarczanym z programem MetaTrader.
Aby utworzyć nową ramę czasową, należy otworzyć dowolny instrument:
a następnie przeciągnąć skrypt period_converter (podświetlony na screenshocie powyżej) za pomocą myszki do okna z wykresem. Naszym oczom powinno ukazać się okno:
Przechodzimy na zakładkę ’Wpisz parametry’:
Interesuje nas wartość ‘ExtPeriodMultiplier’ - w naszym przypadku jest to liczba dni tworzących 1 świeczkę lub słupek. Domyślnie wpisana jest wartość 3, ale przez podwójne kliknięcie myszą można ją dowolnie zmieniać:
Wartość 7 oznacza, że wygenerujemy wykres tygodniowy (Weekly), wartość 30 miesięczny (Monthly). Można oczywiście wybrać arbitralną liczbę dni i na jej podstawie przeprowadzać analizy. Po wciśnięciu przycisku OK, generowany jest wybrany wykres, powinien pojawić się w liście wykresów offline:
Dzięki temu mamy dostęp do wykresów tygodniowych i miesięcznych:
Analogicznie można tworzyć wykresy kwartalne, półroczne, roczne, lub kilkudniowe - wszystko zależy od naszych wymagań. Na koniec uwaga - wykresy te nie są tworzone automatycznie po zaktualizowaniu danych dziennych - należy uruchomić ponownie skrypt period_converter. Jak zwykle zachęcam do eksperymentów.
Opublikowano 2 rok, 10 mies. temu o 08:51. 3 komentarzy
Tak jak obiecałem w poprzednim artykule, dzisiaj nauczymy się jak zrobić filtr sygnałów dla wszystkich spółek lub kontraktów terminowych nowym, o wiele szybszym sposobem, bez konieczności uruchamiania MT4 dla każdego waloru.
Tym razem sygnał będzie tworzony następująco (prośba jednego z komentarzy do poprzednich wpisów): jeżeli walor lub kontrakt przebije na CLOSE najwyższą wartość HIGH z poprzednich 20 sesji, generowany jest sygnał kupna.
Przejdźmy zatem do dzieła. Schemat działania:
1. Utworzenie listy walorów do zbadania i umieszczenie tejże listy w pliku tekstowym: dzięki temu skrypt MT4 nie będzie musiał być przekompilowywany za każdym razem, gdy chcemy zmienić zestaw walorów.
2. Otwarcie Metatrader’a z listą walorów do zbadania.
3. Uruchomienie skryptu, który zbada wszystkie walory lub kontrakty po kolei i zapisze wynik. Wynik może być zapisywany do konsoli, może być umieszczany na wykresach, lub może być zapisywany w pliku tekstowym. Wybrałem trzecie rozwiązanie, czyli zapis do pliku tekstowego.
ad 1) Utworzenie listy walorów do zbadania:
Sposoby są 2 - ręczne zapisywanie (wolne), lub za pomocą 1 linijki dzięki zainstalowanemu CygWin’owi (patrz poprzedni tutorial), przykładowo przez polecenie
ls -1 | grep “^A” > walory_do_sprawdzenia.txt (walory na literę A)
ls -1 > walory_do_sprawdzenia.txt (wszystkie walory)
Uwaga: z powodu ograniczenia architektury MT4 można wczytywać maksymalnie ok 120 walorów na raz.
(screenshot konsoli - można powiekszyć przez kliknięcie)
ad 2) Otwarcie MetaTradera z listą walorów - wystarczy użyć poniższy skrypt:
#!/bin/bash
# Filtr sygnalow kupna 2
## Copyright (c) 2009, AktywnyInwestor.pl
## Skrypt
PLIKZWALORAMI="c:\\mt4\\experts\\files\\walory_do_sprawdzenia.txt"
WALORY=`cat $PLIKZWALORAMI | awk -F"1440.hst" '{ print $1 }'`
PROFILE_DIR="c:\\mt4\\profiles\\sygnaly\\"
PROGRAM_DIR="c:\\mt4\\"
## kopia tymczasowa plików w profilu sygnay
mv -f $PROFILE_DIR"chart01.chr" $PROFILE_DIR"chart01.bak"
mv -f $PROFILE_DIR"order.wnd" $PROFILE_DIR"order.bak"
cd $PROGRAM_DIR
licznik=1;
for i in $WALORY
do
echo "Processing "$i
echo $i",Daily (offline)" >> $PROFILE_DIR"order.wnd"
CHARTNAME=`Printf "chart%02d.chr" $licznik`
cat $PROFILE_DIR"\chart01.bak" | sed '2s/.*/symbol='"$i"'/' > $PROFILE_DIR$CHARTNAME
let licznik=licznik+1;
echo licznik = $licznik
Printf "%02d" $licznik;
done
./terminal.exe terminal_sygnaly.ini
## Cleanup
cd $PROFILE_DIR
rm -f *.chr
rm -f *.wnd
mv -f "chart01.bak" "chart01.chr"
mv -f "order.bak" "order.wnd"
cd $PROGRAM_DIR
Skrypt na pierwszy rzut oka może wyglądać na bardzo zawiły, jednak w rzeczywistości taki nie jest. Jego funkcjonalność jest podzielona na 3 części: pierwsza część przygotowuje sztuczne pliki dla profilu ’sygnaly’ (kolejny nieudokumentowany trick - dzięki temu nie trzeba ręcznie otwierać po kolei wszystkich walorów!). Druga część uruchamia MetaTrader’a i czeka na uruchomienie skryptu w MQL i wyłączenie MT4. Trzecia część przywraca stan profilu ’sygnaly’ do stanu poczatkowego.
ad 3) Skrypt w MQL4, który bada wszystkie akcje i kontrakty terminowe, które wpisaliśmy do listy w pliku ‘walory_do_zbadania.txt’:
Mam nadzieję, że komentarze w skrypcie ułatwiają zrozumienie kodu. Skrypt po kolei sprawdza HIGH z poprzednich 20 sesji i porównuje CLOSE dzisiejszego dnia dla każdej akcji lub kontraktu terminowego - jest uniwersalny. Mój przykładowy plik wynikowy ma postać:
…
Sygnal dla ASBIS : HIGH20 = 2.1 , DZISIEJSZE CLOSE = 1.78 wynik: BRAK SYGNALU KUPNA
Sygnal dla ASSECOBS : HIGH20 = 7.57 , DZISIEJSZE CLOSE = 6.7 wynik: BRAK SYGNALU KUPNA
Sygnal dla ASSECOPOL : HIGH20 = 59.25 , DZISIEJSZE CLOSE = 57.5 wynik: BRAK SYGNALU KUPNA
Sygnal dla ASSECOSLO : HIGH20 = 23.1 , DZISIEJSZE CLOSE = 22.05 wynik: BRAK SYGNALU KUPNA
Sygnal dla ASTARTA : HIGH20 = 21.4 , DZISIEJSZE CLOSE = 18 wynik: BRAK SYGNALU KUPNA
Sygnal dla ATLANTAPL : HIGH20 = 3.15 , DZISIEJSZE CLOSE = 3.06 wynik: BRAK SYGNALU KUPNA
Sygnal dla ATLANTIS : HIGH20 = 2.18 , DZISIEJSZE CLOSE = 1.98 wynik: BRAK SYGNALU KUPNA
Sygnal dla ATLASEST : HIGH20 = 3.58 , DZISIEJSZE CLOSE = 3.23 wynik: BRAK SYGNALU KUPNA
Sygnal dla ATM : HIGH20 = 5.58 , DZISIEJSZE CLOSE = 5.74 wynik: NA CLOSE PRZEBITE HIGH 20-SESYJNE, SYGNAL KUPNA
Sygnal dla ATMGRUPA : HIGH20 = 4.29 , DZISIEJSZE CLOSE = 3.9 wynik: BRAK SYGNALU KUPNA
Sygnal dla ATREM : HIGH20 = 12.86 , DZISIEJSZE CLOSE = 12.9 wynik: NA CLOSE PRZEBITE HIGH 20-SESYJNE, SYGNAL KUPNA
Sygnal dla AZOTYTARNOW : HIGH20 = 17.64 , DZISIEJSZE CLOSE = 17.03 wynik: BRAK SYGNALU KUPNA
Sygnal dla B3SYSTEM : HIGH20 = 2.83 , DZISIEJSZE CLOSE = 2.83 wynik: BRAK SYGNALU KUPNA
Sygnal dla BAKALLAND : HIGH20 = 3.79 , DZISIEJSZE CLOSE = 3.45 wynik: BRAK SYGNALU KUPNA
Sygnal dla BANKBPH : HIGH20 = 38.69 , DZISIEJSZE CLOSE = 37.81 wynik: BRAK SYGNALU KUPNA
Sygnal dla BANKIER.PL : HIGH20 = 8.11 , DZISIEJSZE CLOSE = 8.06 wynik: BRAK SYGNALU KUPNA
Sygnal dla BARLINEK : HIGH20 = 3.85 , DZISIEJSZE CLOSE = 3.54 wynik: BRAK SYGNALU KUPNA
Sygnal dla BBICAPNFI : HIGH20 = 1.81 , DZISIEJSZE CLOSE = 1.7 wynik: BRAK SYGNALU KUPNA
Sygnal dla BBIDEVNFI : HIGH20 = 0.41 , DZISIEJSZE CLOSE = 0.38 wynik: BRAK SYGNALU KUPNA
Sygnal dla BBIZENNFI : HIGH20 = 0.75 , DZISIEJSZE CLOSE = 0.6 wynik: BRAK SYGNALU KUPNA
…
Jest to oczywiście tylko przykład, można dowolnie formatować wyniki np. w taki sposób, aby można było je łatwo skopiować do arkusza kalkulacyjnego.
Poniżej sesja video z uruchomionego skryptu:
Opublikowano 2 rok, 11 mies. temu o 20:57. 22 komentarzy
Dzisiaj bardziej technicznie: nauczymy się bardzo przydatnej rzeczy, a mianowicie jak zrobić filtr wybranych sygnałów kupna dla określonych spółek.
Często po analizie fundamentalnej i spekulacyjnej spółki korzystamy ze wskaźników analizy technicznej i na ich podstawie wybieramy moment wejścia - czyli zakupu akcji. Przeglądanie ręcznie wszystkich spółek po kolei jest bardzo czasochłonne i przydałoby się przynajmniej część pracy zlecić automatowi, który ‘za nas’ oceni, oczywiście wg naszych kryteriów, czy powinniśmy już zaalokować część posiadanej gotówki w akcje. Poniżej przedstawiam pierwszy sposób konstrukcji takiego automatu w programie MetaTrader w języku MQL4. Osoby korzystające z tego rozwiązania z pewnością będą o krok naprzód od inwestorów posługujących się wyłącznie ręcznym sprawdzaniem wszystkich spółek.
Wykorzystamy trick, który umożliwia uruchomienie dowolnego skryptu dla otwartego waloru po uruchomieniu MT4. Idea polega na uruchomieniu MetaTradera z uruchomionym skryptem, który sprawdzi wartości określonych wskaźników i zapisze wynik do pliku wyjściowego, a następnie zakończy działanie MetaTrader’a. Skrypt sterujący uruchamianiem Mt4 w pętli podmieni walor do sprawdzenia z uprzednio przygotowanej listy.
Potrzebujemy zrobić zatem 2 mechanizmy: pierwszy będzie podmieniał walor w profilu i uruchamiał program MT4, oraz drugi, który będzie sprawdzał wartości wskaźników AT i za ich pomocą generował sygnał kupna i zapisywał go do pliku wyjściowego.
Aby uruchomić MT4 z określonym walorem, utworzymy profil, który będzie przeznaczony wyłącznie do filtrowania sygnałów. W tym celu, po uruchomieniu MT4, otwórzmy jedną dowolną spółkę offline i zapiszmy profil pod nazwą ’sygnaly’.
Po utworzeniu profilu, wychodzimy z MT4 i przegrywamy plik ‘terminal.ini’ z folderu /config/ do folderu głównego MT4, gdzie znajduje się terminal.exe i zmieniając jego nazwę na ‘terminal_sygnaly.ini’.
Mając powyższe ustawienia przygotujmy sobie listę walorów do sprawdzenia. Do przygotowania takiej listy i dalszej pracy skryptowej wykorzystuję środowisko Cygwin, które można za darmo pobrać z witryny www.cygwin.com (http://www.cygwin.com/setup.exe), a które dla osób nie zaznajomionych z tematem zawiera kopię narzędzi wzorowanych na środowisku linux. Dzięki temu osoby pracujące w systemach linux lub Mac OS będą w stanie łatwo przystosować skrypt dla swoich potrzeb.
Poniżej instalacja CygWin w kilku krokach:
Pierwsze kroki - wybór instalacji z internetu oraz folder docelowy - przykładowo c:\cygwin.
W polu ‘Default Text Type’ należy zmienić opcję Unix/binary (recommended) na DOS/text, unikniemy problemów związanych ze znakiem końca linii w systemie Windows.
Lista pakietów do zainstalowania - do naszych celów wystarczy, aby zainstalować pakiety podstawowe (wystarczy wcisnąć przycisk ‘Dalej’).
Po zainstalowaniu pakietu cygwin uruchamiamy go z Menu Start: Wszystkie Programy -> Cygwin -> Cygwin Bash Shell, naszym oczom powinna ukazać się powłoka systemowa Cygwin’a:
W pracy z Cygwinem nie będziemy uruchamiali środowiska w ten sposób, natomiast zmienimy ścieżkę systemową Windows tak, aby wskazywała także na folder z Cygwinem:
Po tej operacji uruchamiamy powłokę systemową Windows poleceniem Start->Uruchom, wpisujemy w pole z nazwą programu “cmd”. Od tego momentu polecenia Cygwin’a takie jak ‘ls’ ‘grep’ itp. powinny być dostępne z powłoki:
Aby przygotować listę walorów, można zastosować kombinację poleceń ls i grep, np.
ls c:\mt4\history\AlpariUK-Demo -1| grep “^P” > c:\mt4\walory_do_sprawdzenia.txt
(wpisanie wszystkich spółek zaczynających się na literę P)
lub np.
ls c:\mt4\history\AlpariUK-Demo -1 > c:\mt4\walory_do_sprawdzenia.txt
(wpisanie wszystkich spółek)
Oczywiście plik ‘walory_do_sprawdzenia.txt’ nie musi zawierać nazw w kolejności alfabetycznej, można dowolnie wycinać oraz wpisywać interesujące nas walory.
Mój przykładowy plik ma postać:
Następnie piszemy skrypt, który będzie z pliku ‘walory_do_sprawdzenia.txt’ wyciągał nazwy kolejnych walorów i podmieniał je w profilu ’sygnaly’. Jest to oczywiście sztuczka, której nie ma w żadnych instrukcjach MetaTradera:
Profil ’sygnaly’ zawiera w folderze 2 pliki: chart01.chr oraz order.wnd, które przechowują informacje o otwartych oknach oraz ustawieniach profilu. W pliku order.wnd przed uruchomieniem MT4 musi się znaleźć przykladowo:
AGORA,Daily (offline)
(ogólnie NAZWAWALORU,Daily (offline))
a w pliku chart01.chr interesuje nas druga linijka:
symbol=AGORA
gdzie pole po symbol= podmieniamy na dowolny kolejny symbol z pliku walory_do_sprawdzenia.txt
Kod skryptu umieszczam poniżej:
#!/bin/bash
# Filtr sygnalow kupna 1
# Copyright (c) 2009, AktywnyInwestor.pl
pliki_cut=`cat walory_do_sprawdzenia.txt | awk -F"1440.hst" '{ print $1 }'`
PROFILE_DIR="c:\\mt4\\profiles\\sygnaly\\"
PROGRAM_DIR="c:\\mt4\\"
cd $PROGRAM_DIR
for i in $pliki_cut
do
echo "Processing "$i
echo $i",Daily (offline)" > $PROGRAM_DIR\\order.wnd
rm -f $PROFILE_DIR\\*
cp -f $PROGRAM_DIR\\order.wnd $PROFILE_DIR
cat $PROFILE_DIR"\chart01.chr" | sed '2s/.*/symbol='"$i"'/' > $PROFILE_DIR"\chart02.chr"
mv -f $PROFILE_DIR"\chart02.chr" $PROFILE_DIR"\chart01.chr"
cd $PROGRAM_DIR
./terminal.exe terminal_sygnaly.ini
done
Mamy skrypt, który podmienia nazwy spółek dla profilu sygnaly, czas na napisanie skryptu w MQL4, który sprawdzi warunek kupna na podstawie zadanych kryteriów i wpisze wynik do pliku wynikowego:
Do prawidłowego działania skryptu należy za pomocą menu Opcje zakładka Strategie (CTRL + O), ustawić w MT4 import dll:
Skoro wszystko zostało już przygotowane, jesteśmy gotowi do przeprowadzenia testu. Skrypt wywolujemy korzystając z polecenia ‘bash filtr1.sh’, w trakcie jego działania w konsoli powinniśmy otrzymać kolejno nazwy sprawdzany spółek, np.:
podczas pracy skryptu zobaczymy uruchamianie i wyłączanie MetaTradera, jest to nieco czasochłonne, więc można w oczekiwaniu na wyniki odejść od komputera np. na herbatę.
Po zakończeniu skryptu wyniki mają postać:
Sygnal dla walora PAGED : RSI = 81.2505 , BRAK SYGNALU KUPNA
Sygnal dla walora PAMAPOL : RSI = 54.618 , BRAK SYGNALU KUPNA
Sygnal dla walora PANOVA : RSI = 57.7409 , BRAK SYGNALU KUPNA
Sygnal dla walora PBG : RSI = 66.4854 , BRAK SYGNALU KUPNA
….
Oczywiście sam sposób generowania sygnału zakupu należy traktować wyłącznie jako przykład.
Już wkrótce podam drugi sposób, który został wymyślony po zaimplementowaniu sposobu powyżej, a który nie wymaga wielokrotnego uruchamiania MT4.
Opublikowano 2 rok, 11 mies. temu o 21:47. 7 komentarzy
Witam na pierwszym tutorialu poświęconym programowaniu w języku MQL na platformie MetaTrader.
Język MQL jest językiem zaprojektowanym specjalnie w celu ułatwienia analizy danych walutowych forex i kontraktów terminowych. Dla większości osób zapewne jest to całkowita abstrakcja, więc nie będziemy zagłębiać sie w każdą funkcję API. Nie zamierzam opisywać całego języka MQL, a raczej przedstawiać sposoby realizacji pomysłów, jakie nasuwają się podczas analizy spółek giełdowych.
Dzisiejszy tutorial ma nazwę ‘Debiuty GPW - wykres wspomagany MQL’:
Ostatnio postanowiłem bliżej przyjrzeć się debiutom spółek na GPW. Na początek chciałem sprawdzić, jak na debiut wpływa główny trend na giełdzie. Aby to zrobić, dążyłem do wyświetlenia nazwy wszystkich debiutów spółek na wykresie, uzyskując ostateczny efekt jak poniżej:
Aby osiągnąć cel, na początek potrzebujemy uzyskać daty interesujących nas debiutów. Wszystkie debiuty znajdują się na oficjalnej stronie internetowej GPW. Wybrałem wszystkie debiuty w 2008 r. i na postawie tabeli umieszczonej na stronie debiuty GPW utworzyłem plik zawierający w poszczególnych kolumnach nazwę spółki, datę debiutu, cenę emisyjną, wartość emisji, wartość oferty, ceny na zamknięcie w dniu debiutu za akcje lub cenę na zamknięcie w dniu debiutu dla PDA. Fragment pliku poniżej:
1;Atlas Estates Limited;2008.02.12;14,32;0,00;0,00;16,00;
2;Optopol Technology;2008.02.19;20,00;66 000 000;66 000 000; ;26,81
3;ZM Herman;2008.02.28;1,80;1 905 249,6;1 905 249,6; ;1,91
4;Skyline Investment;2008.03.18;9,00;18 000 000;18 000 000; ;8,55
5;Power Media;2008.03.20;5,00;7 000 000,00;7 000 000,00; ;5,00
6;Trakcja Polska;2008.04.01;4,00;120 000 000,00;160 000 000,00;4,92;4,94
7;Wojas;2008.04.02;9,50;25 428 251,00;25 428 251,00; ;8,88
8;Hardex;2008.04.03;100,00;9 614 300,00;9 614 300,00; ;99,00 ...
Dla zainteresowanych plik w całości znajduję się TUTAJ: debiuty.
Mając plik zawierający potrzebne nam dane, czyli w tym przypadku nazwę spółki i datę debiutu (resztę danych na razie pomijamy) należy nanieść nazwy spółek na wykres. Aby to zrobić, napiszemy SKRYPT MQL4, który automatycznie pobierze nazwy spółek i daty debiutów i umieści je na wykresie. Aby napisać skrypt, w głównym oknie MT4 wciskamy przycisk F4, który przeniesie nas do edytora plików MQL: MetaEditor’a. W MetaEditorze wybieramy opcję Plik->Nowy->Skrypt, co uruchomi Wizarda Doradcy Eksperckiego:
Wizard tworzy za nas automatycznie szkielet skryptu w języku MQL i wyświetla go na ekranie. Ponieważ szkielet skryptu jest już gotowy, wpisujemy nasz skrypt wyświetlający nazwy debiutów GPW na wykresie WIG20:
Z pewnością na pierwszy rzut oka wygląda to jak ‘czarna magia’, więc rozbijam skrypt na czynniki pierwsze. Na początku skryptu znajdują się nagłówek z wygenerowanymi danymi dotyczącymi autora oraz praw autorskich:
Następnie mamy dyrektywę include, która jest potrzebna do zaimportowania kodu błędów, tak aby zamiast mało znaczącego return 0 można było wstawić ERR_NO_ERROR.
#include <stderror.mqh>
Następnie mamy 2 funkcje: init() oraz deinit() wołane przy starcie i zabijaniu skryptu, nie robimy tu nic szczególnego oprócz zabicia wszystkich zbędnych obiektów, które mogą znajdować się na wykresie:
Poniżej znajduje się funkcja start(), która jest sercem naszego skryptu, wykonują się w niej wszystkie operacje istotne dla działania skryptu. Na początku funkcji mamy zdefiniowane kilka zmiennych: datę w formacie rozpoznawanym przez MetaTradera, indeks świeczki nad którą narysować nazwę walora, przesunięcie względem świeczki, uchwyt pliku (unikalną liczbę która pozwala na rozpoznanie czy plik jest otwarty), nazwę walora i datę debiutu w formacie String, które wycinamy z pliku debiuty.
// zmienne lokalne
datetime data;
int idx;
int delta;
int plik;
string nazwaWaloru;
string dataDebiutu;
Po zadeklarowaniu zmiennych otwieram plik z debiutami i wczytuję je kolejno do systemu:
// otwarcie pliku z danymi debiutów
plik=FileOpen("debiuty2008.txt", FILE_CSV|FILE_READ);
if(plik>0) // jeżeli plik istnieje
{
while(!FileIsEnding(plik)) // czytaj az do konca pliku
{
Print(FileReadString(plik)); // pierwsza wartość to LP. do pominięcia
nazwaWaloru = FileReadString(plik);
dataDebiutu = FileReadString(plik);
while ((!FileIsLineEnding(plik)) &amp;&amp; (!FileIsEnding(plik))) // resztę pól w linii pomijamy
{
FileReadString(plik);
}
Print(nazwaWaloru); // wypisz na konsoli nazwę waloru
Print(dataDebiutu); // wypisz na konsoli datę debiutu
// konwersja czasu z formatu String na format datetime
data = StrToTime(dataDebiutu);
Aby narysować nazwę walora nad dobrą świeczką, musimy znaleźć jej indeks i obliczyć przesunięcie, tak aby nazwa nie nakładała się na wykres, a była wyświetlana nad nim:
// uzyskaj indeks swieczki z danego dnia
idx = iBarShift("WIG20_", PERIOD_D1, data);
// oblicz przesuniecie nazwy wzgledem High dnia + 200px
delta = iHigh("WIG20_", PERIOD_D1, idx) + 200;
Po tych spektakularnych obliczeniach wstawiamy nazwę na wykres, obracamy ją o 90 stopni w prawo i kolorujemy na czerwono:
if(!ObjectCreate(nazwaWaloru, OBJ_TEXT, 0, data, delta))
{
Print("Blad! nie moge utworzyc obiektu tekstowego. Kod bledu #", GetLastError());
return(0);
} else { // jezeli obiekt zostal utworzony, wpisz tekst i nadaj atrybuty tekstu
ObjectSetText(nazwaWaloru, nazwaWaloru+dataDebiutu);
ObjectSet(nazwaWaloru, OBJPROP_ANGLE, 90);
ObjectSet(nazwaWaloru, OBJPROP_COLOR, Red);
ObjectSet(nazwaWaloru, OBJPROP_FONTSIZE, 8);
}
Po przeliczeniu wszystkich debiutów odświeżamy wykres i zamykamy plik
I to wszystko. Jeżeli i tak za pierwszym razem mało z tego zrozumiałeś, nie przejmuj się, nie od razu Rzym zbudowano. Jak zwykle będę czekał na komentarze.
Opublikowano 2 rok, 11 mies. temu o 00:51. 6 komentarzy
Domyślnie w MT4 skala wykresu jest dopasowywana automatycznie do wahań kursu waloru w wyświetlanym przedziale, na podstawie wartości minimalnej i maksymalnej kursu. Z reguły jest to ustawienie dobre, ale tylko dla badanego przedziału. Czasem istnieje konieczność ustawienia skali stałej, tak aby podczas przesuwania wykresu skala nie zmieniała się. W tym celu należy za pomocą klawisza F8 przejść do menu i przestawić skalę na żądaną.
Wartości skali ‘Fixed maximum’ oraz ‘Fixed minimum’ to wartości wyliczone automatycznie przez terminal MT4 na podstawie widocznego okna. Po zaznaczeniu opcji ‘Skala’ wartości te ograniczają oś Y (ceny) podczas przewijania wykresu np. strzałkami Lewo-Prawo, lub F12 - SHIFT+F12. Jeżeli przykładowo chcemy uzyskać skalę obejmującą większy przedział czasu, możemy przybliżyć lub oddalić wykres za pomocą klawiszy + i -, a następnie skorzystać z automatycznie wyliczonych wartości, lub wpisać ręcznie żądane minimum i maksimum. Przykład video poniżej.
W analizie technicznej spółek giełdowych stosowane są przeróżne wskaźniki, skrypty, które na podstawie obliczeń otrzymują konkretne wartości. W MT4 jest bardzo przydatny podgląd na wartości bieżącej świeczki, czy słupka oraz aktualnych wskaźników i skryptów za pomocą Okna Danych.
Okno danych wywołujemy za pomocą kombinacji klawiszy CTRL+D, lub poprzez wybranie opcji Okno Danych w menu Widok. Po najechaniu myszą kursorem na odpowiedni słupek lub świeczkę wyświetlają się wartości OHLC z danego dnia oraz wartości wszystkich wskaźników, które znajdują się na wykresie. Przykład dla wybranej spółki giełdowej dla kolejnych 3 dni poniżej:
Jak zwykle zachęcam do samodzielnych eksperymentów i sprawdzania wartości wskaźników dla danego dnia - a z czasem nauczymy się pisać samodzielnie skrypty w MT4 bazujące na odczycie danych wskaźników.
Dzisiaj nauczymy się prostego tricku, a mianowicie jak przesuwać krokowo wykres o 1 dzień do przodu.
Pozwoli to nam na ocenę wcześniejszych ruchów cen, wcześniejszych transakcji oraz daje możliwość ‘na sucho’ przewidywania ruchów cen na podstawie odczytu wskaźników, czy skryptów.
Cała tajemnica leży w klawiszu F12, który domyślnie przesuwa wykres do przodu o 1 świeczkę, czyli w przypadku danych dziennych o 1 dzień.
Przykład poniżej - przesuwanie wykresu najpierw strzałką na klawiaturze w lewo, następnie krokowo klawiszem F12:
Zachęcam do prób i testowania różnych wskaźników, ustawień itd. Następnym razem zajmiemy się dopasowaniem i zmianą skali wykresów.