A Step-By-Step Guide To Building a Trading Bot In Any Programming Language

Ezután elkezdhetjük meghatározni, hogyan fog kinézni az architektúránk.

Először is szükségünk van egy változóra, amely jelzi, hogy a bot éppen milyen állapotban van. Ez vagy VÁSÁRLÁS vagy ELADÁS. Egy boolean vagy enum jól megfelel erre a célra.

Aztán be kell állítanunk a vételi és eladási küszöbértékeket. Ezek azt mutatják, hogy az utolsó művelet óta milyen százalékos árcsökkenés vagy árnövekedés történt.

Egy példa: ha az eszközt 100$-ért vettem, és az ára most 102$, akkor 2%-os emelkedésről van szó. Ha a SELL küszöbértéket 1%-os emelkedésre állítottuk be, akkor a botunk el fogja adni, mert a küszöbértékünk feletti nyereséget ért el.

Ezek a küszöbértékek a mi esetünkben konstansok lesznek. Négy ilyenre van szükségünk, kettő minden állapothoz:

BUY Thresholds (Ha a bot SELL állapotban van)

  • DIP_THRESHOLD : Megveszi az eszközt, ha az ára a küszöbértéknél nagyobb mértékben csökkent. Ennek az a lényege, hogy a “buy low, sell high” stratégiát követi, ahol megpróbálsz megvenni egy eszközt, amikor az alulértékelt, várva, hogy az értéke emelkedni fog, így eladhatod.
  • UPWARD_TREND_THRESHOLD : Megveszi az eszközt, ha az ára a küszöbértéknél nagyobb mértékben emelkedett. Ez ellentétes a “buy low, sell high” filozófiával, de célja, hogy felismerjük, amikor az ár emelkedik, és nem akarjuk elszalasztani a lehetőséget a vásárlásra, mielőtt még magasabbra emelkedne.

Itt egy illusztráció, ami segíthet:

Image By Author

Ha a fenti képen jelölt “SELL” ponton SELL műveletet hajtottunk végre, akkor most már megvan a küszöbértékünk a vételi művelethez.

Ha az ár valaha is az alsó zöld vonal alá vagy a felső zöld vonal fölé kerül, akkor VÁSZ műveletet hajtunk végre. Ebben az esetben először a felső küszöböt léptük túl, így a BUY_DIP_THRESHOLD alapján vásároltunk .

SELL Thresholds (Ha a bot BUY állapotban van)

  • PROFIT_THRESHOLD : Eladja az eszközt, ha az ára a vásárlás óta a küszöbérték fölé emelkedett. Így nyerünk hasznot. Magasabb áron adjuk el, mint amennyiért megvettük.
  • STOP_LOSS_THRESHOLD : Ideális esetben azt szeretnénk, ha a botunk csak akkor adná el, ha profitot termel. Azonban lehet, hogy a piac éppen jelentősen csökken, és ki akarunk szállni, mielőtt túl késő lenne, majd alacsonyabb áron vásárolni. Ezért ezt a küszöbértéket arra használjuk, hogy veszteséggel adjunk el, de azzal a céllal, hogy megakadályozzuk egy nagyobb veszteség bekövetkezését.

Itt egy illusztráció:

Image By Author

Itt a “BUY”-val jelölt ponton vásároltunk. Ezután a felső küszöbértéket az alsó küszöbérték előtt értük el, vagyis nyereséggel adtuk el az eszközünket. Így keresnek pénzt a kereskedési botok.

Most már van egy alapvető elképzelésünk arról, hogyan működik a bot, így térjünk rá néhány (pszeudo)kódra.

API Helper Functions

A botunknak először is szüksége van néhány segédfüggvényre, hogy adatokat kapjon a tőzsde API-jából. Szükségünk van:

A fentieknek maguktól értetődőnek kell lenniük, de tisztában kell lennünk azzal, hogy az API POSTkérések milyen valutákat kérnek, amikor vételi vagy eladási műveletet hajtunk végre.

Gyakran előfordul, hogy például USD aranyra történő kereskedéskor megadhatja, hogy mennyi aranyat szeretne vásárolni, vagy mennyi USD-t szeretne eladni. A pénznemek helyes megválasztása nagyon fontos.

Bot ciklusa

Most, hogy megvannak a segédfüggvényeink, kezdjük el meghatározni a bot munkafolyamatát. Az első dolog, amire szükségünk van, egy végtelen ciklus némi alvási idővel. Tegyük fel, hogy azt akarjuk, hogy a bot 30 másodpercenként megpróbáljon elvégezni egy műveletet. Ez így nézhet ki:

Ezután állítsuk be a változókat és állandókat, amelyekről beszéltünk, valamint a döntési folyamatot. Az API segédfüggvényeket félretéve, a kódunk végül valahogy így végződne:

Megjegyzés: A küszöbértékek itt csak tetszőleges értékek. A saját stratégiádnak megfelelően válaszd ki a sajátodat.

Ha a fentieket a segédfüggvényekkel és a loop függvénnyel párosítjuk, ami lehet main is, akkor most már meg kell, hogy legyen magunknak egy működő bot alapvető pillére.

A botunk minden iterációnál ellenőrzi az aktuális állapotát (VÁSÁRLÁS vagy ELADÁS) és megpróbál kereskedni a keményen kódolt küszöbértékek alapján. Ezután frissíti a VÁSÁRLÁS/ELADÁS állapotát és a művelet utolsó árát.

Aztán az egészet elölről kezdi.

5. lépés: A bot csiszolása

Fotó: Matthew Dockery

A botunk alapvető felépítése készen van, de valószínűleg van még néhány dolog, aminek a hozzáadását érdemes megfontolni.

Naplózás

Amikor először építettem ennek a botnak egy variációját, az egyik dolog, ami számomra elengedhetetlen volt, az az volt, hogy folyamatosan naplózzuk a bot műveleteit mind a terminálba, mind pedig egy külön naplófájlba.

Minden lépésnél olyan naplófájlokat hoztam létre, mint:

 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

A fájlba kerülő naplókhoz időbélyegzőt is adtam, így amikor egy egész nap után beléptem a szerverre, és például hibát találtam, pontosan vissza tudtam követni, hogy hol történt, valamint megtudtam minden mást is, amit a bot menet közben csinált.

Ez egy createLog függvény beállításának kérdése, amit minden lépésnél meg kell hívni. Valahogy így:

Trendek azonosítása

A botunk fő célja az kell legyen, hogy alacsony áron vásároljon és nyereséggel adjon el. Van azonban két küszöbértékünk, amelyek mondhatni ellentmondanak ennek az elképzelésnek:UPWARD_TREND_THRESHOLD és STOP_LOSS_THRESHOLD .

Ezek a küszöbértékek állítólag megmondják nekünk, hogy mikor kell veszteséggel eladnunk vagy áremelkedéskor vásárolnunk. Az elképzelés az, hogy megpróbáljuk azonosítani azokat a trendeket, amelyek kívül esnek az általános stratégián, de számunkra károsak vagy előnyösek lehetnek, így cselekednünk kell.

A fenti felépítésem azonban meglehetősen korlátozott. Egy ár statikus pillanatfelvétele messze nem jelzi a trendet.

Szerencsére, különösebb fáradozás nélkül, ezt egy kicsit megbízhatóbbá teheti.

Mindössze annyit kell tennie, hogy több árat is nyomon követ, mint csak lastOpPrice . Nyomon követheted például a 10 vagy 20 iterációval ezelőtti árat, és összehasonlíthatod az aktuális árral a lastOpPrice helyett. Ez valószínűleg jobb lenne a trend azonosításában, mert inkább a gyors árváltozásokat vizsgálja, mint a hosszú idő alatt bekövetkezett változást.

Adatbázis?

Míg fut, ennek az egyszerű botnak valójában nincs szüksége adatbázisra, mivel nagyon kevés adatot kezel, és minden információt meg tud tartani a memóriában.

Mi történik azonban, ha a bot például meghibásodik? Hogyan tudná meghatározni a lastOpPrice-t anélkül, hogy Ön manuálisan ellenőrizné?

A kézi munka elkerülése végett érdemes valamilyen könnyített adatbázist tartani, hogy nyomon követhessen néhány dolgot, mint például a lastOpPrice .

Így, amikor a bot elindul, ahelyett, hogy az alapértelmezett értékeket használná, ténylegesen ellenőrzi a tárolt értékeket, és onnan folytatja.

Attól függően, hogy mennyire egyszerűvé akarod ezt tenni, akár egy .txt vagy json fájlokból álló “adatbázist” is megfontolhatsz, mivel úgyis csak néhány értéket fogsz tárolni.

Dashboard

Fotó: Luke Chesser

Ha meg akarod könnyíteni a botod működésének vizualizálását, valamint kezelni anélkül, hogy manuálisan kellene bütykölnöd a kódot, érdemes megfontolnod, hogy a botodat egy műszerfalhoz csatlakoztasd.

Ez azt igényelné, hogy a botod egy saját webszerverhez/API-hoz legyen csatlakoztatva, amely lehetővé teszi, hogy irányítsd a működését.

Ezzel például könnyebben módosíthatod a küszöbértékeket.

Egy csomó ingyenes dashboard-sablon áll rendelkezésre, így még sajátot sem kell készítened. Nézze meg a Start Bootstrap és a Creative Tim oldalakat néhány példaért.

Stratégiák tesztelése múltbeli adatokon

Nagyon sok tőzsde kínál hozzáférést múltbeli áradatokhoz, valamint általában máshol is könnyen hozzájuthat ezekhez az adatokhoz, ha szüksége van rá.

Ez nagyon hasznos, ha szeretné tesztelni a stratégiáját, mielőtt bevetné azt. Futtathatsz egy szimulációt a botodról múltbeli adatokkal és “hamis pénzzel”, hogy megnézd, mennyire működtek volna az általad meghatározott küszöbértékek, és beállíthatod őket a valódi üzlethez.

Kiegészítő pontok a küszöbértékekről és a megbízásokról

Van néhány dolog, amire figyelned kell, amikor megbízásokat adsz.

Először is, meg kell értened, hogy kétféle megbízás létezik: limit megbízások és piaci megbízások. Ha nem ismeri a fogalmakat, akkor tényleg érdemes egy kicsit utánaolvasnia, de itt adok egy alapvető áttekintést.

A piaci megbízások olyan megbízások, amelyek az aktuális piaci áron teljesülnek, és a legtöbb esetben gyakorlatilag azonnal teljesülnek.

A limitmegbízások viszont akkor történnek, amikor a piaci árnál alacsonyabb (VÁSÁR megbízás esetén) vagy a piaci árnál magasabb (ELADÁSI megbízás esetén) árra ad megbízást. Ezeknél nem garantált a végrehajtás, mivel előfordulhat, hogy az ár nem éri el az Ön által meghatározott küszöbértéket.

A limitmegbízások előnye, hogy előre láthatja a piaci mozgásokat, és megbízást adhat arra vonatkozóan, hogy hová várja a piacot, mielőtt ez a mozgás bekövetkezne.

A limitmegbízásokra ráadásul általában alacsonyabb díjak vonatkoznak, mint a piaci megbízásokra. Ennek az az oka, hogy a piaci megbízásokra az úgynevezett “taker fee”, azaz “vevői díj” vonatkozik, míg a limitmegbízásokra a “maker fee”, azaz “döntéshozói díj”.

Az elnevezések és a hozzájuk tartozó díjak oka az, hogy a piaci megbízások csak elfogadják (“veszik”) az aktuális piaci árat, míg a piaci áron kívüli limitmegbízások likviditást adnak hozzá, és így “piacot csinálnak”, amiért alacsonyabb díjakkal “jutalmazzák” őket.

Megjegyezzük, hogy a cikkben szereplő bot leginkább piaci megbízásokra alkalmas.

Végezetül, a díjakról szólva, a PROFIT_THRESHOLD beállításakor ne felejtse el figyelembe venni a díjakat.

A nyereség elérése érdekében egy VÁSÁRLÁSI, majd egy ELADÁSI műveletet kell végrehajtania, ami miatt 2 díjat kell fizetnie.

Ezért meg kell győződnie arról, hogy csak akkor ad el nyereséget, ha legalább a díjakat fedezni tudja, különben valójában veszteséget termel.

Gondolj csak bele, ha feltételezzük, hogy a díjak átalánydíjasak, ha egy eszközt 100,00$-ért vásároltál, 0,50$ díjjal, majd 100,75$-ért adtad el, ismét 0,50$ díjjal, akkor 0,75%-os bruttó nyereséget értél volna el, de valójában 0,25%-os nettó veszteséged lett volna.

Most képzeld el, hogy a botod mindig nettó veszteséggel ad el. Elég gyorsan rengeteg pénzt veszítenél…

záró megjegyzések

Ez volt a botunk. Remélem, hasznos volt ez a bemutató.

Az ötlet az volt, hogy az összes olyan fogalomra összpontosítsunk, amit tudnod kell egy kereskedési bot építéséhez, még akkor is, ha még soha nem kereskedtél korábban, nem pedig megtanítani, hogyan kell programozni.

A feltételezés az, hogy minden olvasó képes HTTP-kéréseket végrehajtani az általa választott nyelven, így a legjobb lenne más szempontokra koncentrálni.

Ez az első bemutató, amit így írok (pszeudokód-alapú), ezért kérlek, írd meg nekem, mit gondolsz a koncepcióról.

Köszönöm az olvasást! És ha úgy gondoljátok, hogy ez a cikk hasznos volt, nyugodtan támogassatok néhány tapssal 👏👏.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.