Az új, 600-as MT4 kiadás temérdek újdonság és hasznos funkció mellett pár komoly változást is tartogat, amely nem sajnos nem mindig könnyíti meg a felhasználók dolgát.
A legfontosabb ilyen változás, hogy a MT4 fájlstruktúrája megváltozott – azaz a robotokat, indikátorokat és szkripteket nem arra a helyre kell bemásolni, ahova az elmúlt majdnem 10 évben.
A nélkülözhetetlen infókhoz olvassatok tovább!
A 600-as kiadás újdonságait egyébként ebben a korábbi cikkemben találhatjátok meg (akkor még 574-es kiadásként emlegették, ez ne tévesszen meg senkit).
600-as verziónál régebbi állapot
Az eddigi fájlstruktúra nem volt túlbonyolítva: alapvetően a telepítési könyvtáron (például: C:\Program Files\Metatrader\) belül az experts könyvtárból nyílt minden további könyvtár, amely az indikátorok, szkriptek, stb. elhelyezésére volt alkalmas. Ebbe maximum a Windows Felhasználói Fiókok Felügyelete nevű funkciója szólhatott bele.
545-ös vagy annál újabb állapot (új MQL4 struktúra)
Az új MT4 változatokban bemutatkozik az úgynevezett rendszermappa. A rendszermappa az a mappa, amelybe a Metatrader alap esetben dolgozik. Ebben a könyvtárban található meg az összes olyan további könyvtár, amelyben a Metatrader különböző fájlokat tárol a működéshez, illetve ebből nyílik az MQL4 könyvtár is, amelyben a saját robotjaink, indikátoraink, stb. vannak.
Nagyon fontos: a rendszermappát a Metatrader4 kliens terminálon belül a Fájl menü Rendszermappa megnyitása sorának kiválasztásával tudjuk megkeresni.
A felugró ablakban meg tudjuk nézni, hogy fájlszinten pontosan hol helyezkedik el ez a könyvtár. Két lehetőség van:
- a C:\Users\{Felhasználónév}\AppData\Roaming\MetaQuotes\Terminal\ könyvtáron belül egy értelmetlennek tűnő karaktersorozattal elnevezett alkönyvtárról lehet szó, vagy
- a MT4 telepítési könyvtára maga a rendszermappa.
Az első változat akkor lesz igaz, ha a Windowsban a Felhasználói Fiókok Felügyelete (UAC) funkció engedélyezve van. Ebben az esetben a MT4-gyel való munka során keletkező fájlok teljesen más helyen lesznek, mint a MT4 telepítési könyvtára. A funkció lényege, hogy magát a MT4 telepítést a Windows megóvja attól, hogy az sérüljön.
Mi is ez a Felhasználói Fiókok Felügyelete (UAC) funkció?
Azt gondolod, soha nem hallottál róla? Tapasztalni már biztosan tapasztaltad – legtöbbször elsötétülő háttér előtt kérdez valamit a biztonságodra ügyelő Windows.
Idézet a Microsoft honlapjáról:
A Felhasználói fiókok felügyelete elősegíti a számítógép védelmét a támadókkal és a kártékony szoftverekkel szemben. Minden alkalommal, amikor egy program nagyobb módosítást kísérel meg végrehajtani a számítógépén, a Felhasználói fiókok felügyelete értesítést jelenít meg erről, és a felhasználó beleegyezését kéri.
Amennyiben az UAC funkció ki van kapcsolva, vagy a Metatrader4 terminált a /portable kapcsolóval indítottuk, a MT4 munkafájljait a telepítési könyvtárból nyíló további könyvtárakon belül találjuk majd meg.
Nekünk leginkább az MQL4 könyvtár a legfontosabb, hiszen a jövőben majd ide kell bemásolnunk az experteket, indikátorokat, szkripteket és egyebeket. Amennyiben korábbi MT4 telepítésünket frissítettük, az MT4 a frissítés folyamán automatikusan átmásolja nekünk a fájljainkat, így ezzel (elvileg) további teendőnk nincs. Új MT4 telepítések illetve a jövőben bemásolni kívánt alkalmazások esetén azonban a rendszermappából nyíló MQL4 könyvtárra lesz szükségünk.
Az MQL4 mappa felépítése
Az új MQL4 verzióban a fájlstruktúra megváltozott (bár nagyon hasonló a régi felépítéshez). Az egyes alkönyvtárak célja a következő:
- \Experts – expert advisorok (kereskedőrobotok),
- \Indicators – egyéni indikátorok,
- \Scripts – szkriptek (egyszeri futtatásra szánt MQL4 alkalmazások),
- \Include – forráskódot tartalmazó MQH és MQ4 fájlok, amelyeket más programok hívnak meg,
- \Libraries – függvénykönyvtárak MQ4 formátumban és belőlük fordított EX4 binárisok,
- \Images – képek, melyeket erőforrásként lehet használni,
- \Files – az MQL4 alkalmazások fájlműveleteket kizárólag ide végezhetnek.
Fontos, hogy MQL4 mappából a telepítési könyvtáron belül is van egy – ennek a könyvtárnak kizárólag akkor van jelentősége, ha az UAC ki van kapcsolva vagy ha a /portable módban indítottuk a Metatradert. Ezutóbbi mód a hordozható módot jelenti, vagyis célja pont az, hogy egy adott könyvtáron belül legyen minden fájlunk, amely a működéshez, használathoz szükséges. Ez akkor lehet hasznos, ha pl. USB pendriveról futtatjuk a MT4 terminálunkat, és gépről gépre hordozzuk azt.
Amennyiben robotunk vagy indikátorunk nem jelenik meg a Navigátorban, akkor érdemes még egyszer végigellenőrizni a folyamatot. Egy kis ismétlés: MT4-en belül Fájl menü, azon belül pedig Rendszermappa megnyitása. Mindenképpen ezen a könyvtáron belül nézelődjünk!
Egy életszerű példa
- Rendszer: Windows 7
- Windows felhasználónév: Miklós
- Felhasználói Fiókok Felügyelete: bekapcsolva (alapból az összes érintett Windowsban)
- MT4 telepítési könyvtára (Miklós ezt adja meg a telepítőnek): C:\Program Files\Metatrader – Alpari UK\
A telepítés befejeztével ha Miklós rányom a Fájl menün belüli Rendszermappa megnyitására, akkor a felugró ablak igazi fájlszintű elérési útja a következő:
C:\Felhasználók\Miklós\AppData\Roaming\MetaQuotes\Terminal\21F51C3F7CC841659E9A8C39394DD381
A „Felhasználók” helyett – amennyiben például Total Commandert használunk – „Users” jelenik meg.
Az AppData könyvtár egyébként alapból rejtett, ezért az Miklós felhasználói könyvtárában alapértelmezésként nem jelenik meg.
Alternatív mód a rendszermappa megkeresésére
Ez a bekezdés gyakorlottabb felhasználóknak szól.
A rendszermappát természetesen meg lehet keresni más módon is:
- ellenőrizzük, hogy Windows rendszerünkön (Server 2008, Vista, 7 vagy újabb; Windows XP alatt biztosan nincs ilyen funkció) be van-e kapcsolva a Felhasználói Fiókok Felügyelete. Ezt a Vezérlőpult / Rendszer és biztonság / Felhasználói fiókok felügyelete beállításainak módosítása lapon tekinthetjük meg.
- amennyiben a Felhasználói Fiókok Felügyelete be van kapcsolva, a könyvtár a C:\Felhasználók\{Felhasználónév}\AppData\Roaming\MetaQuotes\Terminal\ könyvtáron belül, a telepítésünkhöz tartozó karaktersorral elnevezett könyvtárban lesz. Az origin.txt fájl segítséget ad ahhoz, hogy megállapíthassuk hogy mely telepítéshez kapcsolódik az adott könyvtár.
- amennyiben a Felhasználói Fiókok Felügyelete ki van kapcsolva, vagy a /portable kapcsolóval indítottuk a MT4-et, akkor a rendszermappa – ahogyan az eddigi változatokban is – maga a telepítési gyökérkönyvtár. Az egyetlen változás az, hogy minden expert, indikátor, szkript, stb. az MQL4 könyvtárból nyílik.
Futni fognak a régi expertjeim, indikátoraim az új változatokban?
A MetaQuotes ígérete szerint igen, azonban egyértelmű, hogy lesznek kompatibilitási problémák. Néhány multi idősíkos (amennyiben önmagát hívja meg) indikátor egyáltalán nem fog működni, és az expertek terén is várhatóak furcsaságok, (remélhetőleg) ideiglenes problémák.
A telepítővel rendelkező termékek esetén biztosan problémák adódhatnak, hiszen a telepítők maguktól nem fogják felismerni a fent részletezett könyvtárstruktúra-változásokat. Az biztos, hogy az mql4 programokban lévő relatív hivatkozások biztosan okozhatnak problémákat, ezért az abszolút hivatkozást érdemes alkalmazni.
A régi, már lefordított ex4 fájlok kis szerencsével használhatóak az új MT4-ekben.
Fordítsam újra azokat a programjaimat, amelyeknél rendelkezem a forráskóddal?
Próbálkozni lehet, de nem javaslom, hacsak nem muszáj. A „muszáj” akkor jöhet szóba, ha olyan hiba merül fel a korábbi fordítóval lefordított programmal, amelyet a MetaQuotes nem hajlandó javítani. Ekkor csak az új változattal történő fordítás segíthet, ilyenkor azonban újabb problémák merülhetnek fel. Ezért javaslom az mq4 fájlok külön tárolását a munkakönyvtáraktól, hogy véletlenül se fordulhassanak le az új változatban.
Amennyiben hasznos volt számodra ez a cikk, kérlek oszd meg ismerőseid között e-mailben vagy Facebookon, hiszen az itt taglalt információk sokakat érinthetnek!
Sziasztok!
A frissítés óta van problémám: Az MT egyszerűen elszáll (kikapcsol). Az eseménynapló bejegyzése lent látható.
Olyan robotot futtatok a chartokon, amely már előtte is futott hetek óta változtatás nélkül és semmi hiba nem volt. Nem minden ticknél, de elég gyakran megtörténik a crash. Windows 7 64 Bit alatt is és XP alatt is. Az MT logot persze nem tudom megnézni, mert nem menti ilyen esetben.
Van valakinek ötlete, hogy mitől lehet?
A hibát okozó alkalmazás neve: terminal.exe, verzió: 4.0.0.600, időbélyeg: 0x0076e600
A hibát okozó modul neve: ntdll.dll, verzió: 6.1.7601.18247, időbélyeg: 0x521ea8e7
Kivételkód: 0xc0000005
Hiba pozíciója: 0x00092dc2
A hibát okozó folyamat azonosítója: 0xc3c
A hibát okozó alkalmazás indításának időpontja: 0x01cf234884824d19
A hibát okozó alkalmazás elérési útja: D:\Insta\Insta01\terminal.exe
A hibát okozó modul elérési útja: C:\Windows\SysWOW64\ntdll.dll
Jelentés azonosítója: 59408ea7-8f3c-11e3-b31a-00248191ab68
A Profiles könyvtárban van egy lastprofile.ini nevű fájl. Ezt a fájlt nyisd meg szerkesztésre jegyzettömbben, és az egyetlen sor helyére írj egy értelmetlen karaktersort. Mentsd el! Az indítás után most üres MT4 fog indulni, kis szerencsével megoldódik a problémád.
Ha megoldódott, akkor kezdheted kinyomozni, hogy a használt indikátorok, stb. közül mi okozza a problémát. Valószínűleg olyan okozza, amelyiknek megvan a forráskódja is – ha újrafordult az új fordítóval, akkor ilyen hibát simán okozhat.
Azt hiszem, megvan a megoldás…
Az új metaeditorban megnyitottam a forráskódot és láss csodát: hibát jelzett. Javítottam, újrafordítottam és most mintha működne… legalábbis kb. egy órája megy hibátlanul.
Érdekesség, hogy a fájlméret (EX4) kb. 5x-ös lett az előző fordításhoz képest… :-)
A kódbeli hiba (ha jól értem) az, hogy a switch() kifejezésében nem lehet double típus. Nekem az az érdekes, hogy az előző fordító nem jelzett és egyáltalán a robot sem hibázott az előző verziójú MT-kben működés közben, így fel sem tűnt az elírás
Csak érdekességképpen: szóval, a kód így nézett ki hibásan:
int RobPeriod;
double LogValues[70];
…
LogValues[28]=RobPeriod;
…
switch(LogValues[28]) {
case 1 : LogValues_Text2[28] = „M1”; break;
case 5 : LogValues_Text2[28] = „M5”; break;
…
}//end-case
És ilyenre javítottam
int RobPeriod;
double LogValues[70];
…
LogValues[28]=RobPeriod;
…
switch(RobPeriod) {
case 1 : LogValues_Text2[28] = „M1”; break;
case 5 : LogValues_Text2[28] = „M5”; break;
…
}//end-case
Wow:) És ez okozott crasht?:) A profilos megoldásra nem is volt szükség?
Igen, ezen múlt. Csak újra kellett fordítani, azóta minden OK. Ennyi… :)
Köszi a segítséget!
Hát fiúk… Én egy „kereskedő nő” vagyok és tele van az összes hócipőm ezzel az egésszel. Kaptam egy „szétesett” MT4-et, amit összeszedtem, hogy valahogy kinézzen úgy, ahogy megszoktam. Aztán látom, hogy két indikátor fül van itt is, mint a régiben, de például amikor át akartam helyezni a régi indikátoraimat elakadtam, mert kerestem, hogy most melyik a saját indikátoroknak való mappa. Oké, kiderült számomra is, hogy az MQL4 mappába kellene tenni, de ott meg nem láttam exe file-okat és bár bemásoltam oda azokat is, de amikor újraindítottam a metatradert, egy darab indikátor sem jelent meg a saját indikátor fül alatt. Aztán láttam, hogy van ott a saját indikátor fül alatt valami „Examples” mappa, meg még egy almappa is, ez fogalmam sincs, hogy mire szolgál például, ennek mi a szerepe, ide mit kell, vagy mit lehet tenni? A lényeg, hogy én a brókertől kapott linken keresztül töltöttem le az MT4-et és ez már a 600-as verzió és utálom!!:) Borzasztó kíváncsi vagyok, hogy mi ennek az előnye, mert engem csak akadályoz eddig. Én nem vagyok informatikus, nem is akarok az lenni. Azt szeretném megtudni, nagyon egyszerűen és világosan, hogy hova telepítsem az exe file-okat és hova az MQL4 file-okat, azaz hova az indikátoraimat, hova a robotjaimat és ennyi. Kb. ebben a formában: C:/Program file/…metatrader/expert/indicator. Tudjátok, ahogy megszoktuk:) Nem akarok semmit programozni, meg „lefordítani”:)) Bár bevallom valami ilyesmivel már próbálkoztam és hopp ott is lett az indicator a saját indikátorok között, csakhogy ez nem az enyém, hanem az MQL4 community-ről töltöttem le kínomban, abban a reményben, hogy ott esetleg már olyanok vannak, amiket felismer ez az új rendszer. És láss csodát, a metaeditoron keresztül valahogy bevarázsoltam a custom indicator ablakba kettő darab új indikátort és most örülök. :) Ezzel csak azt akartam közölni, hogy én, mint egyszerű halandó felhasználó nagyon nem vagyok elégedett ezzel az új verzióval, mert ez szerintem inkább azoknak hasznos, akik programoznak. Én viszont „csak” dolgozni szeretnék, nem programozni. Éppen ezért hálás vagyok, hogy rátaláltam az oldalra Radu, mert enélkül teljesen elveszett lennék, úgy érzem. Az lenne a kérésem, hogy próbáljatok meg közérthetőbben fogalmazni, mert ez nem az én szakterületem és ennek okán nehezen tudom értelmezni az itt írtakat, de nagyon igyekszem. Még egy érdekesség. Csináltam egy mintát/sablont és elmentettem, ahogy kell. Erre, amikor be akartam tölteni egy „csupasz” chart-ra nem volt a minták között! – hanem, úgy tudtam betölteni, hogy (nekem windows 7-em van egyébként) teljesen visszaküldött a c:/program file stb… és onnan tudtam betölteni a mintát, nem a metatraderből!! Aztán kikapcsoltam és újraindítottam a MT4-t és hopp, ott volt az új minta. Ez most arra enged következtetni, hogy minden egyes új minta után újra kell majd indítani a MT4-et, hogy frissüljön pl. a template file?? Vagy? Ez egy vicc. Végezetül csak annyit, hogy bár a változások gyakran kellemetlenséggel járnak, de szükségesek és reménykedem, hogy valami igazán jó és felhasználó barát program kerekedik ebből.
Köszönöm a véleményed. Lehet, hogy nem sikerül mindent a legközérthetőbben megfogalmaznom, de sajnos a témában lévő fogalmak nem biztos, hogy erre lehetőséget adnak. Hiába próbálnám meg leírni a dolgokat úgy, hogy nem említem a témához szükséges, informatikához igenis szorosan kapcsolódó fogalmakat.
Jótanácsaim:
1) a forráskód nem kell az indikátorok/expertek/szkriptek mindennapi használatához. Rakd el őket külön, az ex4 fájlok bőven elegendőek. Ha így teszel, akkor a jövőbeli frissítések sem okoznak gondot, mivel a metatrader nem próbálja majd lefordítani újra a forráskódokat úgynevezett binárissá.
2) Felhasználói Fiókok Felügyelete (hidd el, én is gyűlölöm – nálam jobban biztosan nem utálod!) teljes kikapcsolása. Ekkor az adott MT4 telepítési mappa (illetve a belőle nyíló MQL4 könyvtár) lesz a hely, amit otthonnak nevezhetsz:)
A lényeg kb. ennyi. Bővebben (és szakzsargonosabban) a cikkben olvashatsz erről.
Szia Radu,
Segítségedet kérném. Roppant bosszús vagyok a szétbarmolt új MT4 miatt többek között ezért:
A programjaim DLL-t használnak. Eddig a DLL file az MT4 főkönyvtárában volt (a terminal.exe mellett) és gyönyörűen működött. Az új MT4-ben akárhova másolom, nem „látják” a programjaim. Van ötleted, hova kéne elhelyezni?
Köszi
Ez mindenképpen rossz megoldás, a jövőben tartózkodj a használatától. DLL-t a libraries könyvtárba rakj!
Ha relatív módon hivatkozol a dll-re, és eggyel kintebbi könyvtárral adtad meg korábban az experts\ -hez képest, akkor jelenleg az MQL4\ mappa gyökerébe raknám első próbálkozásnál.
Ha ez nem segít, akkor rakd be a librariesbe és hivatkozz rá megfelelően!
Ekkor a Libraries gyökerében van elhelyezve a dll, amire így hivatkoztál.
Azon belül természetesen további könyvtárakat hozhatsz létre, ha szükséges:
Ennél a példánál pedig az MQL4\Libraries\alkonyvtar\sajat.dll útvonalra kell elhelyezned a fájlodat. Az MQL4 mappa helyére is figyelj, mert az új változatban nem biztos, hogy a telepítési mappán belüli MQL4 mappa kell neked (lásd a legfrissebb cikkemben leírtakat).
Ha a Libraries könyvtárba raktam, akkor nem működött, a gyökérkönyvtárban igen.
Most viszont beraktam a létező összes könyvtárba, és csak nem látja. Nem és nem. Teljes K.O.
Szerintem teljesen rossz könyvtárban próbálkozol.
Nyisd meg a Fájl menü > Rendszermappa megnyitása menüpontot, és megjelenik a helyes könyvtár.
Ezen már régen túlvagyok. Gyakorlatilag tényleg az összes könyvtárral bepróbálkoztam, azokkal is amik az automatikus upgrade-del jöttek létre, és azokkal is, amik a /portable opcióval működnek. Sehol sem látja.
Tudnál konkrét példát mondani, Te hogyan használod a DLL-jeidet? Konkrétan melyik könyvtárba rakod a DLL-t és hogyan hivatkozol rá a programodon (EA, indi) belül?
Leírtam, pár hozzászólással feljebb (az #import -os poszt)
Te hogyan használod a dll-eket? Lehet, hogy egyszerűbb ha te megírod :) Biztosan valami apróság lesz az ok.
Emilt küldtem :)
Helo Radu,
Nekem is a dll-ekel van gondom.
Nagyon furán működnek.
1.
Egyrészt nekem megtalálja, de ha konkrétan próbálom megkeresni a fájlt programból, akkor nem találja:
Próbáltam az új beépített függvényét is, de ez sem hozott eredményt, nem találja.
Pedig ott a fájl, meg futás közben meg is hívódnak a dll függvényei…
2.
És egyes dll-beli függvények teljesen más eredményt adnak vissza, mint a régebbi mql4-ben fordítottak.
Például kiraktam dll-be a lokális idő kiszámítását.
Eddig jó stringet adott vissza, most teljesen hülyeséget.
Pedig a dll-hez nem is nyúltam, csak az .mq4 fájl lett újrafordítva.
Tehát mindkét pont abban az esetben működik jól az új verzióban, ha nem fordítjuk újra.
Üdv!
1)
A TerminalPath -ot felejtsd el, mert az az adatkönyvtár lekérdezéséhez nem felel meg minden esetben (ha UAC be van kapcsolva, akkor abszolút biztos, hogy nem). Lásd a cikkemet!
Ugyanígy a FileExists függvényt az 509-es fordításokban el kell felejteni, mivel az adatkönyvtár nem kérdezhető le, kizárólag az 545-nél újabb fordítókban használatos mql4 nyelv segítségével.
2)
A DLL-ek alkalmazásánál a MT4 új verziói Unicode, míg eddig ANSI kódolást használtak. Ezt vedd figyelembe! Vagyis: újra kell fordítani a DLL fájlokat is, és bennük az összes függvényt Unicode-os változatra cserélni. Amennyiben ezt el akarod kerülni, használj 509-esd compilert!
Szia Radu!
Eddig elég jól boldogultam az MT4-el de most elakadtam. már túl vagyok egy frissítésen is (600-as). Ez után is jól működött minden.
De!
A múlt héten még javában kereskedtem. A héten javában teszteltem míg nem egyszer csak próba képp ráhúztam a pozíció nyitó script-em a chartra újra. Láss csodát nem működik. Többszöri próbálkozásra sem nyitott pozíciót. Töröltem a metatradert de semmi nem változott. Nem mükszik a script. Pozit nyitni -script nélkül- tudok. … de nem ez lenne a cél ugye :). Mellékelem a hibaüzenetet is. http://www.kepfeltoltes.hu/140403/_j_k_p__2__www.kepfeltoltes.hu_.jpg
Fontos lehet, hogy: a telepítési könyvtáram C:/Terminál továbbá ki van kapcsolva -már jó ideje- a felhasználói fiókok felügyelete is. Érdekes, hogy a frissítést követően, szürke színűre váltottak a script-ek de működtek. Most is szürkék -mint a képen is látszik- de nem működnek. Ami az elmúlt egy hét alatt történt a metával -ami változott- hogy a héten nem kereskedtem, hanem teszteltem, illetve beüzemeltem az éles számlám. Egyébként éles számlán teszteltem. Hogyan lehet ezt megoldani?
Azt hiszen leírtam mindent. Köszönöm a segítséged előre is!!
Sanyi
Rájöttem. Be kell kapcsoljam az „Auto Trading” kapcsolót. …Ezt eddig egyébként nem kellett.
Sanyi
Igen, ez változás a 625-ben. Az AutoTrading kikapcsolt állapotban minden automata kereskedési műveletet (szkript, expert) tilt. Az expertek ugyan tovább futnak, de a kereskedés le van tiltva.
Nekem az a bajom, hogy már megpróbáltam MT4 alá több renko chartot is beüzemelni, de vagy nem látom az indikátorok listájában vagy ha mégis látom az adott renko chartot akkor nem mukodik megfelelően.
Ennek mi lehet az oka?
mq4. a kiterjesztés bemásolom a megfelelő helyre és nem látja program. Esetleg tudsz egy jó renko chartot, spike nélkül kellene és live charthoz…
Megválaszoltam a kérdésedet a Renkos posztnál. Abban találsz ajánlást Renko generátorra is – annyival egészíteném ki az abban a bejegyzésben olvasható információkat, hogy az offline chartra csatolt expertek használata esetén az adott offline chart frissítése véletlenszerű időközönként leáll. Ez valamilyen MT4-es, vagy chart generátor hiba lehet.