Wednesday 6 December 2017

Forex python api


Aby otrzymywać dane historyczne z interfejsu API, użytkownik musi posiadać subskrypcje danych rynkowych poziomu 1 dla tej umowy. Dane historyczne są dostępne na wykresach TWS dla wielu rodzajów instrumentów bez subskrypcji danych rynkowych, ale nie będą dostępne dla interfejsu API, chyba że spełnione zostaną wszystkie wymagania dotyczące danych rynkowych. Podczas pobierania danych historycznych z TWS, należy pamiętać o ograniczeniach danych historycznych. Żądanie danych historycznych Dane historyczne są uzyskiwane z TWS za pośrednictwem funkcji IBApi. EClient. reqHistoricalData. Każde żądanie musi: Unikalny identyfikator, który posłuży do identyfikacji przychodzących danych. Interesujący Cię IBApi. Contract. Data i godzina zakończenia żądania. Ilość czasu (lub jednostek Valid Duration String), aby cofnąć się od żądanych dat i dat zakończenia. Granularity danych lub poprawne rozmiary prętów Typ danych do pobrania. Zobacz historyczne typy danych (whatToShow) Czy pobierać dane generowane tylko w ramach zwykłych godzin handlu (RTH) Format, w jakim data pasowania przychodzącego powinna być prezentowana. Zwróć uwagę, że w przypadku pasków dziennych dostępny jest tylko format yyyyMMdd. Na przykład, składając żądanie z datą i godziną zakończenia 20180127 23:59:59, ciąg o długości 3 D i rozmiarze o długości 1 godziny zwróci trzy dni o wartości 1-godzinnych pasków, w których najnowszy pasek będzie być jak najbliżej 20180127 23:59:59. String queryTime DateTime. Now. AddMonths (-6).ToString (quotyyyyMMdd HH: mm: ssquot) client. reqHistoricalData (4001, ContractSamples. EurGbpFx (), queryTime, quot1 Mquot. Quot 1 dayquot. QuotMIDPOINT. 1, 1, null) client. reqHistoricalData (4002, ContractSamples. EuropeanStock (), queryTime, quot10 Dt. 1 min. quot. TRADESquot.1, 1, null) Kalendarz cal Calendar. getInstance () SimpleDateFormat formularz new SimpleDateFormat (quotyyyyMMdd HH: mm: ssquot) Forma sformatowana w postaci ciągu. format (cal. getTime ()) client. reqHistoricalData (4001, ContractSamples. EurGbpFx (), sformatowany, quot1 Godzina 1 dnia, quotMIDPOINT, 1, 1, null) client. reqHistoricalData (4002, ContractSamples. EuropeanStock (), sformatowany, quot10 Dquot.1 min min. quotTRADESquot.1, 1, null) Anulowanie żądań danych historycznych Dim queryTime As String DateTime. Now. AddMonths (-6).ToString (quotyyyyMMdd HH: mm: ssquot) client. reqHistoricalData (4001, ContractSamples. EurGbpFx (), queryTime, quot1 Mquot. 1 dayquot. quotMIDPOINTquot. 1, 1, Nic) client. reqHistoricalData (4002, ContractSamples. EuropeanStock (), queryTime, quot10 Dt. 1 min. Quot. TRADESquot.1, 1, Nothing) char queryTime 80 std :: strftime (queryTime, 80, quotYMd H: M : Squot. Timeinfo) mpClient-gtreqHistoricalData (4001, ContractSamples :: EurGbpFx (), queryTime, quot1 Godzina 1 dayquot. QuotMIDPOINT, 1, 1, TagValueListSPtr ()) mpClient-gtreqHistoricalData (4002, ContractSamples :: EuropeanStock (), queryTime , quot10 Dt. 1 min. quot. TRADESquot.1, 1, TagValueListSPtr ()) 1 160 queryTime (datetime. datetime. today () - 2 160 datetime. timedelta (dni180)). strftime (quotYmd H: M: Squot) 3 160 String queryTime DateTime. Now. AddMonths (-6).ToString (quotyyyyMMdd HH: mm: ssquot) 4 160 self. reqHistoricalData (4101, ContractSamples. USStockAtSmart (), queryTime, 5 160 quot1 Mquot. Quot1 dayquot. QuotMIDPOINTquot. 1, 1 ,) 6 160 self. reqHistoricalData (4001, ContractSamples. EurGbpFx (), queryTime, 7 160 quot1 1 kw. Dziennie. 60 self. reqHistoricalData (4002, ContractSamples. EuropeanStock (), queryTime, 9 160 quot10 Dquot. quot1 min. quotRADZESquot. 1, 1,) Zapytanie o rozpoczęcie danych historycznych Aby znaleźć najwcześniejszy dostępny punkt danych dla danego instrumentu i typu danych, funkcja znajduje się w interfejsie API począwszy od wersji v973.02 i v963 TWSIBG, IBApi :: EClient :: reqHeadTimestamp client. reqHeadTimestamp (14001, ContractSamples. USStock (), quotTRADESquot.1, 1) client. reqHeadTimestamp (4003, ContractSamples. USStock (), quotTRADESquot.1, 1) client. reqHeadTimestamp (14001, ContractSamples. USStock (), quotTRADESquot. 1, 1 ) mpClient-gtreqHeadTimestamp (14001, ContractSamples :: EurGbpFx (), quotMIDPOINT, 1, 1) 1 160 self. reqHeadTimeStamp (4103, ContractSamples. USStockAtSmart (), quotTRADESquot. 0, 1) Wynikowy znacznik czasu jest zwracany do funkcji IBApi :: Client :: headTimestamp public class EWrapperImpl. EWrapper public void headTimestamp (int reqId, string headTimestamp) Console. WriteLine (quotHead sygnatura czasowa, Request Request:, Head time stamp: quot. ReqId, headTimestamp) public class EWrapperImpl implementuje system EWrapper public void headTimestamp (int reqId, String headTimestamp) System. out. println (quotHead sygnatury czasowej. Req Id: quot. reqId quot, headTimestamp: quot headTimestamp) Klasa publiczna EWrapperImpl Public Sub headTimestamp (requestId Jako Integer, timeStamp jako ciąg) Implementuje IBApi. EWrapper. headTimestamp Console. WriteLine (quotHead znacznik czasu. :, Stempel czasu głowy: quot. RequestId, timeStamp) class TestCppClient. public EWrapper void TestCppClient :: headTimestamp (int reqId, const std :: stringamp headTimestamp) printf (quotGłówny znacznik czasu, ReqId: d - Stempel czasu głowy: s, nquot. reqId, headTimestamp. cstr ()) 1 160 klasa TestWrapper (opakowanie. EWrapper): 1 160 def headTimestamp (self, reqId: int, headTimestamp: str): 2 160 print (quotHeadTimestamp: quot. ReqId, quot. HeadTimestamp) Odbieranie danych historycznych Dane historyczne będą dostarczane za pośrednictwem IBApi :: EWrapper :: metoda historicalData w postaci świeczników. Gdy wszystkie świeczniki zostaną odebrane, znacznik IBApi. EWrapper. historicalDataEnd zostanie wysłany do publicznej klasy EWrapperImpl. EWrapper publiczny wirtualny void historyData (int reqId, data łańcucha, double open, double high, double low, double close, int volume, int count, double WAP, bool hasGaps) Console. WriteLine (quotHistoricalData. Quot reqId quot - Date: quot date quot, Open: quot open quot, High: quot high quot, Low: quot low quot, Close: quot close quot, Volume: quot volume volume quot, Count: quot count quotot, WAP: quot WAP quot, HasGaps: quot hasGaps) public virtual void historicalDataEnd (int reqId, string startDate, string endDate) Console. WriteLine (quotHistoricalDataEnd - quot reqId quot od quot startDate quot do quotDataDate) public class EWrapperImpl implementuje EWrapper public void historicalData (int reqId, String date, double open, double high , double low, double close, int volume, int count, double WAP, boolean hasGaps) System. out. println (quotHistoricalData. quot reqId quot - Date: quot date quot, Open: quot open quot, High: quot high quot, Low : quot low quot, Close: quot blisko quot, Volume: quot vo lume quot, Count: quot count quot, WAP: quot; WAP quot; HasGaps: quot hasGaps) public void historicalDataEnd (int reqId, String startDateStr, String endDateStr) System. out. println (quotHistoricalDataEnd. quot reqId quot - Data początkowa: quot startDateStr quot, Data końcowa: quot. endDateStr) Klasa publiczna EWrapperImpl Public Sub dane historyczne (reqId jako liczba całkowita, data jako ciąg, otwórz jako podwójna, wysoka jako podwójna, mała jako podwójna, zamknij jako podwójna, objętość jako Integer, count As Integer, WAP As Double, hasGaps As Boolean) Implementuje IBApi. EWrapper. historicalData Console. WriteLine (quotHistoricalData - ReqId quot amp reqId amp quot Data quot; amp data amp; quot; Open quot; amp; open amp; quot; High quot amp; high amp; quot; Low quot amp low amp quot Volume quot amp amp volume amp quot Count quot quot amp count quotquot) Public Sub historyDataEnd (reqId As Integer, start As String, end As String) Implementuje IBApi. EWrapper. historicalDataEnd Console. WriteLine (quotHistoricalDataEnd - ReqId quote amp reqId amp quot Początek quot amp amp początek amp quot End End amp end quotquot) class TestCppClient. public EWrapper void TestCppClient :: historicalData (TickerId reqId, const std :: stringamp data, double open, double high, double low, double close, int volume, int barCount, double WAP, int hasGaps) printf (quotHistoricalData. ReqId: ld - Data: s, Otwórz: g, Wysoka: g, Niska: g, Zamknij: g, Głośność: d, Liczba: d, WAP: g, HasGaps: dnquot. ReqId, date. cstr (), otwórz, wysokie, niskie, close, volume, barCount, WAP, hasGaps) void TestCppClient :: historicalDataEnd (int reqId, std :: string startDateStr, std :: string endDateStr) std :: cout ltlt quotHistoricalDataEnd. ReqId: quot ltlt reqId ltlt quot - Data rozpoczęcia: quot ltlt startDateStr ltlt quot, Data końcowa: quot ltlt endDateStr ltlt std :: endl 1 160 klasa TestWrapper (wrapper. EWrapper): 1 160 def dane historyczne (self, reqId: TickerId, date : str, open: float, high: float, 2 160 low: float, close: float, volume: int, barCount: int, 3 160 WAP: float, hasGaps: int): 4 160 super (). historicalData (reqId, data, otwórz, wysoki, niski, zamknij, objętość, 5 160 barCount, WAP, hasGaps) 6 160 print (quotHistoricalData. quot; reqId, quot Data: quot. date, quotOpen: quot. open, 7 160 quotHigh: quot. high , quotLow: quot. low, quotClose: quot. close, quotVolume: quot volume, 8 160 quotCount: quot. barCount, quotWAP: quot. WAP, quotHasGaps: quot. hasGaps) 1 160 def historicDataEnd (self, reqId: int, start: str, end: str): 2 160 super (). historyDataEnd (reqId, start, end) 3 160 print (quotHistoricalDataEnd quot. reqId, quotfromquot. start, quottoquot. end) Ważny czas trwania Jednostki ciągów Obowiązujące rozmiary prętów Typy danych historycznych (whatToShow) Av ailable Data per ProductUpdate: Zaktualizowałem kod, aby działał z nowym API Oandas. Pobierz tutaj Czas porozmawiać o brokerach, o tym, jak umieścić program w sposób programowy, a co najważniejsze, jak nie dać się oszukać. Broker to nic innego jak firma, która pozwala handlować (kupować lub sprzedawać) aktywa na rynku za pośrednictwem ich platformy. Dla algotradingu bardzo ważne jest: Broker oferuje API, abyśmy mogli składać zamówienia. Możesz mieć konto demonstracyjne, aby uruchomić środowisko pośredniczące i eksperymentować. Spread jest tak mały, jak to tylko możliwe. W naszym przypadku nie dbamy o spread ponieważ w najbliższym czasie nie będziemy robić transakcji o wysokiej częstotliwości. Mimo że brokerzy są regulowani, w ciągu ostatnich kilku lat zdarzały się incydenty, brokerzy złożyli wnioski z powodu pewnych warunków. Bądź ostrożny, jeśli nie ma opinii brokera w Internecie (lub większość z nich jest zła) Jeśli broker oferuje ci szaloną dźwignię (jak 1: 200) Jeśli pośrednik wydaje się być w bardzo dziwnym kraju Co może się zdarzyć jest to, że zaczynasz zarabiać pieniądze i nie jesteś w stanie ich wyciągnąć. Poważnie. Super stresująca sytuacja. Ale przejdźmy do szczęśliwszej notatki, która otwiera konto i umieszcza nasz pierwszy programowy handel. Whooha Używam Oandy jako pośrednika (nie jestem z nimi powiązany) i oferują całkiem przyzwoite API, biblioteki na Github i darmowe konto demo. Po zalogowaniu się na konto demonstracyjne przejdź do Zarządzaj dostępem API. Tam możesz znaleźć klucz API, który będziemy używać w naszym systemie do umieszczania transakcji. UPEWNIJ SIĘ, ŻE NIE DAJESZ UDZIAŁU W TYM KLUCZE. Kod tego jest, a wszystkie inne posty są na github i można go zainstalować i uruchomić dość łatwo. Aktualizacja: Oanda wypuściła nowy (kasujący) silnik wykonawczy o nazwie v20 i wypuścił nowy (ulepszony) interfejs API. Ten post został zaktualizowany w celu użycia nowego API, ale jeśli (z jakiegokolwiek powodu) chcesz sprawdzić stary kod, jest właśnie tutaj. Masz szczęście, że Nawiązywanie połączenia z Oandą wymaga pliku conf - który możesz wygenerować za pomocą skryptu, który zapewnia Oanda lub możesz go sam utworzyć. Dlaczego chcesz tego przede wszystkim, jeśli chodzi o dane uwierzytelniające (i moje pieniądze), wolę wiedzieć wszystko, co się dzieje. I nie lubię konieczności instalowania PyYAML tylko po to, aby przeczytać plik conf. Możesz użyć dowolnej z tych metod. Teraz przygotuj się na zdumienie. Kod jest prosty. Inicjujemy interfejs API: teraz możesz złożyć zamówienie (kup 5000 jednostek EURUSD) Sprawdź, czy aktualna cena jest równie łatwa Bardzo łatwa. Nie martw się, czym jest EURUSD, ile jednostek kupujemy ani jakie jest zlecenie rynkowe. Na razie umieściliśmy nasz pierwszy handel z naszego laptopa i zamierzamy zbudować własny interfejs API do zawierania transakcji. Ekscytujące rzeczy Możesz przeczytać dokumentację Oandas tutaj, aby zobaczyć, co jeszcze możesz zrobić z ich API i znaleźć bibliotekę Python tutaj. Przykłady przykładów są dostępne na stronie Github Oandas tutaj. Zaraz potem połączę się z prawdziwym systemem algebrającym LIVE, działającym z mojego RaspberryPI w domu. Będziesz mógł zobaczyć (prawie) końcowy program uruchomiony i lepiej porozmawiać o Forex i strategiach. Jeśli masz więcej opinii, napisz do mnie na jonromero lub zapisz się do newslettera. Outro prawne. To jest samouczek inżynierski dotyczący budowania platformy algotradingowej do eksperymentowania i FUN. Wszelkie sugestie tutaj nie są poradami finansowymi. Jeśli stracisz (lub wszystkie) swoje pieniądze, ponieważ korzystasz z porad handlowych lub wdrożyłeś ten system w produkcji, nie możesz winić tego przypadkowego bloga (i mnie). Ciesz się na własne ryzyko. To jest raczej jak stworzyć własną strategię algotradingową - edycję Ethereum, a nie szybki blog na pieniądze. Jest to również prawdziwy przykład z prawdziwymi zwrotami (i prawdziwymi błędami w produkcji, które kosztują mnie pieniądze), gdzie można zobaczyć, jak rozpoznać możliwości, dlaczego algotrading jest niesamowity i dlaczego zarządzanie ryzykiem może uratować twój tyłek. Dostaję to pytanie prawie codziennie. Jak mogę znaleźć dobrą strategię Jak mogę zbudować własną Czy muszę mieć doktorat z matematyki Statystyka Aktualności: Jeśli mogę napisać strategię, każdy może napisać strategię. Zaufaj mi. Jedyną sztuczką jest poszukiwanie prostego. Aktualizacja: Ten post został przepisany co najmniej pięć razy (jak dramat The DAO eskalował) i jest to doskonały przykład strategii wykonującej pełne koło. Zacząłem angażować się w Ethereum od samego początku, ponieważ bardzo podobało mi się uruchamianie twoich algorytmów na zasadzie blockchain. Kiedy wyszedł TheDAO, przeczytałem wszystko na ten temat i uwielbiałem ten pomysł. Nie musisz rozumieć, czym jest Ethereum, theDAO, blockchain (obiecuję, że będę wędrował po innym poście). Te same pomysły dotyczą Forex, Stocks nawet kule Pokemon. Moje cztery kroki - kapitan oczywiste - system, który ja osobiście mam określony sposób, w jaki pracuję. Krok pierwszy . Zidentyfikuj pomysł. W tym przypadku mam pomysł, że istnieje kilka giełd oferujących tokeny Ethereum i DAO. Co by było, gdyby był arbitraż między tymi krokami. Ręcznie przetestuj ten pomysł. Jeśli coś działa, jestem na czymś. Jedyne, co musiałem zrobić, to wykonać wszystkie kroki ręcznie i zapisać wszelkie opłaty, warunki lub wszystko, co powinno być udokumentowane. Krok trzeci . Automatyzacja Ten algorytm nie jest algorytmem handlu o wysokiej częstotliwości. Istnieje znaczne ryzyko związane z czasem (które można wyeliminować, jak również później), ale to, co zrobiłem, można wykonać ręcznie. Problem polega na tym, że musiałbym spędzić cały czas przed komputerem, sprawdzając, czy jest jakiś warunek arbitrażu, a jeśli tak, to musiałem działać szybko i bez bałaganu. Aha i musiałem rekrutować pięciu moich znajomych, żeby to skalować. Krótko mówiąc, spędziłem Dzień Prezydenta pisząc prosty program, który powtórzy wszystkie moje ręczne kroki. Program zawiesił się i nie było więcej niż 100 linii kodu. Jest to etap zbierania danych, w którym widzę, czy istnieje korzyść, którą mogą mi dać algorytmy. Zaletami mogą być: Coś, co jest zautomatyzowane i uruchamiane 1000 razy na sekundę lub 1000 razy równolegle Coś, co myśli szybciej niż ja Coś, co nie ma uczuć, aby zepsuć mój system Jeśli jest co najmniej jeden lub więcej warunków spełnione, będę zacznij budować i przepisywać algo. Krok czwarty. W sumie żartuję i zobaczycie, dlaczego zarządzanie ryzykiem jest bardzo ważne w tym biznesie. Porozmawiajmy trochę o tym, czym był ten arbitraż. Chodzi o to: zastanawiam się, czy Kraken i Shapeshift mają różne ceny za te same aktywa. To klasyczny przypadek arbitrażowy (Kraken i Shapeshift to giełdy). Mógłbym wymienić DAO na ETH na Krakena, przenieść ETH na Shapeshift, wymienić ETH na DAO i odesłać go z powrotem do Krakena, a ze względu na niekonsekwencje cenowe skończyłbym z więcej DAO niż początkowo uruchomiłem Pieniądze bez ryzyka, najlepszy rodzaj pieniędzy . Możesz zarabiać tyle, ile ETHDAO od Krakena DAOETH z ShapeShift gt 1 (opłaty gazowe). Bardzo prosta formuła, słuszna Każdy cykl, był 2 do 10 zwrotem mojego kapitału. Po pewnym czasie zacząłem uderzać w granice Shapeshift i musiałem zrobić to równolegle. Pytanie brzmi: co byś zrobił, gdybyś miał algorytm, który tworzyłby 10 twoich pieniędzy co 20 minut. Najgłupsza rzecz, jaką możesz zrobić, to włożyć w to mnóstwo pieniędzy. Jeśli nie znasz greckiego słowa hybris. uważaj się za szczęściarza. Hybris jest wtedy, gdy myślisz, że jesteś niepokonany, lepszy od bogów. A to jest największe NIE, które możesz zrobić w handlu. Po kilku tygodniach atak został zhackowany. Skradziono 160 milionów dolarów (lub powinienem powiedzieć, zamrożony) i nikt nie wiedział, co się stanie. Dla mnie to się stało, 10 minut przed wejściem na pokład samolotu do Nowego Jorku. Hybris. Albo jak ludzie w USA mówią: Fuck. Byłem inteligentny (szczęśliwy) na tyle, aby mieć dobre nawyki zarządzania ryzykiem (dziękuję Forex). Nigdy, przenigdy, nie ryzykuję więcej niż 2 kapitał, nawet jeśli wydaje mi się, że jest to najlepszy rodzaj transakcji. Na szczęście pieniądze zostały przywrócone i mogłem wycofać moje DAO do Ethereum (ale tak, kupiłem WiFi w locie, aby nadążyć za tym, co się dzieje). Całe to doświadczenie przypomina, że ​​zawsze są rzeczy, których nie można przewidzieć. Rzeczy, nad którymi nie możesz kontrolować. Było to systematyczne ryzyko i nie było sposobu, bym mógł to zobaczyć. Naciśnięcie przycisków i algorytmów budowy nie wystarczy. Właściwe zarządzanie ryzykiem i wiedza o tym, kiedy musisz zażywać pigułkę chłodniczą, jest tym, co może utrzymać cię w grze. W następnym poście opublikuję cały algorytm i przejdę linia po linii. Planuję również omówić nieco więcej oDO i Ethereum. Jeśli nie chcesz przegapić żadnej z tych informacji i uzyskać więcej dodatkowych informacji, zapisz się do newslettera, gdzie mówię o fintech, algorytmach i rynkach. Przy okazji, jeśli chcesz stworzyć własną krypto walutę i dowiedzieć się więcej o Ethereum, mam świetny post z zamieszczonym tutaj kodem. Następny: nurkowanie w programie alterradingowym ETHDAO Jeśli masz więcej opinii, napisz do mnie na jonromero lub zapisz się do newslettera. Outro prawne. To jest samouczek inżynierski dotyczący budowania platformy algotradingowej do eksperymentowania i FUN. Wszelkie sugestie tutaj nie są poradami finansowymi. Jeśli stracisz (lub wszystkie) swoje pieniądze, ponieważ korzystasz z porad handlowych lub wdrożyłeś ten system w produkcji, nie możesz winić tego przypadkowego bloga (i mnie). Ciesz się na własne ryzyko. Uczenie maszynowe i handel to bardzo ciekawy temat. Jest to również temat, w którym można spędzić mnóstwo czasu pisząc kod i czytając dokumenty, a następnie dziecko może pokonać cię podczas gry w Mario Kart. W następnych postach będziemy rozmawiać na temat: Optymalizuj wpisy i wyjścia. To i tylko to może mieć ogromną różnicę w twoim rzucie na bank. Oblicz wielkość pozycji (na wypadek, gdybyś nie lubił kryterium Kelly) Znajdź możliwą korelację pomiędzy różnymi parami (handel parami). Uwielbiam korelację EURUSD i GBPJPY Obliczyć linie oporności wzmacniacza pomocniczego Ale czym jest uczenie maszynowe Algorytmy uczenia maszynowego to algorytmy, w których maszyna może identyfikować wzorce w danych. Yeap, to takie proste. Na przykład znajdź wszystkie zwierzęta na tym zdjęciu i narysuj wokół nich pole. Nazwij też to zwierzę. Szalony, wiem. Jeśli chodzi o handel, możesz sobie wyobrazić, że jest podobny: aby maszyna mogła się uczyć, musisz nauczyć ją, co jest dobre lub złe (uczenie nadzorowane), lub dać jej duży zbiór danych i pozwolić, by stała się dzika (bez nadzoru). Dla identyfikacji obiektów jest to proste, ale co z handlem, rozejrzałem się wokół, aby sprawdzić, czy istnieje program do nauki maszyn, który może zidentyfikować linie SR, ale bez skutku. Postanowiłem więc napisać pierwszy program do nauki maszyn w pythonie, który identyfikuje linie wsparcia i oporu w Pythonie. Kolejny pierwszy Horta Ale jak algorytm może zidentyfikować te obszary? Hoooooow Panie i panowie (i roboty), pozwólcie, że przedstawię was w MeanShift. nienadzorowany algorytm, który jest używany głównie do rozpoznawania obrazów i jest dość trywialny w konfiguracji i uruchomieniu (ale także bardzo wolny). Chodzi o to, że ten algorytm pozwoli mi podzielić moje dane (ticks forex) na obszary, a następnie mogę użyć krawędzi jako linii wsparcia i oporu. Fajny pomysł, ale działa. Analizujemy około 12 milionów punktów danych EURUSD w 2017 roku i kilka miesięcy 2018 roku. Linie oporu są umieszczane automagicznie za pomocą algorytmu uczenia maszynowego. To, co jest naprawdę fajne (i upiorne), to to, że algorytm prawie to nabija. Gwoździe to trudne. Robi się naprawdę strasznie, kiedy będziemy używać algorytmu do identyfikowania mikrostruktur i rozpoczynania skalpowania. System jest w stanie przetwarzać wszelkiego rodzaju dane dotyczące czasu (zasoby, rynek walutowy, złoto, cokolwiek) i renderuje interaktywny wykres html (jak na powyższym wykresie) z danymi i wygenerowaną maszynowo SL. Kod jest tutaj, więc zwariuj. Teraz przejdźmy przez kod. Po zebraniu danych należy je przeczytać i wyczyścić. Przygotuj się na magię pand. Usuwamy puste wartości (weekendy), a następnie przeskalujemy dane do 24 godzinnych świeczników (ohcl). To sprawia, że ​​DUŻO łatwiej jest drukować. Pogrupowane dane to dane, które będziemy podawać w algorytmie ml. Następnie przygotowujemy dane, które będziemy wykorzystywać w algo. W następnym poście omówmy, jak jeszcze bardziej usprawnić tę pracę, omówmy bardzo interesujące wyniki (czy algorytm rzeczywiście może przewidzieć przyszłość) i zacznij używać go w naszym własnym handlu. Jeśli chcesz sprawdzić następny artykuł i przeczytać więcej na temat handlu i inwestowania za pomocą algorytmów, zapisz się do newslettera. Następny rozdział: Machine Learning Gone Wild - Korzystanie z kodu Jeśli masz więcej opinii, napisz do mnie na jonromero lub zapisz się do newslettera. Outro prawne. To jest samouczek inżynierski dotyczący budowania platformy algotradingowej do eksperymentowania i FUN. Wszelkie sugestie tutaj nie są poradami finansowymi. Jeśli stracisz (lub wszystkie) swoje pieniądze, ponieważ korzystasz z porad handlowych lub wdrożyłeś ten system w produkcji, nie możesz winić tego przypadkowego bloga (i mnie). Ciesz się na własne ryzyko. Aktualizacja: Post Machine Learning będzie epicki, ale potrzeba czasu, aby ten kod był prezentowalny. Niedźwiedź ze mną, fajne rzeczy nadchodzą (jak czytałeś w biuletynie). Zrzeczenie się: TO NIE JEST PORADY TAX. Co jest naprawdę zaskakujące, to, że większość wniosków w biuletynie są: Użyj narzędzi, aby pomóc Trading Machine Learning w celu optymalizacji transakcji Podatki Pierwsze dwa, mogę zrozumieć. Każdy chce być lepszym handlowcem. Rozumiem. Ale podatki PODATKI To jest twój szczęśliwy dzień. Podatki Forex są bardzo łatwe. Poważnie. Domyślnie (to się nazywa Sekcja 988), wszystkie twoje straty będą zrównoważyć twoje podatki dochodowe bez limitu 3k rocznie. Jest to znacznie lepsze niż handel akcjami, gdzie straty kompensują zyski kapitałowe. Ale co dzieje się z zyskami DLACZEGO WIĘC OTO PIELĘGNACJA Większość graczy na rynku Forex traci pieniądze (nazywam to opłacaniem czesnego) w pierwszym roku (latach), więc lepiej będzie, jeśli będzie to proste, dopóki nie uzyskasz sprawdzonej i spójnej strategii. Powiedziawszy to, jeśli faktycznie osiągasz zysk, jesteś opodatkowany krótkoterminowym zyskiem kapitałowym (czasami nawet do 40). Rozwiązania, od których zaczniesz zarabiać, to: Zrezygnowanie z sekcji 988 i opodatkowanie w sekcji 1256, gdzie 60 zysków jest opodatkowanych jako zyski długoterminowe, a 40 jako krótkoterminowe (ale teraz straty nie mogą zrekompensować twojego dochodu). Jest to bardzo dobre, gdy zarabiasz pieniądze, bardzo źle, kiedy nie masz. Rozpocznij LLC Dla osób, które dopiero zaczęły eksperymentować z Forex i algotradingiem, zawsze sugeruję im pozostać w sekcji 988 (domyślnie) i kiedy zaczynają zarabiać (konsekwentnie) lub chcą iść na pełny etat, porozmawiaj ze mną :) Poważnie, jest tak wiele rzeczy, że zaczniesz robić inaczej, kiedy przejdziesz od etapu hobby do drugiego dochodu do pracy w pełnym wymiarze godzin, że nie ma powodu, aby nadmiernie optymalizować to. Następny rozdział: Machine Learning Gone Wild Jeśli masz więcej opinii, wyślij mi wiadomość na jonromero lub zapisz się do newslettera. Outro prawne. To jest samouczek inżynierski dotyczący budowania platformy algotradingowej do eksperymentowania i FUN. Wszelkie sugestie tutaj nie są poradami finansowymi. Jeśli stracisz (lub wszystkie) swoje pieniądze, ponieważ korzystasz z porad handlowych lub wdrożyłeś ten system w produkcji, nie możesz winić tego przypadkowego bloga (i mnie). Ciesz się na własne ryzyko. Ostatni raz rozmawialiśmy o Backtestu for-looper (jak uwielbiam je nazywać). Teraz czas, aby zobaczyć jakiś kod Powiedzieliśmy, że mamy coś takiego: python dla każdego elementu readhistoricaldata (): applystrategy () howourstrategydid () Słodko, załadujmy naszą strategię, wczytajmy dane historyczne, uruchom nasz algorytm i wydrukujmy wyniki Wolę strategie w formacie JSON, który zawiera nazwę strategii i niektóre specyfikacje (np. Ile pestek za stoploss lub takeprofit itp.). W ten sposób, gdy dobrze zaczniemy korzystać z backtestu opartego na zdarzeniach, możemy przekazać strategię za pomocą algorytmu uczenia maszynowego i spróbować zoptymalizować go. Następna linia ładuje nasze dane. Wiem, że ludzie nie lubią marynowania i są inne sposoby ładowania danych (i będziemy mówić o BColz w pewnym momencie), ale na razie tylko ze mną. Kolejna linia jest oczywista. Przekazujemy dane historyczne naszym algo i otrzymujemy niektóre statystyki do wydrukowania. Skupiamy się nieco na algorytmie i możemy później omówić wykreślanie itp. Magia prostego systemu analizy historycznej Przygotuj się na zdziwienie, jak łatwo jest to zrobić w sposób absurdalny. Krótkie dochodzenia Co się dzieje z tego typu testowaniem historycznym, to 1. prawdopodobnie popełnisz błędy, gdy będziesz chciał użyć tego samego algorytmu 2. Nie będziesz w stanie napisać bardzo złożonej strategii (przynajmniej tak łatwo) 3. Bardzo trudno skalować (w porównaniu do zdarzeń) 4. Musisz mieć symulację i wykonanie w tym samym języku, ALE pamiętaj, że jest to NAJLEPSZY i najszybszy sposób na rozpoczęcie i dowiedzieć się, jak działają te wszystkie rzeczy. Pójdźmy dalej, wykorzystajmy inne dobrze znane backtestery w Pythonie i dodajmy własne wykresy. Jeśli masz więcej opinii, wyślij mi wiadomość na jonromero lub zapisz się do newslettera. Outro prawne. To jest samouczek inżynierski dotyczący budowania platformy algotradingowej do eksperymentowania i FUN. Wszelkie sugestie tutaj nie są poradami finansowymi. Jeśli stracisz (lub wszystkie) swoje pieniądze, ponieważ korzystasz z porad handlowych lub wdrożyłeś ten system w produkcji, nie możesz winić tego przypadkowego bloga (i mnie). Ciesz się na własne ryzyko. Co to jest dobry system algotradingowy bez kilku porządnych strategii do rozmieszczenia Poniżej znajduje się lista strategii, które znalazłem online (lub przesłane do mnie przez handlowców, którzy są w newsletterze). Planuję zaktualizować listę, ponieważ wciąż natrafiam na nowe pomysły. Koncepcja polega na tym, że gdy będziemy coraz bardziej zanurzać się w naszym systemie algotradingowym, pokażę ci, jak zakodować i wdrożyć te strategie. Wiem na pewno, że większość z nich pracuje z minimalnymi zmianami. Najgorszy scenariusz, będziesz miał system do testowania swoich założeń. Oto lista (i proszę o przesłanie mi jakiejkolwiek innej strategii, która Twoim zdaniem powinna być zawarta): Następnym razem, dzielenie się i omawianie mojego najprostszego (ale najskuteczniejszego) testu historycznego Jeśli masz więcej opinii, wyślij mi pinga na jonromero lub zarejestruj się do biuletyn. Outro prawne. To jest samouczek inżynierski dotyczący budowania platformy algotradingowej do eksperymentowania i FUN. Wszelkie sugestie tutaj nie są poradami finansowymi. Jeśli stracisz (lub wszystkie) swoje pieniądze, ponieważ korzystasz z porad handlowych lub wdrożyłeś ten system w produkcji, nie możesz winić tego przypadkowego bloga (i mnie). Ciesz się na własne ryzyko. Zbudowanie testu historycznego jest w rzeczywistości dość łatwe. Łatwo zepsuć, mam na myśli. Chociaż istnieje mnóstwo doskonałych bibliotek (i dobrze je przechodzimy w pewnym momencie), zawsze lubię robić to samemu, aby je dostroić. Ze wszystkich systemów testów historycznych, które widziałem, możemy założyć, że istnieją dwie kategorie: For-loopers Generatory zdarzeń Dzisiaj, dobrze porozmawiajmy o for-loopers. For-loopery są moim ulubionym typem backtesterów. Są trywialne w pisaniu i bardzo fajnie się rozwijają, ale mają pewne istotne przepływy i niestety większość backtesterów tam jest for-loopers (ps: muszę znaleźć na to lepszą nazwę). Jak działają pętle for Używając pętli for (jak można się domyślić). Jest to coś takiego: bardzo proste prawo Tak działa jeden system analizy historycznej, który uruchamia strategię rozpędu: Jaki jest więc problem Bardzo trudny do skalowania (poziomo) Potrzeba dużej ilości pracy, aby Twoja aplikacja applystrategy () pracowała nad weryfikacją historyczną i produkcja Musisz mieć wszystko w tym samym języku programowania Zapoznaj się z nimi, jeden po drugim. Skalowalność. Kilka tygodni temu eksperymentowałem z parą z algorytmem wspinaczki górskiej, aby zoptymalizować jedną z moich strategii. To wciąż działa. Po dwóch tygodniach. I buduję systemy skalowalne do życia. Dlaczego wciąż działa? Możesz użyć przetwarzania wieloprocesowego. Dyskoteka. producerconsumer (za pomocą ZeroMQ) lub tylko wątki, aby przyspieszyć to, ale niektóre problemy nie są kłopotliwe równolegle (tak, to jest rzeczywisty termin, a nie jedno z moich wymyślonych słów). Ilość pracy, która pozwoli skalować backtestera w ten sposób (szczególnie gdy chcesz zrobić to samo uczenie maszynowe) jest ogromna. Możesz to zrobić, ale jest to zła droga. Produkcja i backtesting w synchronizacji This. Czasy zostały przez mnie pogryzione. Mogę przypomnieć sobie utracone transakcje, w których byłem hm, dlaczego wszedłem do tego handlu lub mój dawny ulubiony DLACZEGO PRZYCZEPAĆ ZATRZYMYŁ SIĘ TERAZ. Czas powstania: wpadłem na pomysł, aby zoptymalizować moją strategię, przeprowadzić analizę historyczną, aby zobaczyć, co się stanie, gdybym mógł powstrzymać transakcję PO transakcji był opłacalny, aby zawsze zabezpieczyć zyski. Backtesting działał jak urok przy 13 wzroście zarobków, a produkcja straciła każdy handel. Rozgryzłem to po tym, jak mój algo stracił 3400 w ciągu kilku godzin (bardzo droga lekcja). Utrzymywanie synchronizacji w aplikacji jest bardzo trudne i staje się prawie niemożliwe, gdy chcesz robić to w sposób rozproszony. I nie chcesz mieć dwóch wersji swojej strategii, które są prawie identyczne. Chyba że masz 3400 do stracenia. Korzystając z różnych języków, uwielbiam Python. I Erlang. I Clojure. A J. i C. Oraz R. I Ruby (nie, właściwie nienawidzę Rubiego). Chcę być w stanie wykorzystać siłę innych języków w moim systemie. Chcę wypróbować strategie w R, gdzie są bardzo dobrze przetestowane biblioteki i za tym stoi ogromna społeczność. Chcę, aby Erlang skalował mój kod, a C - dane. Jeśli chcesz osiągnąć sukces (nie tylko w handlu), musisz mieć możliwość korzystania ze wszystkich dostępnych zasobów bez uprzedzeń. Nauczyłem się mnóstwa rzeczy od spotykania się z programistami R, co do tego, w jaki sposób można łączyć zabezpieczenia i wizualizować je lub dlaczego stosunek Sharpe'a może być kłamstwem. Każdy język ma inny tłum i chcesz, aby jak najwięcej osób wlewało pomysły do ​​Twojego systemu. Jeśli spróbujesz zastosować strategię w innym języku, to powodzenia z (2). Czy jesteś teraz przekonany? Cóż, nie próbuję cię przekonać, ponieważ for-loopers to świetny sposób na przeprowadzenie początkowych testów. Tak to się zaczęło i dla wielu strategii nie wysyłam ich do rurociągu. Lepszym sposobem (abyś mógł spać w nocy) są generatory zdarzeń. Zaraz potem, dzieląc się i dyskutując o moim najprostszym (ale najbardziej udanym) teście wstecznym Jeśli masz więcej opinii, wyślij mi wiadomość na jonromero lub zapisz się do newslettera. Outro prawne. To jest samouczek inżynierski dotyczący budowania platformy algotradingowej do eksperymentowania i FUN. Wszelkie sugestie tutaj nie są poradami finansowymi. Jeśli stracisz (lub wszystkie) swoje pieniądze, ponieważ korzystasz z porad handlowych lub wdrożyłeś ten system w produkcji, nie możesz winić tego przypadkowego bloga (i mnie). Ciesz się na własne ryzyko. Przed uruchomieniem dowolnego systemu algotradingu na żywo, dobrą praktyką jest backtest (to znaczy uruchomić symulację) naszych algorytmów. Pamiętaj, że nie oznacza to, że jeśli twój system zabija go przez ostatnie 5 lat, to będzie on miał zysk, ale jest dobrym wskaźnikiem, że możesz być na czymś. Są cztery rzeczy, które musimy wziąć pod uwagę, gdy wykonujemy naszą analizę historyczną: Jakość danych Jak je ładować efektywnie Jak zbudować nasz system testów historycznych Postaraj się, aby nasza analiza historyczna i nasz system na żywo dzieliły się tak dużą ilością kodu, jak to możliwe Dzisiaj , skupimy się na (1) i (2). W przypadku danych Forex używam GainCapital. Ich dane są w postaci kleszczy. Dla wolnego źródła jest wystarczająco dobre. Kiedyś korzystałem z historycznej usługi danych Oandas, ale wydaje się, że przenieśli ją do produktu premium. Szkoda. Upewnij się, że używasz danych GainCapitals tylko do eksperymentów. Dla każdego innego rodzaju płatnych danych historycznych (ETF, akcje, opcje stc), używam eoddata (mają też pewne historyczne dane na temat rynku forex, ale nie korzystałem z nich). Pozwala pobierać dane przez tydzień i trochę poeksperymentować. Link do danych to ratedata. gaincapital20181120NovemberEURUSDWeek1.zip za pierwszy tydzień listopada 2018. Najpierw musimy rozpakować plik. python gtunzip EURUSDWeek1.zip i otrzymasz plik 25MB o nazwie EURUSDWeek1.csv. Są to dane na jeden tydzień dla jednej pary walutowej. Możesz sobie wyobrazić ilość danych, które musisz przetwarzać dla wszystkich walut przez ostatnie pięć lat (podpowiedź: dużo). Ale nie martw się, zamierzamy to zoptymalizować. Na razie otwórzmy plik i sprawdźmy. rzeczy, na których nam zależy, to RateDateTime, RateBid i RateAsk. Jak można się domyślić, każda linia ma znacznik czasu i ile wynosi cena do kupienia lub sprzedaży. Formaty pobrane przez inne usługi są bardzo podobne. Istnieje wiele sposobów na załadowanie tych danych do Pythona, ale najkorzystniej, jeśli chodzi o krojenie i manipulowanie danymi, to korzystanie z Pand. Zawsze możemy korzystać z biblioteki csv do ładowania danych (i może to być szybciej), ale najpierw musimy przeprowadzić pewne optymalizacje i przetwarzanie, ponieważ zobaczycie, że pandy są dość łatwe. Kolejnym wspaniałym narzędziem do ładowania TONY GB bardzo sprawnie i bardzo szybko jest użycie Bcolz. Obejmuje dużo późniejszy post (lub możesz przeczytać podgląd, jeśli zapisałeś się do newslettera Manipulowanie danymi za pomocą Pandy Dane, które pobraliśmy, są zaznaczone, dopóki nie zbudujemy algorytmu UHFT (ultra-high-frequency trading), o wiele bardziej wydajne (pamięć, pamięć i przetwarzanie), aby zgrupować te kleszcze w kilka sekund (lub minut lub godzin w zależności od strategii), co spowoduje zmniejszenie skali pobierania z 25 MB do zaledwie 35 KB, co przekłada się na OGROMNĄ wydajność i zalety pamięci. Pozwala zgrupować wszystkie te dane w ciągu 15 minut, jak czas zakochać się w resample. Problem resampling dataset wygląda następująco: To jest nazywane OHLC (Open High Low Close) pasek co 15 minut. Widać teraz, że kleszcze są pogrupowane w 15-minutowe segmenty, a Ty masz najwyższy i najniższy punkt, który osiągnęła cena podczas tych 15 minut, a także openclose do kupna i sprzedaży. Czyste złoto Nie tylko masz wszystkie potrzebne informacje, ale teraz bardzo szybko je wczytujesz . Ty tylko trzeba zapisać dane: a następnie można ponownie użyć tego pliku 35kb. Możemy napisać prosty algorytm pędu, który sprawdza, czy w ciągu ostatnich 15 minut był ogromny ruch, a jeśli tak, to kup. Zajmiemy się tym w późniejszym poście. Możesz zobaczyć kod jak zawsze na github. Jeśli masz więcej opinii, napisz do mnie na jonromero lub zapisz się do newslettera. Outro prawne. To jest samouczek inżynierski dotyczący budowania platformy algotradingowej do eksperymentowania i FUN. Wszelkie sugestie tutaj nie są poradami finansowymi. Jeśli stracisz (lub wszystkie) swoje pieniądze, ponieważ korzystasz z porad handlowych lub wdrożyłeś ten system w produkcji, nie możesz winić tego przypadkowego bloga (i mnie). Ciesz się na własne ryzyko. Zanim zbudujesz jakiekolwiek systemy algotradingowe, musisz wiedzieć, jak handlować ręcznie. Oznacza to, że musisz samemu stracić pieniądze, zanim obwinisz maszynę. Tak proste jak to. Tak, porozmawiajmy o Foreign Exchange lub Forex, jak nazywają to fajni faceci. Po pierwsze, dlaczego wybieramy Forex do algotradingu Dlaczego nie stajemy się milionerami handlującymi jak wszyscy inni Dlaczego nie kupować Tesli, Amazon, Google'a, Facebooka, Twittera i mieć nadzieję na najlepsze (PS: proszę zapoznać się z prawnym outro na końcu ten post na blogu przed zakupem jakichkolwiek zapasów). Łatwa odpowiedź. Nie możesz wygrać (lub przegrać) pieniędzy wystarczająco szybko, kupując akcje. Forex ma fajne (lub straszne, w zależności od tego, po której stronie monety jesteś) rzecz zwaną dźwignią. Dźwignia może wynosić 1:10, 1:50, 1: 100, 1: 200, 1: 1000 w zależności od tego, jakie masz skłonności samobójcze lub jak szkicowy jest twój broker (nie martw się, dobrze porozmawiaj o brokerach w następnym poście). Zobaczmy przykład. Chcemy obrać 1k transakcji. Logiczne jest to, że aby kupić coś, co kosztuje 1k, musisz mieć na swoim koncie 1k, prawo Nie. Zawsze możesz dostać pożyczkę. Oooooooor: Wprowadź dźwignię. Jeśli mamy dźwignię 1: 100, możemy umieścić transakcję i kontrolować 1k z 10 punktami. Dla tych, którzy zawiedli z matematyki (nie wstydzę się, jestem jednym z was), 10 x 100 (dźwignia) 1000. Oznacza to, że możesz handlować dużymi i wygrywać duże, w rzeczywistości 100 razy większe. Połów jest taki, że możesz przejść 100 razy mniej. Pozwala mieć inny przykład. Właśnie dostałem swoją premię (1k) i chcę grać na rynku Forex. Bez jakiejkolwiek dźwigni, mogę kupić 1000 jednostek Forex, które kosztują 1 (przy okazji, nie ma jednostek na rynku Forex, ale dobrze o tym rozmawiać później). Ile jednostek mogę kupić za pomocą dźwigni 1:50 Jeśli odpowiesz, jeśli 100 000, zrobiłeś coś złego. Odpowiedź to 50 000 (dźwignia 1000 x 50). Tam to masz. Jednym z powodów, dla których robimy Forex, jest to, że możesz stracić dużą wygraną. Wróćmy do efektu dźwigni, gdy zaczniemy wprowadzać transakcje. Są jeszcze trzy ekscytujące powody, które są jeszcze bardziej niesamowite (odważ się powiedzieć, że jesteś niesamowity). Forex (prawie) nigdy nie śpi. Rynki są otwarte ALL DAY, sześć dni w tygodniu. Dokładniej mówiąc, nie ma jednego rynku, ale cztery i nakładają się, zapewniając efekt całodzienny. Forex jest bardzo niestabilny i jest mnóstwo pieniędzy poruszających się (ponad 5 bilionów dziennie). Szalone prawo Brak opłat za transakcje. Nie płacisz 10 za handel, tak jak robisz z zapasami. Tutaj płacisz spread, który jest zaledwie ułamkiem centa (ponownie, dobrze o tym porozmawiaj w innym poście). Wszystkie te powody (dźwignia, całodzienna, zmienność, opłaty) sprawiają, że Forex jest najbardziej ekscytującą platformą do budowania i wdrażania swoich algorytmów. Zaraz potem brokerzy Forex. Jak nie zostać oszukanym przed napisaniem linii kodu. Jeśli masz więcej opinii, napisz do mnie na jonromero lub zapisz się do newslettera. Outro prawne. To jest samouczek inżynierski dotyczący budowania platformy algotradingowej do eksperymentowania i FUN. Wszelkie sugestie tutaj nie są poradami finansowymi. Jeśli stracisz (lub wszystkie) swoje pieniądze, ponieważ korzystasz z porad handlowych lub wdrożyłeś ten system w produkcji, nie możesz winić tego przypadkowego bloga (i mnie). Ciesz się na własne ryzyko. To jest to. Co tydzień dostaję co najmniej 10 DM na Twitterze, pytając o to, jak eksperymentować z algotradingiem, Forex i analizą portfela. Ive zdecydował, że nadszedł czas, by coś z tym zrobić. Aktualizacja: Znajdź posty tutaj. Tak więc planuję objaśnić podstawy budowy własnej platformy handlowej, napisać własne strategie i iść na wakacje, podczas gdy elektrony zarabiają pieniądze. Lub wyzerowanie konta. Tak czy inaczej, będzie zabawnie Większość przykładów będzie w Pythonie, mimo że w Erlang mogą znajdować się części, a Ill stara się zachować je tak łatwo, jak to tylko możliwe. Porozmawiajmy teraz o tym, jak będzie wyglądał końcowy produkt. Budujemy system, w którym będziesz mógł: Symulować strategię (to się nazywa backtesting) Wykonywać swoją strategię bez nadzoru Ostrzegaj przez smsemail dla transakcji i błędów Bądź skalowalny i trywialny, aby wdrażać nowe aktualizacje Możliwość pracy nawet z domu (na przykład z malina) Zakładam, że będzie to w sumie 20 rozdziałów, dawaj lub bierz. Jest to system podobny do tego, który prowadzę w zeszłym roku i zawiera interfejs użytkownika, powiadomienia SMS, testowanie backtestingu, ciągłą dostawę i wszystkie fajne rzeczy, które nas uwielbiają geekowie. Cały kod będzie na Github i jeśli wszystko pójdzie dobrze, Ill zapisz go w książce, aby wszyscy mogli się cieszyć. Mam prawie trzy rozdziały prawie gotowe, więc jeśli chcesz uzyskać wczesny dostęp, po prostu zadzwoń do mnie - jonromero. Są to wszystkie posty, które zostały napisane do tej pory. Mogę dodać komentarz do postu, ponieważ otrzymuję więcej opinii. I love Forex because: It has enormous amount of data (volume) These data are coming extremely fast (velocity) You need to consider multiple resources when you are building your strategy (variety) My definition of BigData is that you have volume-velocity-variety information and you need to react on it right now (realtime). It is one of the main reasons why I dont like Hadoop (ok, the other is because I dont like Java:). Forex is the best place if you want to start playing with BigData. You have (at least) one data channel, hitting you with data, you need to keep running algorithms on this stream (sometimes doing correlations up to a week) and you need be able to respond very fast. If a garbage collector kicks in or if you need to grab data from a database (even if this DB is in memory - long live Redis) then you will have issues. Thats the reason why most of the trading databases have all their data in the same memory space and have custom languages doing the analysis (like Kdb ). That was the inspiration for LDB. Millions of data sources (mobile phones), hitting your database and calculatingupdating for each one of the requests thousands of counters and running all sorts of algorithms. Per request. In realtime. But lets face it. The vast majority of userscompanies will never have millions (or even thousands) of requests hitting their servers. Thats why I started a new opensource database with codename: HybrisDB. HDB has the following characteristics: Simple to install (no moving parts) Simple to use (pre-defined dashboards) It will be perfect for the 99 of userscompanies but not for the 1 like Facebook or Google (sacrificing Enterprise features) The concept is to have a dashboard, to watch indicators going onoff and then (maybe) connect to a system to place an order. Sounds like an interesting cool hobby project and I still try to decide between using Erlang or Clojure for this. Ping me on twitter if you have any ideas One of my new years resolution was study one of your habits each month and I decided to focus on what activities I am spending my online time. So, I installed RescueTime which is a very cool app that sits on the background and creates reports about which apps and sites you are using the most. And no, it is not sending that info to NSA (you are not that important). Even though I spent most of my time working, writing and communicating, I also spent around 2 hours on average on Facebook (gasp). No biggie. What I hated was that for the majority of times I was scrollingrefreshing for new updates. Like opening your refrigirator every two minutes even though you know it is empty Damn you habits So, spending 2 hours every day (sometimes more) on Facebook, means 60 hours per month or 7 working days . 7 freaking working days each month. 7 days, each day with 8 full hours, to sleep, go out, exercise, write a book, learn something new. What I did was installing StayFocused. a free plugin for your browser that doesnt let you spent more than 10 minutes on specific sites everyday. I zgadnij co. The I am just using facebook to communicate is such a lame excuse as I had no problem communicating with my friends, even by using facebook for 10 minutes. Now, give it a shot and tell me what you built in your spare timeReal Volume Indicator I coded some indicators in the python programming language, which scrape retail-sentiment data from different sources and put them into MT4. It is like an OrderBook in realtime, where at the current price and history all positions were shown. Have a look at the picture to know what I mean. Attached Image (click to enlarge) The first indicator is the overall sentiment and the second shows the sum of all orders (shortlong) at the corresponding candle. Here is the problem Im facing: One of my tradepeer told me, if I would make this stuff public the sentiment would be changing and the indicators become useless and would have impact to my own trading success. What is your opinion about that What should I do Take it please as a real discussion and sorry FF-staff if it is the wrong board. Thank you in advance Hello Trader-Community, I coded some indicators in the python programming language, which scrape retail-sentiment data from different sources and put them into MT4. It is like an OrderBook in realtime, where at the current price and history all positions were shown. Have a look at the picture to know what I mean. The first indicator is the overall sentiment and the second shows the sum of all orders (shortlong) at the corresponding candle. Here is the problem Im facing: One of my tradepeer told me, if I would make this stuff public the. Nice work here, but I would like to ask you if you know anything about the On Balance Volume(OBV) Its how you define consistent that is key. I have followed sentiment for awhile and even though it might not always give clear direction, it seems to be able to give very consistent points where the market is about to make big moves, and that alone can improve someones trading enormously. The rest is up to the traders RR, and experience but information like this are good for timing. Being a trader is lonely, but being a great trader is lonelier still Joined Dec 2017 Status: Member 546 Posts To think retail market players change the market is pretty funny. There is so many different ways the markets moves. To think one idea is gonna change the market is to funny. I follow a trader who took 100 positions in under a minute with 10 Lot contracts. Thats 1000 contracts. In the minute she made those trades the market moved from 1.13010 to 1.13017. Then over the next hour price went up 190 points (not pips). The candle close with a big push up and she close all her positions. Didnt change a thing. Yea she made 118K, I have been following her for some time. Very good trader edit: found this posted in August 25th, 2017. lol edit: as for REAL VOLUME these are similiar, they only cost money. but remeber it takes money to make money Members must have at least 0 vouchers to post in this thread. 0 obecnie oglądanych handlowców Forex Factoryreg jest zarejestrowanym znakiem handlowym.

No comments:

Post a Comment