Sestavte si algoritmus pro denní obchodování a spusťte ho v cloudu pouze pomocí bezplatných služeb

Nejprve si pomocí tohoto příkazu stáhněte skript z GitHubu:

git clone https://github.com/alpacahq/Momentum-Trading-Example.git

Nyní si ho můžete otevřít ve svém oblíbeném textovém editoru a postupovat podle něj. Všimněte si, že poblíž horní části souboru jsou umístěny zástupné symboly pro informace o vašem rozhraní API – ID klíče, tajný klíč a adresa URL, ke které se chcete připojit. Všechny tyto informace můžete získat z ovládacího panelu aplikace Alpaca.

Váš tajný klíč po zobrazení zmizí, proto si ho uložte na bezpečné místo. Pokud jej však ztratíte, můžete vždy přegenerovat svůj klíč API a získat nový tajný klíč.

Nahraďte zástupné řetězce vlastními informacemi a skript je připraven ke spuštění. Než jej však necháme sáhnout i na (zcela vymyšlené) peníze vašeho simulovaného účtu, projdeme si, co dělá. (Pokud vás více než to, co dělá, zajímá, jak jej zprovoznit na GCP, přeskočte na další část.)

Všeobecně řečeno, jedná se o algoritmus založený na hybnosti. Nebudeme obchodovat prvních patnáct minut po otevření trhu, protože ty jsou vždy dost hektické. Mezi patnáctou minutou a první hodinou však budeme hledat akcie, které oproti závěru předchozího dne vzrostly alespoň o 4 %. Pokud to dokázaly a splňují některá další kritéria, nakoupíme je a budeme je držet, dokud buď nestoupnou dostatečně vysoko (splní náš cenový cíl), nebo neklesnou příliš nízko (splní naši úroveň „stop“).

Všimněte si, že pod informacemi o připojení v kódu jsou některé další proměnné, které lze nakonfigurovat. Ty lze snadno upravit tak, aby co nejlépe vyhovovaly vašim potřebám algoritmu. K obchodování jsou k dispozici tisíce akcií, ale ne všechny jsou vhodné pro strategii, jako je tato.

Seznam filtrujeme tak, že hledáme několik věcí – chceme relativně nízkou cenu akcie, ale ne tak nízkou, aby se chovala spíše jako haléřová akcie. Chceme si být také jisti, že akcie je dostatečně likvidní, aby se nám naše příkazy vyplnily. Ujistíme se, že dolarový objem akcie byl v předchozí obchodní den alespoň min_last_dv.

Parametry default_stop a risk jsou důležité pro to, aby se náš algoritmus držel v přijatelných mezích. Riziko znamená, jaké procento našeho portfolia přidělíme dané pozici. Vzhledem k tomu, že prodáváme, když dosáhneme stop lossu, je množství peněz z našeho portfolia, které při obchodu riskujeme, default_stop * risk * account_balance .

Nebudu zde rozebírat, jak získáváme naše inicializační data – pokud chcete, můžete se podívat na kód a podívat se do dokumentace společnosti Polygon na jejich „ticker“ data. O něco zajímavější je skutečnost, že z Polygonu můžeme také streamovat data v reálném čase. (To se děje i v nedávno zveřejněném „HFT-ish“ příkladu, dalším algoritmu denního obchodování Alpaca, který obchoduje mnohem častěji než tento a snaží se profitovat z drobných nerovnováh v knize objednávek.)

Polygon.io logo.

Pomocí sady SDK Python od společnosti Alpaca se připojíme ke třem typům streamovacích kanálů. Prvním je trade_updates, což je jednoduše připojení k systému Alpaca, na kterém můžeme slyšet aktualizace našich objednávek, jakmile se stanou. Použijeme ho k tomu, abychom se ujistili, že nezadáváme více otevřených příkazů najednou pro určitou akcii, a abychom viděli, zda jsou naše příkazy vyplněny.

Další dva kanály jsou A.<symbol> a AM.<symbol> . Pro každou akcii, kterou budeme sledovat, se přihlásíme k odběru těchto kanálů, abychom od společnosti Polygon dostávali aktualizace o ceně a objemu akcie. Kanál A se aktualizuje každou sekundu, zatímco kanál AM se aktualizuje každou minutu. Informace z kanálu A agregujeme sami, abychom mohli provádět výpočty aktuální k vteřině, ale za zdroj pravdy považujeme kanál AM a nahrazujeme jím to, co jsme agregovali. I když by nám mohlo projít, kdybychom sledovali pouze A a spoléhali se na vlastní agregaci, důvěra v AM nám dává trochu větší odolnost vůči zádrhelům ve spojení a podobně.

Pokud jsme příchozí data přidali do naší agregace, pokud jsme ještě neobjednali akcie dané akcie, zkontrolujeme, zda vypadá jako dobrý nákup. „Dobrý nákup“ definujeme jako něco s pozitivním, rostoucím MACD, co se obchoduje při slušném objemu a dnes zatím vzrostlo o více než 4 % oproti včerejšímu závěru. Chceme se také ujistit, že si udržel svou hybnost po otevření, takže se podíváme, zda je cena vyšší než její nejvyšší bod během prvních patnácti minut po otevření trhu. Doufáme, že hodnota těchto akcií bude v průběhu dne nadále stoupat.

Pokud máme v nějaké akcii pozici, s každým příchozím sloupcem pro tuto akcii také zkontrolujeme, zda není čas na prodej. Prodáváme, když akcie dosáhla buď naší cílové ceny, nebo našeho stop lossu, nebo pokud MACD naznačuje, že cenný papír ztrácí svou dynamiku a klesl zpět na naši nákladovou bázi. V ideálním případě dosáhne námi stanovené cílové ceny dostatečný počet akcií, abychom mohli pokrýt ztráty z těch, které dosáhly stop lossu, s nějakým ziskem navíc.

Na konci obchodního dne zlikvidujeme všechny zbývající pozice, které jsme otevřeli, za tržní cenu. Použití tržních příkazů obecně není ideální, ale v tomto případě je používáme, protože potenciální náklady na držení přes noc jsou vyšší, než jsme byli ochotni na pozici riskovat. V ideálním případě jsme již naše akcie zlikvidovali na základě definovaných stop lossů a cílových cen, ale to nám umožňuje zachytit cokoli, co se kolem nich proplíží obchodováním na plocho.

Pokud sjedete dolů za konec dlouhé run() metody, uvidíte, jak zjišťujeme, kdy bude trh otevírat a zavírat pomocí koncového bodu API Alpaca Calendar. Použití tohoto postupu znamená, že pokud chcete, můžete nastavit úlohu Cron, aby se skript spouštěl každý den ve stejnou dobu, aniž byste se museli obávat, že svátky na trhu nebo pozdní otevření způsobí problémy. Mnoho lidí dává přednost ručnímu spouštění svých skriptů, ale je příjemné mít možnost nechat je prostě běžet samy.