Indikátor lassulás, indokolatlan újratöltés2015-03-11T23:54:16+00:00

Radu.hu Fórum Kérdések az MQL4 programozási nyelvvel kapcsolatban Indikátor lassulás, indokolatlan újratöltés

Címkézve: 

6 bejegyzés megtekintése - 1-6 / 6
  • Szerző
    Bejegyzés
  • Norbert
    Tag
    Bejegyzések száma: 35

    Sziasztok!

    Egy EA-hoz használok egyéni indikátort, ami különböző valutapárokról és idősíkokról ad nekem adatot. A valutapárokat és az idősíkokat is tömbben tároltam; amikor új bar érkezik, két egymásba ágyazott ciklussal végigmegyek a tömbökön és azok alapján használom az iCustomot. Így:

    for (int i=0; i<ArraySize(data); i++){
             ...         
             for (int j=0; j<ArraySize(tf); j++){
                ...
                double green = iCustom(data[i].symbol,tf[j],"netforce_indicator_2",...,0,1);
                ...
             }
             ...
    }

    Amikor az EA-t felrakom a chartra, gond nélkül lefut az egész egy pillanat alatt. Viszont amikor újra elindul a vizsgálat (új bar érkezik) és újra lekérem az adatokat, már érezhetően sokkal lassabb a folyamat. Közben hallgatom, ahogy felpörög a számítógépem, rengeteget vár, majd nagy nehezen kiköpi az adatokat.

    Kipróbáltam mi történik ha backtesten futtatom és eléggé meglepődtem:
    https://app.box.com/s/q24fd3g76ao0p3uh7mpxsrvaw3pssi25

    Azt könnyen el bírom képzelni, hogy minden vizsgálatnál felrakja egy valutapáron egy idősíkra, majd leveszi. De miért csinálja ezt meg egymás után 2-3-szor, amikor (ahogy a kódban is látszik) csak egyszer utasítom erre?

    Norbert
    Tag
    Bejegyzések száma: 35

    Találtam egy ilyet:
    http://forum.mql4.com/48398#643743

    Oké, backtestre jogos, erre nem figyeltem: nincs meg minden timeframe-em.
    Viszont a chartra helyezésnél attól még nem kellene lelassulnia és második lekérésnél megenni a processzort.

    Ha nincs más megoldás, az is megfelelne, ha sikerülne valahogy teljesen kiirtani a memóriából az indikátort a vizsgálatom végén. Lényegében reprodukálnám azt az állapotot, amikor először indítom el az EA-t.

    Norbert
    Tag
    Bejegyzések száma: 35

    Minimálisat gyorsított a folyamaton, hogy az iCustom függvényhívásnál a változókat előre konvertálva úgy adom át, ahogy azt az indikátor várja.

    double(var1), int(var2), bool(var3), ...

    Egyéb ötlet?

    Norbert
    Tag
    Bejegyzések száma: 35

    Arra is gondoltam, hogy ugyanaz a problémám mint a hosszabb távú backtestnél: olyan chartokról akarok adatot szedni amiket valójában soha nem nyitottam meg a MetaTraderben, vagyis gyakorlatilag semmi gyertyaadatom nincs. Tehát elvileg csak rá kell venni a termált, hogy szerezze be azokat a gyertyaadatokat, amiknek megfelel a szimbólum-idősík tömb kettős.

    Lehet, hogy ez még tovább gyorsítana rajta, de ettől függetlenül is érthetetlen, hogy második-harmadik nekifutásnál miért megy döcögve, ha elsőre gond nélkül megcsinálja egy másodperc alatt.

    Azt tartom valószínűnek, hogy minden iCustomnál újra “felcsatolja” magának az EA, de közben otthagyja a régit is, így minden vizsgálatkor ArraySize(data)*ArraySize(tf) darab indikátorral többet kell a memóriában eltárolni és nem mellesleg újraszámolni.

    Tehát tényleg csak azt kellene elérni, hogy miután használtam az indikátort, azonnal kilőjem a memóriából.

    Radulovic Attila
    Tag
    Bejegyzések száma: 645

    A tapasztalatom szerint az ilyesmi a rosszul megírt indikátorokkal fordul elő, főleg azoknál, amelyeknél a viszonyítási pont – vagyis ahonnan számol és kirajzolja magát – folyamatosan változik.

    Ez a valós idejű futtatásnál konstans marad, ezért ott nem látni ennyi lekérést. A backteszt azonban mindig újra és újra lekérdezi az indikátort, mintha mindig felraknád-levennéd a chartra. Ha pl. 500 gyertyával ezelőttről indul a számítás, akkor minden új bar esetén 500 gyertyával azelőttről indul újra. Valós időben viszont fixen a felhelyezés (inicializálás) időpontjától fog indulni a számítás. (Ez rossz felépítés így, de ez más kérdés)

    Én első körben megvizsgálnám az indikátort, és ha kiderül hogy szar, kidobnám. Lehet persze javítgatni is, ezt mindig az adott helyzetben érdemes eldönteni a szükséges befektetendő energia mennyiségétől függően.

    Norbert
    Tag
    Bejegyzések száma: 35

    Tényleg szar, dobtam.
    Köszönöm!

6 bejegyzés megtekintése - 1-6 / 6

A hozzászóláshoz jelentkezz be!

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