Indikátor lassulás, indokolatlan újratöltés 2015-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: 644

    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.