Egy hasznos tipp a Metatrader4 terminálok felgyorsításához

Sokaknak okoz gondot az a tény, hogy a Metatrader4 egy nem túlságosan korszerű szoftver - ez kifejezetten a VPS szervereken mutatkozik meg, ahol az erőforrások eleve jobban korlátozottak, mint egy otthoni számítógépen. Ebben a posztban megmutatom, hogy hogyan tudod javítani a Metatrader4 terminálok futási teljesítményét.

Ebben az évben is rengeteg kérdést kaptam e-mailben és a fórumban is arra vonatkozólag, hogy van-e valamilyen módszer a MT4 terminálok gyorsabbá tétele kapcsán. Utánanéztem ennek és elhatároztam, hogy összeszedett formában megosztom veletek azokat az információkat, amelyeket a téma kapcsán a neten találtam és tapasztaltam.

Elsőként egy külföldi MT4 programozó/blogger blogjában találtam egy pontosan ide vonatkozó cikket, amely saját cikkem megírásának ötletét adta. Törekszem a lehető legkevesebb technikai zsargon említésére, azonban a cikkben azok is megtalálják a számításukat, akik egy kicsit mélyebben szeretnék megérteni és megoldani a lassú MT4 terminálok problémájának gyökerét.

Hol tapasztalható ilyesfajta lassúság?

Leginkább VPS szervereken, ahol eleve kisebb erőforrás áll rendelkezésre (kisebb processzorteljesítmény, kevesebb memória) a Windows rendszer és így maguk a programok, köztük a terminál(ok) számára is.

Miben nyilvánul meg a terminál lassú futása?

Lassú programfutás esetén - például - a következőket tapasztalhatod:

  • lassú ablakrajzolódás
  • lassú ablakváltás
  • a robotok, indikátorok paraméterablaka rendkívül lassan jelenik meg
  • a charton egy-egy mérés, vagy grafikus objektum elhelyezése is kihívás.

A fenti problémák esetén a legegyszerűbb megoldás általában egy magasabb teljesítményt biztosító VPS csomagra váltás is lehet, azonban mielőtt ezt tennéd, érdemes kipróbálni az alább bemutatott módszert is.

Nyújthat előnyt az alábbi megoldás alkalmazása akkor is, ha az ember csak 1 MT4 terminált futtat egyszerre?

Alapvetően a lassúság kifejezetten akkor szokott nagyobb zavart okozni, ha egyszerre több MT4-et futtatsz. Ha egyetlen egy MT4 terminál futtatása is nyögvenyelős, akkor lehetséges, hogy maga a VPS szerver teljesítménye túl gyenge vagy az alkalmazott robotok / indikátorok programkódja van hanyagul elkészítve.

Mi okozza a lassúságot?

Technikailag a probléma az, hogy a párhuzamos működésre nem optimalizált régi alkalmazások nagy része - ilyen például a Metatrader is - nem tudnak hatékonyan dolgozni többmagos processzorral (kétmagos, négymagos, stb.) rendelkező számítógépeken, többnyire virtualizált környezetben. Mivel manapság a legtöbb számítógép ilyen processzorral rendelkezik, nagyon valószínű hogy ilyen rendszert használsz te magad is.

A legtöbb VPS szerver a többmagos környezetet virtuális magokkal éri el - ebben az esetben viszont nem igazi, csak szimulált, virtuális magokról van szó. Az ilyen rendszereken a futtatott program - jelen esetben a Metatrader4 terminálok - folyamatainak programfutása az összes virtuális maghoz van hozzárendelve. Régisége miatt ez azonban nem előny, hanem inkább hátrány a MT4 számára.

Hogyan tudom megnézni, hogy hány magos a VPS rendszerem processzora?

A legegyszerűbb módszert mondom: nyisd meg a Feladatkezelőt! Ezt a legtöbb Windows rendszeren úgy tudod megtenni, hogy a tálcán jobb egérgombbal kattintasz egyet, majd kiválasztod a Feladatkezelő (Task Manager) menüpontot.

Feladatkezelő megjelenítése

Feladatkezelő megjelenítése

A kattintás után megjelenik a Feladatkezelő panelje. Kattints a Teljesítmény (Performance) fülre! Valami olyasmit kell látnod, mint az alábbi képen:

Feladatkezelő panel

Feladatkezelő panel

A fenti képen láthatod, hogy ennek a VPS szervernek három darab processzormagja van - ezeket piros számmal jelöltem. Amennyiben itt csak egy darab rácshálót látsz, a te rendszered nem többmagos, így a cikkben leírtakat sem fogod tudni alkalmazni.

Kattints most a Folyamatok (Processes) fülre! Itt annyi terminal.exe sort látsz majd, ahány MT4 terminált futtatsz. A könnyebb keresés végett kattints a Programkód neve fejlécre, így ABC sorrendbe rendeződik a folyamatok listája. A probléma az, hogy minden terminal.exe (újabb rendszereken terminal.exe *32 sorokat is láthatsz) az összes CPU magot akarja egyszerre használni.

terminal.exe folyamatok

terminal.exe folyamatok

A folyamatokhoz tartozó CPU oszlopban az látszik, hogy az adott folyamat a processzor hány százalékát használja jelenleg. Ezek a számok nem minden esetben mérvadóak; a mindennapi használat mellett jellemzőbb, hogy az ember azt veszi észre, hogy az ablakok közötti váltások idegölően lassúak - akár több másodpercig sem történik meg a kívánt eredmény a képernyőn.

Egy egyszerű trükk a MT4 gyorsabbá tételéhez többmagú processzorral rendelkező VPS szervereken

Ami azt illeti, kettő trükk is van. Hogy számodra melyik válik be, azt neked kell kipróbálnod.

1. megoldás: beállítjuk, hogy az összes terminal.exe folyamat egy, közös magot használjon

Nem számít, hogy melyik magra esik a választás; a lényeg csak annyi, hogy mindegyik program ugyanazt a magot használja. Ezek után természetesen ne aggódj, ha azt látod majd, hogy az összes mag közül csak egynek lesz nagy (akár 100%) a terhelése, a többi pedig kihasználatlannak tűnik. Ez csalóka, hiszen ezek a magok csak virtuálisak, és a rendszer több időt pazarol el a virtuális magok közötti terhelés-elosztással, mint kellene; a tényleges munkát így is-úgyis az az egy mag végzi majd el, ami a valóságban a virtuális szerver szolgáltatójának számítógépében van.

A feladat tehát: állítsd át az összes terminal.exe -t, hogy mindegyik a CPU0 (Processzor: 0) magot használja!

2. megoldás: beállítjuk, hogy minden terminal.exe folyamat másik magot használjon

Amennyiben az első lehetőség nem vált be, érdemes kipróbálnod ezt is. Ha a szervereden 3 darab mag van, akkor három MT4 terminál terminal.exe folyamatát rendeld egy-egy maghoz. Példa:

    • az első MT4 példány használja a CPU0-át
    • a második MT4 példány használja a CPU1-et
    • a harmadik MT4 példány használja a CPU2-őt.

Ha több MT4 terminálod fut egyszerre, mint ahány processzormagod van, akkor zárd be a többi terminált (legalábbis minimum a tesztelés idejére) annak megállapítására, hogy ez a megoldás gyorsít-e valamicskét a rendszereden.

OK, de hogyan lehet beállítani, hogy egy terminal.exe egy kiválasztott processzormagon fusson?

Azt, hogy egy-egy program mely processzormagot használja, affinitásnak nevezzük. Az alapértelmezett affinitás-beállítás a Windowsban az, hogy minden folyamat az összes processzormagot használhatja - ez okozza a lassulást, ezt kell megszüntetnünk.

Ez pedig meglepően egyszerű: a Feladatkezelőben kattints a Folyamatok (Processes) fülre, keresd meg az adott terminal.exe folyamatot a listából és kattints rajta jobb egérgombbal! Válaszd ki az Affinitás beállítása (Set Affinity) parancsot, és az így megjelenő panelen vedd ki a pipát az összes mag jelölőnégyzetéből, majd válassz ki egyetlen egy magot a fenti leírás első vagy második pontjának megfelelően! Az alábbi két képen láthatod a leírtakat.

Affinitás a Feladatkezelőben

Affinitás a Feladatkezelőben

Processzormagok kiválasztása

Processzormagok kiválasztása

Ha ezt az összes futó terminal.exe kapcsán megteszed, némi gyorsulást fogsz tapasztalni: könnyebben tudsz majd váltani a futó programok ablakai között, és a gyorsulás jótékony hatással lesz a futtatott robotok, indikátorok reakcióidejére is.

Hogyan lehet elérni, hogy az affinitás beállításai megmaradjanak?

Természetesen az életünk azért nem ilyen egyszerű: a beállított affinitást minden egyes terminálindításkor el kellene végezni. Ezt azonban - tapasztalatból mondom - könnyű elfelejteni, mindemellett időigényes és unalmas feladat is. A következőkben leírom, hogyan lehet ezt automatizálni. Amennyiben nem kifejezetten szeretsz elveszni az informatika bugyraiban, kérj inkább segítséget egy, a környezetedben lévő informatikustól!

Az automatikus affinitáskezeléshez szükségünk lesz egy egyszerű segédprogramra, ami pontosan ebből a célból készült el. A segédprogram neve: WinAFC. A programot közvetlenül erről a linkről töltheted le.

A letöltés után hozz létre a program számára egy könyvtárat - mondjuk a C:\Program Files (x86) könyvtárban WinAFC néven - vagy tömörítsd ki mappástól (WinAFC-0.9.2) a célkönyvtárba. Ha nincs ehhez jogosultságod, az sem baj; jó lehet bármilyen más könyvtár  (pl.  saját felhasználói könyvtár) is, a lényeg az, hogy megjegyezd hogy hova tetted a fájlokat.

WinAFC elhelyezése a számítógépen

WinAFC elhelyezése a számítógépen

A képen bekereteztem a WinAFC futtatható állományát; erre kattints kétszer bal egérgombbal. Ekkor egy fekete színű parancssor jelenik meg, és a program elhelyezi ikonját a Windows óra mellett balról.

Az első indításkor a WinAFC lefuttat egy automatikus rutint annak érdekében, hogy kiderüljön, hány darab processzormag érhető el. Az alábbi képen az első indítás utáni látvány látható:

  • az asztali számítógépem négy darab maggal rendelkezik (CPU0, CPU1, CPU2 és CPU3)
  • egyelőre nincsen létrehozott profil, azaz a WinAFC számára nem definiáltuk, hogy az egyes programok affinitását mire állítsa át. 
WinAFC - nincs profil

WinAFC - nincs profil

Első lépésként jegyezd fel magadnak azt, hogy az automatikus felismerés hány darab CPU magot állapított meg nálad. Ezután kattints a WinAFC Windows óra melletti ikonjára jobb egérgombbal, majd válaszd a Settings lehetőséget! Válaszd ki a Startup options fület, és pipáld be a jelölőnégyzeteket az alábbi kép alapján:

WinAFC indulási beállításai

WinAFC indulási beállításai

Az opciók jelentése:

  • Do not execute CPU detection heuristic at start - a program indulásakor nem futtatja le a processzormagok felismerő rutinját
  • Console minimized on start - a program indulásakor a fekete ablak (konzol) minimalizálva indul el
  • Start in stealth mode (no icon in systray) - rejtett üzemmód; még a program ikonja sem látszik az óra mellett (nem ajánlott)

Amennyiben nem szeretnéd, hogy a fekete színű konzol ablak automatikusan eltűnjön, eltüntetheted te is - ha az ablakban megnyomod a Control-C billentyűzetkombinációt. Később a WinAFC ikonra történő dupla egérkattintással tudod előhívni az ablakot.

Azt, hogy a MT4 termináljainkra milyen affinitási szabályok vonatkoznak, a WinAFC.exe mellett elhelyezkedő affinityinput.txt szöveges fájlban adhatjuk meg. Nyissuk meg ezt a fájlt dupla kattintással! A fájl legnagyobb valószínűséggel a jegyzettömbben fog megnyílni, valami ilyesmit kellene látnod:

affinityinput.txt fájl tartalma

affinityinput.txt fájl tartalma

A fájlban minden kettőskereszttel (#) kezdődő sor magyarázatot, vagy inaktivált beállítást jelöl.

Amennyiben a fent leírtak közül az első megoldást akarod alkalmazni, menj a szöveg aljára és szúrd be a következő sort:

*\terminal.exe := CPU0

Ez a megoldás azért fog működni mindenkinél, mert a sor jelentése a következő: "vedd alapul az összes terminal.exe fájlt, függetlenül attól hogy melyik meghajtó melyik könyvtárában van és állítsd be neki az affinitást az első (CPU0 azonosítójú) magra".

Amennyiben a fent leírt második megoldást akarod alkalmazni, akkor a saját termináljaid elérési útjával kell létrehoznod az alábbi sorokat. Menj a szöveg aljára és szúrd be - saját adataiddal módosítva - a következő sorokat:

C:\Terminálok\MT4 1\terminal.exe := CPU0
C:\Terminálok\MT4 2\terminal.exe := CPU1
C:\Terminálok\MT4 3\terminal.exe := CPU2
C:\Terminálok\MT4 4\terminal.exe := CPU3

Fontos, hogy:

  • pontos elérési utakat adj meg;
  • figyelj oda, hogy az elérési út után egy kettőspont és egy egyenlőségjel legyen ( := )
  • a kettőspont és egyenlőségjel után pedig a processzor általad választott azonosítója (pl. CPU0, CPU1, stb.).

Az egyes MT4 terminálokhoz tartozó terminal.exe -k elérési útját pl. a Windows Intézőből tudod kimásolni, ha a címmezőre jobb egérgombbal kattintva kiválasztod a Cím másolása szövegként opciót! Ekkor az elérési út a vágólapra kerül, és már csak be kell illeszteni, valamint mögé írni azt, hogy terminal.exe - az alábbi kép az Intéző ablak tetején lévő címmezőt mutatja meg.

Elérési út az Intéző ablakában

Elérési út az Intéző ablakában

Ha beszúrtad a választott megoldáshoz kapcsolódó sort / sorokat, ments el a fájl tartalmát a jegyzettömb Fájl menüjének Mentés lehetőségével! Ha fut, akkor ezután lépj ki a WinAFC programból - ezt az ikonjára történő jobb kattintással és az Exit sor kiválasztásával tudod megtenni. Most indítsd el újra a WinAFC.exe -t! A konzol nem jelenik meg, hiszen korábban beállítottuk hogy rejtve maradjon. Ezért kattints duplán bal egérgombbal a Windows óra melletti ikonon! Ha mindent jól csináltál, akkor valami hasonlót fogsz látni:

WinAFC - teszt mód

WinAFC - teszt mód

A kiírás - ami ugyan nem ékezethelyes - arról tájékoztat, hogy a C:\Terminálok\MT4N\terminal.exe (5052-es folyamatazonosítóval) affinitása a CPU0 -ás azonosítójú magra van beállítva. Illetve csak majdnem: az ún. teszt mód van alapértelmezésként engedélyezve, azaz affinitás változtatás még nem történt. Ez a módszer arra szolgál, hogy az esetleges elgépelési hibákat tét nélkül ki lehessen próbálni. Megjegyzem, hogy ekkor a Windows óra melletti WinAFC színessé válik (a gyári "üres" beállítások során az ikon még fekete-fehér-szürke színt mutatott).

Ha a kiírt információk megfelelnek az elvárásaidnak, akkor lépj ki a WinAFC-ből és keresd ki az affinityinput.txt fájlban a következő sort:

TestMode = 1

és cseréld ki (vagy írd át) erre:

TestMode = 0

A következő WinAFC indításnál már élesben fog affinitást állítani a program, a konzol pedig valami hasonlót fog mutatni:

WinAFC éles mód

WinAFC éles mód

Ha ezek után a korábban ismertetett módszerrel ellenőrzöd a beállított affinitást a Feladatkezelőben, az a processzormag lesz kiválasztva, amelyiket megadtad.

Ezzel az affinitás-beállítás automatizálásának oroszlánrésze tulajdonképpen befejeződött, most már csak arról kell gondoskodnod, hogy a WinAFC minden szerver újraindítás után elinduljon (automatikusan vagy akár kézzel). Amennyiben itt is az automatikusságot választod, akkor még pár plusz lépést kell megtenned, amit itt olvashatsz el. Parancsikont a WinAFC programhoz legegyszerűbben úgy készíthetsz, hogy jobb egérgombbal a WinAFC.exe fájlra kattintva kiválasztod a Parancsikon létrehozása opciót, majd az így létrejött parancsikont az Indítópult mappába helyezed át.

Végszó

A beállítások elvégzése után figyeld meg, hogy javult-e valamennyit az adott megoldással a VPS szerver reakcióideje, jobban reagálnak-e a Metatrader termináljaid. Amennyiben nem, annak még mindig oka lehet a túl gyenge VPS teljesítmény - az esetek egy részében azonban benne van a pakliban, hogy a fenti szoftveres eljárás segít enyhíteni a lassúságot.

Forrásként Rimantas Petrauskas ide vonatkozó cikkét használtam fel és bővítettem ki.

Ha megcsináltad a leírást és szeretnéd megosztani velem a végeredményt, akkor kérlek hogy tedd meg ezt akár közvetlenül itt a cikk alatt, vagy e-mailben is! Előre is köszönöm visszajelzésedet, jó affinitás-kezelést kívánok!

Oszd meg, ha hasznosnak találtad!

2 hozzászólás a(z) “Egy hasznos tipp a Metatrader4 terminálok felgyorsításához” bejegyzéshez

  1. Szia Radu!

    Teszteltem egy kicsit a processzor erőforrás elosztását.
    4 magom van 3.9GHz (windows10).
    Ugyan csak 1 terminált futtattam, de 1 mag hozzárendelése esetén lett látványosan lassabb a tesztelés. 2 mag esetén már újra begyorsult. 2 és 4 mag között olyan 10% különbség van már csak. Valószínű, hogy annak érdemes ezzel játszani, aki több terminált futtat egyszerre. Üdv. M.

    • Szia! Köszi a visszajelzést! Tudsz esetleg konkrét számokat is mondani? Tehát az affinitás piszkálása nélkül, és az 1 maghoz rendelés után mennyi idő volt egy-egy teszt lefutása? A stratégiai teszter naplójában a teszt lefutása után az utolsó sorban megtalálod a pontos futási időket.

MINDEN VÉLEMÉNY SZÁMÍT!