Funkcja double AccountFreeMarginCheck() zwraca wartość wolnych środków w walucie konta, które pozostaną na koncie gdyby otwarto pozycję po bieżącej cenie. Więcej informacji można znaleźć w specyfikacji MQL4.
#property strict
void OnStart()
{
//--- obliczyć wartość pozostałych wolnych środków, gdyby otwarto pozycję
//--- dla EURUSD, na kupno, wolumenem 0.05
string symbol = "EURUSD"; // instrument finansowy
int cmd = OP_BUY; // typ operacji (kupno po bieżącej cenie rynkowej)
double volume = 0.05; // wolumen transakcji
double result = AccountFreeMarginCheck(symbol, cmd, volume);
//--- wyświetlić wynik obliczenia
Print("Po otwarciu pozycji OP_BUY na EURUSD lotem 0.05 na koncie zostanie = ",
DoubleToString(result,2)," ",AccountCurrency());
}
Rys. 1. Przykład stosowania funkcji AccountFreeMarginCheck().
Gdyby się okazało, że na koncie jest za mało środków do otwarcia nowej pozycji, wtedy zostanie wygenerowany błąd 134 (ERR_NOT_ENOUGH_MONEY) . W związku z tym, po obliczeniu AccountFreeMarginCheck(), zaleca się sprawdzenie wartości błędu (przykład 2).
#property strict
void OnStart()
{
//--- obliczyć wartość pozostałych wolnych środków, gdyby otwarto pozycję
//--- dla bieżącego instrumentu finansowego, na sprzedaż, wolumenem 100.0
double volume = 100.0;
double simulation = AccountFreeMarginCheck(_Symbol, OP_SELL, volume);
int check = GetLastError(); // przypisać wartość błędu zmiennej check
//--- sprawdzić błąd
if(check != 0)
//--- jeśli jest błąd, wyświetlić jego wartość
{
Print("Błąd obliczenia = ",check); // 134 = ERR_NOT_ENOUGH_MONEY (za mało środków)
return;
}
//--- jeśli błędu nie ma, poinformować o wolnych środkach
else
Print("Po otwarciu pozycji OP_SELL na ",_Symbol,
" wolumenem ",DoubleToString(volume,2)," na koncie zostanie = ",
DoubleToString(simulation,2)," ",AccountCurrency());
}
Rys. 2. Kontrola błędu po obliczeniu funkcji AccountFreeMarginCheck().