Průvodce krok za krokem k vytvoření obchodního bota v libovolném programovacím jazyce

Odtud můžeme začít určovat, jak bude vypadat naše architektura.

Nejprve potřebujeme proměnnou, která bude označovat stav, ve kterém se bot právě nachází. To je buď BUY, nebo SELL. Tomuto účelu by měl dobře vyhovovat boolean nebo enum.

Poté musíme nastavit naše prahové hodnoty pro nákup a prodej. Ty udávají procentuální pokles nebo nárůst ceny od doby, kdy jsme naposledy provedli operaci.

Příklad pokud jsem nakoupil aktivum za 100 USD a jeho cena je nyní 102 USD, máme 2% nárůst. Pokud máme nastavenou prahovou hodnotu SELL na 1% nárůst, náš bot pak bude prodávat, protože dosáhl zisku nad naší prahovou hodnotou.

V našem případě budou tyto prahové hodnoty konstantní. Potřebujeme je 4, dvě pro každý stav:

Prahové hodnoty BUY (pokud je bot ve stavu SELL)

  • DIP_THRESHOLD : Koupí aktivum, pokud jeho cena klesla o více než prahovou hodnotu. Smyslem tohoto postupu je dodržet strategii „buy low, sell high“, kdy se snažíte koupit aktivum, když je podhodnocené, a očekáváte, že jeho hodnota vzroste, abyste mohli prodat.
  • UPWARD_TREND_THRESHOLD : Kupuje aktivum, pokud jeho cena vzrostla o více než prahovou hodnotu. To je v rozporu s filozofií „nakupovat nízko, prodávat vysoko“, ale cílem je identifikovat, kdy cena roste a my nechceme propásnout příležitost k nákupu dříve, než se ještě zvýší.

Tady je obrázek, který by vám mohl pomoci:

Obrázek od autora

Pokud jsme provedli operaci SELL v bodě označeném „SELL“ na obrázku výše, máme nyní nastavené prahové hodnoty pro operaci buy.

Pokud se cena někdy dostane pod spodní zelenou čáru nebo nad horní zelenou čáru, provedeme operaci NÁKUP. V tomto případě jsme nejprve překročili horní prahovou hodnotu, takže jsme nakoupili na základě BUY_DIP_THRESHOLD .

Práhové hodnoty pro prodej (pokud je bot ve stavu KOUPIT)

  • PROFIT_THRESHOLD : Prodá aktivum, pokud jeho cena vzrostla nad prahovou hodnotu od doby, kdy jsme ho koupili. Tímto způsobem dosahujeme zisku. Prodáváme za vyšší cenu, než jsme nakoupili.
  • STOP_LOSS_THRESHOLD : V ideálním případě bychom chtěli, aby náš bot prodával pouze tehdy, když dosáhne zisku. Možná však trh právě výrazně klesá a my chceme vystoupit, než bude pozdě, a pak nakoupit za nižší cenu. Proto tento práh slouží k prodeji se ztrátou, ale s cílem zabránit větší ztrátě.

Tady je ilustrace:

Image By Author

Zde jsme nakoupili v bodě označeném „BUY“. Poté jsme dosáhli horní hranice dříve než spodní, což znamená, že jsme prodali naše aktivum se ziskem. Takto obchodní boti vydělávají peníze.

Teď už máme základní představu o tom, jak bot funguje, takže se pustíme do (pseudo)kódu.

Pomocné funkce API

První věc, kterou náš bot potřebuje, jsou pomocné funkce pro získání dat z rozhraní API burzy. Potřebujeme:

Výše uvedené by mělo být samozřejmé, ale musíte se ujistit, že víte, jaké měny si API POSTžádá při provádění operace nákupu nebo prodeje.

Často se stává, že například při obchodování USD za zlato můžete zadat buď kolik zlata chcete koupit, nebo kolik USD chcete prodat. Správné určení měn je velmi důležité.

Cyklus smyčky bota

Teď, když máme naše pomocné funkce, začněme definovat pracovní postup bota. První věc, kterou potřebujeme, je nekonečná smyčka s určitou dobou spánku. Řekněme, že chceme, aby se bot pokusil provést operaci každých 30 sekund. Takto by to mohlo vypadat:

Poté nastavíme proměnné a konstanty, o kterých jsme mluvili, a také rozhodovací tok. Pomineme-li pomocné funkce API, náš kód by nakonec vypadal takto:

Poznámka: Hodnoty pro prahové hodnoty jsou zde pouze libovolné. Měli byste si zvolit vlastní podle své vlastní strategie.

Pokud výše uvedené spárujeme s pomocnými funkcemi a funkcí smyčky, která by mohla být také main , měli bychom nyní mít sami základní pilíře fungujícího bota.

Při každé iteraci náš bot zkontroluje svůj aktuální stav (Koupit nebo Prodat) a pokusí se provést obchod na základě natvrdo zakódovaných prahových hodnot. Poté aktualizuje stav BUY/SELL a poslední cenu pro operaci.

Pak to udělá celé znovu.

Krok 5: Vyleštění bota

Foto: Matthew Dockery

Základní architektura našeho bota je hotová, ale pravděpodobně bychom ještě mohli zvážit přidání několika věcí.

Záznamy

Když jsem poprvé vytvářel variantu tohoto bota, jednou z věcí, která pro mě byla zásadní, bylo neustálé zaznamenávání akcí bota jak do terminálu, tak do samostatného souboru protokolu.

Při každém kroku jsem vytvářel takovéto logy:

 USD Balance = 22.15$
Bought 0.002 BTC for 22.15 USD
Last Operation Price updated to 11,171.40 (BTC/USD)
Could not perform SELL operation - Insufficient balance

K logům, které šly do souboru, se přidávala i časová značka, takže když jsem po celém dni přistupoval k serveru a našel například chybu, mohl jsem ji dohledat přesně tam, kde se stala, stejně jako zjistit vše ostatní, co bot po cestě udělal.

To by mělo být otázkou nastavení funkce createLog, která se volá při každém kroku. Něco takového:

Identifikace trendů

Hlavním cílem našeho bota by měl být nákup za nízkou cenu a prodej se ziskem. Máme však dva prahy, které této myšlence tak trochu odporují:UPWARD_TREND_THRESHOLD a STOP_LOSS_THRESHOLD .

Tyto prahy nám údajně říkají, kdy bychom měli prodávat se ztrátou nebo nakupovat při růstu ceny. Myšlenka je taková, že se snažíme identifikovat trendy, které se vymykají obecné strategii, ale mohou být pro nás škodlivé nebo výhodné, takže bychom měli jednat.

Způsob, jakým jsem to výše strukturoval, je však poměrně omezený. Statický snímek ceny není zdaleka ukazatelem trendu.

Naštěstí to lze bez větších potíží udělat trochu spolehlivěji.

Jediné, co musíte udělat, je také sledovat více cen než jen lastOpPrice . Můžete například sledovat cenu před 10 nebo 20 iteracemi a porovnávat ji s aktuální cenou místo lastOpPrice . To by pravděpodobně bylo lepší při identifikaci trendu, protože se kontrolují spíše rychlé posuny v ceně než posun, ke kterému došlo během dlouhého časového období.

Databáze?

Když je spuštěn, tento jednoduchý bot vlastně nepotřebuje databázi, protože zpracovává velmi málo dat a může všechny informace uchovávat v paměti.

Co se však stane, když bot například selže? Jak by mohl určit hodnotu lastOpPrice, aniž byste ji ručně zkontrolovali?“

Abyste předešli ruční práci na vaší straně, možná budete chtít udržovat nějakou lehkou databázi, která bude sledovat několik věcí, například lastOpPrice .

Takto bude bot při spuštění namísto použití výchozích hodnot skutečně kontrolovat své uložené hodnoty a od nich bude pokračovat.

Záleží na tom, jak moc to chcete zjednodušit, můžete dokonce uvažovat o „databázi“ .txt nebo json souborů, protože možná stejně budete ukládat jen několik hodnot.

Dashboard

Foto: Luke Chesser

Pokud chcete usnadnit vizualizaci operací svého bota, a také jej spravovat, aniž byste museli vstupovat do kódu a ručně se v něm vrtat, můžete zvážit připojení svého bota k ovládacímu panelu.

To by vyžadovalo, aby byl váš bot připojen k vlastnímu webovému serveru/API, který vám umožní ovládat jeho funkce.

Takto byste mohli například snadněji měnit prahové hodnoty.

K dispozici je mnoho bezplatných šablon ovládacích panelů, takže si ani nemusíte vytvářet vlastní. Podívejte se na Start Bootstrap a Creative Tim, kde najdete několik příkladů.

Testování strategií na minulých datech

Mnoho burz vám nabídne přístup k datům o minulých cenách, stejně jako tato data můžete v případě potřeby obvykle snadno získat jinde.

To je velmi užitečné, pokud chcete otestovat svou strategii předtím, než ji uvedete do provozu. Můžete spustit simulaci svého bota s minulými daty a „falešnými penězi“, abyste zjistili, jak dobře by vámi definované prahové hodnoty fungovaly, a upravit je pro skutečný obchod.

Další body k prahovým hodnotám a příkazům

Při zadávání příkazů si musíte dát pozor na několik věcí.

Především byste měli pochopit, že existují dva typy příkazů: limitní a tržní příkazy. Pokud nejste s těmito pojmy obeznámeni, měli byste si o nich něco přečíst, ale základní přehled vám poskytnu zde.

Tržní příkazy jsou příkazy, které se provádějí za aktuální tržní cenu a ve většině případů se fakticky provedou okamžitě.

K limitním příkazům naopak dochází, když zadáte příkaz za cenu nižší než tržní (v případě příkazu BUY) nebo vyšší než tržní (v případě příkazu SELL). Jejich provedení není zaručeno, protože cena nemusí dosáhnout vámi stanovené hranice.

Výhodou limitních příkazů je, že můžete předvídat pohyby trhu a zadat příkaz týkající se toho, kam očekáváte, že se trh vydá dříve, než k takovému pohybu dojde.

Kromě toho se na limitní příkazy obvykle vztahují nižší poplatky než na tržní příkazy. Je to proto, že tržní příkazy podléhají tomu, čemu se běžně říká „poplatek takera“, zatímco limitní příkazy podléhají „poplatkům makera“.

Důvodem těchto názvů a příslušných poplatků je to, že tržní příkazy pouze přijímají („berou“) aktuální tržní cenu, zatímco limitní příkazy mimo tržní cenu přidávají likviditu, a tedy „vytvářejí trh“, za což jsou „odměněny“ nižšími poplatky.

Všimněte si, že bot v tomto článku se nejlépe hodí pro tržní příkazy.

Nakonec k tématu poplatků: při nastavování svých PROFIT_THRESHOLD , nezapomeňte brát v úvahu poplatky.

Abyste dosáhli zisku, musíte provést operaci BUY a následně SELL, čímž se na vás vztahují 2 poplatky.

Jako takoví se musíte ujistit, že prodáváte se ziskem, až když jste schopni alespoň pokrýt své poplatky, jinak budete ve skutečnosti ve ztrátě.

Přemýšlejte o tom, že za předpokladu, že by poplatky byly paušální, pokud byste nakoupili aktivum za 100,00 USD s poplatkem 0,50 USD a pak ho prodali za 100,75 USD, opět s poplatkem 0,50 USD, dosáhli byste hrubého zisku 0,75 %, ale ve skutečnosti byste měli čistou ztrátu 0,25 %.

Teď si představte, že by váš bot prodával vždy s čistou ztrátou. Poměrně rychle byste přišli o spoustu peněz…

Závěrečné poznámky

To je pro našeho bota vše. Doufám, že tento tutoriál byl užitečný.

Záměrem bylo zaměřit se na všechny koncepty, které potřebujete znát k sestavení obchodního bota, i když jste nikdy předtím neobchodovali, ne vás naučit programovat.

Předpokládáme, že všichni čtenáři jsou schopni provádět HTTP požadavky v jazyce, který si zvolili, takže by bylo nejlepší zaměřit se na jiné aspekty.

Je to první tutoriál, který jsem takto napsal (založený na pseudokódech), takže mi prosím dejte vědět, jak se vám koncept líbil.

Děkuji za přečtení! A pokud si myslíte, že byl tento článek užitečný, klidně mě podpořte nějakým potleskem 👏👏.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.