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