Mówimy tu głównie o implementacji zaprogramowanego kodu czasu rzeczywistego dla strategii handlowych o średniej i niskiej częstotliwości.
Strategia
Narodziny strategii handlu ilościowego zasadniczo opierają się na obserwacji i zrozumieniu rynku, generowaniu pomysłu na strategię, następnie projektowaniu konkretnych szczegółów strategii, a następnie weryfikacji historycznej wielu rodzajów danych w celu uzyskania i sprawdzenia wpływu określonych wartości parametrów . Jeśli efekt jest dobry i ma uniwersalne zastosowanie, to kolejnym krokiem jest przetestowanie realnego rynku przy niewielkich środkach. Jeśli realna oferta poza próbą jest wykonalna, możesz ostatecznie zwiększyć fundusze i prowadzić ją przez długi czas.
Aby zapobiec dźwigni, pozwólcie, że wyjaśnię, że oczywiście istnieją inne metody generowania strategii, takie jak eksploracja danych, kopanie, kopanie, kopanie czynników. Istnieją również czynniki automatycznego generowania, takie jak uczenie maszynowe i uczenie się przez wzmacnianie. Jednakże tego rodzaju metodę czarnej skrzynki trudno jest utrzymać w trakcie okresu zniesienia strategii, ponieważ nie wiadomo, kiedy i dlaczego te wykopane czynniki zawiodą. W przypadku handlu ilościowego najważniejszą rzeczą jest naleganie na stabilny handel. Jeśli rynek nie jest dobry, możesz zmniejszyć swoją pozycję, ale nie możesz się zamknąć. Nikt nie może wiedzieć, kiedy wybuchnie wielki rynek. Jeśli to przegapisz, Twoje poprzednie zniesienie będzie daremne.
Analogią jest to, że projektowanie i weryfikacja historyczna strategii jest równoznaczna z „kalkulacją świątynną” wspomnianą w „Sztuce wojny” Sun Tzu „Ten, kto nie ma bitwy poza świątynią, jest zwycięzcą, musi obliczyć więcej; ten kto nie walczył, ale świątynia jest przegranym, musi się rozliczyć. Mniej znaczy więcej. Więcej oznacza zwycięstwo, mniej oznacza mniej i nic się nie liczy!”
Dlatego strategia handlowa musi być dobrze zaplanowana i dokładnie obliczona na podstawie początkowego projektu, w przeciwnym razie faktycznie stracisz przed złożeniem faktycznej oferty. Ten krok jest najtrudniejszy. Chociaż dalszy kod nie jest łatwy, większość z nich jest po prostu żmudna, jeśli poświęcisz więcej czasu i wysiłku, zawsze możesz to zrobić dobrze. Kluczem do solidnej oferty jest kontrola ryzyka.
Strategie handlowe, czyli zasady handlowe, pozwalają nam „postępować właściwie”, a konkretna realizacja faktycznej oferty polega na „robieniu właściwych rzeczy”. W wielu przypadkach określenie właściwego kierunku jest o wiele trudniejsze niż pokonanie dystansu. Podobnie jak w dowcipie o naprawie sprzętu, narysowanie linii kosztuje tysiąc juanów. Samo narysowanie linii jest warte tylko 1 dolara, ale wiedza, gdzie ją narysować, kosztuje 999.
Strategia + realna oferta razem tworzą system handlowy. Jeśli chodzi o projekt systemu transakcyjnego, możesz zapoznać się z poprzednim artykułem: Siedem elementów kompletnego systemu transakcyjnego. Prawdziwą ofertą są tu właściwie konkretne operacje kolejnych 4 kroków systemu transakcyjnego, „Wejście i wyjście z zyskiem i stratą”. Pierwsze trzy kroki są zasadniczo określane po zakończeniu projektowania strategii.
Jednak nawet jeśli strategia jest dobra, jeśli nie ma faktycznego wdrożenia, efekt zostanie znacznie zmniejszony, a nawet potencjalna strategia, która pierwotnie była dobra, zostanie zatrzymana. Opracowanie dobrej strategii nie jest łatwe, więc nie zaniedbuj jej realizacji. Dobry pomysł trzeba w końcu mocno wdrożyć.
pytanie
1. Nagła sytuacja rynkowa
Tego rodzaju strategię można spotkać tylko wtedy, gdy w słupku znajduje się sygnał. Wewnątrz słupka nie jest używana cena zamknięcia ani cena otwarcia określonej linii K, ale do wyzwolenia sygnału używana jest cena śróddzienna.
Oto przykład problemu, który pojawił się kilka dni temu w realnej ofercie. Mikroskopijny przykład rynku handlowego. Jest to dość powszechne w kręgu walutowym.
Poniższy obrazek przedstawia 10-sekundową linię K kontraktu wieczystego BNB kilka dni temu (2023.7.10 17:21) (słupek oznacza znaczenie OHLCV zagregowane z danych transakcji w ciągu 10 sekund).

Jak widać amplituda dużej linii dodatniej wynosi 3,53%, a transakcja wyniosła około 30 milionów dolarów. Ukończono w 10 sekund. Przed startem tego rynku tendencja przebiegała niemal bez zakłóceń.
Spójrz na zdjęcie poniżej, które przedstawia 1-sekundową linię k w tym momencie, możesz uzyskać więcej szczegółów.

Całkowite podniesienie trwa około 4 sekund. Już w pierwszej sekundzie zyskała ponad 2 punkty. Są to w zasadzie wyniki strategii o wysokiej częstotliwości (opartych na zdarzeniach, trendach o wysokiej częstotliwości, animowaniu rynku itp.) i zleceń algorytmicznych, które można ustalić z wyprzedzeniem.
Spójrzmy na 4-godzinną linię K BNB. Największą pozytywną linią jest okres, w którym pojawiła się wiadomość. Amplituda 4,05%.

Porównując linie K tych okresów, widzimy, że tego rodzaju wahania wywołane wiadomościami (tym razem jest to nowe IEO Binance, ARKM) zazwyczaj kończą się natychmiast. Przyrost o 4 godziny właściwie niewiele różni się od 10 sekund, a prawdziwy rozruch to tylko około 4 sekundy. Ten rodzaj pola bitwy należy do strategii wysokiej częstotliwości, które są uzbrojone po zęby. Może to jednak również wpływać na strategie dotyczące średnich i niskich częstotliwości, powodując większy poślizg.
Nie będziemy tutaj badać strategii o wysokiej częstotliwości. Co to oznacza dla strategii o średniej i niskiej częstotliwości? Przychodzą mi na myśl dwie główne rzeczy:
1. Niektóre trendy wybuchają bardzo nagle i kończą się w krótkim czasie, więc strategii nie można pochopnie zawiesić. Prawdziwa oferta w kręgu walutowym musi być dostępna online 24 godziny na dobę, szczególnie jeśli jest tam pozycja, i nie można jej odłączyć.
2. Rzeczywisty poślizg może osiągnąć 2 punkty procentowe. Spójrz na 1-sekundową linię K powyżej. Jeśli Twój sygnał kupna opiera się na określonej cenie, a cena ta pojawia się w dolnej części dużej linii K, to bez względu na wszystko, cena po wejściu. rynek może spaść o 2–3 punkty procentowe. Najgorsze może wynosić zaledwie 4 punkty procentowe, a zamówienia kupna są na czubku igły. Jeśli jednak sprzedajesz, osiągniesz zyski przekraczające Twoje oczekiwania. Jednak zgodnie z prawem Murphy'ego spadający chleb zawsze ląduje na stronie posmarowanej masłem. W dłuższej perspektywie istnieje duże prawdopodobieństwo, że poślizg będzie większy.
Dobrą rzeczą jest jednak to, że zdarza się to tylko ograniczoną liczbę razy. Dopóki strategia jest dobra, a poślizg jest większy, jest to po prostu realizacja zysków i nie będzie miała wpływu na długoterminowe dodatnie zyski. To jakby przetrwać jeszcze jeden szok i zmęczenie.
Jednym ze sposobów uniknięcia tego problemu jest użycie protokołu websocket w celu uzyskania najnowszej ceny. W dokumencie jest napisane, że aktualizuje się co 250 milisekund, ale czasami w rzeczywistości aktualizuje się szybciej, więc można zareagować natychmiast. Kolejną zaletą websocket jest to, że nie zajmuje on limitu częstotliwości interfejsu Restful API giełdy. Jest to szczegółowo omówione później.
2. Wycena godzinowa
Spotyka się to z wieloma strategiami trendów, ponieważ większość z nich wykorzystuje cenę pozycji przełącznika do obliczenia sygnałów wejścia i wyjścia. Następnie, gdy tylko minie godzina, wszyscy jeden po drugim zaczynają.
Co godzinę, zwłaszcza wielokrotność 8, ponieważ niezależnie od cyklu, w jakim stosujesz strategię, wszystkie te trzy punkty powinny osiągnąć wspólny czas dzielnika. Być może zautomatyzowane strategie wszystkich osób zostaną zastosowane, a wysokie, średnie i niskie częstotliwości zostaną ściśnięte razem generować własne sygnały, swoich konkurentów.
Dodatkowo w tym momencie giełda również potrzebuje rozliczenia i dostawy. Pomimo niedostarczenia umowy wieczystej, mogą nastąpić inne operacje w celu obliczenia opłaty kapitałowej za dostawę. Przez około 6 sekund po trzech godzinach 8.00.16, gniazdo internetowe Binance nie przesyłało informacji K-line, przestało! Po prostu zapytaj, co robić? W rzeczywistości często nie ma rozwiązania.
Co poważniejsze, rynek odczuje rezonans, zwłaszcza gdy rynek spada, a panika będzie bardziej zaraźliwa. Serwery giełdy są jeszcze bardziej obciążone, a wiele małych monet w trudnych warunkach rynkowych natychmiast przestaje działać i wszystkie zawierają błędy 1001. Jeśli złożysz zamówienie w pośpiechu i odniesiesz sukces, zlecenia wymienione na czubku szpilki mogą być Twoje.
Dlatego poślizg jest naprawdę nieunikniony. To los. Po prostu zaakceptuj to. Nadmierna optymalizacja kodu nie będzie zbyt przydatna. Jak wspomniano wcześniej, potraktuj to jako kolejny stop-loss.
Istnieje jednak również kilka wskazówek, którymi warto się podzielić.
Zanik sygnału można obliczyć z wyprzedzeniem n sekund przed godziną. W tym momencie zator jeszcze się nie rozpoczął, ponieważ większość zautomatyzowanych strategii może poczekać, aż pojawi się cena zamknięcia linii K na godzinę, zanim zacznie obliczać sygnał. Jednak problem spowodowany tą operacją polega na tym, że może generować fałszywe sygnały. Na przykład cena natychmiast się cofa. Sygnał nie powinien być dostępny i pojawia się fałszywy alarm. W tym momencie od twojego wyboru zależy, czy chcesz to zrobić, czy nie. Można jednak dodać określony próg i uruchomić go po jego przekroczeniu, aby zapobiec fałszywym sygnałom wywołanym krótkoterminowymi zwrotami cen. Poślizg można nieco zmniejszyć.
Istnieje również metoda wykorzystania sygnałów przesunięcia, takich jak przesunięcie czasowe lub przesunięcie linii k, która nie generuje sygnałów co godzinę, nie miesza się z innymi i lepiej pozwala uniknąć zatłoczenia. Istnieją również metody takie jak TWAP.
Wymaga to jednak pewnych umiejętności i sprawi, że rzeczywisty kod będzie trudniejszy.
oferta firmy
Podstawowa strategia CTA o średniej i niskiej częstotliwości Ogólnie rzecz biorąc, rzeczywisty kod jest bardzo prosty. Dla odmiany istnieje tylko jedna strategia, nie ma dodawania ani odejmowania pozycji ani nie miesza się ze sobą informacji krzyżowych. Wtedy kod lokalny nie musi utrzymywać żadnego stanu, bo centrala rejestruje wszystko za Ciebie. Czy jest pozycja, ile wymaganego depozytu zabezpieczającego, czy zlecenie zostało zrealizowane, itp. Ponieważ jest to średnia lub niska częstotliwość, możesz sprawdzić informacje o koncie giełdy w dowolnym momencie, kiedy zajdzie taka potrzeba, a jest to najbardziej natychmiastowe i dokładne. Eliminuje to problem korzystania z lokalnej bazy danych do rejestrowania statusu transakcji.
Ta prosta strategia jest w rzeczywistości wykonalna, ale problem polega na tym, że zniesienie może być większe, niewystarczająco zróżnicowane, a ryzyko jest wysokie. Pojedynczy produkt może nie mieć rynku, podlegać wahaniom i zmianom bez odwrotu lub napotkać ekstremalne warunki rynkowe, a na krzywej kapitałowej pojawi się kolejna duża dziura. Jeśli potraktujesz to poważnie, przestraszysz się i zatrzymasz swoją strategię, jeśli nie będziesz mógł tego znieść. Jeśli potraktujesz to lekko, doświadczenia handlowe będą znacznie gorsze. Należy pamiętać, że wszystko to odbywa się pod warunkami rozsądnych stanowisk. W przeciwnym razie, jeśli pozycja jest zbyt lekka, zniesienie będzie niewielkie, ale dochód również zostanie zmniejszony, a zysk i strata będą pochodzić z tego samego źródła, a szkoda będzie przegapić okazję, jeśli pozycja będzie; zbyt ciężki, będzie to błąd i prędzej czy później będzie skończony.
Zaleca się jednak, aby nowicjusze rozpoczęli od wdrożenia tej strategii w czasie rzeczywistym. Tylko dzięki praktyce możesz szybko poprawić swój poziom handlu. Pamiętaj jednak, aby utrzymać lekką pozycję, a dźwignia powinna być niższa. Najlepiej nie używać dźwigni, aby móc utrzymać pozycję przez dłuższy czas.
Jeśli chcesz zachować się bardziej profesjonalnie, zmniejszyć ryzyko jednopunktowe, krzywa kapitału będzie gładsza i będziesz mniej się martwić, kiedy zostanie złożona oferta (jak wspomniano wcześniej, przy rozsądnych pozycjach jest to w rzeczywistości bardzo ważne, ponieważ łatwiej jest trzymać się strategii i czekać, aż pojawi się ryzyko) jest to generalnie model wieloodmienny, wielostrategiczny, wieloparametrowy, a wtedy następuje dodawanie i odejmowanie pozycji. Nie musi to koniecznie oznaczać dodawania lub odejmowania pozycji w ramach jednej strategii, ale można to również osiągnąć za pomocą wielu strategii podrzędnych, aby uzyskać efekt dodawania lub odejmowania pozycji. Jednak w tym przypadku strategia będzie bardziej zatłoczona. Jeśli chcesz także zminimalizować poślizg pozycji otwierania i zamykania, złożoność kodu gwałtownie wzrośnie.
Porozmawiajmy o trudnościach, jakie stwarza ten model wieloodmienny, wielostrategiczny i wieloparametrowy.
trudność
1. Limit częstotliwości API
Pierwszą trudnością związaną z wieloma strategiami jest limit częstotliwości API. Istnieje wiele odmian i strategii, aby uzyskać w czasie rzeczywistym ceny, pozycje, zamówienia i inne informacje, musisz stale odwiedzać giełdę. Jak wspomniano wcześniej, jeśli częstotliwość jest niska i wolna, uzyskana cena może nie być najnowsza, a poślizg może być znacznie większy.
Zasoby serwera giełdy są ograniczone, dlatego istnieje ograniczenie częstotliwości dostępu do API. Limit Binance wynosi 2400 na minutę, potem obowiązuje limit 10 sekund i istnieją inne tak zwane tryby uczenia maszynowego do wykrywania złośliwego zachowania. W każdym razie to na pewno nie zadziała, jeśli będzie zbyt częste nie zadziała, wymiana ma ostatnie słowo. W tym przypadku, wiesz, nie ma złotego środka.
Chociaż mówi się, że jest to 2400, przetestowałem to przypadkowo, używając współbieżności. Jeśli zażądam K linii, nawet jeśli jest to najkrótsze 99 linii na raz (waga API wynosi 1), to jeśli zażądam około 75 monet jednocześnie. , zostanę zbanowany na kilka minut. Dlatego nie można łatwo kwestionować ograniczeń.
Jeśli go naruszysz, otrzymasz 429, 418 błędów, a Twoje IP zostanie zablokowane na kilka minut do kilku dni. W tej chwili, jeśli masz pozycję, będzie to marne (nie ma ograniczeń w składaniu zamówień , zwłaszcza likwidacja istniejących pozycji, ale nie masz informacji o cenie, chyba że jest też websocket).
Rozwiązaniem tego problemu jest wykorzystanie websocket do pozyskiwania danych, tak aby giełda mogła je aktywnie przekazywać w odpowiednim czasie, bez zajmowania API. Może zmniejszyć część poślizgu. Problem polega na tym, że musisz utrzymywać kolejne centrum rynkowe oparte na websockecie. Trudność kodu na żywo wzrosła i stała się bardziej skomplikowana. Nie wolno go odłączać przez 24 godziny, a jeśli zostanie odłączony, musi zostać automatycznie ponownie podłączony w odpowiednim czasie itp.
2. Stan strategii
Jak wspomniano wcześniej, jeśli strategie staną się bardziej złożone, musisz zarejestrować status każdej strategii. W przeciwnym razie pozycje giełdy nie będą wiedzieć, która strategia została otwarta, ile każda została otwarta itp. A jeśli chcesz przejrzeć to później, będziesz musiał zapisać więcej danych.
W tym momencie trzeba wprowadzić bazę danych (oczywiście można też wykorzystać rekordy plików, ten sam pomysł).
Wprowadzenie bazy danych powoduje problemy związane z bazą danych. Jest to jednak podobne do tworzenia oprogramowania w innych branżach i nie ma w sobie nic nowego. Zwłaszcza w branży e-commerce, bo chodzi o salda funduszy, zarządzanie zamówieniami i inne podobne rzeczy, osoby nie mające doświadczenia mogą przeczytać takie książki i artykuły.
Należy zauważyć, że wiele kroków wymaga wykonania niepodzielnych operacji podobnych do transakcji w bazie danych, to znaczy wykonania zestawu operacji lub wszystkich z nich. Gdy dany krok się nie powiedzie, nie trzeba nic robić i przywrócić pierwotny stan.
Następnie, ponieważ w końcu jest to transakcja na prawdziwe pieniądze, w przypadku operacji na bazach danych zawierających informacje o zamówieniach najlepiej jest zastosować najwyższy z czterech poziomów izolacji, Serializable, aby wyeliminować możliwość wszystkich brudnych odczytów, niepowtarzalnych odczytów i fantom czyta. Oznacza to, że do odczytu i zapisu kluczowych informacji w bazie danych nie jest używana współbieżność, wielowątkowość ani nawet asynchronizacja. Wszystkie operacje są wykonywane w jednym wątku. Realizacja operacji.
Nie traktuj lekko wyzwania programowania współbieżnego. Jeśli w tego rodzaju systemie występuje problem, prawdopodobnie nie da się go naprawić. Jest to najtrudniejszy błąd do znalezienia w procesie tworzenia oprogramowania. Ci, którzy potrafią dobrze wykonać tego rodzaju pracę, to programiści z miesięczną pensją ponad 50 000.
Niewiele przychodzi mi do głowy, które korzystają z wielowątkowości lub asynchronii (wielowątkowość i asynchronia, zaleca się stosowanie wielowątkowości, ponieważ asynchronia jest w Pythonie jak choroba zakaźna. Raz użyta musi zostać użyta w łańcuch połączeń) Naprawdę korzystne jest wysyłanie sygnałów ostrzegawczych DingTalk i tym podobnych. Ponieważ usługa DingTalk znajduje się w Chinach, a serwery wymiany walut znajdują się za granicą, Twój serwer kodów powinien zostać wdrożony za granicą, bliżej giełdy, więc podczas wysyłania DingTalk czasami zwrot zajmuje kilka sekund, a czasami jest nawet blokowany trwa dłużej niż dziesięć sekund.
w końcu
W rzeczywistości nie ma znaczenia, jeśli nie możesz zrobić wielu rzeczy. O ile masz świadomość zaakceptowania większego poślizgu, możesz wypłacić prawie 1/5 lub nawet więcej zysków. Najważniejszą rzeczą jest strategia. Oczekiwanie pozytywnych zysków i możliwość działania bez przestojów jest kluczem.
Krótko mówiąc, pierwszym priorytetem solidnej oferty jest kontynuacja i stabilna realizacja ustalonej logiki strategii. Poślizg jest częścią handlu, po prostu spróbuj go zmniejszyć, o ile nie zerwie mięśni.
Strategia pierwsza klasa, 2 i 3 strumienie są realizowane, nie ma większego problemu. Ale jeśli strategia nie jest zgodna ze standardem, najlepszy prawdziwy kod handlowy nie pomoże, a strata nadal będzie stratą. Dlatego samo napisanie dobrego kodu nie może zapewnić dobrego handlu ilościowego. Strategia jest dobra, a kod na żywo jest solidny. Oczywiście jest najlepszy. Jednakże, gdy czas jest ograniczony, skup się na strategii.
Ciąg dalszy nastąpi