MQL4 könyv   Beépített függvények  Kereskedelmi függvények

Kereskedelmi függvények

A kereskedelmi függvényeket két csoportba lehet sorolni - azokra a függvényekre, amelyek kereskedelmi megbízást adnak, és azokra, amelyek visszaadnak valamilyen, a kereskedésre jellemező értéket. Az MQL4-ben csak öt függvény van, ami kereskedelmi kérést küldhet a szervernek:

  • OrderSend() – a függőben levő megbízás megnyitása;
  • OrderClose() - a megbízás zárása;
  • OrderCloseBy() - az ellentétes megbízások zárása;
  • OrderDelete() – a függőben levő megbízások törlése;
  • OrderModify() – mindenféle megbízás módosítása.
A fent felsorolt függvények alkalmazásának a rendjét részletesen leírtuk a  Programming of Trade Operations 

részben. Azoknak a további függvényeknek a használatára, amelyek nem alakítanak ki megbízást szintén gyakran szükség van. Például amikor a megbízásokat előre meghatározott sorrendben kell bezárnunk. Ahhoz, hogy ezt megtehessük, a programnak elemeznie kell a meglévő megbízásokat - a megbízás típusát, a kötésméretet, a stop szinteket, stb. Vizsgáljunk meg néhány függvényt amelyekkel hozzájuthatunk a megbízásokkal kapcsolatos információhoz.

OrderTotal() függvény

int OrdersTotal()

A függvény visszaküldi az összes nyitott és függőben levő megbízás számát.

OrderTakeProfit() függvény

double OrderTakeProfit()

A függvény visszaküldi az aktuális megbízás előre beállított profitkivételi szintjét. A megbízást előzőleg ki kell választani az OrderSelect() függvénnyel.

OrderProfit() függvény

double OrderProfit()

Visszaküldi a kiválasztott megbízás nettó nyereség értékét (a swapok és jutalék nélkül). Ez a lezárt megbízásoknál fix profit, nyitott megbízásoknál a realizálatlan nyereség/veszteség. A megbízást előzőleg ki kell választani az OrderSelect() függvénnyel.

OrderLots() függvény

double OrderLots()

Visszaküldi a kiválasztott megbízás lot összegét. A megbízást előzőleg ki kell választani az OrderSelect() függvénnyel.

Azt a program részletet, ami lekérdezi egy megbízás TakeProfit szintjét, a profit, és lot összegét lent láthatjuk:

for (int i=0; i<OrdersTotal(); i++) // For all orders
 {
 if((OrderSelect(i,SELECT_BY_POS)==true) // If next exists
 { 
 double ТР = OrderTakeProfit(); // TakeProfit of order
 double Profit= OrderProfit(); // Order profit
 double Lots = OrderLots(); // Amount of lots
 //......TP and profit values usage in the program..... 
 }
 } // End of the cycle body

Világos , hogy a szóban forgó függvényeknek (OrderTakeProfit (), OrderProfit() és OrderLots()) nincs semmilyen paramétere mint például a megbízás azonosítója, a visszatérési értéket ezen függvények paraméterei nem befolyásolják.

A megbízások egyedi jellemzőinek (a beállított stop szintek, a lot összege) a meghatározásához először ki kell jelölni a szükséges megbízást és ezután a program tudni fogja, hogy a számításokat melyik megbízásra vonatkozóan hajtsa végre. Ezért mielőtt elindítjuk a számításokat, végre kell hajtani az OrderSelect() függvényt (lásd: Megbízások zárása és törlése). Az ezután végrehajtott kereskedelmi függvények a kiválasztott megbízás jellemzőit fogják visszaküldeni.

A megbízás jellemzők helyes értékelésének nagy jelentősége van. Például, mikor meghatározzuk a megbízások bezárásának a sorrendjét, meg kell határozni azokat az ismertetőjeleket melyek alapján eldöntjük, hogy melyik megbízást kell legelőször zárni, és melyiket később. Vessünk egy pillantást egy egyszerű feladatra!

Feladat

40. feladat: Jelenleg két nyitott Buy megbízásunk van egyetlen szimbólumon. Az elsőt 1.2000-es árnál nyitottuk 0.5 lot méretben, a másodikat 1.3000-as árnál 1 lot méretben. Az aktuális ár 1.3008. A kereskedelmi feltételek a Buy megbízások zárásának a szükségességét jelzik. El kell dönteni, hogy melyik megbízást zárjuk le először és melyiket másodszor.

Nyilvánvalóan a profit az első megbízáson 108 pont, míg az a másodikon 8 pont. Bár az első megbízást kisebb lot összeggel nyitottuk, mint a másodikat, mégis az elsőn van a nagyobb profit, az első megbízás profitja 540 dollár, a második megbízás profitja 80 dollár. Első ránézésre úgy tűnhet, hogy az első megbízást célszerűbb először bezárni, mert ennek nagyobb profitja van. Azonban ez hibás elgondolás. Meg kell vizsgálni a lehetséges forgatókönyveket, hogy helyes döntést hozzunk.

A megbízások befejezésének a sorrendje lényegtelen lenne, ha tudnánk, hogy az ár nem fog megváltozni a zárási folyamat alatt. Azonban az ár a két megbízás bezárása között megváltozhat. Tehát azt a megbízást, ami több veszteséget okozhat a negatív forgatókönyv esetén, kell először lezárni. Ha az ár egy pontot esik, az első megbízás profitja 5 dollárral fog csökkenni, míg az a másodiké 10 dollárral. Nyilvánvaló, a második megbízás több veszteséget okozna, úgyhogy először ezt kell zárni. Ebben az esetben a kötésméret volt a meghatározó szempont a megbízások zárási sorrendjének meghatározásakor. A pozitív forgatókönyvet itt nem vesszük számításba, mert a kereskedelmi ismertetőjelek kialakultak a programban, és ezek az ismertetőjelek a Buy megbízás zárását jelzik.

Ha két azonos méretű megbízás zárása közül kell választani akkor más szempontot kell keresni az elsőnek zárandó megbízás kiválasztására. Például a távolságot az aktuális ár és a megbízások StopLoss értéke között. Ebben az esetben azt kell elemezni, hogy melyik megbízás okozna több veszteséget egy gyors ármozogás esetén. A válasz nyilvánvaló: azt kell előbb zárni(a két azonos méretű megbízás közül) amelynek a StopLossa távolabb van az aktuális ártól.

Így elemezni lehet a prioritást a megbízások egyéb paraméterei alapján is, és össze tudod állítani az ismertetőjelek prioritás alapú listáját, amikor eldöntöd a megbízások befejezésének sorrendjét. Nem nehéz azonosítani azokat az ismertetőjeleket, amelyeket nem kell figyelembe venni. Ez például a nyitó ár (és a megbízás profitja). Valamennyi pénzünk a kereskedés minden pillanatában látható az ügyfélterminál Equity oszlopában. Ennek az értéknek a forrása nem fontos, nem baj, ha egyik vagy másik megbízásunk veszteséggel jár, ha a végeredmény profitot hoz.

Egy megbízás minden jellemzőjét megismerhetjük, ha alkalmazzuk az alábbi függvényeket:

Kereskedelmi függvények

Function Summary Info
Execution Errors

(ez nem függvény)
Bármelyik kereskedelmi művelet (OrderSend, OrderClose, OrderCloseBy, OrderDelete vagy OrderModify függvények) sikertelen végrehajtása esetén negatív jegyszámot vagy FALSE-t kapunk vissza. Megtudatjuk a hiba okát, ha használjuk a GetLastError függvényt. Minden hibát a megfelelő módon kell feldolgozni.
OrderClose Bezárja a pozíciót. Visszaküldi aTRUE-t, ha a függvény sikeresen ért véget. És FALSE-t küld vissza ha a függvény hibával zárult.
OrderCloseBy Egy nyitott pozíciót zár be egy másik, ugyanazon a szimbólumon lévő, de ellentétes pozícióval. Visszaküldi aTRUE-t, ha a függvény sikeresen véget ért. És visszaküldi a FALSE-t, ha a függvény hibával zárult.
OrderClosePrice Visszaküldi a kiválasztott megbízás záró árát.
OrderCloseTime Visszaküldi a kiválasztott megbízás zárási idejét.
OrderComment Visszaküldi a kiválasztott megbízás megjegyzését.
OrderCommission Visszaküldi a kiválasztott megbízás kiszámított jutalékát.
OrderDelete Törli a korábban elhelyezett függőben levő megbízást. Visszaküldi a TRUE-t, ha a függvény végrehajtása sikeresen véget ért. És visszaküldi a FALSE-t, ha a függvény hibával zárult.
OrderExpiration Visszaküldi a kiválasztott függőben levő megbízás lejáratának a dátumát.
OrderLots Visszaküldi a kiválasztott megbízás lot összegét.
OrderMagicNumber Visszaküldi a kiválasztott megbízást azonosító magic numbert.
OrderModify Módosítja a korábban nyitott és a függőben levő megbízások paramétereit. Visszaküldi aTRUE-t, ha a függvény végrehajtása sikeresen véget ért. És visszaküldi a FALSE-t, ha a függvény hibával zárult.
OrderOpenPrice Visszaküldi a kiválasztott megbízás nyitó árát.
OrderOpenTime Visszaküldi a kiválasztott megbízás nyitási idejét.
OrderPrint Egy rendszerinformációs bejegyzést ír a naplófájlba.
OrderProfit Visszaküldi a kiválasztott megbízás nettó nyereség értékét (a swapok és jutalék nélkül). Ez a lezárt megbízásoknál fix profit, a nyitott megbízásoknál a realizálatlan nyereség/veszteség.
OrderSelect A függvény kiválasztja a feldolgozandó megbízást. Visszaküldi aTRUE-t, ha a függvény végrehajtása sikeresen véget ért. És visszaküldi a FALSE-t, ha hiba történt.
OrderSend Ezzel a függvénnyel helyezzük el a piaci vagy a függőben levő megbízásokat. Visszaküldi az új megbízás jegyszámát, amit a szerver adott, illetve sikertelenség esetén -1-et küld vissza.
OrdersHistoryTotal Visszaküldi a lezárt pozíciók és törölt megbízások számát a folyószámla történelmében, amelyeket az ügyfélterminál tartalmaz.
OrderStopLoss Visszaküldi a kiválasztott megbízás veszteségszintjéhez (stop loss) tartozó záró árat.
OrdersTotal Visszaküldi az összes nyitott és függőben levő megbízás számát.
OrderSwap Visszaküldi a kiválasztott megbízás swap értékét.
OrderSymbol Visszaküldi a kiválasztott megbízás szimbólumnevét.
OrderTakeProfit Visszaküldi a kiválasztott megbízás nyereség kivételéhez (take profit) tartozó záró árat.
OrderTicket Visszaküldi a kiválasztott megbízás jegyszámát (ticket).
OrderType Visszaküldi a kiválasztott megbízás típusát.