piątek, 24 lipca 2009

Unifikacja termów w C++

Jeden z moich znajomych napisał ostatnio zestaw klas w języku C++, która dzięki zastosowaniu operatora () do konstrukcji termów i operatora == do unifikacji pozwala programować w stylu Prologu w języku C++. Do obejrzenia tu: http://symbolism.110mb.com

Ci, którzy programują w Prologu, wiedzą, co to jest term. Term, to wyrażenie składające się ze stałych, zmiennych i wyrażeń typu f(x1, x2, ... ) gdzie f jest nazwą funktora (symbolem) a x1, x2, ... też są termami. Jeśli oznaczymy zmienne nazwami zaczynającymi się od dużych liter (X, Y, Z itp) a stałe innymi nazwami , liczbami itp, term może wyglądać tak:

f
ala( f, f(X, Y, 10), X)
ala( 0 )
i tak dalej. W skrócie mówiąc - unifikacja termów, to takie dopasowanie wartości zmiennych (wartości zmiennych też mają być termami) aby dwa unifikowane termy uzyskały tę samą wartość. Unifikacja może się nie udać, zmienne nie są wtedy zmieniane (mówi się też - ukonkretnione) Jeśli oznaczymy symbolem == operację unifikacji, możemy napisać:
f( X, 1 ) == f( 2, Y )                   
-> zmienna X zyskuje wartość 2, Y wartość 1

f( X, g( Y, 0 ), Y ) == f( 1, Z, g( 2 )) 
-> zmienna X zyskuje wartość 1, Y wartość g(2) a Z wartość g(g(2), 0)

f( X, g( 1 )) == f( 0, 2 )   -> unifikacja zawodzi, zmienne pozostają wolne.

sobota, 6 czerwca 2009

Spread, lewar i pipsy na rynku Forex

Wszyscy co prawda wiedzą, co oznaczają pipsy, lewar i tym podobne pojęcia, ale może nie wszyscy potrafią wyciągać odpowiednie wnioski z tej wiedzy. Tymczasem na wyniki strategii stosowanej na rynku forex wpływa równocześnie wiele czynników: rozmiar pozycji (pipsy), stosowany lewar, skuteczność (prawdopodobieństwo) i oczywiście spread (koszty stałe transakcji).

Ponieważ jest to wpływ równoczesny, sytuacja jest złożona, mimo, że w istocie chodzi tu o matematykę na szkolnym poziomie.

Musisz koniecznie wiedzieć, co dokładnie dzieje się gdy wykonujesz traksakcję o danych parametrach. Wyobraź sobie, że dysponujesz kwotą 100 $, wchodzisz na rynek z lewarem 10, przy spreadzie 4 pipsy (umawiamy się dla celów tych rozważań, że 10 pipsów = 1 promil) ustawiasz poziom 'take profit' na wysokości 30 pipsów i po kilku godzinach zgarniasz kasę. Pytanie - ile ? Jeśli to rozumiesz i umiesz wyliczyć, to dobrze, ale spójrz niżej, zobacz, czy czegoś nie pomijasz.

Przy lewarze 10 handlujesz w rzeczywistości 1000 $, przy spreadzie 0.0004 i TP=0.003 zarabiasz 0.0026 * 1000 = 2.60 $, co daje czynnik 0.026 profitu. W razie straty przy SL=-0.003 tracisz 0.0034 * 1000 = 3.40 $ ponieważ spread działa zawsze na niekorzyść gracza. Dlatego zysk i strata nie są symetryczne, mimo, że ustawiliśmy poziomy TP i SL w równych odległościach.

Wyobraźmy sobie hipotetyczną metodologię, która dla danej pary umożliwia prognozowanie ruchy kursu o 50 pipsów. Jej skuteczność niech wynosi 70 %. Oto jak wygląda wartość porfela gracza, który wykonuje 20 transakcji stosując opartą o taką prognozę strategię przy spreadzie 4 pipsy, trafiając "take profit" 14 razy: W zależności od zastosowanego lewara gracz zarabia aż do 170 %, ale widać jasno, że LEWARA NIE MOŻNA BEZKARNIE ZWIĘKSZAĆ w nieskończoność: w pewnym momencie następuje nasycenie profitu ! Dla lewara 120 obserwujemy już stratę. Lewar wpływa bardziej na wahania, a mniej na wynik końcowy.

Odpowiedzialność za taki fatalny stan rzeczy ponosi spread (czyli broker, który zgarnia całą kasę zachłannego gracza, podobnie jak krupier w kasynie). Oto jak wygląda zależność zarobku w naszej hipotetycznej sytuacji od zastosowanego lewara przy różnych spreadach: Słabsze strategie są jeszcze bardziej podatne na te efekty i wręcz nie działają na dużych spreadach, mimo, że nie stosujemy lewara.

Co jeszcze warto wiedzieć ?

Występujące w przyrodzie spready nieprzypadkowo mają taką wielkość, że działające strategie musiałyby mieć dzielność rzędu 65% lub większą - dla wielkości pozycji przekraczającej około dziesięciokrotnie wartość spreadu. To jest maksymalny poziom trafności, jaki można osiągnąć stosując znane metody (włączając w to sieci neuronowe, algorytmy genetyczne, filtry bayesowskie i inne metody - określane jako standardowe, choć nie są one proste).

Istnieje jeszcze jedna pułapka na chciwych graczy: "margin call". O tym też trzeba pamiętać. Można po prostu stracić wszystko za jednym zamachem, jeśli przedobrzymy z lewarem.

Tak więc rację ma Oanda, twierdząc, że dla tradera to właśnie niskie spready są istotne, a nie duże lewary. W warunkach bojowych lewar większy od 10 to lichwiarska pułapka ! Na stronach Oandy dokładnie opisane są te sprawy, ten broker stara się uczciwie informować o podstawowych regułach gry.

czwartek, 28 maja 2009

Paradoks skuteczności lekarstw

W jednym ze starych numerów Delty opisany był następujący paradoks:

Zbadano skuteczność dwóch lekarstw A i B. Okazało się, że wśród kobiet wyższą skuteczność miało A, natomiast w całej populacji wygrywało B. Nie byłoby to dziwne, gdyby nie fakt, że wśród mężczyzn również lepszym było lekarstwo A. Jak to możliwe ? Otóż badanie przeprowadzono w następujący sposób - zgłaszającemu się pacjentowi aplikowano losowo A lub B, po czym notowano wynik terapii.

Wyniki badania były następujące:

Badano 32 mężczyzn, 25 mężczyznom podano lek A, z czego 10 wyleczono. 7 mężczyzn leczono lekiem B, z czego 2 wyleczono. Skuteczność leków wynosiła więc wśród mężczyzn 40% dla A i 29% dla B.

Zbadano 25 kobiet, na 11 leczonych lekiem A wyleczono 9, pozostałe 14 leczono podając lek B, wyleczono 11. Skuteczność leku dla kobiet wyniosła więc 82% dla A i 79% dla B. Widać, że kobiety łatwiej się leczyło, ale wśród pacjentów obu płci lepszy był lek A.

Tymczasem po zsumowaniu liczb widzimy, że skuteczność A w całej grupie wynosi 53%, a B 62% ! Co ma więc zrobić lekarz, do którego przychodzi pacjent ? Zbadać jego płeć i przepisać A niezależnie od wyniku tego badania, czy nie badać i przepisać B ?

Istnieje wiele układów liczb tworzących taką sytuację. Podobne zadanie (tylko z innymi "didaskaliami") pojawiło się w konkursie Eulera, o którym już wcześniej tu pisałem.

Gdzie czytać o najnowszych osiągnięciach nauki

Gdzieś w początkach swojej przygody z internetem zetknąłem się z programem surfraw, a w przykładowych skryptach z adresem xxx.lanl.gov. Myślałem, że xxx wskazuje na pornografię, ale okazało się, że nie - krzywdziłem autorów. Jest to stary (ale do dziś działający) adres arXiv - wielkiego archiwum preprintów naukowych będącego kopalnią wiedzy o współczesnych naukach ścisłych. Archiwum to jest miejscem gdzie naukowcy z takich dziedzin jak matematyka, fizyka, informatyka, astronomia publikują swoje prace zanim zostaną one wydrukowane na papierze. Niedawno natknąłem się na "The physics arXive blog", którego autor codziennie omawia w sposób dostępny dla zainteresowanych laików jeden wybrany temat z archiwum. Oto zagadnienia, które podejmował ostatnio:

"Pierwszy dowód splątania w fotosyntezie"
"Jak używać pulsarów w nawigacji międzygwiezndej"
"Termodynamiczny limit rozmiaru mózgu"
"Odsłonienie sekretów ludzkiego chodu"
"Gdzie załamuje się zasada równoważności"
...

Wszystkie tematy ciekawie opisane, z kolorowymi ilustracjami i z aktualnymi odnośnikami do oryginalnych prac z arXiv.

wtorek, 17 marca 2009

Nowy freshmeat

"Świeże mięsko" jeszcze bardziej się odświeżyło - mamy nowy freshmeat 3.0. Nestety niedokończony ... W starej postaci używałem takich funkcji jak wyszukiwanie wg kategorii - teraz nie mam hierarchii kategorii, mam za to modną w Web 2.0 chmurę tagów ... czy to jest lepsze ? Na pewno nie, czekam na resztę.

Miałem też możliwość podglądania statystyk projektu - liczbę odwiedzin, ściągnięć, współczynnik żywotności, to wszystko co pozwala szybko ocenić i wstępnie zakwalifikować nieznany program. Mogłem też sortować wyniki wyszukiwania wg tych czynników - często to robiłem. Zamiast tego jest jakiś mikroskopijny wykres, nie wiadomo czego - stworzony przy użyciu google charts API, skądinąd przyjemnego. Ale statystyki mają wkrótce być - ponoć ulepszone.

Co gorsza, po zalogowaniu się nie potrafię znaleźć statystyk moich projektów - czy one gdzieś są ? W FAQ znalazłem sugestię, że "trzeba było testować wersję beta" - wszyscy testowali i nikt nie zgłaszał takich to a takich potrzeb. Hmmm ... Owszem, dostałem jakieś zaproszenie, ale nie chciało mi się. Mam jednak nadzieję, że używane przeze mnie funkcje będą tu nadal.

Poza tym nie ma nigdzie możliwości sciągnięcia całości bazy danych w formie XML - a była ! Podobno (tak piszą) jest możliwość pobrania rekordu projektu w JSon'ie - ale jak to zrobić ? Tego nie napisali.

Z ostatniej chwili - pojawiło się wiele komentarzy - ludzie pytają o wiele spraw, w tym np o XML - poczekajmy, co się z tym dalej będzie działo ... Jak ktoś tam napisał: "koniec końców - nie jest tak źle" ...

piątek, 6 marca 2009

Obrazek "inline" w HTML

Warto czasem pamiętać o różnych dziwnych sztuczkach. Na przykład o wstawianiu grafiki bezpośrednio w tekście HTML. Poniższy obrazek jest tu bezpośrednio wklejony w żródle HTML:

Aby to zrobić, trzeba użyć schematu "data" zdefiniowanego w RFC 2397. Ponieważ schemat ten obsługuje kodowanie base64, można wstawić dowolną grafikę.

Można także wstawić zagnieżdżoną stronę HTML, tym razem już bez kodowania base64, ale Internet Explorer odmówi renderowania elementu "data" z "nawigowalną treścią" - chodzi o względy bezpieczeństwa - filtry zabezpieczające różnorakie aplikacje internetowe przed atakiem typu cross-side scripting prawdopodobnie nie rozpoznałyby javascriptu zagnieżdżonego w elemencie zakodowanym w "data". A jak spreparować taki obrazek ? Po prostu użyć polecenia "base64" dostępnego w uniksie, a także w bibliotekach różnych języków ...

Używając tego mechanizmu Jeff Epler zaimplementował w JavaScript funkcje służące do generowania obrazków w locie po stronie klienta.

wtorek, 17 lutego 2009

Durczok, Lis, Kaczyński, Niesiołowski i nasze emocje

Pan Kamil Durczok stał się dla nas źródłem wesołości, pozwalając się sfilmować przy pracy. Nie przebił moim zdaniem Tomasza Lisa, który uraczył nas jakiś czas temu jeszcze dłuższym potokiem błota wylewanego na współpracowników. Nie dziwi mnie to ani nie gorszy, wolę co prawda ludzi kulturalnych, ale pogodziłem się z tym, że takich jest mało na świeczniku. Ale przecież pan Kamil uważa się za kogoś wyrastającego ponad poziom przeciętny, nie chciał stawać w szranki o nagrodę medialną razem z Kasią Cichopek - kimże ona jest przy nim ! Bez urazy ...

Wczoraj mogliśmy obejrzeć Tomasza Lisa w rozmowie na temat pana Czumy, a potem na innym kanale telewizyjnym pana Pospieszalskiego w dyskusji o eutanazji. I tu i tam widziałem gotujące się emocje (pogardę i wściekłość u Niesiołowskiego, gniew u Kaczyńskiego, pogardę i wściekłość u pana profesora bioetyka, którego nazwiska nie zapamiętałem - przepraszam). W ogóle wszędzie pełno obrażania, dokuczliwych złośliwości i jadu. Lis stale wyciąga jakieś stare nagrania z Kaczyńskim, aby ludziom pokazać, jak agresywne są Kaczory. Nie udała mu się jednak prowokacja, kiedy gościł Kaczyńskiego u siebie - chociaż zaprezentował mu filmik z Marcinkiewiczem, nie usłyszał nic poza zapewnieniami o dobrej woli. Prezes Kaczyński zmienił front i hamuje agresję, choć pewnie mu ciężko. Za to tydzień później, Lis razem z nowym gościem wspólnie szydzili z nieobecnego prezesa bez umiaru. Uśmiechali się pogardliwie pod nosem wymieniając porozumiewawcze spojrzenia wspominając jego wpadki i litując nad jego poziomem.

U Pospieszalskiego goście byli spokojni i opanowani, oprócz pana Profesora, którego nazwiska nie pamiętam - wojującego ateisty, który bardzo się sam zdenerwował z tego powodu, że połowa ludzkości wierzy w duszę. Odniosłem wrażenie, że złościł się po prostu dlatego, że nie okazano mu należnego respektu - pani redaktor, z którą rozmawiał, ośmieliła się go krytykować. Upomniał ją, że winna mu szacunek, jako, że jest PROFESOREM. Pani redaktor też była mocno zdenerwowana.

Wszystko to nastraja mnie dość smutno - światem nie rządzi wcale rozum, wbrew temu, co się nam wmawia. Rządzą nimi EMOCJE wywoływane przez media - czytaj - MANIPULACJA. Na szczęście chyba nie zawsze skuteczna - drugie na szczęście - zdecentralizowana ... Kto wywoła odpowiednie emocje w odpowiednim kontekscie, przeciąga wyborcę (czytelnika? konsumenta?) na swoją stronę. Ludzie tacy jak Lis próbują to robić zawodowo, politycy - też, ale mam nadzieję, że przynajmniej ci, którym wierzę, robią to dla słusznych celów.