środa, 24 czerwca 2015

8 filmików o high frequency trading

Jestem po lekturach o HFT i jestem zdania, że bardzo trudno jest rozpocząć swoją przygodę z budowaniem infrastruktury do 'walki' na giełdzie. Co jednak nie zmienia mojego głodu na poszerzenie tej wiedzy i zdobycia doświadczenia w tym zakresie :)

Poniżej przedstawiam Ci najciekawsze filmiki o HFT.
























I filmik, który mówi o HFT od strony kuchni:



piątek, 29 maja 2015

Rozdzielanie argumentów cmd w PS

Jak pracowałeś z aplikacjami konsolowymi z gigantyczną liczba argumentów to za pewne dostawałeś oczopląsu - ja tak miałem. Mam mały skrypcik do rozwiązania tego problemu:
function Split-Args
{
    param(
    [ValidatenotNullOrEmpty()]
    [string]$argStr
    )
    [hashtable]$arg =@{}

    [regex]::Matches($argStr, '-.+') | %{
        [string]$value = $_.Groups[0].Value
        [string]$first, $second = $value.Split([char[]]@(' ','=',':'),2)
        $first = $first.Replace('-','')
        $arg[$first] = $second
    }

    return $arg.GetEnumerator() | sort  Name
}
Wywołanie jest następujące:
Split-Args "-unzip=true -zippedFile zipfile1.ZIP -unzipFolder .\unzips.temp\ --date sysdate -year:2014 ​"
Przyjemniej szuka się parametrów posortowanych po kluczu w kilku linijkach niż w jednej lini:



środa, 27 maja 2015

A\B U B\A

Dlaczego taki dziwny tytuł - dla ćwiczeń chciałem sobie napisać zapytanie wyświetlające różnicę między tabelą A i B.

Dajmy na to, że mamy tabele A z liczbami parzystymi:
 SELECT  LEVEL * 2  AS n  
            FROM DUAL
            CONNECT BY LEVEL <= 100

oraz tabele B z liczbami podzielnymi przez 3:
SELECT  LEVEL * 3  AS n  
            FROM DUAL
            CONNECT BY LEVEL <= 100

Teraz spróbujemy wyciągnąć różnice między tablą A i B. Całe zapytanie wygląda następująco:
WITH 
A AS
    (
         SELECT  LEVEL * 2  AS n  
            FROM DUAL
            CONNECT BY LEVEL <= 100
       
    ),  
B AS
     (
         SELECT  LEVEL * 3  AS n  
            FROM DUAL
            CONNECT BY LEVEL <= 100
       )
    

(SELECT 'a' tab ,n FROM A
MINUS
SELECT 'a' tab ,n FROM B)
UNION ALL
(SELECT 'b' tab ,n FROM B
MINUS
SELECT 'b' tab ,n FROM A)
ORDER by n 
;

Wynik takiego zapytania jest przedstawiony poniżej:

środa, 20 maja 2015

Autosys JILs i notepad++

Troszkę mam do czynienia z autosysem i bardzo nie lubię pracować z JILami. JILe (Job Information Language) to taki język, który opisuje proces lub paczkę procesów (Box). Przykład jak wygląda jil to można zobaczyć tutaj pod 8-m punkcie
lub tutaj.
Dodałem repo. z podświetleniem dla JILów. Repo jest tutaj. Dla takiego jila mamy takie podświetlenie:




Instrukcja jak zainstalować language file jest tutaj.
Uruchamiasz Notepad++ i w zakładce View idziesz na User Defined Language

Podświetlenie powinno być już zainstalowane. Możesz sprawdzić czy jest wpis z rozszerzeniem jil w pliku %APPDATA%\Notepad++\userDefineLang.xml​. W zakładkach języków powinieneś widzieć zmianę ( jak nie to uruchom jeszcze raz notepadd++).

Lista dostępnych podświetleń dla notepad++ możesz znaleźć pod tym linkiem.
Projekt pochodził z tego repozytorium.
Dzisiaj mam bardzo dużo 'tutaj' :)

sobota, 9 maja 2015

For loop dla msbuild

Jak będziesz chciał uruchomić kilka razy dany proces to możesz wykorzystać polecenia for. Ja tak muszę z budowaniem projektów w .NETcie. Musze 2 razy uruchomić msbuild'a. Niektóre projekty nie maja referencji do innych projektów w solucji, ale do zbudowanych bibliotek w specjalnym folderze. Problem też może być jak jedno budowanie projektu potrzebuje dużo czasu (dajmy na to 25 minut) i w każdym momencie może wystąpić błąd.

Polecenie do dwukrotnego budowania jest poniżej:
for /L %n in (1,1,2) do ( msbuild myProject.sln /m )​

Takie proste, a tak upraszcza życie :)

poniedziałek, 4 maja 2015

Kontrolowanie uwagi

Dzisiaj obejrzałem filmik o kontrolowaniu uwagi przez złodzieja.Wcześniej pisałem o sztuczce z kolorami, która również nawiązuje do kontrolowania uwagi.
Troszkę mnie to przeraża jak łatwo jest oszukać nasz umysł.


Zapraszam do obejrzenia.



wtorek, 21 kwietnia 2015

Brakujące dni w Oraclu

Któryś raz piszę to samo zapytanie, więc postanowiłem zapisać to rozwiązanie na blogu. Może Ci się przyda - mi na pewno :)

Przypuśćmy, że masz tabelę (o nazwie tableWithDate), która ma kolumnę z datą (dateToCheck). Ładujesz dane i zapisujesz dzień na które dane zostały załadowane. Na końcu ładowania danych powinieneś mieć wypełnioną tabelę z dla każdego dnia od 1 stycznia 2014. Chciałbyś sprawdzić dla jakich dni nie zostały załadowane dane.

Pomocne nam będą funkcje do operowania na dacie. Same zapytanie wygląda następująco:

WITH dates as (
    SELECT TRUNC(to_date('1/1/2014','DD/MM/YYYY')) -1 +  LEVEL AS d
    FROM DUAL
    CONNECT BY LEVEL <= 365
    )

SELECT  
d As "Date", 
to_char(d, 'DDD') As "DayOfYear",
to_char(d, 'Day') as "DayOfWeek", 
to_char(d, 'WW') As "WeekOfYear",
to_char(d, 'Month') As "MonthName", 
to_char(d, 'RM') As "Roman" ,
to_char(d, 'Q') As "Quarter"

FROM dates d
where  NOT  EXISTS (
    SELECT  tab.dateToCheck
    from tableWithDate tab
    where to_char(d.d, 'YYYYMMDD')  = to_char(tab.dateToCheck, 'YYYYMMDD')
    group by tab.dateToCheck
)
ORDER BY d
;
Do wyświetlenia daty pomocna nam będzie funkcja to_char z formatowaniem. Jeżeli nie będziemy mieli załadowanych danych to wynik zapytania będzie wyglądał następująco:
Jeżeli załadujemy dane i w śród tych danych nie będzie danych dla dni: 1-3 i 6 listopada, to tak będzie wyglądał wynik zapytania: