Ebben a bejegyzésben a MetaTrader 5 platform megbízásainak állapotairól, valamint a végrehajtási és teljesítési módokról írok.
Bevezető
A téma korábbi bejegyzéseiben bemutattam, melyek a MetaTrader 5 platform kereskedési műveleteket kezelő rendszerének alapjai, illetve hogy milyen pozícióelszámolási rendszereket támogat.
Az elmúlt években többször írtam az MT5 új lehetőségeiről és az MT4 és MT5 közötti különbségekről, 2021-ben pedig MetaTrader útmutatót készítettem, melyben kitértem arra is, hogy modernsége ellenére mi az oka az MT5 lassú térnyerésének.
Javaslom, olvasd el ezeket a bejegyzéseket, mielőtt továbblépnél ezzel a cikkel.
Ebben a posztban azt fejtem ki, hogy milyen módokon történhet az elküldött megbízások végrehajtása, illetve milyen lehetőségek állnak rendelkezésünkre a teljesítési típusok esetében.
A megbízások (orderek) állapota
Az MT5 platform számára gyakorlatilag minden kereskedési utasítás egy megbízás. Összeállítását és a kereskedési szerver felé elküldését követően egy megbízás a következő szakaszokon mehet keresztül:
A megbízások állapota a Számlatörténet (History) fülön az „Állapot” mezőben tekinthető meg a Megbízások fiókban. A függőben lévő, még nem aktivált megbízások állapota a Kereskedés (Trade) fülön látható.
A különböző státuszok áttekinthetők az alábbi képen.
Kép forrása: MetaQuotes
Egy elküldött megbízás végrehajtása és teljesítése többféle módon történhet a brókercég oldalán. A végrehajtás az árfolyam, a teljesítés pedig a megbízás mennyiségére vonatkozó lehetséges plusz beállítás, amelyet a kiadás pillanatában határozhatunk meg.
Mire jók ezek a lehetőségek?
A kereskedési piacok természetéből fakadóan sosem lehetünk biztosak abban, hogy egy kérésünk (megbízásunk) pont olyan áron és pont olyan mennyiséggel teljesül, mint szeretnénk. Egy-egy kereskedési stratégiában tolerálható, hogy egy pozíció lot mérete kisebb legyen, mint az eredetileg várt, más stratégiákban ennek fordítottja az elvárt. Hasonlóképpen lehetséges, hogy a szisztéma tolerálja a megbízás árfolyamának elcsúszását, máskor a teljes pontosság is lehet elvárás.
Az MT5 platform lehetőséget biztosít a kereskedők számára, hogy lekérdezhessék az egyetlen végrehajtási módot és a rendelkezésre álló teljesítési módokat, valamint arra, hogy utóbbit a megbízás elküldésekor meghatározhassák a választható opciók közül.
Vagyis: a brókercég határozza meg, hogy egy instrumentum esetén milyen végrehajtási módot kínál, azt pedig, hogy mi történjen, ha nem áll rendelkezésre az elvárt kereskedési mennyiség, mi határozhatjuk meg, de szigorúan a brókercég által felkínált lehetőségek közül. Ezeket a lehetőségeket a platformon instrumentumonként le lehet kérdezni a manuális és expert alapú kereskedés során is.
Végrehajtási módok
A kereskedési platformon négy megbízás-végrehajtási mód áll rendelkezésre. A megbízás-végrehajtási módszerek azt szabják meg, hogy a kereskedő termináljából elküldött megbízások milyen árfolyamon valósulhatnak meg, illetve azt, hogy ezt az árat a brókercég, vagy a kereskedő határozza meg.
Azonnali végrehajtás (Instant Execution)
Ebben a módban a piaci megbízás a brókernek felajánlott áron kerül végrehajtásra. A végrehajtandó megbízás elküldésekor a platform automatikusan hozzáadja az aktuális árakat a megbízáshoz. Ha a bróker elfogadja az árakat, a megbízás végrehajtásra kerül. Ha a bróker nem fogadja el a kért árat, újrajegyzés („Requote”) történik, vagyis a bróker visszaküldi azokat az árat, amelyen ez a megbízás ténylegesen végrehajtható.
Végrehajtás kérése (Request Execution)
Ebben a módban a piaci megbízás a brókertől korábban kapott áron kerül végrehajtásra. Egy adott piaci megbízás árait a brókertől kérik a megbízás elküldése előtt. Az árak beérkezése után a megbízás adott áron történő végrehajtása vagy megerősíthető, vagy elutasítható.
Piaci végrehajtás (Market Execution)
Ebben a megbízás-végrehajtási módban a bróker a kereskedővel való további megbeszélés nélkül dönt a megbízás végrehajtási áráról. Egy megbízás elküldése ilyen módban előzetes hozzájárulást jelent a megbízás ezen az áron történő végrehajtásához.
Tőzsdei végrehajtás (Exchange Execution)
Ebben a módban a kereskedési platformon végrehajtott kereskedelmi műveleteket egy külső kereskedési rendszerbe (tőzsdére) küldik. A kereskedelmi műveletek végrehajtása az aktuális piaci ajánlatok árain történik.
Teljesítési módok
A brókercég által meghatározott általános megbízás-végrehajtási szabályok mellett a kereskedő további feltételeket is megadhat a megbízás elküldésekor. Ilyen feltétel például a teljesítési mód, másként: teljesítési házirend, Fill Policy. Ez a beállítási lehetőség kizárólag a Piaci végrehajtás, valamint a Tőzsdei végrehajtás típusoknál érhető el, vagyis a másik két végrehajtási típus esetén nem mi határozzuk meg ezt a beállítást.
A két említett végrehajtási módban experttel történő kereskedés során ezt a robotban lehet állítani, amennyiben ennek lehetőségét az MQL5 programozó beépítette a robotba.
A példákban 1.00 lot méretű pozíció megnyitását kíséreljük meg.
Teljesítés vagy megszűnés (Fill or Kill, FOK)
Ez a szabály azt jelenti, hogy egy megbízás csak a megadott mennyiséggel teljesülhet. Ha egy pénzügyi eszközből a szükséges mennyiség jelenleg nem áll rendelkezésre a piacon, a megbízás nem kerül végrehajtásra. A szükséges mennyiséget több, a piacon jelenleg elérhető ajánlatból is ki lehet tölteni.
Azonnali teljesülés vagy Törlés (Immediate or Cancel, IOC)
Ebben az esetben a kereskedő vállalja, hogy a piacon maximálisan elérhető volumenű ügyletet hajt végre a megbízásban megjelölt mennyiségen belül. Amennyiben a megbízás nem teljesíthető teljes mértékben, a rendelkezésre álló mennyiség teljesül a megbízásból, a fennmaradó mennyiséget pedig törlik. Az IOC megbízások használatának lehetőségét a kereskedési szerver határozza meg.
Visszatérés (Return)
Ez a házirend csak piaci (buy és sell), valamint limit és stop limit megbízások esetén használható. Részleges teljesítés esetén a fennmaradó mennyiséggel rendelkező megbízás nem törlődik, hanem feldolgozásra kerül. A piaci megbízások esetében a Return szabály csak a Tőzsdei végrehajtás módban használatos, míg a limit és stop limit megbízások esetében a Piaci végrehajtás és Tőzsdei végrehajtás módban.
Végrehajtási típusok és teljesítési házirendek összegző táblázata
A teljesítési házirendek használata a végrehajtás típusától függően az alábbi táblázatban látható:
Végrehajtási típus / Teljesítési házirend | Fill or Kill | Immediate or Cancel | Return |
---|---|---|---|
Instant Execution | + | — | — |
Request Execution | + | — | — |
Market Execution | + | + | + |
Exchange Execution | + | + | + |
Hol kérdezhetők le ezek az információk a platform felületén?
Egy instrumentum végrehajtási és teljesítési módjainak lekérdezését az alábbi módon lehet megtenni.
MQL5 programnyelvből (például expert advisorból) a SymbolInfoInteger() eljárás segítségével lehet lekérdezni a vonatkozó információkat.
Hol állítható a teljesítési mód a platform felületén?
Amennyiben a brókercég számlája lehetőséget biztosít ennek a tulajdonságnak a módosítására, akkor közvetlenül a megbízás indításakor dönthetünk róla a megbízásfeladási ablakban. Ha erre nincs módunk, a mező meg sem jelenik, esetleg szürke színnel jelzi, hogy a választási lehetőség tiltott.
Az alábbi képen látható, hogy a brókercég a NIKKEI index esetén az Azonnali teljesülés vagy Törlés (Immediate or Cancel, IOC), illetve a Teljesítés vagy megszűnés (Fill or Kill, FOK) lehetőségeket biztosítja.
MQL5 programnyelvből (például expert advisorból) az MqlTradeRequest adatstruktúrában adhatjuk meg az elküldés során, hogy milyen teljesítési házirend mellett döntünk. Mindenképpen figyelni kell arra, hogy ebbe a struktúrába csak a korábban lekérdezett kondíciókba illeszkedő lehetőséget válasszunk!
Összegzés
Összegzem számodra a bejegyzésben részletezett legfontosabb tudnivalókat.
Véleményem szerint, ha meg akarod könnyíteni a programozói életed, akkor a fill policy-t Fill or Kill, FOK-ra érdemes beállítani az összes végrehajtásra a EA-ban. Ezt a legkönnyebb lekezelni, mert csak 2 lehetőséget kell figyelni – vagy sikerült vagy nem a végrehajtás. Ha nem súlyos hiba miatt hiúsult meg a végrehajtás (ez MqlTradeResult retcode alapján eldönthető), akkor lehet néhányszor automatikus ciklus ismétléssel próbálkozni, újra küldeni az OrderSend() kérést és így sok esetben sikeres lesz.
És most jöjjön a dicséret. Ilyen remekül összeszedett, lényegre törő és egyben érthető összefoglalást én még nem olvastam senkitől, erről a nehéz témáról. Nekem nagyon tetszett, fantasztikus volt ez is.
Végül egy kérdés, ha szabad ilyet nyilvánosan feltenni. Tudsz ajánlani a hosszú szakmai tapasztalataid alapján MQL5 programozóknak készült ténylegesen színvonalas és terjedelmes szakirodalmat/könyvet/pdf-et ?
Kedves Nándi!
Igen, a FOK a legtöbb szituációban megfelelő választás, persze előfordulhatnak azért helyzetek, amikor ez nem passzol a stratégiához. Az újraküldéssel mindenképpen készülni kell a lehetséges elutasításra, én ezt pl. eltérő darabszámú próbálkozással kezelem a nyitás, zárás, illetve egyéb megbízások esetében (természetesen a kritikus hibák, mint például elégtelen tőke azonnali megszakítást jelentenek).
A visszajelzést hálásan köszönöm, jó tudni, hogy segítek vele és azt még inkább, hogy van, aki végig is olvassa. :)
A kérdéseddel kapcsolatban: nem kerestem ilyen könyvet, mert az MQL5 dokumentáció egyelőre megfelelő forrásnak bizonyul. Véleményem szerint magyarul igen csekély az esélye, hogy találsz ilyesmit, angol nyelven az Amazon-on valószínűleg lesznek erre találatok. Minősíteni azokat nem tudom, az előbb említett okból kifolyólag.
Ha találsz valamit, kérlek küldd el, és megnézem én is.
MT5 témakörben mi érdekelne téged egyébként? Gyűjtöm a témákat a következő bejegyzésekhez. :)
Kedves Radu!
Úgy gondolom a kimagasló szaktudást meg kell becsülni, el kell ismerni és támogatni is kell ahol csak lehet – akár egy ilyen üzenetben – mert egyrészt az igazi mély szaktudás ritka mint a fehér holló, másrészt mert úgy gondolom az ilyen elmék viszik előre és teszik jobbá a világot.
Kérdésedre leírom, hogy engem az MQL5 programozással milyen témák érdekelnek most legjobban, de ezek nem biztos hogy egybeesnek majd a széles olvasótábor érdeklődésével. Ezt majd Te eldöntöd.
Lássuk néhány témát:
– Grafikus felület, gombok, listák, mezők létrehozása, kezelése, ill. grafikus könyvtár használata. Hogyan lehet olyan profi felhasználói felületet létrehozni MQL5-ben, (vagy esetleg Visual Studióban C# VB,) amit megcsináltál a Hibrid-ben?
– Érdekelne Te hogy kezeled az OrderSend() után visszajövő retcode „Nincs elég pénz” hibaüzenetet, talán ciklusban? Vagy esetleg már kötés előtt ellenőrződ a kötés volumen-t (OrderCheck).
– A profit védelme (és ennek az optimalizálása) szerintem egy nagyon fontos és hatalmas téma, amibe érdemes lenne belemenni. Sokan elintézik egy egyszerű SL-al vagy egy beépített Trail Stop-al, de nyilván nem a legjobb megoldás.
– Milyen EA optimalizálást érdemes alkalmazni a gyakorlatban, ami működik is !!! a jövőbeli eredményekre? Szerintem ez is egy örök végtelen téma.
– A nyitó jelek szűrése esetleg átalakítása is szerteágazó érdekes téma lehet.
– A nyitó jeladók felépítése és a gyakorlatban is bizonyított típusai is érdekes lehetne
Egyenlőre talán ennyi, persze még lehetne folytatni a gyakorlati szempontból számomra érdekes témákat.
Üdv!
Kedves Nándi!
Hálás vagyok, hogy részletes választ adtál! Az MQL5 programozásban az MQL5 weboldalán vannak nagyon jó tutorialok, amelyben színes-szagos, brutál összetettségű és képességű GUI library-t rakott össze az egyik orosz programozó. Magyarázó cikkeket is írt hozzá, már több, mint 80 résznél tart a sorozat. Ezzel modern, és nagy tudású felületet lehet összerakni, scrollozással, rádiógombokkal, menükkel stb. Én azért döntöttem úgy, hogy nem ezt fogom használni, mert ezek vizuális visszatesztben egyáltalán nem (szó szerint értsd: semennyire) működnek. Így jött létre a Hibrid+ menürendszere, amely azóta már egyedi projektekbe is bekerült..
A felsorolt témák nagyon-nagyon jók és izgalmasak, legszívesebben nekiesnék a megírásuknak. Sajnos ez nagyon időigényes munka, egy-egy ilyen bejegyzés a kutatómunkával, publikálással stb. akár több napot is igénybe vesz. Ha nem is tudok bejegyzéseket publikálni azonnal, megpróbálok segíteni neked az általad felsorolt témákban.
Örülök, ha tetszik. Konkrétan mire vagy kíváncsi egyébként? Hátha tudok neked egy-két guideline-nal segíteni.
Minden tranzakciót, legyen az nyitás, zárás vagy módosítás ciklusban kezelek. Az esetek túlnyomó részében az első próbálkozás sikeres, ugyanakkor a piaci mozgások miatt az újrapróbálkozások is gyakorta szükségesek. Típustól függően (nyitás, zárás, módosítás) eltérő várakozási idő van az egyes próbálkozások között. Megkülönböztetem a hard (nincs pénz, nincs kereskedési jog) és soft (csúszás, kapcsolódási hiba stb.) hibákat: az előbbieknél azonnali break, utóbbiaknál várakozás + continue van.
A pre-check minden esetben fontos, igen, az OrderCheck használata elengedhetetlen. Ebben az MQL5 pl. kegyesebb már, mint az MQL4 volt.
És a legfontosabb: mindig figyeljünk a megszakításra (IsStopped()) és sose állhasson elő végtelen ciklus. Jó régen írtam egy MQL4 programozós bejegyzést a zárási folyamatról, kukkants rá, ha még nem olvastad esetleg. Van néhány olyan tipp benne, ami univerzális és ma is használható.
Én az alábbi moduljaimról tervezek idén bejegyzéseket publikálni:
Ezen kívül a kezdeti SL és kezdeti TP meghatározásához is sokféle módszer létezik, ezek közül is górcső alá szeretnék venni több darabot.
Láttad már Gábor két videóját az optimalizáció témakörében? Ha nem, akkor ajánlom figyelmedbe. Pont erről szól. Első rész, második rész.
Fú, ez konkrétan egy komplett cikksorozat… az átalakítás alatt mire gondolsz?
Ezt is részletezd kérlek. Nyitási szignálok, összefüggések típusaira gondolsz? Pont vizsgálat, sorrendiség, várakozás stb. ilyesmire gondolsz?
Egyenként válaszolok a témákra, hogy ne legyen nagyon hosszú a válasz.
1. Jó lenne kezdésnek meghallgatni egy összefoglalót | bemutatót a MQL5 saját (BEÉPÍTETT!) grafikus lehetőségeiről ( gombok, listák, mezők létrehozása, kezelése, ill. grafikus könyvtár használatáról).
Itt most kifejezetten a Standard Library-re gondolsz, amely minden MT5 gyári telepítésében az Include könyvtárban található? Kifejezetten programozóknak szánt kontentre mostanában szinte biztosan nem lesz kapacitásom sajnos. :(
A jelenleg megoldás (amit évek óta használok) teljesen saját. Az új keretrendszeremben az általad említett libekből indultam ki, ezeket módosítottam és fejlesztettem tovább. A keretrendszerrel az a célom, hogy a lehető legjobban cross-platform módon hozzam létre, vagyis az MT4 és MT5 alá ugyanúgy tudjak vele fejleszteni. Természetesen az átjárás jó pár ponton nem oldható meg (pl. az indikátorok meglehetősen eltérő kezelése miatt), de ha minden jól megy, egészen jó kompatibilitást fogok elérni.
2. Téma: OrderSend() után visszajövő retcode ill. hibakódok kezelése.
Teljesen egyetértek az általad leírtakkal pontosan ugyanígy kezelem. Kicsit meglepődtem, hogy mennyire teljesen azonosan gondolkodunk ebben a témában.
Sosem lehet mindenre gondolni, de azért valahol szerintem azért gondolkodunk hasonlóan, mert a legtöbb problémát simán végig lehet gondolni. Sokan egyáltalán nem kezelik ezeket és büszkék arra, hogy egy sor OrderSend() segítségével nyitnak – én ezt sosem értettem. Én pl. a visszatesztelés és a valós idő viselkedését nem választom szét (minimális eltérések vannak), mert a visszatesztben is a lehető legjobban kell idomulni a kondíciókhoz és szabályokhoz. Fontos továbbá, hogy habár az MT4 visszatesztere kifejezetten gyenge képességekkel bír, manapság már tök jó extrákkal fel lehet turbózni (lásd Tick Data Suite képességei), amelyek esetén ugyanúgy lényeges, hogyan reagál a robot pl. a csúszásra, az időbeli várakozásra vagy éppen a visszautasításra.
A már említett új keretrendszeremben pl. a csúszások regisztrálása, esetleges kezelése is kifinomultabban fog működni.
Felírtam a programozós témákat, de lehet, hogy valamilyen programozós kurzust kéne inkább csinálnom, mivel akit ez esetlegesen mélyebben érdekel, az gondolom nem lenne rest akár fizetni is érte.
3. Téma: Profit védelme.
Örömmel olvasom, hogy a felsorolt moduljaidról is tervezel publikálni.
Én a többszintes, R alapú, de a zárórát (zárórákat) is figyelembe vevő stratégián kezdtem agyalni nemrég.
Téma: profit védelme
Meghallgatva a Hibrid erről szóló videóit, úgy érzem ezt kipipálhatjuk, bőségesen megválaszoltátok.
Szuper, örülök! ;) Remélem, sok ötletet találtál benne.
Téma: Nyitó jelek
Én mivel piaci megbízással dolgozom nem tudom beállítani hogy hány gyertyáig legyen érvényes a Pending. Ehelyett a nyitó jelet ami általában csak 1 tick hosszú átalakítom és a kívánt Bar hosszíg kitartom. Pl. 4 Bar hosszig tartom a Buy nyitó jelet. Másrészt az oda vissza Buy Sell felváltva tickenként csapkodó nyitó jelet szintén átalakítom és csak egy irányú jelet küldök tovább.
Ezenkívül tesztelgetek több jeladó együttes jelének használatát. Ezek egymástól függetlenek, tehát nem a jel megerősítése miatt van több jeladó összekötve.
Érdekes koncepciók. Beválnak élesben?
A MQL5-ben rejlő programozási lehetőségek miatt merültem anno ebbe témába. Devizával ami szerintem az igazi mélyvíz a tőzsdén, még nem kereskedtem élesben, így semmiképpen nem nevezem magam deviza kereskedőnek. Ezért kizárólag demo-ban szerzett tesztelési és programozási tapasztalatokat tudok megosztani.
Ha az utolsó kérdésed a „nyitó jel kitartására” vonatkozik, akkor arra a válasz, hogy nálam nagyot dob a EA teljesítményén egy megfelő gyertya számú jel kitartás, akár 50-100%-ot.
De ne feledjük, hogy én azonnali belépésekkel és tick szélességű nyitó jeladókat használok és nem függő nyitást – ahol nyilván nem lesz ekkora várható javulás. (Teljesítményen én alapesetben Profit / Vissza esés arányát értem. Tovább is finomítható lenne a meghatározás, ha még a kötés és a számla egyenleg nagyságokat is belevennénk a képletbe,)
Több jeladóra a rövid válasz:
Több piaci helyzetre (pl. trendelés, kitörés, sávozás) lehet készíteni más-más jeladókat, amelyek jeleit sokszor érdemes össze hangolni. Persze ez egy jóval hosszabb téma.
Fú, ez abszolút így van. A jeladó szabályoknak és az összehangolásnak vannak kritikus, illetve szénné optimalizálható komponensei . :)