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.
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. |