plik


ÿþPOLITECHNIKA CZSTOCHOWSKA WYDZIAA IN{YNIERII MECHANICZNEJ I INFORMATYKI PRACA DYPLOMOWA  SYSTEM INFORMATYCZNY WSPOMAGAJCY DECYZJE TRADERA BARTAOMIEJ WIETRAK Czstochowa, 2006r. 2 SPIS TREZCI Wtp 5 Cel Pracy 6 RozdziaB I 7 1.1 Rynek kontraktów terminowych 7 1.1.1 Czas realizacji wzajemnych zobowizaD stron 7 1.1.2 Instrument bazowy, czyli przedmiot kontraktu 8 1.2 Zasady obrotu kontraktami terminowymi na indeksy 9 1.2.1 Nazwy skrócone kontraktów 9 1.2.2 Miesice wykonania 10 1.2.3 Ostatni dzieD obrotu, dzieD wyga[nicia kontraktu i pierwszy dzieD obrotu 10 1.2.4 Jednostka notowania, minimalny krok notowania, mno|nik, warto[ kontraktu 10 1.2.5 Dzienny kurs rozliczeniowy, dzienna cena rozliczeniowa 11 1.2.6 Ostateczny kurs rozliczeniowy, ostateczna cena rozliczeniowa 11 1.2.7 Depozyt zabezpieczajcy wnoszony przez inwestora 11 1.2.8 System codziennych rozliczeD 15 1.3 Rodzaje pozycji na rynku kontraktów terminowych 17 1.3.1 Pozycja dBuga (long) 17 1.3.2 Pozycja krótka (short) 18 1.3.3 Pozycja skorelowana 18 1.3.4 Zamknicie pozycji 19 1.4 Dzwignia finansowa 20 RozdziaB II 22 2.1 Transmisja danych gieBdowych do systemu informatycznego 22 2.2 Opis systemu WealthLab 3.0 24 RozdziaB III Opracowanie systemu transakcyjnego opartego na logice rozmytej 26 3.1 Wybór kryteriów lokalnych i strategii w podjciu decyzji traderskich 26 3.2 Wybór kryteriów lokalnych 26 3.3 Formalizacja kryteriów lokalnych za pomoc funkcji u|yteczno[ci 27 3.3.1 Zmiany cen zamknicia poszczególnych barów 28 3 3.3.2 Definicja kryterium opartym o zmian cen w ujciu przedziaBowym 29 3.3.3 Zmiana wielko[ci obrotu (wolumenu) na kolejnych barach 30 3.4 Agregowanie kryteriów lokalnych 31 3.5 Strategia dziaBania systemu 36 3.6 Optymalizacja systemu transakcyjnego 36 3.7 Testowanie optymalizowanego systemu 38 3.8 Podsumowanie 40 ROZDZIAA IV System transakcyjny oparty na podej[ciu [ci[le wielokryterialnym 41 4.1 Wybór kryteriów lokalnych i strategii w podjciu decyzji traderskich 41 4.1.1 Wybór kryteriów lokalnych 41 4.2 Formalizacja kryteriów lokalnych za pomoc funkcji u|yteczno[ci 42 4.2.1 Zmiany cen zamknicia poszczególnych barów 42 4.2.2 Definicja kryterium opartego o zmian cen w ujciu przedziaBowym 43 4.2.3 Kryterium oparte na zmianach wielko[ci obrotu (wolumenu) na kolejnych barach 44 4.3 Agregowanie kryteriów lokalnych 45 4.4 Strategia 47 4.5 Optymalizacja systemu transakcyjnego 47 4.6 Testowanie optymalizowanego systemu 48 4.7 Podsumowanie 52 ZakoDczenie 53 Literatura 54 Spis tabel 55 Spis rysunków 55 Kody zródBowe 56 4 Wstp Tematem mojej pracy s systemy informatyczne wspomagajce decyzje tradera. Inwestowanie na rynku kapitaBowym mo|e by bardzo stresujcym zajciem. Uczestnikami rynku s ludzie. Pod wpBywem stresu mo|emy popeBnia bBdy. Decyzje, które w normalnych warunkach zasBu|yByby na miano nietrafnych, w sytuacjach kryzysowych urastaj do rangi ostatniej deski ratunku. Co zrobi aby przeciwdziaBa temu zjawisku? Odpowiedz jest jedna. Zastosowa komputer. Komputer nie ma emocji, podejmuje bByskawicznie decyzje. Nie mczy si. Grajcy na rynkach kontraktów terminowych najcz[ciej sBysz dwie podstawowe zasady postpowania - "ucinaj straty jak najszybciej" oraz "pozwól zyskom rosn". By mo|e tak czste ich powtarzanie mo|e budzi irytacj. Jednak jak wynika z ankiety przeprowadzonej w[ród .u|ytkowników serwisu www.futures.pl[1] (w okresie maj - lipiec 2002), nie jest to bezcelowe. Pytanie zadane w ankiecie brzmiaBo: Jaki bBd z wymienionych najcz[ciej popeBniasz (lub najtrudniej Ci sobie z nim poradzi)? Najcz[ciej wybieran odpowiedzi byBo zbyt dBugie utrzymywanie stratnych pozycji (20,7% odpowiedzi). Wynika z tego, |e najwikszym problemem jest zastosowanie pierwszej (uwa|anej za najwa|niejsz) z wymienionych reguB - "ucinaj straty mo|liwie szybko". Pogodzenie si z faktem, |e dziaBalno[ na rynkach finansowych koDczy si czasem strat jest bardzo trudne. Po otwarciu pozycji inwestor jest przekonany, |e jego decyzja jest bBdna je[li nie przynosi zysków zaraz po zawarciu transakcji (czasami wynika to z opóznienia w przekazywaniu zleceD pomidzy brokerami  kilka minut mo|e zmieni obraz rynku caBkowicie). Gdy rynek rusza w przeciwnym kierunku, w wielu w przypadkach wpBywa to na "ego" gracza - nie jestem taki dobry, pomyliBem si. Takie sBowa czsto obrazuj stan psychiczny grajcego. Do tego wcze[niej czy pózniej mo|e doBczy nadzieja, |e sytuacja wkrótce zmieni si na korzy[. Pozycja, która po pewnym czasie jest zBa, mogBaby zosta zamknita z maB strat, jednak wielu graczy nie mo|e si z tym pogodzi i czeka do momentu, a| strata rozro[nie si do zbyt du|ych rozmiarów. Znaczna cz[ graczy dziaBajcych na rynkach po pocztkowym inwestowaniu "na czuja" stara si jak najbardziej "zmechanizowa" swoje podej[cie do handlu. Jednym ze sposobów wyeliminowania emocji, które wpBywaj na podejmowanie decyzji jest wykorzystanie automatycznych systemów transakcyjnych. Na drugiej pozycji puBapek z 5 którymi nie radz sobie ankietowani wystpiB strach przed zajciem pozycji po wygenerowaniu sygnaBu przez system (17.3% odpowiedzi). Zakres dziaBania systemu jest mierzony w miesicach a najcz[ciej w latach. Statystycznie z dobrym systemem gracz otrzymuje przewag nad rynkiem. Krytycznym czynnikiem jest liczba kolejnych nastpujcych po sobie wpadek. Najcz[ciej po 3,4 stratnych sesjach gracz zaczyna  wtpi w skuteczno[ opracowanego przez siebie systemu. Skutki rcznego poprawiania decyzji systemów mechanicznych s najcz[ciej opBakane  gracz mo|e nawet w krytycznym przypadku zbankrutowa. Tyle samo ankietowanych (17.3%) odpowiedziaBo, |e du|ym problemem jest zbyt impulsywne podejmowanie decyzji. Ponownie pojawia si problem dyscypliny. Zbyt emocjonalne podej[cie w wielu przypadkach oznacza reagowanie i podejmowanie decyzji o kupnie i sprzeda|y na podstawie wszelkiego szumu napBywajcego na rynek - komentarzy analityków, opinii znajomych, raportów makroekonomicznych, informacji o spóBkach i setkach innych czynników, które nie powinny mie zbyt du|ego wpBywu na zaBo|ony wcze[niej plan dziaBania. Cel Pracy Na podstawie powy|szych wiadomo[ci jasno rysuje si potrzeba stworzenia czysto automatycznego systemu komputerowego, który eliminowaBby wady czBowieka lecz jednocze[nie zachowywaBby elastyczno[ my[lenia oraz jego do[wiadczenie w czasie podejmowania decyzji. Naturalnym staje si zastosowanie wielokryterialnego systemu podejmowania decyzji z elementami logiki rozmytej. Celem tej pracy jest stworzenie takiego systemu. 6 ROZDZIAA I 1.1 Rynek kontraktów terminowych System automatyczny musi dziaBa na okre[lonym rynku (lub portfolio rynków o podobnym charakterze), dla naszych rozwa|aD skupimy si na rynku kontraktów terminowych notowanych na GieBdzie Papierów Warto[ciowych w Warszawie, a zwBaszcza na jego najpBynniejszym instrumencie  kontrakcie terminowym na indeks WIG20. Czym jest wic kontrakt? Kontrakt terminowy jest dwustronn umow, na podstawie której kupujcy zobowizuje si do nabycia (przyjcia), za[ sprzedajcy do zbycia (dostarczenia) w [ci[le okre[lonym momencie w przyszBo[ci okre[lonej ilo[ci wystandaryzowanego instrumentu bazowego, po cenie ustalonej w momencie zawarcia transakcji. Realizacja zobowizaD wynikajcych z umowy mo|e nastpi równie| poprzez równowa|ce rozliczenie finansowe, polegajce na zajciu pozycji odwrotnej do pierwotnej.[2] 1.1.1 Czas realizacji wzajemnych zobowizaD stron Jest nim konkretny moment w przyszBo[ci [ci[le okre[lony przez gieBd, na której notowane s kontrakty. Dziki temu, strony nie s zobowizane w momencie zawierania transakcji do posiadania peBnego zabezpieczenia gwarantujcego wywizanie si z umowy. Sprzedajcy nie musi posiada instrumentu bazowego, za[ kupujcy [rodków odpowiadajcych warto[ci kontraktu. Realizacj ich wzajemnych zobowizaD gwarantuje system depozytów i codziennych rozliczeD w postaci tzw. równania do rynku (mark-to-market). Kontrakty notowane s w seriach, którym przypisane s konkretne miesice wyga[nicia, czyli terminy w których nastpuje rozliczenie danej serii kontraktów. Dla kontraktów na indeks WIG20 notowanych na GPW w Warszawie miesice wyga[nicia oznaczane s literami (H-marzec, M-czerwiec, U- wrzesieD, Z-grudzieD) [3], a w przypadku notowaD obowizuje zasada trzech serii z datami wykonania przypadajcymi na trzy kolejne miesice z marcowego cyklu kwartalnego. Oznacza to, |e na przykBad w sierpniu w obrocie bd serie wygasajce we wrze[niu w grudniu i w marcu nastpnego roku. Specyficzn cech kontraktów terminowych jest równie| mo|liwo[ realizacji zobowizaD ka|dej ze stron poprzez tzw. 7 równowa|ne rozliczenie pieni|ne. Polega ona na tym, |e nie ma konieczno[ci czekania do momentu wyga[nicia kontraktu, a poprzez zajcie pozycji odwrotnej do pierwotnie posiadanej kupujcy, bdz sprzedajcy mog dokona "kompensacji" swych zobowizaD. PrzykBadowo strona, która poprzez kupno zobowizaBa si do przyjcia okre[lonej ilo[ci instrumentu bazowego mo|e w dowolnej chwili sprzeda kontrakt, przyjmujc tym samym zobowizanie do dostarczenia tego samego instrumentu. Dziki temu równowa|y ona swe pierwotne zobowizanie, a ró|nica pomidzy cen obu transakcji stanowi zysk lub strat. W ten sposób zamykana jest zdecydowana wikszo[ kontraktów. 1.1.2 Instrument bazowy, czyli przedmiot kontraktu Oprócz towarów fizycznych kontrakty terminowe mog dotyczy szeregu instrumentów finansowych, jak chocia|by akcje, stopy procentowe, kursy walut, czy indeksy gieBdowe i w takim wypadku okre[la si je mianem financial futures. Przedmiot kontraktu jest [ci[le wystandaryzowany, czyli okre[lony pod wzgldem ilo[ci, jako[ci i innych cech specyficznych dla danego instrumentu bazowego [4]. W znacznym stopniu uBatwia to obrót kontraktami, gdy| strony dokBadnie wiedz z czym maj doczynienia i czego mog oczekiwa. Standaryzacja zapobiega równie| ewentualnym roszczeniom co do stanu przedmiotu kontraktu, co ma szczególne znacznie w przypadku towarowych kontraktów futures. W wielu przypadkach, zwBaszcza dotyczcych financial futures, gdzie fizyczna dostawa przedmiotu kontraktu byBaby utrudniona lub wrcz niemo|liwa realizacja zobowizaD nastpuje poprzez rozliczenie pieni|ne, tak jak ma to miejsce chocia|by w przypadku kontraktów terminowych na WIG20. Jedynym elementem podlegajcym ustaleniu pomidzy stronami transakcji jest cena kontraktu terminowego. Od zaakceptowanego kursu zale| midzy innymi zyski lub straty kupujcego i sprzedajcego kontrakt. KsztaBtowanie si kursu kontraktów zale|y od zmian rzeczywistych cen instrumentu, którego one dotycz. Korelacja taka wynika chocia|by z faktu, |e ostateczne rozliczenie kontraktu nastpuje w na podstawie cen aktywu bazowego. Poziomy cen futures i gotówkowych s zazwyczaj inne, a ró|nice te malej w miar zbli|ania si terminu wyga[nicia kontraktów. Ró|nica pomidzy bie|c cen gotówkow instrumentu bazowego, a kursem kontraktu terminowego nosi nazw bazy, która mo|e przyjmowa zarówno warto[ci dodatnie jak i ujemne. 8 1.2 Zasady obrotu kontraktami terminowymi na indeksy Obrót kontraktami terminowymi odbywa si w systemie notowaD cigBych [5]. Otwarcie notowaD nastpuje o godzinie 9.00 i trwa do 16.00. Od godziny 16.00 do 16.10 przyjmowane s zlecenia na zamknicie notowaD. Kurs ustalony na zamkniciu jest kursem rozliczeniowym. Jednostk notowania jest jeden kontrakt terminowy. Ograniczenie wahaD kursów wynosi 10% od ostatniego kursu odniesienia. W sytuacji braku równowagi na rynku, przewodniczcy sesji mo|e zmieni ograniczenie wahaD kursów, przy czym zmiana przekraczajca 15% od kursu odniesienia, mo|e by dokonana pod warunkiem uzyskania zgody KDPW. Kursem odniesienia jest dzienny kurs rozliczeniowy z poprzedniej sesji. W pierwszym dniu notowania kursem odniesienia jest kurs okre[lony ze wzoru: gdzie: F - kurs odniesienia, I - ostatnia warto[ indeksu bdcego instrumentem bazowym z ostatniej sesji poprzedzajcej sesj, na któr wyznaczany jest kurs odniesienia, r - [rednia wa|ona stopa rentowno[ci 13 - tygodniowych bonów skarbowych z ostatniego przetargu, który odbyB si przed dniem w którym okre[lany jest kurs odniesienia, n - ilo[ dni od dnia ostatniej sesji poprzedzajcej sesj, na któr wyznaczany jest kurs odniesienia do dnia wyga[nicia kontraktu. Na rynek kontraktów terminowych przyjmowane s wszystkie rodzaje zleceD dostpne na GPW w Warszawie. 1.2.1 Nazwy skrócone kontraktów FW20kr, FTECkr, gdzie: F- oznaczenie kontraktu terminowego W20 i TEC - skrót nazwy instrument bazowego odpowiednio WIG20 i TECHWIG k- kod okre[lajcy miesic wykonania H- marzec, M- czerwiec, U- wrzesieD, Z- grudzieD 9 r- ostatnia cyfra roku wykonania np. FW20U1- kontrakt dla którego instrumentem bazowym jest indeks WIG20, miesic wykonania przypada we wrze[niu 2001 roku. 1.2.2 Miesice wykonania Dla ka|dego indeksu notowane s jednocze[nie trzy serie kontraktów. Miesicami wykonania s trzy najbli|sze miesice z cyklu marzec, czerwiec, wrzesieD, grudzieD. Na przykBad w sierpniu notowane bd jednocze[nie serie o kolejnych miesicach wykonania wrzesieD, grudzieD i marzec. 1.2.3 Ostatni dzieD obrotu, dzieD wyga[nicia kontraktu i pierwszy dzieD obrotu Ostatnim dniem obrotu jest trzeci pitek miesica wykonania. Je|eli w tym dniu nie odbywa si sesja, to wówczas jest to ostatni dzieD sesyjny przed trzecim pitkiem miesica wykonania. DzieD wyga[nicia kontraktu jest to ten sam dzieD co ostatni dzieD obrotu. Pierwszym dniem obrotu nowej serii jest pierwszy dzieD sesyjny po dniu wyga[nicia poprzedniego kontraktu. 1.2.4 Jednostka notowania, minimalny krok notowania, mno|nik, warto[ kontraktu Kontrakty terminowe na indeksy s notowane w punktach indeksowych. Oznacza to, |e inwestor podaje w zleceniu w punktach indeksowych jaki poziom indeksu akceptuje kupujc lub sprzedajc kontrakt (przy jakim poziomie indeksu zobowizuje si w przyszBo[ci "dostarczy" lub "odebra" koszyk akcji reprezentujcych dany indeks). Minimalnym krokiem notowania jest 1 punkt indeksowy, co oznacza, |e kontrakty s notowane z dokBadno[ci do 1 punktu indeksowego. Mno|nik jest wielko[ci sBu|c do wyliczenia warto[ci kontraktu i wynosi dla obydwu klas kontraktów 10 PLN (klasa kontraktu obejmuje wszystkie serie majce ten sam instrument bazowy). Warto[ kontraktu to : Mno|nik x kurs kontraktu 10 PrzykBadowo inwestor kupujc 1 kontrakt na WIG20 po cenie 1 500 zawiera transakcj o warto[ci 10 PLN x 1500 = 15 000 PLN. 1.2.5 Dzienny kurs rozliczeniowy, dzienna cena rozliczeniowa Dziennym kursem rozliczeniowym jest kurs zamknicia kontraktów danej serii. Je[li w czasie sesji nie okre[lono kursu zamknicia za dzienny kurs rozliczeniowy przyjmuje si ostatni kurs rozliczeniowy. Je[li jednak w arkuszu zleceD na zamkniciu jest cho jedno zlecenie z limitem lepszym (kupna wy|szym, sprzeda|y ni|szym) od kursu rozliczeniowego okre[lonego na w/w warunkach i wprowadzone przynajmniej 5 minut przed koDcem notowaD, za kurs rozliczeniowy przyjmuje si limit najlepszego z tych zleceD. W przypadku zleceD kupna jest to najwy|szy limit zlecenia kupna przekraczajcy kurs okre[lony na w/w warunkach, a w przypadku zleceD sprzeda|y odwrotnie najni|szy limit. Dzienna cena rozliczeniowa to dzienny kurs rozliczeniowy pomno|ony przez mno|nik. 1.2.6 Ostateczny kurs rozliczeniowy, ostateczna cena rozliczeniowa Ostateczny kurs rozliczeniowy jest okre[lany w dniu wyga[nicia kontraktu jako [rednia arytmetyczna ze wszystkich warto[ci indeksu odpowiednio WIG20 i TECHWIG w czasie ostatniej godziny notowaD cigBych, oraz warto[ci tego indeksu ustalonej na zamknicie sesji gieBdowej. Ostateczna cena rozliczeniowa to ostateczny kurs rozliczeniowy pomno|ony przez mno|nik. 1.2.7 Depozyt zabezpieczajcy wnoszony przez inwestora System depozytów polega na tym, |e w momencie zawarcia transakcji terminowej strony s zobowizane ui[ci jedynie uBamkow cz[ warto[ci kontraktu, wahajc si zazwyczaj od kilku do kilkunastu procent. Jest to wic swego rodzaju wadium zabezpieczajce wzajemne zobowizania kupujcego i sprzedajcego uzasadnione tym, |e realizacja zobowizaD wynikajcych z umowy nastpuje w okre[lonym czasie w przyszBo[ci, a nie w chwili zawarcia transakcji. Depozyty rozwizuj równie| 11 utrudnienia zwizane ze znaczn warto[ci kontraktów, stanowic barier finansow dla wielu inwestorów. PrzykBadowo warto[ kontraktu terminowego na akcje TPSA przy kursie 14.5 zB. wynosi 500szt.x14.5zB.=7250 zB. Inwestor nabywajcy te walory na rynku kasowym musiaBby wic dysponowa powy|sz kwot. Kupujcy kontrakt terminowy wnosi natomiast depozyt w wysoko[ci 12.6% warto[ci kontraktu, czyli w tym wypadku jedynie 913.5zB. Zgodnie z obowizujcymi w naszym kraju regulacjami depozyty mog by wnoszone w postaci pieni|nej lub papierach warto[ciowych akceptowanych przez Krajowy Depozyt Papierów Warto[ciowych, jednak w praktyce najcz[ciej wykorzystuje si form pieni|n. System depozytów jest jedn ze specyficznych cech rynków futures i zazwyczaj obejmuje dwa ich rodzaje - depozyt wstpny i utrzymania. Depozyt wstpny - zgodnie z regulacjami obowizujcymi w Polsce jest ustalany przez KDPW jako wielko[ procentowa liczona od warto[ci kontraktu okre[lonej na podstawie ostatniego kursu rozliczeniowego, któr nale|y wnie[ w momencie zawarcia transakcji. Ten poziom zabezpieczenia stanowi minimum uiszczane przez inwestora, podczas gdy biura maklerskie, poprzez które nastpuje realizacja transakcji mog go podnosi, zwikszajc tym samym wysoko[ depozytu. Zazwyczaj jednak stosuje si depozyty wstpne równe wymaganym przez KDPW [6]. Depozyt utrzymania, nazywany równie| wBa[ciwym depozytem zabezpieczajcym - jest to minimalny poziom zabezpieczenia wyra|ony równie| jako procentowa cz[ warto[ci kontraktu na podstawie ostatniego kursu rozliczeniowego, który inwestor jest zobowizany utrzymywa na swym rachunku. Obni|enie [rodków poni|ej wielko[ci depozytu utrzymania powoduje wezwanie do uzupeBnienia kwoty depozytu, a w przypadku niezastosowania si do niego - zamknicie utrzymywanej pozycji. Zgodnie z obecnymi przepisami uzupeBnienie nastpuje do wysoko[ci okre[lonej w umowie rachunku, jednak nie mniej ni| 140% wymagalnego aktualnego depozytu utrzymania. W praktyce najcz[ciej powy|sza warto[ jest zbli|ona do poziomu depozytu wstpnego. 12 PrzykBad ZakBadajc, |e kurs rozliczeniowy kontraktu terminowego na indeks WIG20 ustalony na poprzedniej sesji wyniósB 1060 pkt. Wysoko[ depozytu wstpnego ( wedBug stanu na dzieD 15.09.2001r.) wynosi 7.8% warto[ci kontraktu, za[ depozytu wBa[ciwego 5.6%. Warto[ kontraktu, bdca podstaw obliczania depozytów na nastpnej sesji wynosi wic 10zB.x1060=10600 zB., a ich poziomy odpowiednio: depozyt wstpny - 7.8%x10600zB.= 826.8 zB., a depozyt wBa[ciwy - 5.6%x10600zB.= 593.6 zB. Niezale|nie od kursu zawartej transakcji kupujcy i sprzedajcy obowizani s posiada na rachunku zabezpieczenie w wysoko[ci 826.8zB. ZaBó|my, |e kurs transakcji wyniósB 1065 pkt., a kurs rozliczeniowy w dniu jej zawarcia 1046 pkt. W takiej sytuacji sprzedajcy osignB zysk wynoszcy 190 zB.=(1065pkt.- 1046pkt.)x10zB. i taka kwota zostaje po rozliczeniu dopisana do jego rachunku. Kupujcy poniósB natomiast strat w powy|szej wysoko[ci, o któr jest pomniejszany jego depozyt, którego stan wynosi obecnie 636.8 zB. (826.8zB.-190zB.) Minimalny poziom zabezpieczenia na kolejn sesj (na podstawie poprzedniego kursu rozliczeniowego) wynosi 1046pkt.x10zB.x5.6%=585.8 zB. W kolejnym dniu kurs rozliczeniowy wynosi 1015 pkt. ZakBadajc, |e pozycje zostaBy utrzymane zysk sprzedajcego wyniósB w tym wypadku 31 pkt. (1046-1015 pkt.) Daje to kwot 310 zB. (31pkt.x10 zB.), o któr zwikszy si stan jego rachunku. Nabywca kontraktu zanotowaB natomiast strat w podobnej wysoko[ci, czyli 310 zB., pomniejszajc jego depozyt, który wynosi obecnie 636.8 zB. - 310 zB.=326.8 zB. WBa[ciwy wymagany poziom zabezpieczenia (depozyt utrzymania) na nastpn sesj wynosi 1015pkt.x10zB.x5.6%=568.4 zB. Kupujcy nie posiada wic wystarczajcych [rodków na swoim rachunku i zostaje wezwany do ich uzupeBnienia. Kwota jak musi (po uzupeBnieniu) posiada nabywca kontraktu wynosi w tym wypadku 140%x568.4zB.=795.8zB. i jest zbli|ona do poziomu depozytu wstpnego (1015pkt.x10zB.x7.8%=791.7zB.). Uwzgldniajc stan rachunku nale|y wic uzupeBni go o 469 zB 13 1. Parametry wspólne dla wszystkich klas - parametr ograniczajcy warto[ ryzyka dla opcji 50% - wysoko[ stopy procentowej 4,1% - parametr zwikszajcy wysoko[ depozytu zabezpieczajcego 140% 2. Parametry klas Klasa WIG 20 - wBa[ciwy depozyt zabezpieczajcy 5,8% - wstpny depozyt zabezpieczajcy 8,1% - zmienno[ 38,2% - parametr modyfikujcy zmienno[ dla opcji 5,0% - wspóBczynnik kredytowy 70,0% Klasa TECHWIG - wBa[ciwy depozyt zabezpieczajcy 5,6% - wstpny depozyt zabezpieczajcy 7,8% Klasa MIDWIG - wBa[ciwy depozyt zabezpieczajcy 7,6% - wstpny depozyt zabezpieczajcy 10,6% Klasa PS5 - wBa[ciwy depozyt zabezpieczajcy 2,0% - wstpny depozyt zabezpieczajcy 2,8% Klasa USD - wBa[ciwy depozyt zabezpieczajcy 3,0% - wstpny depozyt zabezpieczajcy 4,2% Klasa EUR - wBa[ciwy depozyt zabezpieczajcy 2,0% - wstpny depozyt zabezpieczajcy 2,8% Klasa PKOBP S.A. - wBa[ciwy depozyt zabezpieczajcy 8,2% - wstpny depozyt zabezpieczajcy 11,5% Klasa BANK MILLENNIUM S.A. - wBa[ciwy depozyt zabezpieczajcy 13,4% - wstpny depozyt zabezpieczajcy 18,8% Klasa BZ WBK S.A. - wBa[ciwy depozyt zabezpieczajcy 7,4% - wstpny depozyt zabezpieczajcy 10,4% Klasa TP S.A. - wBa[ciwy depozyt zabezpieczajcy 8,4% - wstpny depozyt zabezpieczajcy 11,8% - zmienno[ 36,1% - parametr modyfikujcy zmienno[ dla opcji 10,0% - wspóBczynnik kredytowy 70,0% Klasa PKN ORLEN S.A. 14 - wBa[ciwy depozyt zabezpieczajcy 9,4% - wstpny depozyt zabezpieczajcy 13,2% - zmienno[ 42,8% - parametr modyfikujcy zmienno[ dla opcji 10,0% - wspóBczynnik kredytowy 70,0% Klasa AGORA S.A. - wBa[ciwy depozyt zabezpieczajcy 9,6% - wstpny depozyt zabezpieczajcy 13,4% Klasa KGHM S.A. - wBa[ciwy depozyt zabezpieczajcy 13,6% - wstpny depozyt zabezpieczajcy 19,0% - zmienno[ 68,8% - parametr modyfikujcy zmienno[ dla opcji 10,0% - wspóBczynnik kredytowy 70,0% Klasa BANK PEKAO S.A. - wBa[ciwy depozyt zabezpieczajcy 10,6% - wstpny depozyt zabezpieczajcy 14,8% - zmienno[ 45,6% - parametr modyfikujcy zmienno[ dla opcji 10,0% - wspóBczynnik kredytowy 70,0% Klasa BRE BANK S.A. - wBa[ciwy depozyt zabezpieczajcy 7,8% - wstpny depozyt zabezpieczajcy 10,9% Klasa PROKOM SOFTWARE S.A - wBa[ciwy depozyt zabezpieczajcy 7,2% - wstpny depozyt zabezpieczajcy 10,1% - zmienno[ 37,5% - parametr modyfikujcy zmienno[ dla opcji 10,0% - wspóBczynnik kredytowy 70,0% Klasa BANK BPH S.A. - wBa[ciwy depozyt zabezpieczajcy 10,0% - wstpny depozyt zabezpieczajcy 14,0% Tabela 1. Warto[ci depozytów wstpnych i wBa[ciwych dla kontraktów terminowych [7] 1.2.8 System codziennych rozliczeD Funkcjonowanie depozytów na rynku terminowym jest mo|liwe midzy innymi dziki zastosowaniu codziennego rozliczania zobowizaD inwestorów posiadajcych otwarte pozycje, noszcego nazw tzw. wyrównywania do rynku (mark-to- market). System ten polega na tym, |e zyski i straty z posiadanych pozycji rozliczane s po ka|dym dniu notowaD wedBug kursu rozliczeniowego. Wynikajce std zmiany na 15 rachunkach inwestorów powoduj zwikszenie bdz zmniejszenie stanu ich depozytu. Dziki bie|cemu "korygowaniu" zobowizaD w zale|no[ci od zmian cen na rynku praktycznie do minimum ogranicza si ryzyko nie wywizania si z umowy której[ ze stron transakcji. PrzykBad Prze[ledzmy zasad codziennych rozrachunków na podstawie transakcji na kontrakt na indeks TechWIG zawartej po kursie 610 pkt. DzieD transakcji Kurs rozliczeniowy po sesji zostaB ustalony na 625 pkt., czyli zmiana wyniosBa +15 pkt. Na rachunek kupujcego zostaje wic zapisana kwota 150 zB. (15pkt.x10zB.), za[ depozyt sprzedajcego jest o t warto[ pomniejszany. Nastpny dzieD Kurs rozliczeniowy zostaje podliczony na 629 pkt. W tym wypadku zmiana wyniosBa +4 pkt. (629pkt.-625 pkt.). Tym razem stan rachunku kupujcego jest powikszany o 40 zB. (4pkt.x10zB.), co daje Bcznie 190 zB.=150+40. Rachunek posiadacza krótkiej pozycji ulega obci|eniu kwot 40 zB. , czyli razem otrzymujemy -190 zB.=-150-40. Nastpny dzieD Kurs rozliczeniowy kontraktu spada do poziomu 620 pkt., czyli o 9 pkt. (629pkt.-620pkt.). Tym razem z rachunku kupujcego pobierana jest kwota 90 zB. (9pkt.x10zB.), za[ dotychczasowe jego saldo wynosi 100 zB.=150+40-90. Rachunek sprzedajcego zostaje powikszony o kwot 90 zB., co daje Bczny wynik -100zB.=-150-40+90. Nastpny dzieD - zamknicie pozycji Obecny kurs kontraktu wynosi 627 pkt. i obaj inwestorzy decyduj si zamkn swe pozycje. Wzrost kursu wyniósB w tym wypadku +7pkt.(627pkt.-620pkt.) Do rachunku posiadacza dBugiej pozycji zostaje wic dopisane kolejne 70zB.(7pkt.x10zB.), a tym samym Bczny wynik jego inwestycji przyniósB zysk w wysoko[ci 170 zB.(150+40-90+70). Rachunek sprzedajcego jest natomiast pomniejszany o 70 zB., a jego inwestycja zakoDczyBa si Bczn strat w wysoko[ci -170 zB. (-150-40+90-70). 16 Jak pokazuje powy|szy przykBad zyski lub straty jednej strony s równe stratom bdz zyskom strony przeciwnej, dlatego te| inwestycje na rynku futures jest nazywane gr o sumie zerowej. 1.3 Rodzaje pozycji na rynku kontraktów terminowych 1.3.1 Pozycja dBuga (long) Otwierajcym i posiadaczem dBugiej pozycji jest nabywca kontraktu terminowego, przez co zobowizuje si on do przyjcia (kupna) w przyszBo[ci okre[lonej ilo[ci instrumentu bazowego po ustalonej cenie [8]. Zajmujc dBug pozycj inwestor oczekuje wic wzrostu ceny instrumentu bazowego liczc, |e w momencie wyga[nicia kontraktu bdzie ona wy|sza ni| zapBacona w momencie zawarcia transakcji. Je|eli przewidywania te oka| si sBuszne inwestor nabywa (przyjmuje) instrument bazowy po cenie ustalonej w transakcji, czyli mniejszej ni| aktualna na rynku kasowym, w postaci fizycznej bdz rozliczenia finansowego. PowstaBa w ten sposób ró|nica stanowi zysk posiadacza dBugiej pozycji. Je|eli cena na rynku kasowym w momencie rozliczenia jest ni|sza ni| ustalona w chwili zawarcia kontraktu, wówczas kupujcy zobowizany jest naby instrument bazowy dro|ej ni| wynosi jego rzeczywista cena ponoszc tym samym strat. PrzykBad: Inwestor nabywa (otwiera dBug pozycj) kontrakt opiewajcy na 500 akcji spóBki ABC po kursie 10 zB. przez co zobowizuje si do przyjcia w okre[lonym czasie 500 akcji spóBki po cenie 10 zB. ZaBó|my, |e w dniu wyga[nicia kurs akcji bdcy podstaw rozliczenia kontraktów wyniósB 15 zB. Tym samym kupujcy realizujc swe zobowizanie nabywa 500 akcji po ustalonej cenie, po czym sprzedaje na rynku kasowym uzyskujc tym samym zysk w wysoko[ci 2500 zB. = (15 zB. - 10zB.) x 500 akcji. Je|eli natomiast rzeczywisty kurs instrumentu w momencie rozliczenia spadnie np. do poziomu 7 zB. posiadacz dBugiej pozycji poniesie strat, nabywajc akcje po cenie wy|szej ni| aktualna na rynku. W tym wypadku bdzie to 1500 zB. = (7zB.-10zB.) x 500 akcji. 17 1.3.2 Pozycja krótka (short) Otwierajcym i posiadaczem krótkiej pozycji jest sprzedajcy kontrakt terminowy, przez co zobowizuje si on do dostarczenia (zbycia) w przyszBo[ci okre[lonej ilo[ci instrumentu bazowego po ustalonej cenie. W tym wypadku oczekiwania inwestora s wic przeciwne do otwierajcego dBug pozycj i spodziewa si on, |e w momencie wyga[nicia rzeczywista cena instrumentu bazowego bdzie ni|sza w stosunku do ustalonej w kontrakcie. Je|eli zaBo|enia te sprawdz si realizujc swe zobowizania inwestor nabywa instrument bazowy na rynku kasowym po czym sprzedaje go (dostarcza) po wy|szej cenie wynikajcej z kontraktu osigajc tym samym zysk równy iloczynowi ró|nicy kursów i ilo[ci instrumentu bazowego. Je|eli natomiast rzeczywisty kurs w momencie wyga[nicia jest wy|szy ni| ustalony w kontrakcie sprzedajcy zmuszony jest naby instrument bazowy i dostarczy go po ni|szej cenie zgodnie z umow ponoszc tym samym strat równ iloczynowi tej ró|nicy i ilo[ci instrumentu. PrzykBad: Inwestor sprzedaje (otwiera krótk pozycj) kontrakt dotyczcy 250 akcji spóBki ABC po kursie 100 zB. przez co zobowizuje si do dostarczenia w okre[lonym czasie 250 akcji po cenie 100 zB. ZaBó|my, |e w dniu wyga[nicia kurs akcji bdcy podstaw rozliczenia kontraktów wyniósB 60 zB. Tym samym sprzedajcy wypeBniajc zobowizanie nabywa na rynku 250 akcji po cenie 60 zB., po czym sprzedaje je zgodnie z warunkami kontraktu po 100 zB. uzyskujc tym samym zysk w wysoko[ci 10000 zB. = (100 zB. - 60zB.) x 250 akcji. Je|eli natomiast rzeczywisty kurs instrumentu w momencie rozliczenia wzro[nie np. do poziomu 120 zB. posiadacz krótkiej pozycji poniesie strat, nabywajc akcje na rynku po cenie wy|szej i zbywajc je po kursie wynikajcym z kontraktu. W tym wypadku bdzie to 5000 zB. = (100zB.-120zB.) x 250 akcji. 1.3.3 Pozycja skorelowana Pozycja skorelowana polega na zajciu przeciwnych pozycji (czyli dBugiej i krótkiej) na kontraktach tej samej klasy (np. na WIG20) lecz ró|nych serii. PrzykBadowo 18 inwestor zajmuje krótk pozycj na kontraktach wygasajcych we wrze[niu (seria wrze[niowa), za[ dBug na kontraktach wygasajcych w grudniu (seria grudniowa). Pozycja skorelowana pozwala wykorzysta ró|n zmienno[ kursów kontraktów poszczególnych serii, a dziki temu, |e w pewnym stopniu równowa|y zobowizania inwestora zarówno wstpny jak i wBa[ciwy depozyt zabezpieczajcy w porównaniu z pojedyncz pozycj ulega w tym wypadku pomniejszeniu i ogólnie biorc zazwyczaj jest ustalany w oparciu o ró|nic kursów rozliczeniowych obu serii. 1.3.4 Zamknicie pozycji Jest jedn z form realizacji zobowizaD wynikajcych z transakcji terminowej polegajc na ich zrównowa|eniu poprzez zajcie pozycji odwrotnej do pierwotnie posiadanej. Posiadacz dBugiej pozycji zobligowany do nabycia instrumentu bazowego zawierajc transakcj przeciwn, czyli zajmujc pozycj krótk przyjmuje na siebie obowizek sprzeda|y tego samego instrumentu. Dziki temu pierwotne zobowizanie zostaje zrównowa|one, a wynik inwestycji (zysk lub strat) stanowi ró|nica pomidzy cenami obu transakcji. Analogicznie inwestor utrzymujcy krótk pozycj, czyli zobowizany do dostarczenia w okre[lonym czasie w przyszBo[ci instrumentu bazowego mo|e poprzez zajcie pozycji przeciwstawnej (dBugiej) zrównowa|y swe zobowizanie osigajc zysk lub ponoszc strat w zale|no[ci od ró|nicy cen obu transakcji. PrzykBad: Inwestor otwiera dBug pozycj nabywajc kontrakt terminowy na indeks WIG20 po kursie 1050 pkt. z terminem wyga[nicia w grudniu 2001r. Tym samym jego zobowizanie obejmuje kupno instrumentu bazowego, o warto[ci 10500 zB. (1050pkt.x10zB.). Po pewnym czasie decyduje si on zamkn sw pozycj na rynku i w tym celu dokonuje transakcji przeciwstawnej sprzedajc kontrakt grudniowy po kursie 1020 pkt., czyli zajmujc pozycj krótk. W tym wypadku inwestor zobowizany jest wic do dostarczenia instrumentu bazowego o warto[ci 10200 zB. (1020pkt.x10zB.). Dziki zamkniciu pozycji inwestor zrównowa|yB zdecydowan wikszo[ swych zobowizaD ponoszc jedynie strat wynikajc z ró|nicy cen obu transakcji (w tej sytuacji - spadku), która wyniosBa 300zB.=(1050-1020)x10zB. 19 Dziki mo|liwo[ci zamknicia pozycji w dowolnej chwili inwestor nie musi wic oczekiwa na wyga[nicie kontraktu, co ma szczególne znaczenie dla krótkoterminowych inwestycji o charakterze spekulacyjnym, a w przypadku niewBa[ciwej oceny kierunku zmian cen instrumentu bazowego pozwala unikn znacznych czsto strat bdz w miar "pBynnie" zrealizowa zyski. W takim wypadku nie ma te| konieczno[ci nabywania lub sprzedawania instrumentu bazowego na rynku kasowym, gdy| rozliczenie nastpuje w postaci pieni|nej. Dlatego te| wikszo[ kontraktów terminowych, a szczególnie opiewajcych na instrumenty finansowe (financial futures) jest rozliczana poprzez zamknicie pozycji. W przypadku zamykania pozycji inwestor nie wnosi depozytu zabezpieczajcego. 1.4 Dzwignia finansowa System depozytów pozwala na wykorzystanie tzw. dzwigni finansowej. Biorc pod uwag, |e depozyt stanowi jedynie uBamkow cz[ wielko[ci zobowizania, zmiana warto[ci kontraktu w stosunku do zainwestowanych [rodków powoduje zwielokrotnienie zysków lub strat. DziaBanie dzwigni najlepiej przedstawi na przykBadzie. PrzykBad 1: Inwestor sprzedaje kontrakt na indeks WIG20 po 1120 pkt. Warto[ kontraktu wynosi wic11200 zB. (1120x10zB.), za[ wnoszony depozyt wstpny 873.6 zB. (11200zB.x7.8%). ZaBó|my, |e po kilku sesjach kurs kontraktu spadB na 1060 pkt. i inwestor zamyka otwart pozycj kupujc kontrakt. Warto[ kontraktu zmniejszyBa si o 600 zB. (60 pkt.x10 zB.) i wynosi 10600pkt. W ujciu procentowym daje to zmian o 5.4%. Spadek ten stanowi zysk sprzedajcego, który inwestujc 873.6 zB. zarobiB 600 zB., czyli 68.7%. PrzykBad 2: Inwestor sprzedaje kontrakt na indeks WIG20 po kursie 1120 pkt., którego warto[ i depozyt wynosz podobnie jak wy|ej odpowiednio 11200 zB. i 873.6 zB. Po pewnym okresie kurs kontraktu zwy|kuje do poziomu 1150 pkt., a inwestor decyduje si zamkn dotychczasow pozycj poprzez zakup kontraktu. Warto[ kontraktu w tym momencie wyniesie wic 11500 pkt. (1150pkt.x10zB.), czyli zwikszy si o 300 zB.(30pkt.x10zB.), co daje wzrost o ok. 2.7%. Dla posiadacza krótkiej pozycji jest to strata, która zmniejsza 20 wielko[ zainwestowanego kapitaBu do 573.6 zB., czyli o ok. 34.3%. Jak pokazuj powy|sze przypadki nale|y jasno zdawa sobie spraw, |e dzwignia finansowa dziaBa w obie strony. Je|eli ocena kierunku ruchu cen oka|e si trafna dziki dzwigni nastpuje wprawdzie zwielokrotnienie zysków, ale w przypadku, gdy trend na rynku zmienia si niezgodnie w oczekiwaniami kupujcego lub sprzedajcego mo|e ona by przyczyn dotkliwych strat. (przy kursie 1450) na WIG20 (FW20). Dzienna rozpito[ cen na FW20 waha si od 20 do nawet 100 pkt (kurs maksymalny - kurs minimalny). Zrednio jest to okoBo 40 pkt. Wystarczy zBapa ruch o 10 pkt. by na 5 kontraktach zarobi 5 * 10 pkt. * 10 zB = 500 zB. Dziennie 500 zB czyli 5 procent. W miesicu bdzie to 100 procent, w roku... Albo -100%. 21 ROZDZIAA II 2.1 Transmisja danych gieBdowych do systemu informatycznego Aby podejmowa decyzje na rynku kapitaBowym potrzebujemy danych o aktualnej sytuacji rynkowej. Do gry rcznej wystarcz dane dostarczane w formie apletów Javy. W sposób czytelny wy[wietlaj one informacje na temat aktualnego kursu, wolumenu oraz rysuj odpowiednie wykresy oparte na tzw. tickach to jest poszczególnych transakcjach. Pobieranie danych do zastosowania we wBasnych systemach z wy|ej wymienionych zródeB jest je[li nie problematyczne, to co najmniej nielegalne (konieczno[ dekompilacji apletu  Bamanie ustawy o ochronie praw autorskich). Je[li chodzi o rynek polski najbardziej rozsdna jest oferta firmy Statica [9], która dostarcza dane w postaci, któr mo|emy dowolnie przetwarza. Poprzez sztandarowy produkt jakim jest program Notowania2.  Program Notowania, to wszechstronna, a jednocze[nie prosta w obsBudze aplikacja, przeznaczona dla osób inwestujcych na rynkach finansowych, pragncych zapewni sobie staBe, wysokiej jako[ci zródBo danych. Program dziaBa w poBczeniu z serwisem notowaD w czasie rzeczywistym. [10].  Notowania potrafi generowa pliki tekstowe z notowaniami, aktualizowane po ka|dej transakcji. Dziki uniwersalnemu interfejsowi DDE, mo|na prowadzi zaawansowan analiz swojego portfela w programie MS Excel. W prosty sposób mo|na osadzi w nim notowania wybranych instrumentów, które bd aktualizowane na bie|co. DDE mo|e by tak|e zródBem dla wielu programów do analizy technicznej. U|ytkownicy takich popularnych programów analitycznych jak Amibroker czy MetaStock Professional, mog je zasila notowaniami w sposób cigBy za po[rednictwem interfejsu eSignal [11]. Ci u|ytkownicy, którzy potrzebuj dostpu do fizycznych plików binarnych MetaStocka, równie| si nie zawiod. Program Notowania, na ich |yczenie mo|e generowa takie pliki w dowolnych interwaBach i aktualizowa je po ka|dej transakcji. Aplikacja Notowania jest wic otwartym zródBem danych dla profesjonalnych inwestorów, korzystajcych z caBego spektrum dostpnych na rynku rozwizaD. [12]. PrzykBady pracy programu Notowania2 zostaBy zaprezentowane na Rys.1 oraz Rys. 2. 22 Rys1. PrzykBad dziaBania programu Notowania2 firmy Statica (tabele z notowaniami) Rys2. PrzykBad dziaBania programu Notowania2 firmy Statica (wykres tickowy kontraktu FW20M6) Transakcje gieBdowe s centralnie rozliczane w systemie WARSET [13], który funkcjonuje na GieBdzie Papierów Warto[ciowych w Warszawie. Dane o przeprowadzonych operacjach s transmitowane do poddostawców tylko i wyBcznie przez dwukierunkowe Bcze 23 satelitarne. Koszt takiego rozwizania jest zbyt wysoki dla przecitnego u|ytkownika. Dlatego firmy takie jak Statica rozbijaj te koszta na du| liczb swoich u|ytkowników. Po dostarczeniu danych do klienta mog one zosta wykorzystane przez jeden z wielu kanaBów, które zostaBy przedstawione powy|ej. Dla naszych potrzeb wystarczajcy bdzie interface DDE lub eSignal. Powy|szy schemat zostaB przedstawiony w formie graficznej na Rys3. Rys3. Droga danych gieBdowych z GieBdy do klienta (opracowanie wBasne) 2.2 Opis systemu WealthLab 3.0 Wealth-Lab Developer 3.0 [14] jest kompletn platform do rozwijania oraz wstecznego testowania strategii inwestycyjnych. Zaprojektowany zostaB do stosowania na rynku akcji oraz kontraktów terminowych. Sprawdzone strategie mog by nastpnie zastosowane w czasie rzeczywistym u|ywajc automatycznego systemu handlowego, który jest jedn z cz[ci funkcjonalnych systemu [15]. Jzyk tworzenia systemów jest oparty na ObjectPascal. Jest w peBni obiektowym jzykiem, z wbudowan ogromn bibliotek funkcji odwzorowujcych wskazniki finansowe. Jego mo|liwo[ci s porównywalne z mo|liwo[ciami jzyka C++. Dziki takiemu poBczeniu mo|emy tworzy bardzo skomplikowane systemy przy jednoczesnym zachowaniu bezpieczeDstwa kodu. Jest to szczególnie krytyczne je[li chodzi o aplikacje dziaBajce na rynku kapitaBowym (gdzie chwilowy przestój przy otwartych pozycjach na rynku mo|e kosztowa u|ytkownika fortun). PrzykBad dziaBania systemu WealthLab 3.0 przedstawia Rys.4. 24 Rys.4. Okno gBówne programu WealthLab3.0 z otwartymi edytorami systemów Tworzenie kodu jest bardzo proste. Dla przykBadu kod obliczajcy bardzo popularn w[ród traderów wstg Bollingera oraz wy[wietlajcy j na ekranie: PlotSeries( BBandLowerSeries( #Close, 20, 2 ), 0, 205, #Thick ); PlotSeries( BBandUpperSeries( #Close, 20, 2 ), 0, 205, #Thick ); Bardzo wa|nym procesem w tworzeniu systemów handlowych jest ich optymalizacja. Proces optymalizacji systemów wymaga testowania go dla zakresu ró|nych warto[ci dla jednego bdz wicej parametrów. W WealthLab3.0 mo|na optymalizowa 10 ró|nych parametrów w tym samym czasie za pomoc dwóch ró|nych metod [16]: a) optymalizacja za pomoc metody Monte-carlo (system losowo dobiera parametry, zaw|ajc ich zakres w miar polepszania si wyników symulacji  nie wymaga du|ej ilo[ci czasu, lecz jego wad jest mo|liwo[ utknicia systemu na jednym z ekstremów lokalnych, które w istocie nie jest ekstremum globalnym), b) optymalizacja Exchautive (skanowanie caBego zakresu warto[ci, bardzo czasochBonna metoda, lecz jednocze[nie najdokBadniejsza). 25 ROZDZIAA III Opracowanie systemu transakcyjnego opartego na logice rozmytej 3.1 Wybór kryteriów lokalnych i strategii w podjciu decyzji traderskich W codziennym |yciu trader czsto staje przed problemem wyboru ró|nego rodzaju decyzji dotyczcych transakcji na rynku papierów warto[ciowych lub kontraktów. Nie zawsze jest w stanie sam dokona wBa[ciwej decyzji. Czsto nastpuje to z powodu sBabej orientacji w znaczeniu parametrów wskazników analizy technicznej. Czasami wystpuje równie| problem ze zbyt du| ilo[ci wskazników zastosowanych do analizy (tzw. efekt przeBadowanych chartów). Dlatego dzisiaj dla wspomagania podejmowania decyzji na tego rodzaju rynku coraz cz[ciej u|ywane s tzw. mechaniczne systemy traderskie, pozwalajce za pomoc metod matematycznych i informatycznych dostarczy traderowi agregowane informacje pomocne przy podejmowaniu decyzji. W ramach proponowanego podej[cia sugerujemy nastpujce kroki w opracowaniu systemu mechanicznego: " wybór kryteriów lokalnych; " formalizacja kryteriów lokalne za pomoc funkcji u|yteczno[ci (przynale|no[ci) ; " wyznaczenie wspóBczynników wzgldnej wa|no[ci kryteriów; " obliczenie kryteriów globalnych (agregowanie kryteriów lokalnych); " wybór strategii postpowania na podstawie obliczonych kryteriów globalnych; " optymalizacja strategii (wybór optymalizowanych warto[ci parametrów adaptacyjnych) na podstawie wybranej funkcji celu kryterium globalnego (zazwyczaj maksymalizacja dochodu). 3.2 Wybór kryteriów lokalnych Aby wybra odpowiednie kryteria lokalne nale|y zastanowi si które z parametrów charakteryzujcych wskazniki analizy technicznej s najistotniejsze. Wybór ten jest oczywi[cie subiektywny np. analizujc dan sytuacj rynkow wybrany wskaznik prognozuje  mocny wzrost a inny sugeruje  lekki spadek , kolejne sugeruje pozycj  neutraln lub  umiarkowany wzrost etc. Istotnym jest, |e rynek ksztaBtuj ludzie. Dlatego najwa|niejszym jest wybór tych wskazników analizy technicznej, które s najbardziej popularne w [rodowisku traderów. Oczywistym jest, |e wskazników tych nie powinno by zbyt wiele, gdy| podjcie 26 decyzji na podstawie ponad 800 wskazników opisanych w literaturze [17] jest niemo|liwe ze wzgldów ogólnometodologicznych. Rzecz w tym, |e sprzeczno[ sygnaBów generowanych przez tak ilo[ wskazników z reguBy nie pozwala na podjcie |adnej decyzji. Oprócz tego istnieje zazwyczaj mocna korelacja statystyczna pomidzy tymi wskaznikami. Wstpna analiza polskiego rynku kontraktów terminowych pozwala wnioskowa, |e najbardziej istotnymi parametrami s: 1. Ceny zamknicia kolejnych barów. 2. Zmiana cen na kolejnych barach w ujciu przedziaBowym tzn. z uwzgldnieniem caBych zakresów wahaD cen w cigu poszczególnych barów. 3. Wielko[ obrotu (wolumenu) na kolejnych barach. Na podstawie tych parametrów wyliczane s wskazniki analizy technicznej. Najcz[ciej u|ywanymi i z tej przyczyny najistotniejszymi do analizy s nastpujce: 1. Warto[ci [redniej ruchomej SMA(N) ([rednia warto[ cen zamknicia N kolejnych barów) 2. Szeroko[ wstgi Bollingera dBol (zazwyczaj jest to podwójne odchylenie standardowe cen zamknicia N kolejnych barów) 3. Zmiana wielko[ci obrotu (wolumenu) na kolejnych barach dV Oprócz standardowych wskazników analizy technicznej wprowadzimy dodatkowy wskazniki uwzgldniajce zmian cen w ujciu barowym tzn. uwzgldniajc wachlarz cen na wybranym horyzoncie czasowym za pomoc analizy przedziaBowej. Przy tym formuBujemy dodatkowo trzy kryteria lokalne charakteryzujce zmiany cen w ujciu barowym, zmiany cen zamknicia oraz zmiany wielko[ci obrotu na poszczególnych barach. 3.3 Formalizacja kryteriów lokalnych za pomoc funkcji u|yteczno[ci W ramach proponowanego podej[cia funkcja u|yteczno[ci opisujce kryteria lokalne w sensie matematycznym jest ekwiwalentna funkcji przynale|no[ci  podstawowemu elementowi teorii zbiorów rozmytych [18]. To znaczy, |e warto[ci tej funkcji zmieniaj si od 0, w zakresach niedopuszczalnych warto[ci parametrów jako[ci do 1, w zakresach najlepszych warto[ci tych parametrów. W naszym przypadku parametrami jako[ci s wymienione powy|ej zmiany cen zamknicia, zmiany cen na poszczególnych barach w ujciu przedziaBowym oraz zmiany obrotu na poszczególnych barach. Opiszemy dokBadniej te parametry jako[ci 27 3.3.1 Zmiany cen zamknicia poszczególnych barów Zmian cen zamknicia definiujemy nastpujco dC = C0  C1 , gdzie Co jest cen zamknicia bie|cej sesji, C1 cen zamknicia sesji poprzedniej (w gieBdowych systemach informatycznych numeracja sesji zaczyna si od sesji bie|cej wstecz). Formalizacja kryterium lokalnego opartego na ró|nicy cen zamknicia utrudnione jest z powodu du|ego zró|nicowania warto[ci parametru dC w zale|no[ci od zdarzeD na rynku . Na przykBad dla sytuacji beztrendowego rynku warto[ dC = 5 pkt. mo|e by potraktowana przez tradera jako du|a, jednak w warunkach mocnego trendu nawet warto[ dC = 10 pkt. mo|e by potraktowane jako dosy maBa. Dlatego zamiast ocen sztywnych liczbowo w zgodno[ci z metodologi logiki rozmytej [18] wprowadzimy lingwistyczne oceny wystpujcych zmian. Na przykBad je|eli dC = C0 - C1 i dC > 0 u|ywamy 3 terminy lingwistyczne (Lowc ,Middlec ,Bigc) |eby zdefiniowa warto[ C0 >C1 z funkcjami przynale|no[ci przedstawionymi na Rys. 5. µdC Lowc Mediumc Bigc 1 0 dCs max dCs med dC Rys. 5. Funkcja przynale|no[ci dla  dCs is Bigc itd. Warto podkre[li, |e zdefiniowane i przedstawione powy|ej kryterium lokalne µdC zawiera parametry adaptacyjne dCs max  maksymalna warto[ ró|nicy cen zamknicia dla okresu NdC , którego warto[ podlega optymalizacji , oraz dCs med. - warto[ mediany warto[ci ró|nicy cen zamknicia z okresu NdC . Analogicznie wyglda wykres funkcji przynale|no[ci w przypadku kiedy dC < 0 . 28 3.3.2 Definicja kryterium opartym o zmian cen w ujciu przedziaBowym Istotnym jest to, |e trader posiada informacje nie tylko o cenach otwarcia i zamknicia ale te| o maksymalnych i minimalnych cenach, które zostaBy zanotowane w ka|dej z poszczególnych sesji. W terminologii finansowej nazywane jest to barem, który w ujciu arytmetyki przedziaBowej mo|na przedstawi jako Bo = [ L0 , Ho ] , gdzie L0 jest cen minimaln bie|cej sesji , Ho cen maksymaln bie|cej sesji. Je|eli mamy informacj o barach bie|cej i poprzedzajcej sesji, B0 = [Lo , H0], B1 = [L1, H1], to przedziaBowo ró|nice cen w zgodno[ci z podstawami arytmetyki przedziaBowej [19] mo|na przedstawi nastpujco [dB]= [L0 - H1, H0 - L1]. Przy tym lewa granica przedziaBu dB, (L0 - H1), jest maksymaln mo|liw strat w przypadku najbardziej nieudanej gry. Natomiast prawa granica dB, (H0 - L1), jest maksymalnym mo|liwym zyskiem. Jednak bezpo[rednie u|ywanie warto[ci przedziaBowej [dB] jako parametru jako[ci, zwBaszcza jako argumentu funkcji u|yteczno[ci charakteryzujcej kryterium lokalne jest utrudnione. Dlatego u|ywali[my parametru pochodnego, który mo|na interpretowa jako miar nierówno[ci przedziaBów charakteryzujcych poszczególne bary. Przypu[my, |e mamy sytuacj H0 > H1, i L0 > L1. W zgodno[ci z definicjami podstawowymi [20] oznacza to, |e przedziaB Bo w sensie przediaBowym jest wikszy od przedziaBu B1 (Bo > B1). ( L0 - H1 ) + ( H0 - L1 ) Nietrudno zauwa|y, |e przy tym warto[ parametru zmienia si od µ = ( L0 - H1 ) 0 gdy L0 = L1 i H0 = H1 ( przedziaBy s równe ) do 1 gdy H1 = L0. Je|eli H1 > L0 , wtedy µ > 1. Tak zdefiniowany parametr µ ilo[ciowo reprezentuje stopieD nierówno[ci przedziaBów. Oczywi[cie nietrudno wprowadzi µ tak|e dla innych sytuacji lokalizacji poszczególnych barów np. L1 < L0 , H1 < H0 itd. Istniej tak|e bardziej skomplikowane sposoby oceny stopnia nierówno[ci przedziaBów np. podej[cie probabilistyczne[21] pozwalajce oprócz relacji nierówno[ci oceni stopieD równo[ci. Oprócz tego w danej sytuacji porównywania przedziaBów charakteryzujcych ceny na instrumenty finansowe proponowane uproszczone podej[cie ma nawet zalet ze wzgldu na mo|liwo[ uwzgldnienia luki jaka czsto zachodzi midzy notowaniami w cigu przerwy w notowaniach ( dla przykBadu rynek polski pracuje od godziny 9.00 do godziny 16.30 ) W naszym przypadku zachodzi to wtedy gdy L1 < L0 i H1 - L0 > 0. 29 W podej[ciu probabilistycznym w rezultacie porównania takich przedziaBów niezmiennie otrzymamy warto[ 1. Z wzgldu na to i| warto[ dB mo|e przyjmowa zarówno warto[ci dodatnie jak i ujemne konieczne jest wprowadzenie nastpujcego skalowania: ZaBó|my |e dB = (( L - H ) + ( H - L )) . o 1 0 1 (L0 - H1) Je|eli dB > 0 wtedy µ = 1+ , jest stopniem wypeBnienia nierówno[ci, w danym (Ho - L1) wypadku wy|szo[ci B0 nad B1 . (H0 - L1) Nietrudno zauwa|y, |e je[li dB < 0 wtedy µ = 1+ . (Lo - H1) Dla oceny stopnia nierówno[ci barów bdziemy u|ywali tylko trzech termów lingwistycznych (Lowb ,Middleb ,Bigb). Ich funkcji przynale|no[ci s przedstawione na Rys.6. µdB Lowb Mediumb Bigb 1 0 1 µ Rys. 6. Funkcji przynale|no[ci stopnia nierówno[ci przedziaBu. Wykres funkcji przynale|no[ci dla tego przypadku jest analogiczny do wykresu przedstawionego na Rys. 6. 3.3.3 Zmiana wielko[ci obrotu (wolumenu) na kolejnych barach Wolumen jest miar zaanga|owania traderów w danym okresie oceniane przez ilo[ zawartych transakcji. Je[li zmiany cen odzwierciedlaj charakter nastrojów dominujcych na rynku, to wolumen pokazuje ich nat|enie. Dlatego te| analiza wolumenu w poBczeniu z ruchem cen jest niezbdna dla peBniejszego zrozumienia procesów zachodzcych w strukturze popytu i poda|y. Zachowanie wolumenu mo|e bowiem by sygnaBem potwierdzajcym kierunek trendu, bdz te| stanowi ostrze|enie przed mo|liwo[ci jego zmiany. Ogólnie biorc sprowadza si to do zasady, |e zachowanie wolumenu powinno by zgodne z kierunkiem aktualnej tendencji cenowej. W trendzie wzrostowym wolumen powinien 30 zwiksza si przy zwy|ce cen i zmniejsza podczas spadkowych korekt. W trendzie zni|kowym wolumen powinien rosn wraz ze spadkami oraz zmniejsza si w miar wzrostów. W takich przypadkach wolumen potwierdza zwikszone zaanga|owanie dominujcej na rynku strony (popytu lub poda|y), a tym samym kierunek trendu. W przeciwnym razie zmiany wolumenu mog by jednym z sygnaBów ostrzegawczych przed wyczerpywaniem si potencjaBu dotychczasowego ruchu i mo|liw zmian trendu. Dlatego jako przedmiot analizy wybrano ró|nic kolejnych wolumenów tj. dV = V0  V1 , gdzie Vo jest wolumenem bie|cego bara, V1 wolumenem bara poprzedniego. Wtedy funkcja u|yteczno[ci gdy dV > 0 dla ró|nicy wolumenów mo|e przybra posta jak na Rys. 7. µvol 1 dV max dV dV min Rys7. Funkcja u|yteczno[ci kryterium lokalnego opartego na ró|nicy wolumenów. Warto[ci dV min i dV max s ustalane dla NdV kolejnych barów (parametr ten podlega optymalizacji). W naszym przypadku gBboko[ analizy ró|nicy wolumenów NdV jest taka sama jak gBboko[ analizy dla cen zamknicia. Przypadek gdy dV d" 0 jest analogiczny do przypadku dV > 0 . Ma to na celu oddanie znaczenia wolumenów jako czynnika wzmacniajcego lub osBabiajcego znaczenia aktualnej sytuacji na rynku. 3. 4 Agregowanie kryteriów lokalnych Istnieje wiele sposobów agregowania kryteriów lokalnych z uwzgldnieniem wspóBczynników ich wzgldnej wa|no[ci. Najbardziej popularnymi s addytywne, multiplikatywne oraz min-agregacja. Jednak w trakcie podejmowania decyzji trader najcz[ciej w sposób jawny lub intuicyjny sumuje argumenty za i sprzeciw konkretnej 31 transakcji dlatego, ze wzgldów merytorycznych, zostaB u|yty addytywny sposobu agregacji kryteriów lokanych. N 1 DD = Å" µi (xi ), "±i N i =1 gdzie µ1(x1),µ2(x2),...,µn(xn)...... - to funkcje przynale|no[ci charakteryzujce poszczególne kryteria, {xi} i=1, 2,& ,N  jako[ciowe i ilo[ciowe parametry jako[ci; ±1, ±2,...,±N  to wspóBczynniki wzgldnej wa|no[ci kryteriów. W naszym przypadku wzór ten przybiera posta: DD = µdC Å"± + µdB Å"±b + µdV Å"±c a ±b + ±c = 1. , ± + a Z powy|szej definicji wynika, |e warto[ci kryterium agregowanego DD zawsze znajduj si w przedziale [0,1]. Faktycznie DD jest kryterium charakteryzujcym moc wystpujcego sygnaBu dla kupna BUY, sprzeda|y SELL lub wstrzymania si od decyzji HOLD. Dlatego pierwszym krokiem w ocenie sBuszno[ci sprzeda|y, kupna lub wstrzymania si od decyzji jest ustalenie ogólnej mo|liwo[ci tych czynno[ci i tylko potem ocena mocy tych sygnaBów. Istotnym jest ustalenie za pomoc rozwizania optymalizacyjnego krytycznej mocy DDkr , przy której w rzeczywisto[ci powinni[my skorzysta z sygnaBu. Ustalenie ogólnej mo|liwo[ci wystpienia sygnaBów w ramach proponowanego systemu dokonuje si na podstawie nastpujcych reguB logiki rozmytej; opartych na protokole dziaBalno[ci tradera: if ( dC > 0 ) then begin if ( dC is BIG ) then begin if ( dB > 0 ) then begin if ( dB is BIG ) then BUY if (dB is MID ) then BUY if (dB is LOW ) then HOLD end else begin if ( dB is BIG ) then HOLD if ( dB is MID ) then BUY if ( dB is LOW ) then SELL end; 32 end; if (dC is MID ) then begin if ( dB > 0 ) then begin if ( dB is BIG ) then BUY if (dB is MID ) then BUY if (dB is LOW ) then HOLD end else begin if ( dB is BIG ) then BUY if ( dB is MID ) then HOLD if ( dB is LOW ) then HOLD end; end; if (dC is LOW ) then begin if ( dB > 0 ) then begin if ( dB is BIG ) then BUY if (dB is MID ) then HOLD if (dB is LOW ) then HOLD end else begin if ( dB is BIG ) then SELL if ( dB is MID ) then HOLD if ( dB is LOW ) then HOLD end; end; end else begin if (dC is BIG) then begin if ( dB > 0 ) then begin if ( dB is BIG ) then HOLD if (dB is MID ) then HOLD if (dB is LOW ) then SELL end else begin 33 if ( dB is BIG ) then SELL if ( dB is MID ) then SELL if ( dB is LOW ) then HOLD end; end; if (dC is MID ) then begin if ( dB > 0 ) then begin if ( dB is BIG ) then HOLD if (dB is MID ) then HOLD if (dB is LOW ) then SELL end else begin if ( dB is BIG ) then SELL if ( dB is MID ) then SELL if ( dB is LOW ) then HOLD end; end; if (dC is LOW) then begin if ( dB > 0 ) then begin if ( dB is BIG ) then HOLD if (dB is MID ) then SELL if (dB is LOW ) then SELL end else begin if ( dB is BIG ) then SELL if ( dB is MID ) then SELL if ( dB is LOW ) then HOLD end; end; end; end; Jak wida w ustalenie mo|liwo[ci sygnaBów u|ywamy wyBcznie rozmytych kryteriów opartych na ró|nicy cen zamknicia i przedziaBowej ró|nicy barów. Lokalne kryterium oparte 34 na ró|nicy wolumenów u|ywane jest jako uzupeBniajce wyliczenie mocy sygnaBu (kryterium agregowane DD) . W ramach proponowanego podej[cia u|ywamy nastpujcej metody oceny podjcia decyzji na podstawie sformuBowanych reguB logiki rozmytej i kryterium DD . Najpierw za pomoc logiki rozmytej wyznaczamy najbardziej prawdopodobny sygnaB (sygnaB o najwikszej mocy) z DDBUY , DDSELL oraz DDHOLD . Dalej wyliczamy moc tego sygnaBu jako warto[ kryterium DD . Je|eli DD okazuje si wiksze od optymalizacyjnej warto[ci krytycznej DDkr i s przy tym speBnione inne warunki w ramach ogólnej strategii wtedy podejmujemy wyznaczon decyzj. WedBug naszych do[wiadczeD w skutek stochastyczno[ci rynku, w praktyce takie podej[cie generuje zbyt du|o sygnaBów transakcyjnych, czsto nieistotnych, tzn. nie charakteryzujcych dBugoterminowe trendy co zmniejsza efektywno[ caBego systemu. Dlatego zastosowali[my dodatkowo wygBadzenie (u[rednienie) wygenerowanych sygnaBów na pewnej ilo[ci ostatnich barów ( NDD ). NDD "(DD ) i=0 BUYi DDW (BUY ) = , NDD NDD NDD ) + ) + ) "(DDBUYi "(DDSELLi "(DDHOLDi i=0 i=0 i=0 NDD ) "(DDSELLi i=0 DDW (SELL) = , NDD NDD NDD ) + ) + ) "(DDBUYi "(DDSELLi "(DDHOLDi i=0 i=0 i=0 NDD ) "(DDHOLDi i=0 DDW (HOLD) = . NDD NDD NDD ) + ) + ) "(DDBUYi "(DDSELLi "(DDHOLDi i=0 i=0 i=0 W rezultacie zamiast warto[ci DD wyliczonej na poszczególnym barze u|ywali[my wygBadzonej warto[ci DDW przy czym gBboko[ wygBadzenia NDD byBa parametrem optymalizowanym. 35 3.5 Strategia dziaBania systemu Proponowany system mechaniczny oparty jest na strategii Bczcej sygnaBy tradycyjnych, najcz[ciej u|ywanych w praktyce traderskiej wskazników analizy technicznej oraz proponowanych agregowanych kryteriów w syntezie z logik rozmyt. Podstawowym sygnaBem dla rozpoczcia analizy jest przekroczenie szeroko[ci wstgi Bollingera dBol niektórych warto[ci krytycznych dBolk . Jest to uzasadnione tym, |e szeroko[ wstgi Bollingera charakteryzuje ogóln aktywno[ rynku. Teoria i praktyka analizy technicznej[22] wskazuje na to, |e wzrost dBol jest dosy niezawodnym sygnaBem przej[cia rynku z trendu bocznego (Flat) do rzeczywistego trendu (Uptrend bdz Downtrend). W razie speBnienia warunku dBol > dBolk nastpnym krokiem analizy jest wyznaczenie sBusznego sygnaBu za pomoc opisanych w podrozdziale 3.4 reguB logiki rozmytej oraz wielokryterialnej oceny mocy sygnaBu. Je|eli okazuje si, |e za pomoc analizy [rednich ruchomych i analizy na podstawie logiki rozmytej otrzymujemy jednakowe sygnaBy to podejmujemy decyzj BUY albo SELL lub wstrzymujemy si od handlu. Zamykanie pozycji w ramach proponowanego systemu dokonuje si po wyczerpaniu si trendu. SygnaBem do tego jest przecicie sygnaBów wskaznika wielokryterialnego (tj. kiedy jest wicej przesBanek za zajciem przeciwnej pozycji). Niezbdnym elementem ka|dego systemu transakcyjnego jest ograniczenie ryzyka za pomoc zleceD STOP. Przy tym obowizkowe jest wprowadzenie sygnaBów STOP BUY oraz STOP SELL dla redukcji strat w przypadku niewBa[ciwie zajtej pozycji. Na razie nie wprowadzili[my optymalizacji gBboko[ci sygnaBów STOP lecz zaBo|yli[my nastpujce procedury zleceD sygnaBów stop: Dla pozycji dBugiej (BUY): stop = (L1 - 30 pkt) , Dla pozycji krótkiej (SELL): stop = (H1 + 30 pkt) . Gdzie punkt jest jednostk notowania kontraktów w naszym przypadku 1pkt = 10zB). 3.6 Optymalizacja systemu transakcyjnego Opisany powy|ej system transakcyjny zawiera nastpujce parametry podlegajce optymalizacji: " period ( ilo[ uwzgldnionych barów) wstgi Bollingera - Nbol , 36 " krytyczna szeroko[ wstgi Bollingera, przy której podejmujemy decyzje inwestycyjne - dBolk , " gBboko[ci analizy NdC dla dC oraz NdV dla dV (ilo[ci uwzgldnionych barów) gdzie NdC = NdV , " stopieD wygBadzenia sygnaBu generowanego przez wskaznik wielokryterialny - (ilo[ci uwzgldnionych w wygBadzeniu sygnaBów) - NDD , " parametry wzgldnej wa|no[ci kryteriów lokalnych ± , ±b , ±c . a Jako kryterium optymalizacji u|ywamy osignity dochód D osignity w okresie uczcym. W rezultacie zagadnienie optymalizacji byBo sformuBowane jako: (Nbol , dBolk , NdC , NDD ,±a ,±b ,±c ) = opt arg max D(Nbol , dBolk , NdC , NDD ,±a ,±b ,±c ). Optymalizacja systemu polegaBa na jak najlepszym doborze warto[ci omówionych powy|ej parametrów adaptacyjnych systemu dla okresu uczcego tj. okresie od 30.09.2005 do 01.01.2006r. W rezultacie optymalizacji systemu otrzymali[my nastpujce wyniki dla okresu uczcego: Long + Short Long Only Short Only Buy & Hold Net Profit 318,00 121,00 197,00 188,00 Profit per Bar 1,64 1,12 2,29 0,38 Number of Trades 29 17 12 1 Winning % 55,17% 64,71% 41,67% 100,00% Max Drawdown -71,00 -53,00 -82,00 -314,00 Profit Factor 2,75 2,11 3,70 INF Payoff Ratio 2,02 0,94 5,10 INF Przedstawiony powy|ej zysk mierzony byB w punktach jakie zarabiaBby dla nas pojedynczy kontrakt. 1 pkt ma warto[ 10 pln. Nie uwzgldniono reinwestowania zarobionego kapitaBu. Zalecanym horyzontem wedBug przeprowadzonych badaD dla inwestora indywidualnego jest horyzont godzinowy. Oferuje on warto[ wspóBczynnika Winning wynoszca 55,17% oraz Profit Factor na poziomie 2,75. Dziki wysokiej warto[ci obu wspóBczynników poBczonej z odpowiednim zarzdzaniem kapitaBem (które to zagadnienie samo w sobie jest rozlegB i bardzo skomplikowan dziedzin) mo|emy osign stabilny dochód 318,00pkt * 10zB = 3180 zB (z uwzgldnieniem kosztów transakcyjnych w wysoko[ci 9zB za zawarcie 1 37 transakcji), warto[ depozytu koniecznego do zawarcia transakcji kupna kontaktu to okoBo 2000zB. KapitaB wyj[ciowy to 3180zB + 2000zB = 5180 zB. Sumaryczny zysk wynosi wic okoBo 160%. 3.7 Testowanie optymalizowanego systemu Jak przedstawiono w poprzednim podrozdziale system byB optymalizowany na podstawie danych od 30.09.2005r. do 01.01.2006r. (okres uczcy). Ze wzgldu na fakt i| logika rozmyta modeluje zachowania ludzi konieczne staBo si zastosowanie danych z krótszego okresu czasu ni| jest to normalnie przyjte w testowaniu systemów transakcyjnych. W cigu czterech miesicy rynek zmienia si gwaBtownie, nowi ludzie zaczynaj handel, zmieniaj si zarzdzajcy funduszami. Zmiany te maj istotny wpByw na zachowanie przedstawionego systemu. Otrzymane optymalizowane parametry z okresu uczcego zostaBy u|yte dla testowania systemu na danych z nastpujcego okresu od 01.01.2006r. do 13.03.2006r. Na Rys. 8 przedstawiono przykBadowy przebieg notowaD wraz z wykresem wskazaD opracowanego systemu po dokonaniu optymalizacji parametrów. Wskaznik górny przedstawia wskaznik wielokryterialny, wskaznik [rodkowy przedstawia wskaznik szeroko[ci wstgi Bollingera. 38 Rys. 8. PrzykBadowy przebieg notowaD z wykorzystaniem systemu. Dla okresu testowego od 01.01.2006r. do 12.03.2006r. otrzymali[my nastpujce wyniki: Long + Short Long Only Short Only Buy & Hold Net Profit 161,00 38,00 123,00 115,00 Profit per Bar 1,04 0,61 1,32 0,28 Number of Trades 30 13 17 1 Winning % 50,00% 46,15% 52,94% 100,00% Max Drawdown -199,00 -209,00 -81,00 -268,00 Profit Factor 1,49 1,19 1,95 INF Payoff Ratio 1,28 1,40 1,26 INF Wynik liczony byB w punktach jakie zarabia dla nas 1 kontrakt terminowy na indeks WIG20. 1 punkt jest wart 10zB tak wic system zarobiB dla nas w okresie testowym 1610 zB (z uwzgldnieniem kosztów transakcyjnych w wysoko[ci 9zB za ka|d transakcj). Warto[ depozytu wynosi okoBo 2000zB. CaBkowity kapitaB po okresie testowym wynosi wic 3610 zB. Sumaryczny dochód wynosi okoBo 80%. Krzywa wzrostu kapitaBu caBego okresu (uczcy+testowy) przestawiona jest na Rys. 9. Jak wida jest ona dosy stabilna. 39 Rys. 9. Zmiana kapitaBu w czasie od 30.09.2005r do 12.03.2006r 3.8 Podsumowanie Opracowany system transakcyjny oparty na syntezie tradycyjnych wskazników analizy technicznej oraz wprowadzonych kryteriów lokalnych wBcznie z u|ywanymi metodami wielokryterialnymi i logiki rozmytej pozwalaj na osignicie wysokich zysków na rynku kontraktów terminowych na indeksie WIG20. Okres uczcy - 3180 zB Okres testowy  1610 zB Zysk z caBego okresu dziaBalno[ci systemu (okres uczcy i testowy)  4790 zB KapitaB wyj[ciowy 6790zB w okresie 6 miesicy. Sumaryczny zysk wynosi okoBo 240%. GBówn zalet proponowanej metody jest mo|liwo[ wielokryterialnej optymalizacji strategii podjcia decyzji traderskich. System daB dobre wyniki zarówno na zbiorze uczcym jak i na zbiorze testowym. 40 ROZDZIAA IV System transakcyjny oparty na podej[ciu [ci[le wielokryterialnym Przedstawiony w rozdziale III system ma wiele zalet (RozdziaB III podpunkt 3.9), lecz niewtpliwie posiada te| wady. Do podstawowych mo|emy zaliczy: a) system reguB logiki rozmytej powstaB on na podstawie protokoBu dziaBalno[ci tradera, i nie mo|e podlega procesowi optymalizacji; reguBy mog by zle dobrane i powodowa obni|enie efektywno[ci systemu, b) mimo, i| system dobrze radzi sobie podczas trendu bocznego (konsolidacja), unikajc bBdnych transakcji dziki regule HOLD (wstrzymaj si od handlu), wykazuje niepokojc skBonno[ do gBbokiej penetracji portfela przy osuniciach kapitaBu, transakcje takie przy wystpowaniu dzwigni finansowej mog doprowadzi system do bankructwa ju| w pocztkowej fazie inwestowania  mimo pózniejszego, hipotetycznego sukcesu. Aby wyeliminowa powy|sze wady oraz poprawi parametry funkcjonalne systemu proponuje si wprowadzenie nowego, gdzie w miejsce reguB logiki rozmytej wprowadzi si nowe kryteria lokalne, które bd elastyczniej reagowa na zachowania uczestników rynku. Dla potrzeb nowego systemu konieczny jest równie| nowy sposób agregacji kryteriów lokalnych, gdy| wpBywa on bardzo znaczco na koDcowe wyniki pracy sytemu [23]. 4.1 Wybór kryteriów lokalnych i strategii w podjciu decyzji traderskich 4.1.1 Wybór kryteriów lokalnych Aby wybra odpowiednie kryteria lokalne nale|y zastanowi si, które z parametrów charakteryzujcych wskazniki analizy technicznej s najistotniejsze. Wybór ten jest oczywi[cie subiektywny np. analizujc dan sytuacj rynkow wybrany wskaznik prognozuje  mocny wzrost a inny z kolei sugeruje  lekki spadek , kolejne sugeruj pozycj  neutraln lub  umiarkowany wzrost etc. Wstpna analiza rynku pozwala wnioskowa, |e najbardziej istotnymi parametrami dla analiz s: 1.Ceny zamknicia kolejnych barów. 2. Zmiana cen na kolejnych barach w ujciu przedziaBowym tzn. z uwzgldnieniem caBych zakresów wahaD cen w cigu poszczególnych barów. 41 3.Wielko[ obrotu (wolumenu) na kolejnych barach. Na podstawie tych parametrów wyliczane s wskazniki analizy technicznej. Najcz[ciej u|ywanym i z tej przyczyny najistotniejszymi do naszej analizy jest szeroko[ wstgi Bollingera dBol (zazwyczaj jest to podwójne odchylenie standardowe cen zamknicia N kolejnych barów) okre[lajcy dynamik rynku. 4.2 Formalizacja kryteriów lokalnych za pomoc funkcji u|yteczno[ci W ramach naszego podej[cia funkcja kryterialna opisujca kryterium lokalne w sensie matematycznym jest ekwiwalentna funkcji przynale|no[ci  podstawowemu elementowi teorii zbiorów rozmytych. To znaczy, |e warto[ci tej funkcji zmieniaj si od 0 do 1 w zakresach niedopuszczalnych warto[ci parametrów jako[ci do 1 w zakresach najlepszych warto[ci tych parametrów. W naszym przypadku parametrami jako[ci s wymienione powy|ej zmiany cen zamknicia, zmiany cen na poszczególnych barach w ujciu przedziaBowym oraz zmiany obrotu na poszczególnych barach. Opiszemy dokBadniej te parametry jako[ci. 4.2.1 Zmiany cen zamknicia poszczególnych barów Zmiana cen zamknicia definiujemy nastpujco dC = C0  C1 , gdzie Co jest cen zamknicia bie|cej sesji, C1 cen zamknicia sesji poprzedniej. Funkcje kryterialne µCBUY , µCSELL odpowiadajce sygnaBom kupna i sprzeda|y zostaBy sformalizowane w sposób pokazany na Rys.10. 42 µCBUY µCSELL 1 1 µCBUY µCSELL 0.5 0.5 0 dCmin 0 dCmin dCmax dCmax Rys.10. Funkcje kryterialne µCBUY , µCSELL . Wprowadzone funkcje charakteryzuj wzrost mocy sygnaBu BUY ze wzrostem przyrostu dC oraz wzrost sygnaBu SELL przy spadku dC. Warto[ funkcji 0.5 dla zerowych dC charakteryzuje sytuacj (brak zmiany cen zamknicia), w których mamy 50% prawdopodobieDstwa trendów uptrend i downtrend. Warto podkre[li, |e zdefiniowane powy|ej kryteria lokalne µCBUY , µCSELL oparte s na parametrach dCs max  maksymalna warto[ ró|nicy cen zamknicia oraz dCs min. - warto[ minimalna ró|nicy cen zamknicia dla wybranego okresu NdC (ilo[ ostatnich barów). NdC jest parametrem adaptacyjnym poszukiwanym w trakcie rozwizania problemu optymalizacyjnego. 4.2.2 Definicja kryterium opartego o zmian cen w ujciu przedziaBowym Model matematyczny powy|szego kryterium jest identyczny z modelem zastosowanym w systemie przedstawionym w podrozdziale 3.3.2. W tym przypadku zrezygnowali[my z u|ycia termów lingwistycznych do oceny stopnia nierówno[ci przedziaBów. U|ywa bdziemy jedynie czystej warto[ci funkcji kryterialnych µBBUY , µBSELL charakteryzujcych moc sygnaBu kupna lub sprzeda|y w zale|no[ci od zmian cen w ujciu przedziaBowym (Rys.11) 43 1 µBBUY , µBSELL 0 1 µ Rys.11. Funkcje kryterialne µBBUY , µBSELL . 4.2.3 Kryterium oparte na zmianach wielko[ci obrotu (wolumenu) na kolejnych barach Wolumen jest miar zaanga|owania traderów w danym okresie oceniana przez ilo[ zawartych transakcji. Je[li zmiany cen odzwierciedlaj charakter nastrojów dominujcych na rynku, to wolumen pokazuje ich nat|enie. Dlatego te| analiza wolumenu w poBczeniu z analiz zmian cen jest niezbdna dla peBniejszego zrozumienia procesów zachodzcych w strukturze popytu i poda|y. Zachowanie wolumenu mo|e bowiem by sygnaBem potwierdzajcym kierunek trendu, bdz te| stanowi ostrze|enie przed mo|liwo[ci jego zmiany. Ogólnie biorc, sprowadza si to do zasady, |e zachowanie wolumenu powinno by zgodne z kierunkiem aktualnej tendencji cenowej. W trendzie wzrostowym wolumen powinien zwiksza si przy wzro[cie cen i zmniejsza podczas spadkowych korekt. W trendzie zni|kowym wolumen powinien rosn wraz ze spadkami oraz zmniejsza si w miar wzrostów. W takich przypadkach wolumen potwierdza zwikszone zaanga|owanie dominujcej na rynku strony (popytu lub poda|y), a tym samym kierunek trendu. W przeciwnym razie zmiany wolumenu mog by jednym z sygnaBów ostrzegawczych przed wyczerpywaniem si potencjaBu dotychczasowego ruchu i mo|liw zmian trendu. Dlatego jako parametr analizy wybrano ró|nic kolejnych wolumenów tj. dV = dV0 - dV1 , gdzie Vo jest wolumenem bierzcego bara, V1 wolumenem bara poprzedniego. Funkcja kryterialna µV oparta na parametrze dV zostaBa zdefiniowana jak na Rys.12. 44 1 µV 0.5 0 dVmin dVmax Rys.12. Funkcja kryterialna . µV Oczywi[cie ksztaBt tej funkcji jest taki sam przy wystpieniu sygnaBów BUY i SELL dostarczanych przez inne wskazniki. Warto podkre[li, |e zdefiniowane powy|ej kryterium lokalne , oparte jest na parametrach µV dV max  maksymalna warto[ ró|nicy wolumenów oraz dV min. - warto[ minimalna ró|nicy wolumenów dla wybranego okresu NdV (ilo[ ostatnich barów). NdV jest parametrem adaptacyjnym poszukiwanym w trakcie rozwizania problemu optymalizacyjnego. 4. 3 Agregowanie kryteriów lokalnych Istnieje wiele sposobów agregowania kryteriów lokalnych z uwzgldnieniem wspóBczynników ich wzgldnej wa|no[ci. Najbardziej popularnymi s addytywne, multiplikatywne oraz min-agregacja. Ze wzgldu na ró|norodno[ rynków zmienia si charakter agregacji jaki intuicyjnie akceptuje trader dziaBajcy na tym rynku. Dlatego, |e w naszej sytuacji mamy dwie grupy kryteriów charakteryzujcych moc sygnaBu BUY i moc sygnaBu SELL powinni[my wprowadzi dwie ró|ne grupy agregatorów DDBUY oraz DDSELL , które formalnie mo|na przedstawi jako funkcje: DDBUY = f (µCBUY,µBBUY,µV ,±C,±B,±V ), DD = f (µCSELLµBSELLµV,±C,±B,±V), , , SELL 45 gdzie ±C ,±B,±V wspóBczynniki wzgldnej wa|no[ci (rangi) odpowiednich kryteriów lokalnych. WspóBczynniki te s parametrami adaptacyjnymi modelu, lecz powinny by dobrane tak by speBni standardowy w zagadnieniach wielokryterialnych warunek ±C + ± + ±V = 1. B W trakcie badaD wyodrbnione zostaBy cztery nastpujce sposoby agregacji, które co najmniej gwarantowaBy dodatnie zyski: DD1BUY = ± Å" µCBUY + ± Å" µ + ± Å" µV , C B BBUY V DD1SELL = ± Å" µCSELL + ± Å" µBSELL + ±V Å" µV , C B ± ± ± C B V DD = µ Å" µ Å" µ , 2 BUY CBUY BBUY V ± ± ± C B V DD = µ Å" µ Å" µ , 2 SELL CSELL BSELL V ± ± a B C DD = min( µCBUY ± , µ , µV ) , 3 BUY BBUY B DD3SELL = min(µCSELL ±a , µBSELL ± , µV ±C ) , V DD4 BUY = (± Å" µCBUY + ± Å" µ )1-± Å" µV ±V , C B BBUY ± V V DD = (± Å" µ + ± Å" µ )1-± Å" µ . 4 SELL C CSELL B BSELL V Z powy|szej definicji wynika, |e warto[ci kryteriów agregowanych DD zawsze znajduj si w przedziale [0,1]. Dalej wyliczamy moc sygnaBów BUY i SELL jako warto[ kryteriów DD. Mo|na u|ywa warto[ci DDBUY i DDSELL jako sygnaBów kupna i sprzeda|y. Jednak wedBug naszych do[wiadczeD w praktyce takie podej[cie generuje zbyt du|o sygnaBów transakcyjnych, czsto nieistotnych, tzn. nie charakteryzujcych dBugoterminowe trendy, co zmniejsza efektywno[ caBego systemu. Dlatego zastosowali[my dodatkowo wygBadzenie (u[rednienie) wygenerowanych sygnaBów na pewnej ilo[ci ostatnich barów ( NDD ). n n 1 1 DDBUY = , DDSELL = , "DDBUY "DDSELL NDD i=0 NDD i=0 gdzie NDD jest parametrem adaptacyjnym poszukiwanym w trakcie rozwizania problemu optymalizacyjnego. W rezultacie zamiast warto[ci DDBUY , DDSELL wyliczonej na poszczególnym barze u|ywali[my wygBadzonej warto[ci DDBUY , DDSELL . 46 4.4 Strategia Proponowany system mechaniczny oparty jest na strategii u|ywajcej opisanych powy|ej kryteriów agregowanych oraz innych sygnaBów rynkowych opartych na standardowych wskaznikach. Podstawowym sygnaBem dla rozpoczcia analizy jest, tak jak i dla poprzedniego systemu przekroczenie szeroko[ci wstgi Bollingera dBol niektórych warto[ci krytycznych dBolk . W razie speBnienia warunku dBol > dBolk nastpnym krokiem analizy jest wyznaczenie sBusznego sygnaBu kupna lub sprzeda|y za pomoc wielokryterialnej oceny mocy sygnaBu. Zamykanie pozycji w ramach proponowanego systemu dokonuje si po wyczerpaniu si trendu. SygnaBem do tego jest przecicie wygBadzonych linii wskazników wielokryterialnych DDBUY , DDSELL . Niezbdnym elementem ka|dego systemu transakcyjnego jest ograniczenie ryzyka za pomoc zleceD STOP. Przy tym obowizkowe jest wprowadzenie sygnaBów STOP BUY oraz STOP SELL dla redukcji strat w przypadku niewBa[ciwie zajtej pozycji. Zgodnie z naszymi do[wiadczeniami zaBo|yli[my nastpujce procedury zleceD sygnaBów stop: Dla pozycji dBugiej (BUY): stop = (C1 - 30 pkt) , Dla pozycji krótkiej (SELL): stop = (C1 + 30 pkt) . Gdzie punkt jest krokiem notowaD kontraktu terminowego FW20 na indeks WIG20. 4.5 Optymalizacja systemu transakcyjnego Opisany powy|ej system transakcyjny zawiera nastpujce parametry podlegajce optymalizacji: " Period ( ilo[ uwzgldnionych barów) wstgi Bollingera Nbol . " Krytyczna szeroko[ wstgi Bollingera, przy której podejmujemy decyzje inwestycyjne - dBolk " GBboko[ci analizy NdC oraz NdV (ilo[ci uwzgldnionych barów) " StopieD wygBadzenia sygnaBu generowanego przez wskaznik wielokryterialny - NDD (ilo[ci uwzgldnionych w wygBadzeniu sygnaBów) " Parametry wzgldnej wa|no[ci kryteriów lokalnych ±C , ± , ±V B 47 Jako kryterium optymalizacji u|ywamy zysk D osignity w okresie uczcym. W rezultacie zagadnienie optymalizacji byBo sformuBowane jako: (Nbol , dBolk , NdC , NdV , NDD ,±C ,± ,±V ) = B opt arg max D(Nbol , dBolk , NdC , NdV , NDD ,±C ,± ,±V ), st.±C + ± + ±V = 1. B B Optymalizacja systemu polegaBa na jak najlepszym doborze warto[ci omówionych powy|ej parametrów adaptacyjnych systemu dla okresu uczcego tj. okresie od 30.09.2005r. do 01.01.2006r. Proces optymalizacji parametrów zostaB opracowany w [rodowisku WealthLab. Rozwa|any byB horyzont czasowy 1 godzina.. 4.6 Testowanie optymalizowanego systemu Podczas badaD sprawdzone zostaBy wszystkie wymienione powy|ej metody agregacji. Rezultaty najlepszej zostaBy nastpnie zweryfikowane w okresie testowym. W rezultacie optymalizacji systemu na danych historycznych najszybciej wygasajcych serii kontraktów terminowych na indeks WIG20 otrzymali[my nastpujce wyniki dla okresu uczcego (od 30.09.2005r. do 01.01.2006r.): Agregacja addytywna DD1 ( na Rys.13 przedstawiono krzyw dochodu): Long + Short Long Only Short Only Buy & Hold Net Profit 499,00 251,00 248,00 188,00 Profit per Bar 1,78 1,42 2,38 0,38 Number of Trades 35 19 16 1 Winning % 42,86% 47,37% 37,50% 100,00% Max Drawdown -104,00 -88,00 -87,00 -314,00 Profit Factor 2,89 2,60 3,32 INF Recovery Factor 4,80 2,85 2,85 0,60 Payoff Ratio 3,68 2,64 5,51 INF 48 Rys 13. Krzywa dochodu dla agregacji addytywnej DD1 dla okresu uczcego (30.09.2005-01.01.2006r.) Agregacja multiplikatywna DD2 ( na Rys. 14 przedstawiono krzyw dochodu): Long + Short Long Only Short Only Buy & Hold Net Profit 468,00 235,00 233,00 188,00 Profit per Bar 1,81 1,48 2,33 0,38 Number of Trades 39 21 18 1 Winning % 43,59% 52,38% 33,33% 100,00% Max Drawdown -114,00 -82,00 -115,00 -314,00 Profit Factor 2,60 2,52 2,69 INF Recovery Factor 4,11 2,87 2,03 0,60 Payoff Ratio 3,21 2,30 4,92 INF Rys 14. Krzywa dochodu dla agregacji multiplikatywnej DD2 dla okresu uczcego (30.09.2005-01.01.2006r.) Min-agregacja DD3 ( na Rys.15 przedstawiono krzyw dochodu): Long + Short Long Only Short Only Buy & Hold Net Profit 553,00 285,00 268,00 188,00 Profit per Bar 1,94 $ 1,56 2,63 0,38 Number of Trades 35 19 16 1 Winning % 57,14% 57,89% 56,25% 100,00% 49 Max Drawdown -98,00 -81,00 -90,00 -314,00 Profit Factor 3,09 2,72 3,73 INF Recovery Factor 5,64 3,52 2,98 0,60 Payoff Ratio 2,35 2,02 2,94 INF Rys 15. Krzywa dochodu dla agregacji multiplikatywnej DD3 dla okresu uczcego (30.09.2005-01.01.2006r.) Agregacja typu mieszanego DD4 ( na Rys.16 przedstawiono krzyw dochodu): Long + Short Long Only Short Only Buy & Hold Net Profit 615,00 311,00 304,00 188,00 Profit per Bar 2,33 1,84 3,20 $ 0,38 $ Number of Trades 33 20 13 1 Winning % 63,64% 55,00% 76,92% 100,00% Max Drawdown -111,00 -111,00 -63,00 -314,00 Profit Factor 4,19 3,06 8,24 INF Recovery Factor 5,54 2,80 4,83 0,60 Payoff Ratio 2,36 2,49 2,44 INF Rys 16. Krzywa dochodu dla agregacji multiplikatywnej DD4 dla okresu uczcego (30.09.2005-01.01.2006r.) 50 Hadel odbywaB si za pomoc 1 kontraktu bez reinwestowania z uwzgldnieniem kosztów transakcyjnych na poziomie 9 zB za transakcj. Najbardziej korzystna okazaBa si agregacja typu mieszanego. Bardzo dobry jest wspóBczynnik winning, którego warto[ to 63,64%. System z tym rodzajem agregacji zarobiB tak|e najwicej pienidzy. 615 punktów to ekwiwalent 6150 zB przy warto[ci depozytu za kontrakt okoBo 2000zB. Zysk w okresie uczcym wyniósB wic ponad 200%. Jak wida rezultaty pracy systemu [ci[le zale| od rodzaju wybranej agregacji. Jako okres testowy ustalili[my dane od 01.01.2006r. do 13.03.2006r. Rezultaty handlu w okresie testowym przedstawiono poni|ej: Long + Short Long Only Short Only Buy & Hold Net Profit 246,00 150,00 96,00 115,00 Profit per Bar 1,05 1,36 0,77 0,28 Number of Trades 29 13 16 1 Winning % 55,17% 61,54% 50,00% 100,00% Max Drawdown -170,00 -127,00 -145,00 -268,00 Profit Factor 1,77 2,85 1,40 INF Recovery Factor 1,45 1,18 0,66 0,43 Payoff Ratio 1,20 1,10 1,36 INF Wyniki za caBy okres pracy systemu czyli od 30.09.2005r. do 13.03.2006r przedstawiono poni|ej: Long + Short Long Only Short Only Buy & Hold Net Profit 972,00 598,00 374,00 293,00 Profit per Bar 1,91 2,12 1,65 0,33 Number of Trades 61 30 31 1 Winning % 63,93% 66,67% 61,29% 100,00% Max Drawdown -217,00 -161,00 -145,00 -314,00 Profit Factor 3,01 3,69 2,43 INF Recovery Factor 4,48 3,71 2,58 0,93 Payoff Ratio 1,59 1,71 1,43 INF Krzywa wzrostu kapitaBu caBego okresu (uczcy+testowy) przestawiona jest na Rys. 16. 51 Rys. 17 Krzywa kapitaBu dla systemu dla danych od 30.09.2005r. do dnia 13.03.2006r. 4.7 Podsumowanie W podsumowaniu chciaBbym przedstawi porównanie pracy sytemu jaki zostaB opracowany powy|ej z systemem z rozdziaBu III. Systemy porównywane bd w caBym okresie, w którym pracowaBy. Dane przedstawione s bez reinwestowania zarobionego kapitaBu. Handel odbywaB si za pomoc 1 kontraktu na indeks WIG20 najszybciej wygasajcej serii FW20. Koszty transakcji ustalono na poziomie 9 zB za jedn transakcj. ZaBo|ono, |e koszt depozytu na kontrakt tej serii wyniósB okoBo 2000zB. System oparty na logice rozmytej: Zysk z caBego okresu dziaBalno[ci systemu (okres uczcy i testowy)  4790 zB KapitaB wyj[ciowy 6790zB w okresie 6 miesicy. Sumaryczny zysk wynosi okoBo 240%. System caBkowicie wielokryterialny: Zysk z caBego okresu dziaBalno[ci systemu (okres uczcy i testowy)  9720 zB KapitaB wyj[ciowy 11720zB w okresie 6 miesicy. Sumaryczny zysk wynosi okoBo 490% Jak wida system caBkowicie wielokryterialny przyniósB ponad dwukrotnie wikszy dochód od systemu opartego na logice rozmytej. Przedstawiony system wykazaB si znacznie wiksz 52 efektywno[ci od systemu przedstawionego w rozdziale III. Elastyczno[ kryteriów lokalnych poBczona z odpowiednim sposobem ich agregacji daBy doskonaBy efekt synergii. Dodatkow zalet jest mo|liwo[ optymalizacji ka|dego z parametrów systemu (system z rozdziaBu III byB pozbawiony tej mo|liwo[ci ze wzgldu na zastosowanie w nim reguB logiki rozmytej). ZakoDczenie Przedstawione powy|ej systemy oparte na logice rozmytej oraz na wielokryterialnym agregowaniu kryteriów lokalnych stanowi mog doskonaB baz do budowy w peBni zautomatyzowanych systemów do gry na rynkach finansowych. W powy|szej pracy zostaBy opisane dwa systemy. Nale| one do tak zwanej rodziny trend-following, czyli ich zadaniem jest gra na rynkach, które aktualnie znajduj si w trendzie, oraz unikanie dotkliwych strat kiedy rynki wchodz w obszar konsolidacji. Oba systemy wykazaBy si z powierzonych im zadaD nie doprowadzajc do bankructwa. Lepszy okazaB si system oparty na syntezie wielokryterialnej. Ze wzgldu na specyfik polskiego rynku kapitaBowego niemo|liwe jest natychmiastowe wdro|enie w peBni automatycznego handlu (brak API) na GieBdzie Papierów Warto[ciowych w Warszawie, mo|liwa jest jedynie funkcja doradcza systemu. Jednak przykBad takich rynków jak FOREX czy NASDAQ oraz RTS pokazuje, |e pojawienie si odpowiedniego zaplecza informatycznego jest jedynie kwesti czasu i dojrzaBo[ci rynku. W przyszBo[ci wskazane jest równie| stworzenie odpowiedniego portfolio zarówno rynków jak i systemów tak aby maksymalnie wygBadzi krzyw dochodu. 53 Literatura [1] http://www.futures.pl/?did=69 [2] http://www.bm.bph.pl/index.php?p=news&kid=16&pkid=103 [3] http://bossa.pl/edukacja/kontrakty/na_indeksy.html [4] http://bossa.pl/edukacja/kontrakty/na_indeksy.html [5] http://www.gpw.com.pl/gpw.asp?cel=edukacja&k=83&i=/papiery_wart/kontrakty_indeksy [6] http://www.kdpw.pl/irip/pliki/informacja.pdf [7] http://www.kdpw.pl/irip/pliki/km.xls [8] http://bossa.pl/edukacja/kontrakty/ [9] http://www.statica.pl [10] http://www.statica.pl/index-2.html [11] http://www.esignal.com/esignal/features/featureslist/futures_data.asp#other [12] http://www.statica.pl/notow2.html [13] http://www.gpw.com.pl/gpw.asp?cel=ogieldzie&k=9&i=/warset/warset [14] http://www.wealth-lab.com/ [15] Instrukcja wprowadzajca do systemu WealthLab 3.0 (help zawarty w programie) [16] http://www.wealth-lab.com/cgi-bin/WealthLab.DLL/getpage?page=WLD3.htm [17] P. Sevastianov, B. Wietrak, Wielokryterialna optymalizacja systemu traderskiego na rynku kontraktów terminowych, Informatyka teoretyczna i stosowana/Computer Science, Politechnika Czstochowska, Rocznik 5, (8), 2005, str. 215-226. [18] L.A. Zadeh, Fuzzy Sets, Information and Control 8 (1965) 338  353 [19] Moore, R.E., (1966). Interval analysis, Englewood Cliffs. N.J., Prentice-Hall. [20] Moore, R.E., (1966). Interval analysis, Englewood Cliffs. N.J., Prentice-Hall. [21] Sevastianov P., Rog. P. A probabilistic approach to fuzzy and interval ordering. Task Quarterly. Special Issue Artificial and Computational Intelligence 2002; 7: 147-156. [22] S.B. Achelis, Technical Analysis from A to Z: Covers Every Trading Tool-From the Absolute Breadth Index to the Zig Zag, Probus Publisher, Chicago, 1995. [23] P. Figat, P. Sewastianow, B. Wietrak,  Metody logiki rozmytej oraz wielokryterialnego podejmowania decyzji w systemach traderskich na rynku kontraktów terminowych , materiaBy na konferencj Rynek KapitaBowy Skuteczne Inwestowanie, KoBobrzeg 05-07 kwietnia 2006r. [24] Moore, R.E., (1966). Interval analysis, Englewood Cliffs. N.J., Prentice-Hall. [25] Sevastianov P., Rog. P. A probabilistic approach to fuzzy and interval ordering. Task Quarterly. Special Issue Artificial and Computational Intelligence 2002; 7: 147-156. 54 Spis tabel Tab. 1: Warto[ci depozytów wstpnych i wBa[ciwych dla kontraktów terminowych& 14-15 Spis rysunków Rys.1. PrzykBad dziaBania programu Notowania2 firmy Statica (tabele z notowaniami) 23 Rys.2. PrzykBad dziaBania programu Notowania2 firmy Statica (wykres tickowy kontraktu FW20M6) 23 Rys.3. Droga danych gieBdowych z GieBdy do klienta (opracowanie wBasne) 24 Rys.4. Okno gBówne programu WealthLab3.0 z otwartymi edytorami systemów 25 Rys.5. Funkcja przynale|no[ci dla  dCs is Bigc itd.28 Rys.6. Funkcji przynale|no[ci stopnia nierówno[ci przedziaBu. 30 Rys.7. Funkcja u|yteczno[ci kryterium lokalnego opartego na ró|nicy wolumenów. 31 Rys.8. PrzykBadowy przebieg notowaD z wykorzystaniem systemu 39 Rys.9. Zmiana kapitaBu w czasie od 30.09.2005r do 12.03.2006r 40 µCBUY µCSELL Rys.10. Funkcje kryterialne , . 43 µBBUY µBSELL Rys.11. Funkcje kryterialne , . 44 µV Rys.12. Funkcja kryterialna . 45 Rys 13. Krzywa dochodu dla agregacji addytywnej dla okresu uczcego (30.09.2005-01.01.2006r.) 49 Rys 14. Krzywa dochodu dla agregacji multiplikatywnej dla okresu uczcego (30.09.2005-01.01.2006r.) 49 Rys 15. Krzywa dochodu dla agregacji multiplikatywnej dla okresu uczcego (30.09.2005-01.01.2006r.) 50 Rys 16. Krzywa dochodu dla agregacji multiplikatywnej dla okresu uczcego (30.09.2005-01.01.2006r.) 50 Rys.17 Krzywa kapitaBu dla systemu dla danych od 30.09.2005r. do dnia 13.03.2006r. 52 55 Kod zródBowy systemu z RozdziaBu III {#OptVar1 18;5;20;1} {#OptVar2 9;1;9;1} {#OptVar3 7;1;9;1} {#OptVar4 5;1;9;1} {#OptVar5 28;20;30;1} {#OptVar6 127;100;150;5} {#OptVar7 15;14;15;2} {#OptVar8 10;1;10;1} {#OptVar9 3;1;10;1} {#OptVar10 8;1;10;1} var Bar: integer; var BBUp,BBDown,BBDiff, BBPeriod: integer; //wstega bollingera var BBPane: integer; // panele z wykresami var BBLimit: float; // wartosc graniczna roznicy wstegi bb BBperiod := 6; // okres wstegi bollingera BBLimit := 0; // rysowanie wstegi bollingera PlotSeries( BBandLowerSeries( #Close, BBPeriod, 2 ), 0, 205, #Thick ); PlotSeries( BBandUpperSeries( #Close, BBPeriod, 2 ), 0, 205, #Thick ); //obliczanie wskaznika - roznicy gornej i dolnej wstegi bollingera BBUp := BBandUpperSeries( #Close, BBPeriod, 2 ); BBDown := BBandLowerSeries( #Close, BBPeriod, 2 ); BBDiff := SubtractSeries(BBUp,BBDown); BBPane := CreatePane( 30, true, true ); // wyswietalnie na panelu PlotSeries( BBDiff, BBPane, 012, #Thick ); DrawHorzLine( BBLimit, BBPane, #Green, #Thin ); DrawHorzLine( 51, BBPane, #Green, #Dotted ); // srednie ruchome szybka i wolna var hSlow, hFast, SlowPer, FastPer: integer; SlowPer := 6; // okres sredniej ruchomej FastPer := 3; hSlow := SMASeries( #Close, SlowPer ); hFast := SMASeries( #Close, FastPer ); PlotSeries( hSlow, 0, 000, #Thick ); PlotSeries( hFast, 0, 502, #Thick ); var hVSlow: integer; //Kuzniecow hVSlow := SMASeries(#Close, 24 ); PlotSeries( hVSlow,0,009,#Dotted); type fuzzy = RECORD value: float; name: float; END; function mi( Y: float; a: float; b: float; c: float): fuzzy; var miLow, miMid, miBig: float; wynik: fuzzy; 56 begin miLow := 0.0; miMid := 0.0; miBig := 0.0; if ( Y < a ) then miLow := 1.0; if (a < Y) and (Y < b) then begin miLow := (b - Y) / (b - a); miMid := (Y - a) / (b - a); end; if ( b < Y ) and ( Y < c ) then begin miMid := (c - Y) / (c - b); miBig := (Y - b) / (c - b); end; if ( Y > c ) then miBig := 1.0; if ( miLow > miMid ) then begin wynik.value := miLow; wynik.name := 1; end else if ( miBig > miMid ) then begin wynik.value := miBig; wynik.name := 3; end else begin wynik.value := miMid; wynik.name := 2; end; Result := wynik; end; function miBB( a: float; b: float; c:float; value: float ): float; var wynik: float; begin if ( value < c ) then begin if ( value <= a ) then begin wynik := 0; end else begin wynik := abs((abs(a)-abs(value)))/(2*abs(a)); // nie trzeba modulu bo - * - = + :-) end; end; if ( value > c ) then begin if ( value >= b ) then begin wynik := 1; end else begin wynik := (b+value)/(2*b); end; end; 57 if value = c then wynik := 0.5; Result := wynik; end; function miUp( a: float; b: float; value: float ): float; var wynik: float; begin if ( value < 0 ) then begin if ( value <= a ) then begin wynik := 0; end else begin wynik := abs((abs(a)-abs(value)))/(2*abs(a)); // nie trzeba modulu bo - * - = + :-) end; end; if ( value > 0 ) then begin if ( value >= b ) then begin wynik := 1; end else begin wynik := (b+value)/(2*b); end; end; if value = 0 then wynik := 0.5; Result := wynik; end; { obliczanie roznicy przedzialowej barow dBar oraz roznicy cen zamkniecia dC } var C0,C1,l0,l1,h0,h1,e,a,b,V1,V0: float; var N,K,dBar,barL,dC,dCAbs,bbMi,dcMiV,barMiV,dcMiN,barMiN,volMi,dVol: integer; dBar := CreateSeries; // znormalizowane roznice barow dC := CreateSeries; // roznice cen zamkniecia barL := CreateSeries;// wskaznik barowy :-) dCAbs := CreateSeries; // wartosc absolutna roznicy cen zamkniecia dVol := CreateSeries; // volumen for N:=1 to BarCount -1 do begin l0 := GetSeriesValue(N,#Low); l1 := GetSeriesValue(N-1,#Low); h0 := GetSeriesValue(N,#High);; h1 := GetSeriesValue(N-1,#High); C1 := GetSeriesValue(N-1,#Close); C0 := GetSeriesValue(N,#Close); V1 := GetSeriesValue(N-1,#Volume); V0 := GetSeriesValue(N,#Volume); 58 e := 0.0; a := ( l0 - h1 ); b := ( h0 - l1 ); if (a+b) > 0 then begin e := 1 + a/b; end else begin if a=0 then begin e:=1; end else e := 1 + b/a; end; //SetSeriesValue( N, barL, (a+b)*GetSeriesValue(N,#Volume) ); SetSeriesValue( N, barL, (a+b) ); SetSeriesValue( N, dBar, e ); SetSeriesValue( N, dC, C0-C1 ); SetSeriesValue( N, dCAbs, abs(C0-C1) ); end; // towrzymy wskaznik wielokryterialny dcMiV:= CreateSeries; // wartosci dC po zastosowaniu f. mi dcMiN:= CreateSeries; // dc big? mid? low? barMiN:= CreateSeries;// --- ' ' ----- barMiV:= CreateSeries; volMi := CreateSeries;// rozmyta wartosc volumenow bbMi := CreateSeries; var t: fuzzy; // zmienna tymczasowa do przechowywania wartosci rozmytej var n_,v_: float; // zmienne do przepisywania warosci z mi var dCMed,dCMedPeriod: integer; // mediana z wartosci dc var maxdC, mindC, minVol, maxVol,avgVol, ParDC,MiVol: float; var volPeriod: integer; // rozmywanie wartosci volumenow dCMedPeriod := #OptVar1; ParDC := 1.50; volPeriod := dCMedPeriod; maxdC := 0; mindC := 1000000000; maxVol:= 0; minVol:= 1000000000; dCMed := MedianSeries( dCAbs, dCMedPeriod ); volMi := CreateSeries; for Bar := 30 to BarCount - 1 do begin t := mi(GetSeriesValue(Bar,dBar),0,0.5,1); n_ := t.name; v_ := t.value; SetSeriesValue (Bar, barMiN, n_ ); SetSeriesValue (Bar, barMiV, v_ ); //-------------------- dc for N:=0 to dCMedPeriod do begin 59 if ( GetSeriesValue(Bar-N, dC) > maxdC ) then maxdC := GetSeriesValue(Bar-N, dC); if ( GetSeriesValue(Bar-N, dC) < mindC ) then mindC := GetSeriesValue(Bar-N, dC); if ( abs( @dVol[Bar-N] ) > maxVol ) then maxVol := abs( @dVol[Bar-N] ); if ( abs( @dVol[Bar-N] ) < minVol ) then minVol := abs( @dVol[Bar-N] ); end; t := mi( abs(GetSeriesValue(Bar,dC)) , 0, @dCMed[Bar], maxdC * ParDC ); n_ := t.name; v_ := t.value; SetSeriesValue (Bar, dCMiN, n_ ); SetSeriesValue (Bar, dCMiV, v_ ); SetSeriesValue(Bar,volMi, miUp(minVol,maxVol,@dVol[Bar]) ); end; var buy, sell, hold: integer; var alfaA, alfaB,alfaC: float; alfaA := #OptVar2/10; alfaB := #OptVar3/10; function Maximum(a: float; b:float; c:float; d:float): float; begin Result :=(power(( a*alfaA + b*(1-alfaA)),alfaB)*power(c,(1-alfaB))); end; buy := CreateSeries; sell := CreateSeries; hold := CreateSeries; var max_: float; for Bar := 1 to BarCount - 1 do begin max_ := Maximum ( @dcMiV[Bar], @barMiV[Bar], @volMi[Bar],@bbMi[Bar] ); if ( @dC[Bar] > 0 ) then begin if ( @dCMiN[Bar] = 3 ) then begin if ( @barL[Bar] > 0 ) then begin if ( @barMiN[Bar] = 3 ) then SetSeriesValue(Bar, buy, max_ ); if ( @barMiN[Bar] = 2 ) then SetSeriesValue(Bar, buy, max_ ); if ( @barMiN[Bar] = 1 ) then SetSeriesValue(Bar, hold, max_ ); end else begin if ( @barMiN[Bar] = 3 ) then SetSeriesValue(Bar, hold, max_ ); if ( @barMiN[Bar] = 2 ) then SetSeriesValue(Bar, hold, max_ ); if ( @barMiN[Bar] = 1 ) then SetSeriesValue(Bar, buy, max_ ); end; end; 60 if ( @dCMiN[Bar] = 2 ) then begin if ( @barL[Bar] > 0 ) then begin if ( @barMiN[Bar] = 3 ) then SetSeriesValue(Bar, buy, max_ ); if ( @barMiN[Bar] = 2 ) then SetSeriesValue(Bar, buy, max_ ); if ( @barMiN[Bar] = 1 ) then SetSeriesValue(Bar, hold, max_ ); end else begin if ( @barMiN[Bar] = 3 ) then SetSeriesValue(Bar, buy, max_ ); if ( @barMiN[Bar] = 2 ) then SetSeriesValue(Bar, hold, max_ ); if ( @barMiN[Bar] = 1 ) then SetSeriesValue(Bar, hold, max_ ); end; end; if ( @dCMiN[Bar] = 1 ) then begin if ( @barL[Bar] > 0 ) then begin if ( @barMiN[Bar] = 3 ) then SetSeriesValue(Bar, buy, max_ ); if ( @barMiN[Bar] = 2 ) then SetSeriesValue(Bar, hold, max_ ); if ( @barMiN[Bar] = 1 ) then SetSeriesValue(Bar, hold, max_ ); end else begin if ( @barMiN[Bar] = 3 ) then SetSeriesValue(Bar, sell, max_ ); if ( @barMiN[Bar] = 2 ) then SetSeriesValue(Bar, hold, max_ ); if ( @barMiN[Bar] = 1 ) then SetSeriesValue(Bar, hold, max_ ); end; end; end else begin if ( @dCMiN[Bar] = 3 ) then begin if ( @barL[Bar] > 0 ) then begin if ( @barMiN[Bar] = 3 ) then SetSeriesValue(Bar, hold, max_ ); if ( @barMiN[Bar] = 2 ) then SetSeriesValue(Bar, hold, max_ ); if ( @barMiN[Bar] = 1 ) then SetSeriesValue(Bar, sell, max_ ); end else begin if ( @barMiN[Bar] = 3 ) then SetSeriesValue(Bar, sell, max_ ); if ( @barMiN[Bar] = 2 ) then SetSeriesValue(Bar, sell, max_ ); if ( @barMiN[Bar] = 1 ) then SetSeriesValue(Bar, hold, max_ ); end; end; if ( @dCMiN[Bar] = 2 ) then begin if ( @barL[Bar] > 0 ) then begin if ( @barMiN[Bar] = 3 ) then SetSeriesValue(Bar, hold, max_ ); if ( @barMiN[Bar] = 2 ) then SetSeriesValue(Bar, hold, max_ ); if ( @barMiN[Bar] = 1 ) then SetSeriesValue(Bar, sell, max_ ); end else begin if ( @barMiN[Bar] = 3 ) then SetSeriesValue(Bar, sell, max_ ); if ( @barMiN[Bar] = 2 ) then SetSeriesValue(Bar, sell, max_ ); if ( @barMiN[Bar] = 1 ) then SetSeriesValue(Bar, hold, max_ ); end; end; if ( @dCMiN[Bar] = 1 ) then begin if ( @barL[Bar] > 0 ) then begin if ( @barMiN[Bar] = 3 ) then SetSeriesValue(Bar, hold, max_ ); if ( @barMiN[Bar] = 2 ) then SetSeriesValue(Bar, sell, max_ ); if ( @barMiN[Bar] = 1 ) then SetSeriesValue(Bar, sell, max_ ); end else begin if ( @barMiN[Bar] = 3 ) then SetSeriesValue(Bar, sell, max_ ); if ( @barMiN[Bar] = 2 ) then SetSeriesValue(Bar, sell, max_ ); if ( @barMiN[Bar] = 1 ) then SetSeriesValue(Bar, hold, max_ ); end; 61 end; end; end; //rozmywanie wartosci buy, sell, hold var BSHPeriod, b2,s2,h2: integer; var sumB,sumH,sumS: float; BSHPeriod := #OptVar4; b2 := CreateSeries; s2 := CreateSeries; h2 := CreateSeries; for Bar:=30 to BarCount - 1 do begin sumB := 0.0; sumS := 0.0; sumH := 0.0; for N:=0 to BSHPeriod do begin sumB := sumB + @buy[Bar-N]; sumS := sumS + @sell[Bar-N]; sumH := sumH + @hold[Bar-N]; end; ///SetSeriesValue (Bar, b2, sumB /( sumB+sumS+sumH ) ); //SetSeriesValue (Bar, s2, sumS /( sumB+sumS+sumH ) ); //SetSeriesValue (Bar, h2, sumH /( sumB+sumS+sumH ) ); SetSeriesValue (Bar, b2, sumB /BSHPeriod ); SetSeriesValue (Bar, s2, sumS /BSHPeriod ); SetSeriesValue (Bar, h2, sumH /BSHPeriod ); end; var testPane: integer; testPane := CreatePane( 30, true, true ); // wyswietalnie na panelu PlotSeries( b2, testPane, 019, #Thick ); PlotSeries( s2, testPane, 910, #Thick ); PlotSeries( h2, testPane, 555, #Thick ); var BBSmoth: integer; BBSmoth := SMASeries(BBDiff,31); PlotSeries( BBSmoth, BBPane, 912, #Thick ); var xStop: float; for Bar := SlowPer to BarCount - 1 do begin //xStop := @hSlow[Bar]; case MarketPosition of 0: begin if ( @BBDiff[ Bar ] >= @BBSmoth[Bar]) then begin // poziom roznicy wstegi bb 62 if ((@b2[Bar] > @s2[Bar]) and (@b2[Bar]>@h2[Bar]) and (@b2[Bar] > @b2[Bar-1])) then begin xStop := GetSeriesValue(Bar,#Close)-30; BuyAtClose( Bar , ''); end; if ((@s2[Bar] > @b2[Bar]) and (@s2[Bar]>@h2[Bar])and (@s2[Bar] > @s2[Bar-1])) then begin xStop := GetSeriesValue(Bar,#Close)+30; ShortAtClose( Bar , ''); end; end; end; 1: begin if (@s2[Bar]>@b2[Bar]) then SellAtClose( Bar , LastPosition, '' ); if (@h2[Bar]>@b2[Bar]) then SellAtClose( Bar , LastPosition, '' ); SellAtStop( Bar+1, xStop, LastPosition, 'Stop Loss' ); end; -1: begin if (@b2[Bar]>@s2[Bar]) then SellAtClose( Bar , LastPosition, '' ); if (@h2[Bar]>@s2[Bar]) then SellAtClose( Bar , LastPosition, '' ); CoverAtStop( Bar+1, xStop, LastPosition, 'Stop Loss' ); end; end; end; 63 Kod zródBowy systemu z RozdziaBu IV {#OptVar1 10;3;20;3} {#OptVar2 8;1;9;1} {#OptVar3 7;1;9;1} {#OptVar4 7;3;10;1} {#OptVar5 8;0;10;1} var Bar: integer; var BBUp,BBDown,BBDiff,BBUp2,BBDown2,BBDiff2, BBPeriod,BBPeriod2: integer; //wstega bollingera var BBPane: integer; // panele z wykresami var BBLimit: float; // wartosc graniczna roznicy wstegi bb BBperiod := 6; // okres wstegi bollingera BBPeriod2:= 11; BBLimit := 10; // rysowanie wstegi bollingera PlotSeries( BBandLowerSeries( #Close, BBPeriod, 2 ), 0, 205, #Thick ); PlotSeries( BBandUpperSeries( #Close, BBPeriod, 2 ), 0, 205, #Thick ); PlotSeries( BBandLowerSeries( #Close, BBPeriod2, 2 ), 0, 900, #Thick ); PlotSeries( BBandUpperSeries( #Close, BBPeriod2, 2 ), 0, 900, #Thick ); //obliczanie wskaznika - roznicy gornej i dolnej wstegi bollingera BBUp := BBandUpperSeries( #Close, BBPeriod, 2 ); BBDown := BBandLowerSeries( #Close, BBPeriod, 2 ); BBUp2 := BBandUpperSeries( #Close, BBPeriod2, 2 ); BBDown2 := BBandLowerSeries( #Close, BBPeriod2, 2 ); BBDiff := SubtractSeries(BBUp,BBDown); BBDiff2 := SubtractSeries(BBUp2,BBDown2); BBPane := CreatePane( 30, true, true ); // wyswietalnie na panelu PlotSeries( BBDiff, BBPane, 012, #Thick ); DrawHorzLine( BBLimit, BBPane, #Green, #Thin ); DrawHorzLine( 51, BBPane, #Green, #Dotted ); DrawHorzLine( 32, BBPane, #Red, #Dotted ); // srednie ruchome szybka i wolna var hSlow, hFast, SlowPer, FastPer: integer; SlowPer := 3; // okres sredniej ruchomej FastPer := 8; hSlow := SMASeries( #Close, SlowPer ); hFast := SMASeries( #Close, FastPer ); PlotSeries( hSlow, 0, 000, #Thick ); PlotSeries( hFast, 0, 502, #Thick ); var hVSlow: integer; //Kuzniecow hVSlow := SMASeries(#Close, 30 ); PlotSeries( hVSlow,0,009,#Dotted); 64 function miBar( value: float ): float; var wynik: float; begin if ( value <= 0 ) then wynik := 0; if ( value >= 1 ) then wynik := 1; if (value > 0) and (value < 1) then wynik := value; Result := wynik; end; function miBB2( a: float; b: float; value: float ): float; var wynik: float; begin if ( value <= a ) then wynik := 0; if ( value >= b ) then wynik := 1; if (value > a) and (value < b) then wynik := (value - a)/(b-a); Result := wynik; end; { mi kiedy dc lub dv jest dobre } function miUp( a: float; b: float; value: float ): float; var wynik: float; begin if ( value < 0 ) then begin if ( value <= a ) then begin wynik := 0; end else begin wynik := abs((abs(a)-abs(value)))/(2*abs(a)); // nie trzeba modulu bo - * - = + :-) end; end; if ( value > 0 ) then begin if ( value >= b ) then begin wynik := 1; end else begin wynik := (b+value)/(2*b); end; end; if value = 0 then wynik := 0.5; Result := wynik; end; function miBB( a: float; b: float; c:float; value: float ): float; var wynik: float; begin if ( value < c ) then begin 65 if ( value <= a ) then begin wynik := 0; end else begin wynik := abs((abs(a)-abs(value)))/(2*abs(a)); // nie trzeba modulu bo - * - = + :-) end; end; if ( value > c ) then begin if ( value >= b ) then begin wynik := 1; end else begin wynik := (b+value)/(2*b); end; end; if value = c then wynik := 0.5; Result := wynik; end; { funkcja przeciwna do miUp function miDown( a: float; b: float; value: float ): float; var wynik: float; begin wynik := 1 - miUp(a,b,value); Result := wynik; end; } { mi kiedy dc lub dv jest dobre } function miDown( a: float; b: float; value: float ): float; var wynik: float; begin if ( value < 0 ) then begin if ( value <= a ) then begin wynik := 1; end else begin wynik := abs((abs(value)+abs(a)))/(2*abs(a)); // nie trzeba modulu bo - * - = + :-) end; end; if ( value > 0 ) then begin if ( value >= b ) then begin wynik := 0; end else begin wynik := abs((abs(b)-abs(value)))/(2*abs(b)); end; 66 end; if value = 0 then wynik := 0.5; Result := wynik; end; //---------------------------- { przygotowanie dC e i dV } var C0,C1,l0,l1,h0,h1,e,a,b,V1,V0: float; var N,K,dBar,barL,dC,dCAbs,dcMiV,barMiV,dcMiN,barMiN,volMi,dVol: integer; dBar := CreateSeries; // znormalizowane roznice barow dC := CreateSeries; // roznice cen zamkniecia dVol := CreateSeries; // volumen for N:=1 to BarCount -1 do begin l0 := GetSeriesValue(N,#Low); l1 := GetSeriesValue(N-1,#Low); h0 := GetSeriesValue(N,#High);; h1 := GetSeriesValue(N-1,#High); C1 := GetSeriesValue(N-1,#Close); C0 := GetSeriesValue(N,#Close); V1 := GetSeriesValue(N-1,#Volume); V0 := GetSeriesValue(N,#Volume); e := 0.0; a := ( l0 - h1 ); b := ( h0 - l1 ); if (a+b) > 0 then begin e := 1 + a/b; end else begin if a=0 then begin e:=1; end else e := 1 + b/a; end; SetSeriesValue( N, dBar, e ); SetSeriesValue( N, dC, C0-C1 ); SetSeriesValue( N, dVol, V0-V1 ); end; // z - glebokosc analizy var Z: integer; Z := #OptVar1; var buy, sell,b2,s2,BSHPeriod: integer; var alfaA, alfaB,alfaC,alfaD,alfaE,alfaF,sumB,sumS: float; alfaA := #OptVar2/10; alfaB := 1 - alfaA; alfaC := #OptVar3/10; alfaD := 1 - alfaC; alfaE := #OptVar4/10; alfaF := 1 - alfaE; 67 buy := CreateSeries; sell := CreateSeries; var miDB,miuBB,miDC_B,miDC_S,miDV,minDV,minDC,maxDV,maxDC,buySig,sellSig: float; for N:=20 to BarCount -1 do begin minDV := 10000000; minDC := 10000000; maxDC := -10000000; maxDV := -10000000; for K:=1 to Z do begin minDC := Min( minDC, @dC[N-K] ); minDV := Min( minDV, @dVol[N-K] ); maxDC := Max( maxDC, @dC[N-k] ); maxDV := Max( maxDV, @dVol[N-K] ); end; miDB := miBar( @dBar[N] ); miDC_B := miUp( minDC,maxDC,@dC[N] ); miDC_S := miDown( minDC,maxDC,@dC[N] ); miDV := miUp( minDV,maxDV,@dVol[N] ); buySig := power ((alfaA*miDC_B + alfaB*miDB ),alfaC )*power(miDV,alfaD); sellSig := power((alfaA*miDC_S + alfaB*miDB ),alfaC )*power(miDV,alfaD); //buySig := alfaA*miDC_B + alfaB*miDB; //sellSig:= alfaA*miDC_S + alfaB*miDB; SetSeriesValue(N,buy,buySig); SetSeriesValue(N,sell,sellSig); end; b2 := CreateSeries; s2 := CreateSeries; BSHPeriod := #OptVar4; for Bar:=20 to BarCount - 1 do begin sumB := 0.0; sumS := 0.0; for N:=0 to BSHPeriod do begin sumB := sumB + @buy[Bar-N]; sumS := sumS + @sell[Bar-N]; end; SetSeriesValue (Bar, b2, sumB /BSHPeriod ); SetSeriesValue (Bar, s2, sumS /BSHPeriod ); end; var testPane: integer; testPane := CreatePane( 30, true, true ); // wyswietalnie na panelu PlotSeries( b2, testPane, 019, #Thick ); 68 PlotSeries( s2, testPane, 910, #Thick ); DrawHorzLine( 0.9, testPane, #Green, #Dotted ); DrawHorzLine( 0.5, testPane, #Green, #Dotted ); var xStop,limit: float; var p, PerATR,atrValue : integer; var VarATR, ATRFactor, StopPr, BBDiffStop: float; var BBSmoth: integer; BBSmoth := SMASeries(BBDiff,40); PlotSeries( BBSmoth, BBPane, 912, #Thick ); var BBSignalBuy,BBSignalSell: integer; BBSignalBuy := SMASeries(b2,40); BBSignalSell := SMASeries(s2,40); PlotSeries( BBSignalBuy, testPane, 449, #Thick ); PlotSeries( BBSignalSell, testPane, 944, #Thick ); limit := #OptVar5/10; for Bar := SlowPer to BarCount - 1 do begin //xStop := @hSlow[Bar]; case MarketPosition of 0: begin if ( @BBDiff[ Bar ]>(@BBSmoth[Bar]) ) then begin // poziom roznicy wstegi bb if ((@b2[Bar] > @s2[Bar]) and (@b2[Bar]>@BBSignalBuy[Bar]) and (@s2[Bar]<@BBSignalSell[Bar])) then begin xStop := GetSeriesValue(Bar,#Close)-30; BuyAtClose( Bar , ''); end; if ((@s2[Bar] > @b2[Bar]) and (@s2[Bar]>@BBSignalSell[Bar]) and (@b2[Bar]<@BBSignalBuy[Bar])) then begin xStop := GetSeriesValue(Bar,#Close)+30; ShortAtClose( Bar , ''); end; //end; //end; end; 1: begin if (@s2[Bar] > @b2[Bar]) then SellAtClose(Bar,LastPosition,''); SellAtStop( Bar+1, xStop, LastPosition, 'Stop Loss' ); end; -1: begin if (@b2[Bar] > @s2[Bar]) then SellAtClose(Bar,LastPosition,''); CoverAtStop( Bar+1, xStop, LastPosition, 'Stop Loss' ); end; end; end; 69

Wyszukiwarka

Podobne podstrony:
System informatyczny wspomagajÄ…cy podejmowanie decyzji na rynku walutowym
IWZ 7 Informatyczne wspomaganie decyzji
Rola rozmytych systemów wspomagania decyzji w diagnostyce konstrukcji na przykładzie systemu do a
Adamczewski Zintegrowane systemy informatyczne w praktyce Aneks 2 Wybrane pakiety programowe wspo
Adamczewski Zintegrowane systemy informatyczne w praktyce Aneks 2 Wybrane pakiety programowe wspo
projektowanie systemow informatycznych
systemy informacyjne
System informatyczny obsługi firmy doradztwa podatkowego
STRUKTURA SYSTEMOW INFORMACYJNYCH STREFY SCHENGEN
Opracowanie systemu informatycznego z automatycznym zawieraniem transakcji na rynku walutowym
Ustaw o systemie informacji w ochronie zdrowia
Adamczewski Zintegrowane systemy informatyczne w praktyce Początek, Spis treści
Adamczewski Zintegrowane systemy informatyczne w praktyce  System CRM tendencje rozwojowe syste

więcej podobnych podstron