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:002012. 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.

Hozzájárulok, hogy az adatvédelmi nyilatkozat szerint biztonságosan kezeld megadott adataimat, valamint hasznos anyagokat és egyedi ajánlatokat küldj nekem termékeiddel, szolgáltatásaiddal kapcsolatban e-mailben