Hogyan rendelj robotot egy programozótól? - 1. rész

Itt a blogon már volt szó arról, hogy milyen főbb robottípusok közül válogathat az, aki automatizálásra adja a fejét. Azzal a cikkel az volt a célom, hogy az ingyenes/megvásárolható/saját ötleten alapuló robotok kapcsán alapszinten segítsek a lehetséges megrendelőknek.

Ez a cikk a korábbit egészíti ki: mégpedig a konkrét, robotprogramozást övező kérdéskörök kapcsán.

Ha úgy gondolod, hogy valaha szeretnél egy stratégiát automatizálni, akkor mindenképp olvass tovább!

Előszó

A legelső kérdések között talán az merülhet fel a kedves olvasóban, hogy mit keres egy ilyen cikk egy MT4 robotprogramozó weboldalán. A válasz egyszerű: mivel ebből élek, igyekszem teljes körű tájékoztatást adni az érdeklődőknek. A célom minden esetben a hosszabb távú együttműködés, ennek remek alapja lehet egy ilyen cikk - amit a jövőbeli ügyfél még akkor olvas el, amikor nem feltétlen tudja, hogy kit fog választani programozónak robotjának kivitelezésére.

A cikk Andrey Khatimlianskii "How to Order an Expert Advisor and Obtain the Desired Result" című cikke alapján készült, de egy része a magyar viszonyokra lett aktualizálva.

A MT4 platform - a MT5 lassú kiadása mellett - jelenleg is nagy népszerűségnek örvend mind az ügyfelek, mind a programozók körében. Feltételezhető, hogy ez a MT5 sikerességétől függetlenül még évekig így lesz. Kötöttségei ellenére sok feladatra remekül használható, emiatt kimondhatóan a legtöbb robot (és indikátor) is erre a platformra készül.

A nagy népszerűség ellenére (vagy éppen amiatt) az átlag kereskedő hozzáértése alacsony szinten mozog - akárcsak más területeken, itt is érvényesül a "mennyiség a minőség rovására nő" elv. Ha az automatizált programokat vizsgáljuk, a helyzet még rosszabb. Igazán ritka az, hogy egy kereskedőnek informatikai végzettsége legyen. Annak az esélye pedig, hogy esetleg programozni képes kereskedőt találjunk - aki képes saját robotjának elkészítésére -, szinte a nullához közelít.

Az igény a Metatrader platform programozására folyamatosan nő. Magyarországon 2010 óta megtöbbszöröződött a lehetséges ügyfelek száma. Ez részben köszönhető annak is, hogy szó szerint ömlenek a különböző brókercégek az országba, akik irodákat nyitnak és fejlesztéseket visznek végbe a magyarországi (vagy közép-európai) ügyfelek megnyerése végett.

Ha pedig valahol valamire igény van, ott előbb-utóbb megjelennek a kiszolgálásra specializálódott szolgáltatók: jelen esetben a programozók. Ez a szabad piac törvénye. Vannak tehát azok, akik automatizálni szeretnék a stratégiájukat és vannak azok, akik magával a programozással szeretnének pénzt keresni. Sajnos a kommunikáció a két tábor között egyáltalán nem könnyű és nem mindig végződik mindkét fél elégedettségével. Sok csalódott ügyfél van, és hasonlóképp előfordulnak csalódott programozók is akiknek nem biztos, hogy minden koncepcióhoz újra és újra elegendő türelmük van.

A cikk ezzel a problémával foglalkozik, vagyis hogy megkönnyítse az ügyfél-programozó közötti kapcsolatot, és mindkét oldal megértse a túloldal igényeit. Az írás elsősorban az ügyfelek számára szól, akiknek rendszerint problémát okoz az eltérő gondolkodású emberekkel való kommunikáció. Természetesen a programozókhoz is szólok, hiszen egy kapcsolatnak mindig két oldala van: maga a programozó is lehet kevésbé kommunikatív, vagy korlátolt szemléletű. Egy sikeres projekthez mindkét oldal feltétlen nyitottságára van szükség!

Tartalom

  1. A stratégia vagy ötlet megerősítése, ellenőrzése
  2. Szabaduljunk meg az illúzióktól!
  3. A célok meghatározása
  4. Szótárak egyeztetése
  5. A specifikáció elkészítése
  6. A programozó kiválasztása
  7. Védd magad a csalóktól
  8. Az eredmény ellenőrzése
  9. Adj visszajelzést!

Jelen cikkben az első két fejezetet olvashatjátok el, a többi fejezetet folyamatosan publikálom itt a blogon.

1. A stratégia vagy ötlet megerősítése, ellenőrzése

Az ügyfél leggyakoribb aggodalmának oka az, hogy attól tart: stratégiája veszteséges. Ha nem félautomata kereskedési segédeszközről vagy indikátorról, hanem automatizált rendszerről van szó, az ügyfélnek összesen csak egy vágya van jövőbeli robotjával kapcsolatban: hogy az nyereséges legyen.

A robot elkészülte után az ügyfél lelkesen fog neki a tesztelésnek, majd esetlegesen szomorúan tapasztalja: a zseniális ötlete hosszabb távon veszteséges. Újraellenőrzi a paramétereket, frissíti a múltbéli adatokat... és újra csak a veszteséges kereskedéseket látja az eredmények között. Ilyenkor vannak, akik a programozóra fogják (rá a legkönnyebb!) a stratégia sikertelenségének okát, a kicsit több türelemmel rendelkező ügyfelek pedig elkezdik nyomozni az igazi okokat. Ha a robot műszakilag jól működik (azaz pontosan azt és akkor csinálja, amit az ügyfél kért) akkor sajnos nem változik az a tény, hogy az adott stratégia ilyen formában (egyelőre vagy véglegesen) veszteséges.

Ezek után több forgatókönyv lehetséges. Néhányan továbbra is a programozót hibáztatják,  és fizetés nélkül "távoznak", új programozót keresni. Mások lázasan hibakeresésbe kezdenek, és újabb stratégiai módosításokkal próbálják kezelni a helyzetet, "apró változtatásokat" kérve - természetesen ingyen, hiszen (szerintük) apró módosításokról van szó. Megint mások elfogadják a tényeket, és nem próbálják meg áthelyezni a felelősséget a programozó nyakába, hanem képesek kritikusan állni az ötletükhöz és esetleg kigondolni annak módosításait - akár egy újabb projekt, vagy a jelenlegi módosítása kapcsán. Ez a fejezet természetesen nem az utóbbi csoport számára íródott.

Mindezek egyébként csak következmények, semmi értelme részleteiben boncolgatni őket. Az okokat viszont annál inkább! A probléma ugyanis legtöbbször az, hogy az ügyfél túl lusta elfogultság nélkül leellenőrizni a saját ötletét. Ehhez egy szabadon választott múltbéli időszak kell: részletesen kell megvizsgálni, hogy az adott szakaszon, minden feltétel pontos alkalmazásával körülbelül milyen eredmény született volna. Ezt érdemes valós idejű tesztként is folytatni, egy pár hetes teszt keretében egy demó számlán. Az ilyen tesztelés folyamán nagyon fontos, hogy amennyire csak lehet, zárjuk ki az elfogultságot és  a szubjektív be- és kiszállási pontok keresését! Ha ugyanis valaki azt akarja, hogy a stratégiája sikeres legyen és mindent ennek rendel alá, akkor bizony a tesztelési folyamat során úgy követ el számítási (és akár tervezési) hibákat, hogy észre sem veszi.

Természetesen nem minden stratégiát lehet múltbéli adatokon tesztelni, ez egyértelmű. Mivel a tesztelés sokszor igen energia- és időigényes, és nem sokan bírnak tollal-ceruzával a grafikonon felett üldögélni, az is érthető ha rögtön az automatizálás mellett döntenek a könnyebb tesztelés érdekében. Nem tesztelt ötlet leprogramoztatása esetén   viszont a végeredmény akár nagyon kellemetlen is lehet - ezt el kell fogadni!

Fontos: a programozó nem felelős a stratégia nyereségességéért; az ő feladata a műszaki kivitelezés, vagyis hogy a program úgy működjön, ahogyan azt a megrendelő kitalálta és megrendelte!

Néha a programozó rávilágíthat a rendszer gyengeségeire (nem Te vagy az első, aki ilyesmit készíttet), de ez csak a jó szándékán múlik. Nem az ő feladata (vagy kötelessége) megvédeni téged a hibáktól vagy konzultálni veled, esetleg ingyen felülvizsgálni a stratégiád.

Az angol nyelvű eredeti cikk nyers hangvételéhez szeretném hozzáfűzni, hogy a magyar megrendelők túlnyomó része nagyrészt pontos elképzelésekkel keres meg engem. Elenyésző azon ügyfelek száma, akik nulla elképzeléssel érkeznek és az "adj jó robotot" hozzáállással rendelkeznek. Jómagam igyekszem értelmes ötletekkel és meglátásokkal segíteni a megrendelőknek, ezt szinte mindig kedvezően fogadják az érintettek.

Ha valaki megrendel egy robotot, akkor vagy teljesen biztosnak kell lennie a stratégia működésében, vagy el kell fogadnia, hogy ez csak egy próbálkozás melynek végeredménye nem biztos, hogy kedvező lesz.

A végkövetkeztetés tehát: a stratégiát mindenképpen több alkalommal érdemes tesztelni, mielőtt megrendelés történne!

Az alábbi humoros képet érdemes megnézned, mert nagyon sokszor a valóságban is előfordulhatnak hasonló helyzetek - és ha egy ilyen helyzet része vagy, az már kevésbé vicces.

Egy program életútja

Egy kis humor: egy program életútja

2. Szabaduljunk meg az illúzióktól!

Általában azt látjuk, amit látni szeretnénk. És hogy mit szeretnénk? Jachtot, szigetet egy óceánon egy vagon pénz kíséretében. Ha a chartra nézünk, csak a jó szignálokat látjuk meg. Becsukjuk a szemünket és már látjuk a bankszámlánk egyenlegének végén türemkedő nullákat... A robot viszont csak az algoritmusát követi, és ez bizony szétrombolhatja az illúzióinkat.

A második és egyben leggyakoribb csalódás okai a zavarodottság és önámítás. Ha elhatároztad, hogy megléped az első lépést és nekiállsz ellenőrizni az ötletedet, vedd halálosan komolyan a kérdést. Sok csalódás kerülhető el ezzel a lépéssel: próbáld meg levenni a rózsaszín szemüveget és tekints a stratégiádra kívülállóként!

Gyakori szituáció: olvastál az interneten (fórumon, blogon, online kiadványban) egy stratégiáról és elhatározod, hogy robotot készíttetsz belőle. Megláttad a chartot, megbecsülted a stratégia helyességét és eredményeit és azt gondoltad: "Végre, itt van van a Szent Grál!" A helyzetet súlyosbíthatja, ha letöltesz (vagy neadj'Isten, kifizetsz...) egy szuper indikátort, ami a stratégia alapja. Most már úgy érzed, hogy kb. 90%-ban készen is vagy és már csak egy dolog van hátra.

Érdemes magadban feltenni a kérdést: vajon valóban jó (megfelelő) ez a csodaként bemutatott indikátor, vagy csak a hiszékeny és befolyásolható emberek számára létrehozott üzleti fogás? Elemezz minden ilyen helyzetet, hiszen ha valaha stratégiát építesz majd egy ilyen indikátorra, csakis Te kerülheted el a felesleges pénzkidobást, amit egy rossz indikátorra épített ötlet okozhat!

Természetesen az alábbi szempontokat akkor érdemes figyelembe venned, ha a stratégiád valamely része erre épül. Ha nem akarsz indikátorokat használni, akkor az indikátorral kapcsolatos szempontok számodra lényegtelenek.

Itt van pár szabály, amelyek segítenek elkerülni a saját illúzióid okozta csapdákat vagy mások rossz szándékait. Nem oldanak fel minden problémát, de nagy valószínűséggel felszínre hozhatnak gyakori hibákat.

  1. Légy szkeptikus az olyan indikátorokkal, amelyekhez nem adnak forráskódot!
    • Csak körülbelül fogod tudni megérteni a működésüket, és senki nem garantálja, hogy a jövőben hosszú ideig jól (stabilan) működnek.
    • Bármit tartalmazhatnak - a programozási hibáktól kezdve az újrarajzoláson át a helytelen működésig különböző számlatípusokon vagy instrumentumokon.
    • Korlátozást tartalmazhatnak a működési időre vagy egy számlaszámra vonatkozóan.
    • A sokak által használt indikátorok esetében tudsz eszmét cserélni akár a zárt  (forráskód nélküli) változatokról is, egy nevenincs indikátor esetében ezt kisebb valószínűséggel tudod csak megtenni.

    Még ha egyáltalán nem konyítasz a programozáshoz, akkor is megkérheted a programozót, hogy vizsgálja meg az indikátort - még azelőtt, hogy robotot rendelnél belőle.

  2. Figyeld az indikátor működését valós időben!
    • Valós idejű teszt nélkül teljesen értelmetlen a múlt szignáljai alapján döntést hoznod - szép, de teljesen haszontalan és fals jeleket, vagyis valótlan képet kaphatsz az indikátorról.
    • Lényegében az összes indikátor változtatja az értékét az utolsó (aktív, befejezetlen, éppen most zajló) gyertyára vonatkozólag - ez normális. Meg kell értened, hogy a historikus (már lezárt) gyertyákra vonatkozólag ezek a - már megtörtént - változások már nem lesznek láthatóak, az indikátorok ugyanis legtöbbször a lezárt gyertya után adnak jelzéseket. Ez azt jelenti, hogy a jelek (nyilak, vonalak keresztezési, stb.) felhasználása a jövendőbeli robotodban csak a megszületésük után válik lehetővé: vagyis a következő gyertyában. Ha pozíciónyitásra használod ezeket a jelzéseket, és nem várod meg a következő gyertyát - azaz hogy a jelzés véglegessé váljon - azzal fogsz szembesülni, hogy a jelzésre történő nyitás után a következő gyertyában már egyáltalán nincs ott jelzés, amire a robotod benyitott. Ezért a legtöbb esetben (mindenképpen vannak persze kivételek...) érdemes a lezárt gyertyák alapján összeállítani a kereskedési szignált.
    • Néhány indikátor nem csak az utolsó gyertyához kapcsolódó értékét változtatja, hanem a régebbi lezárt gyertyákhoz tartozókat is. Ez lehet teljesen normális és tudatos viselkedés (pl. a ZigZag indikátor esetében, ahol az utolsó adatpont folyamatosan változhat, mielőtt "állandóvá" válik), gyakran azonban a szándékos megtévesztés a cél egy ilyesfajta viselkedéssel. Utóbbi esetén az indikátor a múltra nézve gyönyörű képet fest, de valós időben gyakorlatilag teljesen használhatatlan, értelmetlen jelzéseket ad.
      Ha az indikátor a múlt alapján a legmélyebb aljakon és legmagasabb csúcsokon javasolja a beszállást akkor talán nem egy jó indikátorról van szó, hanem egy olyanról amely "a múlt alapján jósol". Indikátorok egyszerű vizsgálatával kapcsolatban korábbi cikkem nyújt kiindulópontokat!
    • Nem szükséges órákon keresztül gép előtt ülni és bámulni a chartot - a legtöbb indikátor visszatesztben is tesztelhető. A leghatékonyabb tesztelés mégis a demó számlán történő ellenőrzés. Helyezd fel az indikátort, hagyd futni egy kicsit, később jelöld be a jelzéseit, távolítsd el és helyezd fel újra. Ha a korábbi jelzések közül akár egy is eltér, az azt jelenti hogy az indikátor "újrarajzol", vagyis attól függően hogy mikor és hol helyezed a chartra, nem ugyanazon jelzéseket fogja mutatni. Ilyen esetekben felejtsd el az indikátort, és semmiképp ne próbálj rá stratégiát építeni!

    Az indikátor működési elvének és tulajdonságainak ismerete kardinális kérdés!

  3. Ellenőrizd a stratégiát különböző múltbéli időintervallumokon!
    • Gyakran megesik, hogy nem szándékosan kiválasztasz egy olyan időszakot, amely nagyon kedvező piaci mozgást fed le (a rendszered számára). Akár belépési jelzésről, akár pozícióépítésről, akár mintafelismerésről van szó: mindig találsz majd olyan időszakot, ahol a stratégiád profitot csinál. Ha viszont a robotodat majd az összes múltbéli adaton fogod futtatni, szembetűnőek lesznek azok az időszakok, ahol egyáltalán nem keres vagy inkább bukik a robotod. Próbáld ezen időszakokat még most megkeresni!
    • Válassz véletlenszerű időszakokat a múltból! Például 2008. október, 2009. augusztus, 2010. január - tekintsd át a jelzéseket és a nyereség/kockázat arányokat! Vizsgáld meg a jelzéseket különböző idősíkokon és instrumentumokon! Ha a stratégia alapja megfelelő, nagy valószínűséggel fog működni más feltételekkel is (esetleg módosított paraméterezéssel és stop szintekkel).
    • Ne változtasd a paramétereket az ilyesfajta egyszerű ellenőrzések során! Ha 2008 októberében van egy beállításod és nekikezdesz 2009 augusztusának teszteléséhez egy teljesen más paraméterezéssel (ami persze ott jobban muzsikál), csupán becsapod önmagad. Az ellenőrzés mindig ugyanazon paraméterekkel kell történjen, máskülönben azt fogod látni, amit akarsz. Természetesen nem azt mondom, hogy a paraméterezés mindig legyen ugyanaz; csak azt, hogy az egyes időszakok tesztelése során ne változtasd ad-hoc alapon a paraméterezést. A múltra mindig könnyű stratégiát létrehozni, de mi lesz a jövővel?
    • Keresd meg a legbonyolultabb időszakot a múltban és ereszd rá az indikátort! Nagyon gyakori taktika az ellentrendben történő pozícióépítés, mely során a következő pozíciók nagyobb lotmérettel lesznek megnyitva, és egy bizonyos visszaütést várunk el a komplett sorozattól. Ez sok időszakon jól működik, viszont vannak kifejezetten veszélyes időszakok is. Ilyen típusú stratégiához hosszú, tartós elmozdulásokat keress, ahol a stratégia igazán veszélybe kerülhet!
    • Vedd figyelembe, hogy a piac folyamatosan változik! Mindig hagyj magadnak extra mozgásteret, mert csak így tudsz felkészülni az esetleges komoly elhúzódásokra!

    A múltbéli adatok sosem jelentenek garanciát a jövőbeli teljesítményekre!

  4. Számolj a felmerülő költségekkel (spread, kamat, jutalék, marginigény, pozíciónyitáshoz szükséges feltételek) !
    • A legtöbb hosszútávú stratégiának ezek a kiadások nem jelentősek, némi eltérés elfogadható számukra. Az automatizáció piaca viszont megmutatta, hogy egyre több stratégia működik a "több apró profit gyakori kötésekből" elv alapján; ezeknél a stratégiáknál komoly problémát (eltéréseket) okozhat a spread vagy a stop szint tágulása.
    • Tartsd észben, hogy a Metatrader chartok Bid árat jelenítenek meg. A long pozíciók nyitása, valamint a short pozíciók zárása azonban Ask áron történik! Az elmélet "fejben" történő futtatásakor sokan egyszerűen figyelmen kívül hagyják a spreadet, pedig minden kötés velejárója, hogy azonnal pénzbe kerül. A végeredményből érdemes tehát kivonnunk a kötések és az átlag spread szorzatát, így kapható meg a valós(abb) végeredmény.
    • A múlt elemzése közben nem szabad elfelejteni, hogy pár éve a kereskedési kondíciók is lényegesen eltértek. Az 1990-es évek múltbéli adatával könnyű jó skalpolásos eredményeket elérni; a spread akkoriban azonban legalább 3-4-szer magasabb volt, mint most. Vagyis a virtuálisan keresett pénzből szinte semmi sem maradt volna, mert elvitte volna a spread. Hasonlóképpen érdemes más kondíciókra is figyelni: a tőkeáttét maximuma például 1:100 volt, manapság nem ritka hogy 1:1000-es áttételű számlát is találunk a piacon.
    • Az aktuális kereskedési feltételek folyamatosan változhatnak (természetesen mindig rossz irányba...) a bejelentéseknél: a végrehajtási idők is lelassulhatnak és a csúszással is számolni kell. Ne találj fel egy brilliáns rendszert a múlt alapján, teszteld legalább mikro éles számlán! A nézőpontod biztosan változni fog, amikor 2 pipes spreadre készülsz, és a pozíciónyitásnál 5 másodperccel később kerülsz pozícióba 10 pipes csúszás után, ráadásul zárás környékén a spreaded az eredeti elvárásod háromszorosára változik...Így kifejezetten nehezen fogod tudni az eredetileg profitosnak várt pozíciódat veszteség nélkül zárni.
    • Mindig legyen egy bizonyos tűréshatár a stratégiádban! Amennyiben a rendszered megszenved egy egyszerű spread-kitágulást, akkor később aligha éli túl a kemény  küzdelmeket a piacon.
    • A stratégiák nagy részének veszteségességét a spread okozza, így a spreadet és annak értékét mindig vedd figyelembe a stratégia kitalálásakor és tesztelésekor! A spreadet mindkét pozíciótípus esetén elvonja a bróker; amennyiben a spread értéke feltűnően alacsony, ellenőrizd hogy van-e más költség (pl. jutalék, azaz commission) a bróker feltételei között!

Amennyiben a fenti teszteket is "túlélte" a stratégiád és még mindig magabiztos vagy vele kapcsolatban, továbbléphetünk a következő témakörökre.

A további fejezeteket folyamatosan publikálom, a legközelebbi áprilisban várható!

Oszd meg, ha hasznosnak találtad!

MINDEN VÉLEMÉNY SZÁMÍT!