MQL4 Könyv   Beépített függvények   Számlainformáció

Számlainformáció

Ezeket a függvényeket egyszerűen használhatjuk az ügyfélterminál felügyeletére, például arra, hogy korlátozzuk a programunk használatát a kereskedés során. Vizsgáljuk meg, hogyan lehet megoldani egy ilyen feladatot:

Feladat

39. feladat: Hozz létre egy biztonsági kódot a kereskedelmi terjesztésre szánt programodhoz, ami megfelel a következő követelményeknek: a programnak kérnie kell egy jelszót az egyéni ügyfelek valódi számláihoz; ne kérjen jelszót bizonyos brókerekkel történő kereskedés esetén; a demószámlákon ne legyen korlátozva a program használata.

Ez a példa egy valós problémafelvetést tartalmaz. A program sikeres kereskedelmi terjesztéséhez a potenciális vevőknek lehetővé kell tenni, hogy tesztelhessék azt egy demószámlán. Tehát a felhasználó meg ismerheti a program előnyeit és el tudja dönteni, hogy megvegye-e azt.

Egy általános jelszó alkalmazása azért helytelen, mert a program jogosulatlan terjesztését ebben az esetben nem tudjuk megakadályozni. Tehát az egyéni jelszónak függenie kell a felhasználó igazi számlaszámtól. Nem szükséges bizonyos vállalat ügyfeleire használni a jelszót (ha a dealing center minden ügyfelének megvette a program használati jogát) - a programnak azonosítania kell a szervert ahová az ügyfélterminál kapcsolódik. És, ha ez engedélyezett vállalat szervere, minden felhasználójának lehetővé kell tenni, hogy akadályok nélkül dolgozzon a programmal.

A 39. feladatban szereplő programhasználati jogot korlátozó megoldást láthatjuk lentebb (сheck.mq4 EA):
//--------------------------------------------------------------------
// сheck.mq4
// The code should be used for educational purpose only.
//--------------------------------------------------------------- 1 --
extern int Parol=12345;
//--------------------------------------------------------------- 2 --
int start() // Special function 'start'
 {
 if(Check()==false) // If the using conditions do not..
 return; // ..meet the requirements, then exit
 
 // The main code of the program must be specified here
 Alert("Program execution"); // Alert example
 
 return; // Exit start()
 }
//--------------------------------------------------------------- 3 --
bool Check() // User-defined function of..
 { // .. use conditions checking
 if (IsDemo()==true) // If it is a demo account, then..
 return(true); // .. there are no other limitations
 if (AccountCompany()=="SuperBank") // The password is not needed
 return(true); // ..for corporate clients
 int Key=AccountNumber()*2+1000001; // Calculating key
 if (Parol==Key) // If the password is correct, then..
 return(true); // ..allow the real account to trade
 Alert("Wrong password. EA does not work.");
 return(false); // Exit user-defined function
 }
//--------------------------------------------------------------- 4 --

Az ellenőrzést közvetlenül a különleges start() függvény kezdetekor végezzük el, ebben a példában a 2-3 blokkban:

 if(Check()==false) // If the using conditions..

Ha a Check() felhasználói függvény visszatérési értéke ”false” akkor a vezérlést megkapja a return operátor és a különleges start() függvény befejezi a működését. A program fő kódja közvetlenül ezután következik. Ha a Check() függvény ”true” értéket küld vissza (az ellenőrzés sikeres), akkor a fő kódot végrehajtásra kerül.

A Check() felhasználói függvényben három ismertetőjelet vizsgálunk:
- a számla egy demó számla-e;
- az ügyfél a megfelelő vállalati szerveren kereskedik;
- a jelszó érvényes a valódi számlára.

Az első ismertetőjel ellenőrzésére az IsDemo() függvényt használjuk.

IsDemo() függvény

bool IsDemo()

A függvény visszaküldi a TRUE-t, ha a program egy demószámlával működik. Különben visszaküldi a FALSE-OT.

Ha az IsDemo() függvény TRUE értéket küld vissza, akkor a felhasználó demó-számlával dolgozik. Ez azt jelenti, hogy nincs szükség további ellenőrzésre, (mert demó számlán a program használata nincs korlátozva). A Check() függvény ebben az esetben befejezi a működését és visszaküldi a TRUE értéket:

 if (IsDemo() == true) // If it is a demo account, then..
 return(true); // .. there are no other limitations

De ha az IsDemo() függvény ”false” értéket küld vissza, a felhasználó valódi számlával dolgozik. Ebben az esetben meg kell vizsgálni, hogy a felhasználónak van-e elég jogosultsága. Az AccountCompany() függvényt ebben a példában arra használjuk, hogy ellenőrizze a kereskedő melyik bróker ügyfele.

AccountCompany() függvény

 string AccountCompany()

A függvény visszaküldi a bróker nevét ahol kereskedünk.

Ha az ellenőrzés eredménye:

 if (AccountCompany() == "SuperBank")// The password is not needed..
 return(true); // ..for corporate clients

az, hogy a vállalat neve egyezik azzal, amit a programban megadtunk,  a Check() függvény be fogja fejezni a működését és a visszatérési értéke true lesz. Ha az ügyfél egy másik brókerhez csatlakozik (nem szerződött bróker ügyfele), akkor azt kell ellenőrizni, hogy van-e egyéni engedélye.

A bejegyzés:

 int Key = AccountNumber()*2+1000001;// Calculating key

a programozó elhelyez egy algoritmust a kulcs kiszámításához. Ez a példa egy egyszerű módszert tartalmaz. A programozó ennél összetettebb módszert is alkalmazhat a kulcs kiszámítására. Az algoritmusnak meg kell határoznia a számlaszámot, ehez az AccountNumber() függvényt használja.

AccountNumber() függvény

 int AccountNumber()

A függvény visszaküldi a folyószámla számát.

A jelszó ellenőrzése a korábban megadott algoritmus alapján történik. Ha az ellenőrzés során a jelszó és a kulcs illeszkedik, akkor a Check() függvény befejezi a működését és ”true” értéket küld vissza:

 if (Parol == Key) // If the password is correct, then..
 return(true); // ..allow the real account to trade

Ha az ellenőrzés sikertelen, akkor a felhasználó nem tud valódi számlán kereskedni. Ebben az esetben a Check() függvény befejezi a működését és ”false” értéket küld vissza és bemutatja a megfelelő üzenetet. Ebben az esetben a program jogosulatlan használatát megakadályozzuk.

AZ ügyfélterminál információt visszaküldő függvények

Függvény Összefoglaló információ
TerminalCompany Visszaküldi annak a brókernek a nevét, ahová az ügyfélterminál csatlakozott.
TerminalName Visszaküldi az ügyfélterminál nevét.
TerminalPath Visszaküldi az ügyfélterminál telepítési mappájának elérési útját.

Függvények, amik észlelik az ügyfélterminál aktuális állapotát és a végrehajtott MQL4 program környezeti státuszát

Függvény Rövid leírás
GetLastError A függvény visszaküldi az utolsó hibakódot, majd a különleges last_error változó értékét, ami az utolsó hibakódot tartalmazza beállítja nullára. Ezért a GetLastError függvény következő hívása 0-t fog visszaküldeni.
IsConnected Visszaküldi az ügyfélterminál és a szerver közötti kapcsolat státuszát, a visszaadott érték TRUE , ha a kapcsolat fennáll és FALSE, ha nincs kapcsolat a szerverrel vagy a kapcsolat megszakadt.
IsDemo Visszaküldi TRUE-t, ha a program egy demó-számlával működik. Különben visszaküldi a FALSE-t.
IsDllsAllowed Visszaküldi a TRUE-t, ha a DLL hivás az EA-nak engedélyezett. Különben visszaküldi a FALSE-t.
IsExpertEnabled Visszaküldi a TRUE-t, ha az EA futtatása engedélyezett az ügyfélterminálban. Különben visszaküldi a FALSE-t.
IsLibrariesAllowed Visszaküldi a TRUE-t, ha az EA számára engedélyezett, hogy egy könyvtári függvényt deklaráljon. Különben visszaküldi a FALSE-t.
IsOptimization Visszaküldi a TRUE-t, ha az EA teszt módban dolgozik, és eközben optimalizál. Különben visszaküldi a FALSE-t.
IsStopped Visszaküldi a TRUE-t ha a program (EA vagy script) parancsot kapott hogy fejezze be a működését. Különben visszaküldi a FALSE-t.
IsTesting Visszaküldi a TRUE-t, ha az EA tesztelő módban dolgozik. Különben visszaküldi a FALSE-t.
IsTradeAllowed Visszaküldi a TRUE-t, ha az EA-nak engedélyezett a kereskedés. Különben visszaküldi a FALSE-t.
IsTradeContextBusy Visszaküldi a TRUE-t, ha a rendszer elfoglalt. Különben visszaküldi a FALSE-t.
IsVisualMode Visszaküldi a TRUE-t, ha az EA-t vizuális módban tesztelik. visszaküldi a FALSE-t.
UninitializeReason Visszaküldi az EA, az egyéni indikátor, vagy a script bezáródása okának a kódját. A visszaadott érték a  deinitialization codes közül az egyik lehet. Ezt a függvényt az init() függvényből hívhatjuk, hogy elemezze az előző indítás deinicializálásának  az okát.

Az aktív számlával kapcsolatos információk elérésének függvényei

Függvény Rövid leírás
AccountBalance Visszaküldi az aktív számla egyenlegének az értékét (a teljes mennyiségű pénzt a számlán).
AccountCredit Visszaküldi az aktív számla credit összegét.
AccountCompany Visszaküldi a számlát kezelő brókercég nevét.
AccountCurrency Visszaküldi a letétiszámla deviza nevét.
AccountEquity Visszaküldi a folyószámla sajáttőke-értékét. A sajáttőke-számítás a szerverbeállításoktól függ.
AccountFreeMargin Visszaküldi a szabad margin értékét, amit új megbízás nyitására használhatunk.
AccountFreeMarginCheck Visszaküldi a szabad margin értékét, ami akkor maradna, ha a megadott megbízást végrehajtanánk.
AccountFreeMarginMode A megbízás nyitásához szükséges szabad margin kiszámításának módja az adott folyószámlán.
AccountLeverage Visszaküldi a folyószámla tőkeáttételét.
AccountMargin Visszaküldi a nyitott pozíciók fenntartásához szükséges margin összegét.
AccountName Visszaküldi a folyószámla felhasználónevét.
AccountNumber Visszaküldi a folyószámla számát.
AccountProfit Visszaküldi a letéti pénznemben számolt profit értékét.
AccountServer Visszaküldi az aktív szerver nevét.
AccountStopoutLevel Visszaküldi a StopOut szint értékét.
AccountStopoutMode Visszaküldi a StopOut szint számítás módját.