Poligonul.io logo.Utilizând Alpaca’s Python SDK, ne conectăm la trei tipuri de canale de streaming. Primul este trade_updates
, care este pur și simplu o conexiune la Alpaca pe care putem auzi actualizări ale comenzilor noastre pe măsură ce acestea se întâmplă. Vom folosi acest canal pentru a ne asigura că nu trimitem mai multe ordine deschise în același timp pentru o acțiune și pentru a vedea dacă ordinele noastre sunt sau nu executate.
Celelalte două canale sunt A.<symbol>
și AM.<symbol>
. Pentru fiecare acțiune pe care o vom urmări, ne abonăm la aceste canale pentru a primi actualizări de la Polygon cu privire la prețul și volumul acțiunii respective. Canalul A
se actualizează la fiecare secundă, în timp ce canalul AM
se actualizează la fiecare minut. Agregăm noi înșine informațiile din canalul A
pentru a putea face calcule la secundă, dar considerăm că AM
este sursa adevărului, înlocuind tot ceea ce am agregat cu ceea ce vine prin acel canal. În timp ce am putea scăpa dacă am urmări doar A
și ne-am baza pe propria noastră agregare, încrederea în AM
ne oferă un plus de rezistență la sughițuri în conexiune și altele asemenea.
După ce am adăugat datele primite la agregarea noastră, dacă nu am comandat deja acțiuni ale unei acțiuni, verificăm dacă aceasta pare a fi o achiziție bună. Definim o „achiziție bună” ca fiind ceva cu un MACD pozitiv, în creștere, care se tranzacționează la un volum decent și care a crescut cu peste 4% de la închiderea de ieri până astăzi. De asemenea, vrem să ne asigurăm că și-a menținut impulsul după deschidere, așa că ne uităm să vedem dacă prețul este mai mare decât punctul său cel mai înalt în primele cincisprezece minute după deschiderea pieței. Sperăm că aceste acțiuni vor continua să crească în valoare pe măsură ce ziua continuă.
Dacă avem o poziție pe o acțiune, verificăm, de asemenea, cu fiecare bară care vine pentru acea acțiune, dacă este timpul să vindem. Vindem atunci când stocul a atins fie prețul nostru țintă, fie stop loss-ul nostru, sau dacă MACD-ul sugerează că titlul își pierde din elan și a revenit la baza noastră de cost. În mod ideal, suficient de multe acțiuni ating prețul țintă pe care l-am stabilit astfel încât să putem recupera pierderile de la cele care au atins stop loss, cu câteva profituri suplimentare în plus.
La sfârșitul zilei de tranzacționare, lichidăm orice poziție rămasă pe care am deschis-o la prețul pieței. Utilizarea ordinelor de piață nu este, în general, ideală, dar ele sunt folosite în acest caz deoarece costul potențial al menținerii peste noapte este mai mare decât am fost dispuși să riscăm pe această poziție. În mod ideal, ne-am lichidat deja acțiunile pe baza stop loss-urilor și a prețurilor țintă definite, dar acest lucru ne permite să prindem orice se strecoară pe lângă acestea prin tranzacționare la nivel plat.
Dacă derulați în jos, dincolo de partea de jos a metodei lungi run()
, veți vedea cum verificăm să vedem când se va deschide și când se va închide piața folosind endpoint-ul Alpaca Calendar API. Folosind acest lucru înseamnă că, dacă doriți, puteți configura o sarcină Cron pentru a rula scriptul la aceeași oră în fiecare zi, fără a trebui să vă faceți griji cu privire la sărbătorile pieței sau deschiderile târzii care cauzează probleme. Mulți oameni preferă să își ruleze scripturile manual, dar este plăcut să ai opțiunea de a-l lăsa să ruleze de unul singur.
.