Poprzedni artykuł Hard-Core Information – Szczegóły i przemyślenia na temat zautomatyzowanej oferty rzeczywistej w ilościowym systemie handlu (I. Problemy i trudności) mówił o kilku podstawowych problemach realnego handlu w kręgu walutowym. W tym artykule omówiono główny cel oferty firmy.
Myślę, że są cztery główne:
1. Wdrażaj ustaloną logikę strategii
Nie ma co do tego wątpliwości. Gdy pojawi się sygnał, należy wykonać odpowiednie operacje, pozycje otwarcia i zamknięcia. Ten punkt wymaga, abyś nie korzystał ze zleceń z limitem. W przeciwnym razie, jeśli transakcja nie może zostać zrealizowana, będziesz musiał gonić za zleceniem. Ostatecznie cena może zajść za daleko .
Na dłuższą metę poślizg spowodowany korzystaniem ze zleceń rynkowych jest mniej więcej podobny do poślizgu spowodowanego okazjonalnym brakiem zleceń z limitem, ale gonią za zleceniami, zatem lepiej jest wchodzić i wychodzić z rynku bezpośrednio, chyba że Twoja strategia jest bardzo specjalna.
Ponadto, jeśli korzystasz ze zleceń z limitem, Twój kod będzie bardziej skomplikowany, ponieważ musisz zarządzać niewypełnionymi zleceniami z limitem, a następnie ścigać zamówienia. A co jeśli wypełniona zostanie tylko część zlecenia z limitem? Czy pozostałe zlecenia z limitem zawsze są zawieszone? A może powinienem pominąć tę część i wydać kolejne zlecenie rynkowe? Tego rodzaju jednoetapowa operacja generuje wiele zleceń transakcyjnych, a późniejsza weryfikacja również jest kłopotliwa i łatwo się pomylić. Dlatego lepiej jest po prostu skorzystać ze zlecenia rynkowego. Dopóki złożenie zamówienia zakończy się pomyślnie, transakcja będzie w zasadzie gwarantowana. Jeśli rzeczywiście jest to strategia wrażliwa na poślizg, handluj wyłącznie celami o dobrej płynności.
Ponadto, jeśli chodzi o kontrakty, nie zmieniaj dźwigni według własnego uznania. Najlepiej jest obniżyć idealną dźwignię na potrzeby weryfikacji historycznej o 20%. Nie prognozuj rynku subiektywnie i dostosowuj dźwignię ręcznie. Zmiana pozycji jest również tematem tabu w handlu automatycznym.
Najlepiej automatycznie wygrać lub przegrać i zmniejszyć pozycję, gdy zniesienie osiągnie określony poziom, należy zmniejszyć dźwignię. Nie rób odwrotnie, myśląc, że wkrótce nadejdzie wiatr i zwiększ dźwignię (ale możesz zwiększyć dźwignię kwoty głównej i zmniejszenia dźwigni). Najważniejszą rzeczą jest utrzymanie konta przy życiu, więc najpierw bądź niepokonany. Możesz poczekać, aż krzywa kapitału minie okres zniesienia, zanim ponownie dodasz dźwignię. Jeśli jednak zastosuje się model odsetek składanych, jest to już prosty, automatyczny kontrakt wygrywający i przegrywający.
2. Zminimalizuj poślizg
Zostało to wspomniane w poprzednim artykule. Poślizgu nie da się wyeliminować, można go jedynie złagodzić. Wymaga to jak najszybszego uzyskania informacji o cenie rynkowej, a także informacji o różnych funduszach i pozycjach na rachunku giełdowym, abyś mógł szybko zareagować.
Jeśli chodzi o ogólną strukturę realnej oferty, podstrategii jest wiele i wymaga to terminowego pozyskiwania różnych informacji, dlatego potrzebne jest dedykowane centrum rynku websocket, które podzieliłoby zadania. Wyposażony w centrum rynkowe Restful Plan B do tworzenia kopii zapasowych. W ten sposób, jeśli websocket zostanie odłączony i nie będzie można go podłączyć, nadal będzie dostępna stosunkowo nowa cena, która pozwoli ocenić, czy konieczne jest opuszczenie rynku. Biegając, trzeba być szybkim. Lepiej biec w złym kierunku, niż utknąć w korku i nie wiedzieć, co przyniesie przyszłość.
3. Długotrwała eksploatacja
Zostało to wspomniane w poprzednim artykule. Krąg walutowy działa 24 godziny na dobę, 7 dni w tygodniu, a Twojego kodu nie można zamknąć. Wymaga to, aby kod nie był przerywany przez różne zgłaszane wyjątki i aby istniał kod obsługujący różne nieoczekiwane sytuacje. Nie powinno też być żadnych błędów takich jak wycieki pamięci, w przeciwnym razie program z czasem ulegnie awarii, a nawet cały serwer zostanie wyłączony. Na szczęście Python nie jest podatny na takie problemy. Posiada mechanizm automatycznego recyklingu pamięci. Jeśli to nie zadziała, możesz ręcznie ponownie uruchomić program handlowy codziennie lub przez kilka dni. W każdym razie jest to handel o średniej i niskiej częstotliwości. Są to podstawowe wymagania dotyczące tworzenia kodu zaplecza i są łatwe do osiągnięcia.
Ogólnie rzecz biorąc, handel ilościowy wykorzystuje Python. Główną cechą Pythona, języka skryptowego, jest dynamiczna kompilacja, która ma nieco niższą wydajność działania, ponieważ nie jest łatwa do debugowania, ponieważ jest kompilowana i wykonywana w tym samym czasie (ale nie będzie miała wpływu na transakcje o średniej i niskiej częstotliwości w Wszystko). Jeśli istnieje problem ukryty w logice kodu, może nie być łatwo go wykryć. Na przykład, jeśli kod ma 100 linii i występuje problem w linii 99, ale za każdym razem kończy się on tylko do linii 95, to problem nie zostanie wykryty, ponieważ błąd musi zostać znaleziony po przejściu do linii 99 i wywołaniu odpowiedni kod. Ale może być już za późno i program ulegnie bezpośredniej awarii, jeśli nie spróbujesz złapać wyjątku.
Problem wspomniany powyżej faktycznie obejmuje inną funkcję. Ponieważ język Python jest silnie typowany, niejawne konwersje są rzadkie. Jeśli za bardzo ufasz typowi danych wysyłanych przez serwer, zwłaszcza liczbom, prawdopodobnie poniesiesz stratę, ponieważ czasami liczby staną się ciągami znaków. Różne waluty na giełdzie, różne wersje API i te same dane zwrotne z websocket i reszty mogą być różnych typów. Dlatego w zasadzie za każdym razem trzeba wymusić transformację, lub najpierw ustalić, czy transformacja jest konieczna.
Nie mieszaj także pozycji otwierających i zamykających w przypadku różnych strategii, zwłaszcza tych związanych z tą samą walutą, i postaraj się je odizolować. W przeciwnym razie, w niektórych ekstremalnych warunkach rynkowych, strategia A zamknie pozycję strategii B, co ostatecznie doprowadzi do rozbieżności. Być może będziesz musiał przerwać prawdziwą ofertę i zacząć od nowa, co będzie niespójne i możesz przegapić kluczowe trendy rynkowe.
Jednym słowem wszystko służy długoterminowemu, w pełni zautomatyzowanemu i bezinterwencyjnemu działaniu prawdziwej transakcji.
Jeśli jednak strategia jest zbyt złożona, osiągnięcie pełnej wydajności bez interwencji może nie być łatwe. Uproszczenie strategii jest również punktem wyjścia, nie komplikuj jej zbyt mocno. Na przykład sygnałów takich jak OBV należy używać oszczędnie, ponieważ OBV musi śledzić długoterminowe informacje o cenach i wolumenach, a prawdziwy handel wymaga utrzymywania zbyt dużej ilości danych. Każde przerwanie i ponowne uruchomienie jest kłopotliwą sprawą. W ostateczności unikaj takich czynników.
4. Kontrola ryzyka
Jest to najwyższy priorytet wymagań ofertowych firmy.
Najbardziej niebezpieczną rzeczą jest brak możliwości zamknięcia pozycji. Rynek poszedł w przeciwnym kierunku i nadal szalał. W rezultacie Twój kod wyjścia wymknął się spod kontroli. Bez względu na przyczynę, pozycja została zamknięta ze stratami. W kręgu walutowym altcoiny mogą w krótkim czasie wzrosnąć kilkukrotnie. Dlatego w przypadku krótkiej sprzedaży, nawet jeśli nie korzystasz z dźwigni i nadal masz połowę pozycji, myśląc, że nie masz się czym martwić, pozycja mogła zostać rano wymazana.
Dlatego konieczne jest zapewnienie skuteczności mechanizmu wyjścia. Jeśli przegapisz okazję do otwarcia pozycji, przynajmniej nie będzie to fatalne w skutkach. Jeśli przegapisz okazję, będzie co najwyżej szkoda, ale jeśli przegapisz okazję do zamknięcia pozycji, pojawią się duże problemy.
Oto pokrótce dwa rozwiązania, a opowiem o nich szczegółowo później, gdy będę miał czas.
Po pierwsze, najlepiej jest mieć twardy stop loss, który jest podobny do stop lossa ze stałym współczynnikiem strat. Na przykład, jeśli duża waluta straci więcej niż 10%, a mała waluta straci 15%, pozycja zostanie natychmiast zamknięta i ucieknie.
W przypadku metody twardego stop-loss cena stop-loss powinna zostać ustalona w momencie otwarcia pozycji. Dlatego algorytmiczne zlecenia stop-loss (niektóre zwane także zleceniami warunkowymi) należy składać jak najszybciej po otwarciu pozycji i nie ma potrzeby zmiany ceny w połowie. W ten sposób giełda pomoże Ci monitorować cenę w czasie rzeczywistym, a następnie pomoże Ci złożyć zlecenie rynkowe na wyjście z rynku po jego uruchomieniu. W tym podejściu może wystąpić duży poślizg, ale jest bardziej prawdopodobne, że będzie ono bardziej stabilne i niezawodne niż stop loss, który sam ustawisz. Nawet jeśli coś pójdzie nie tak i nie zostanie to uruchomione, nadal możesz udać się na giełdę roszczenie sobie praw (więc musisz udać się do najwyższej giełdy).
Oczywiście tego rodzaju stop loss służy do pokrywania dna i powinien być uruchamiany rzadko. Najlepiej jest kontrolować moment wyjścia zgodnie z własną strategią, aby zniesienie było prawdopodobnie mniejsze.
Po drugie, program nie będzie otwierał pozycji losowo. Nie otwieraj pozycji w sposób ciągły, myśląc, że tak nie jest, co może zakończyć się otwarciem dużej ekspozycji. Nie ma problemu, jeśli cena nie zmienia się w krótkim czasie. Można ręcznie interweniować, aby to skorygować. Jeśli nagle się odwróci, Twoja pozycja może zostać zlikwidowana. Zależy to od liczby otwartych pozycji. Oczywiście jest to błąd niskiego poziomu, ale jednak się zdarza. Zwłaszcza po iteracji i aktualizacji kodu w połowie może to nie zostać dokładnie rozważone.
W takim przypadku należy najpierw zwolnić tempo otwierania pozycji i poczekać na powrót wyników otwarcia pozycji. Pamiętaj także o sprawdzeniu i potwierdzeniu informacji o koncie przed otwarciem pozycji. Nie otwieraj pozycji w sposób ciągły. Oczywiście możesz także rejestrować wszystkie operacje lokalnie, co pozwoli zaoszczędzić liczbę żądań API i czas potrzebny na sprawdzanie giełdy. własny stan konta.
Ponadto, bardziej efektywnie, możliwe jest wcześniejsze ograniczenie maksymalnej dźwigni giełdy. Można to dostosować samodzielnie. Binance domyślnie wynosi 20 razy, ale możesz to zmienić na 3 lub nawet 2 razy (oczywiście wymaga to, aby sama Twoja strategia nie korzystała z dużej dźwigni, w przeciwnym razie nie będziesz mógł otworzyć wysokiej dźwigni wtedy, gdy powinieneś). Zatem niezależnie od tego, jak szalony jest kod, nie da się stworzyć dużej ekspozycji podczas snu. To jest bezpieczniejsze.
Krótko mówiąc, czasami prawdziwą ofertą jest nie tylko kod transakcji, ale także konieczność wyznaczenia innych linii obrony, aby zapobiec przedostawaniu się zdarzeń czarnego łabędzia. Nigdy nie traktuj tego lekko i staraj się uszczelnić martwe punkty.