Hiba a Metatrader build 416/418-ban

Sajnálatosan a 416-os és 418-as build verziójában súlyos, DLL fájlokkal kapcsolatos hiba van.

Mi az a DLL hívás?

A DLL hívások használata gyakorlatilag azt teszi lehetővé a robotprogramozók számára, hogy olyan funkciókat tegyenek elérhetővé a robotokban, amelyek egyébként a Metatrader programnyelve által önmagában nem lennének használhatóak vagy elérhetőek.

Ilyesfajta megoldást alkalmaznak legtöbbször a kereskedelmi forgalomban eladott robotok értékesítése során - így ha ilyen robotokat vagy indikátorokat használsz, semmiféleképpen ne frissítsd a terminálodat 416-os vagy 418-as verzióra. A 409-es verzió az utolsó, amellyel nincs ilyen jellegű probléma.

Az érintett terminálok

Jelen pillanatban leginkább a legújabb kiadást, vagyis a 418-as verziót.

Néhányan említést tettek arról is, hogy a 416-os build verziót is érinti a probléma.

A MetaQuotes fórumán már - többek közt - én is szóvá tettem a hibát, a poszt írásának idején azonban még mindig nem érkezett válasz.

Közben internetszerte (például itt, itt, itt és itt) bukkannak fel a problémát szóvá tevő blogbejegyzések, mivel egy-egy ismertebb robot használatát is megakadályozza a hiba.

Konkrétan milyen funkciót érint a hiba?

A hiba a 418-as build verzióban a double, azaz tört típusú változókat érinti. Amennyiben ilyen számot kér le a robot a DLL-ből, teljesen helytelen érték jön vissza.

Példa: 1.4322 helyett "-1.#IND" és"-92242943740584613000000" a visszatérési érték.

A 416-os build verzióban állítólagosan - ezt nem tudom megerősíteni - a DLL eljárásoknak átadott változók sorrendjét érinti a hiba.

Amennyiben a robotod nem használ DLL hívásokat, akkor nincs miért aggódnod.

Mikor javítják ki a hibát?

A Metatrader gyártóján, a MetaQuotes nevű cégen múlik. Mostanában egyre többször előfordul, hogy hibás (vagyis nem eléggé tesztelt)  változatot adnak ki, így nem túl sok reményt fűzök hozzá, hogy túlságosan gyorsan törnék magukat.

Mi a megoldás?

A hivatalos megoldás jelen esetben a gyártón múlik - amennyiben hallgatnak a "népre", új kiadás formájában javítani fogják a problémát. Ideiglenes fixet jelenthet, ha:

  • visszaállunk korábbi (409 -es vagy annál régebbi) Metatrader verzióra
  • ha saját robotról van szó, kivesszük és helyettesítjük a DLL eljárásait natív MQL eljárásokkal, ahol double értéket érint a program (amennyiben ez lehetséges)
Oszd meg, ha hasznosnak találtad!

4 hozzászólás a(z) “Hiba a Metatrader build 416/418-ban” bejegyzéshez

  1. Üdv!

    Még megoldás lehet, ha a dll-ben lévő függvényeknek egyetlen string típusú paramétere lesz.

    Ahol eddig pl. három paraméterünk volt, ott összefűzzük valamilyen elválasztó karakterrel, átadjuk, és majd a dll-ben lévő függvény szétszedi és felhasználja, mint régen.

    ji

    • Hali!

      Ez nem értem, mire lenne megoldás.

      Nem a paraméterek darabszámával van gond, hanem a double típussal. És ezzel is csak a 418-as változatban.

  2. Üdv!

    Te írtad: " A 416-os build verzióban állítólagosan – ezt nem tudom megerősíteni – a DLL eljárásoknak átadott változók sorrendjét érinti a hiba."

    Ebből az következik, hogy ne legyen a sorrenddel hiba, legyen egy paraméter.
    Ráadásul legyen ez string típusú, hogy a double problémát is megoldjuk.

    Pld:
    régi: double fv(double a, string b, double c)
    meghívva: fv(1.12345,"alma",23.5)
    új: string fv(string d)
    meghívva: fv("1.12345@alma@23.5")
    Az elválasztó jel lehet pl. a "@". Az fv elejét kell átírni, a dll-ben, hogy szétszedje különböző paraméterekre.

    Nyilván egy dll-ben lévő fv, ami eddig double-el tért vissza, most string-gel fog. Mql4 oldalon konvertáljuk.

    Persze, ha a dll-t nem mi írtuk, akkor ez nem megoldás.

    ji

    • Ja, így már értem mire írtad. A megoldásod jó ötlet, de mivel az ilyen jellegű problémák jellemzően utólag derülnek ki, ezért hiába küzd az ember ilyen megoldásokkal. Hiszen lehet, hogy a 430-as változatban épp a string bemenetek/kimenetek kapcsán adnak ki valami hibát:)

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