Hiba a Metatrader build 416/418-ban

Hiba a 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)
Írta: | 2017-08-20T17:47:34+00:00 2012. március 26., hétfő|MetaTrader4, MQL4|4 hozzászólás

A szerzőről:

Radulovic Attila vagyok, a radu.hu tulajdonosa és szerkesztője. Remélem, hasznosnak találod az oldalamon található anyagokat! Célom, hogy hatékony segítséget nyújtsak Neked a kereskedéssel és az automatizálással kapcsolatban. Érdekel a véleményed, kérlek írd meg kommentben!

4 hozzászólás

  1. joeiceman 2012. április. 19. csütörtök - 16:18- Válasz

    Ü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

    • radu 2012. április. 19. csütörtök - 17:28

      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. joeiceman 2012. április. 20. péntek - 13:46- Válasz

    Ü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

    • radu 2012. április. 20. péntek - 13:54

      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:)

Hagyj üzenetet

Adhatok Neked még több ingyenes tartalmat?

Értesítelek hetente megjelenő új tartalmaimról.