Hozzászólások

15 bejegyzés megtekintése - 451-465 / 651
  • Szerző
    Bejegyzés
  • Radulovic Attila
    Tag
    Bejegyzések száma: 653
    Hozzászólás: időszak/period #2737

    Nekem is eszembe jutott, valóban lesz belőle egyszer cikk :)

    Az „egyáltalán nem teljesül” alatt azt értem, hogy mondjuk nyitsz egy pozíciót, amelynek csak TP-ja van. Jön egy gap, amelyben ott van a TP ár is – és emiatt a take profit nem teljesül. Láttam már olyan brókert, aki ilyen esetben nyitva tartja a pozíciót mindaddig, ameddig te kézzel le nem zárod, vagy ameddig az ár vissza nem korrigál arra a szintre, ahol a konkrét tp van. Természetesen ez TP-nál nem akkora baj, mint SL-nál; ugyanakkor legtöbbször mindenképpen rossz dolog a traderre nézve. Egyébként teljes pályafutásom alatt kétszer botlottam ilyen helyzetbe, mindkétszer market maker (nem ECN) brókernél.

    Ha nincs se TP, se SL akkor nem történik semmi. A pozíció nyitva marad, és kész. Ez a legegyszerűbb eset, itt nem is értem, miért kérdeztél erre rá!:)

    A második kérdésed nem világos. Ha csak TP van, és az ár a másik irányba megy, akkor a TP-től egyre távolabb kerülünk és mivel nincs más korlátozó tényező, a pozíció floating értéke tovább fog romlani.

    Radulovic Attila
    Tag
    Bejegyzések száma: 653
    Hozzászólás: időszak/period #2735

    Nem ment félre, csak megfogalmazásbeli különbözőségeken akadtunk meg.

    Én azt mondtam, ha hiányzik adat, akkor ott nem lesz történik programfutás. A hiányzó adat (= gap) utáni első tickben a visszateszt során pótlólag megtörténik minden SL, TP, stb. teljesülés. Amit írsz, az valóban jó: az SL és TP azon az áron fog teljesülni, ahol gyakorlatilag nem is volt ár a tesztben. Ez rendben van. De technikailag a pozíció kiszállása nem a gap-en belül fog megtörténni, hiszen ott egyáltalán nincs is ár, vagyis a programunk akkor egyáltalán nem fog egyszer sem lefutni. A teszterben lévő eredményeknél is az első, gapet követő tick dátumán-időpontján lesz a teljesülés feltüntetve.

    Ez a valós idejű futtatáshoz képest tényleg pontatlan, hiszen ott két eset lehetséges:

    • az SL/TP nem teljesül egyáltalán, és a pozíciónk extra profitban vagy veszteségben van
    • az SL/TP teljesül, de a gap utáni soron következő áron

    Készítettem egy képet, amin látszik hogy mire gondolok. Kerestem egy gapet, és a gap előtti gyertyában nyitottam egy pozíciót, aminek a take profitját szándékosan a gap (körülbelüli) közepére tettem.
    Mivel a legközelebbi tick a 2013.01.02 08:00:00 időpontban volt, ekkor történt a take profit is – a gap közepén lévő áron. Én erről a furcsaságról beszéltem végig fentebb.

    Radulovic Attila
    Tag
    Bejegyzések száma: 653
    Hozzászólás: időszak/period #2733

    „De a hiányzó rész előtti utolsó tick-en még tud kötni egyet a robot.”
    Pontosan ezt magyaráztam eggyel fentebb! Viszont ha az adott napon egyáltalán nincsen tick, akkor az adott (hiányzó) napon biztosan nem lesz semmilyen esemény.

    Az SL vagy a TP pedig igen, mindenképpen teljesülni fog, max. nem az adott áron, hanem a gap utáni első tickben. Egyébként a valóságban is kb. ez történik, bár ez brókeri kondícióktól függ inkább.

    Radulovic Attila
    Tag
    Bejegyzések száma: 653
    Hozzászólás: időszak/period #2731

    Nem értem a kérdésed.

    Csak akkor fut az experted, amikor adat (beékrező ár) van. Legalább egy ticknek kell, hogy legyen az adott napon – ha nincs, akkor a következő tickben fog nyitás/zárás történni.

    Radulovic Attila
    Tag
    Bejegyzések száma: 653
    Hozzászólás: időszak/period #2728

    Nem nyitsz vagy zársz ezen a napon, hiszen egyáltalán nem lesz ott ár, azaz az a hiányzó napok teljesen kimaradnak.

    Radulovic Attila
    Tag
    Bejegyzések száma: 653
    Hozzászólás: időszak/period #2726

    Ha a teljes nap hiányzik, akkor ott semmilyen adat nincs és maguk a gyertyaadatok sem kerülnek legenerálásra. Vagy mire vagy konkrétan kíváncsi?:) Ilyen adathiányos gapek egyébként a sima MT4-es adatbeszerzésnél is vannak, még mennyi:)

    Radulovic Attila
    Tag
    Bejegyzések száma: 653
    Hozzászólás: időszak/period #2722

    A hackeléssel valóban nem a bróker saját adatát használod, de ez alap esetben sem igaz, hiszen sokszor előfordul hogy az adatokat a MetaQuotes szerveréről tölti le a Metatrader.

    A tick adatok legalább egy megbízható, svájci szolgáltató szemszögéből mutatják a történéseket – és ami a legfontosabb: tick alapon!

    Ha a robotod 5 perces idősíkon működik jól, akkor alapvetően M5 idősíkot kéne kiválasztanod. A “különböző idősíkokon való futtatás más-más eredményeket hoz akkor is, ha a választott idősík semmilyen részét nem képezi a stratégiának.” alatt arra céloztam, hogy ha mondjuk a s stratégiai teszter választott idősíkja M5, és nincs minden adatod meg rajta, akkor a véletlenszerűen generált árak száma különbözhet a H1-es idősíkon generált árak számától. Ekkor – habár az M5-ös gyertyák és az abból számolt indikátori adatok stimmelnek – különböző eredményeket kapsz, hiszen a robot másként „sorsol” véletlenszerű árelmozdulásokat a nagyobb idősík adatai miatt.

    Igazából nem a legjobban sikerült összefoglalnom a fentieket, de ha kipróbálgatsz egy alap MT4-et egy egyszerű robottal (akár teszt célból is írhatsz egyet), akkor érzékelhető lesz a különbség.

    Radulovic Attila
    Tag
    Bejegyzések száma: 653
    Hozzászólás: időszak/period #2720

    Az „időszak” igazából természetesen idősík akar lenni (a következő MT4 kiadásában javul, ha minden igaz). A tickek száma elméletben ugyanannyi lenne, ha az MT4 minden ticket eltárolna. Mivel ez nem történik meg – legjobb esetben is csak M1 gyertyákat tárol a terminál -, ezért a rendelkezésre álló összes idősík adata alapján generál egy bizonyos formula alapján tickeket, amelyek száma persze idősíkonként változik (pedig nem kéne, hiszen a tickek száma nem függ az idősíktól).

    Az idősíkok gyertyaadatai mindig elérhetőek (elviekben, ha minden klappol), azaz egy kizárólag (fixen) lezárt M1-M5 gyertyát vizsgáló robotnak teljesen mindegy, hogy éppen milyen idősíkon futtatod. A terminál gyertyaadatok alapján végzi a különböző idősíkok adatainak összeállítását (gyertya- és indikátori adatatok), így ha a robot is megfelelően van elkészítve, és ha mondjuk tick adatok alapján készített backteszt környezet áll rendelkezésre, akkor a fentiek igazak. Ellenkező esetben – és MT4-ben sajna gyakran inkább ez van – a különböző idősíkokon való futtatás más-más eredményeket hoz akkor is, ha a választott idősík semmilyen részét nem képezi a stratégiának.

    Fontos, hogy a fentiek csak akkor igazak, ha az adott robot fixen (vagy beállíthatóan) más idősíkok adatát használja, és az időzítésre használt módszere is megfelelő. Az egyszerűbb robotok elkészítői legtöbbször arra sem figyelnek, hogy a trader melyik idősíkon futtatja a robotot – az aktuális adatokat veszik alapul. Ekkor természetesen azonnal számít az, hogy melyik idősíkot adod meg a tesztnek, hiszen a teszt során az az idősík lesz az úgymond „alap”, amelynek az adataival a robot dolgozni fog. Ha mindeközben például egy fixen, H1-es idősíkról lekérdezett mozgóátlagot is néz a robot, akkor természetesen ott a korábban leírtak igazak.

    Radulovic Attila
    Tag
    Bejegyzések száma: 653
    Hozzászólás: Modelling quality: n/a #2712

    A Múltbéli adatok menüt felejtsd el, az csak a gyertyaadatokat tartalmazza.

    Tedd írásvédetté az FXT fájlokat, és mindig a TSL-ből indítsd a terminált! Elég egyszer elindítanod „simán” (azaz nem TSL-ből) a terminált, és máris letörlődhetnek a korábban legenerált FXT fájljaid.

    Az írásvédetté tevéshez van funkció a TSL-ben, generálás előtt pipáld be azt!

    Radulovic Attila
    Tag
    Bejegyzések száma: 653

    Icebob köszi a választ, nagyon hasznos és elegáns megoldás! :)

    Radulovic Attila
    Tag
    Bejegyzések száma: 653

    Én saját dll-t használok, amiben http post/get kezelés van.

    Az utóbbi kódot nem tudtam működésre bírni, igaz nem is foglalkoztam vele hosszabban. Az első általad linkelt megoldás nekem szépen működik, egy konkrét meghívott fájl tartalmát le tudtam kérdezni. Ha megmutatod, hogy hol akadtál el ezzel kapcsolatban, akkor igyekszem segíteni.

    Radulovic Attila
    Tag
    Bejegyzések száma: 653

    Mától használható az MQL4 kód beillesztése funkció! Jelöld ki a kódodat amit bemásolsz, és nyomd meg az MQL4 kód beillesztése gombot a szövegdoboz felett!

    A MODE_TRADES – mint írtam – elhagyható, próbáld ki! Az OrderSelect() által kiválasztott pozíció mindaddig kiválasztva marad, ameddig a pozíció adatai elérhetőek és amennyiben nem történik közben más pozíciókiválasztás. Erre főleg ciklusokon belüli alkalmazásnál kell figyelni.

    Az első példád a helyes, viszont én annyit módosítanék a kódodon, hogy:

    if (OrderSelect(vetel, SELECT_BY_TICKET)) {
    
       if (OrderType() == OP_BUYSTOP && OrderCloseTime() == 0) {
       
       }
    }

    Az OrderSelect legyen először, aztán ha az sikeres, majd foglalkozol az adott pozíció adataival. Addig felesleges!

    Radulovic Attila
    Tag
    Bejegyzések száma: 653

    Egy nem aktív pozíciót akarsz újra és újra törölni. A szerver csak végre akarja hajtani, amit mondasz neki – mivel ez nem sikerül, hibakódot kapsz.

    Amikor megnézed, hogy a törlendő pozíció függő típusú-e, rakd mellé azt a feltételt is, hogy OrderCloseTime() == 0.

    Ha ugyanis egy pozíció lezárult, akkor ez a függvény mindenképpen visszaadja a zárási időpontot Unix timestampben. Ha egy pozíciónak nincs ilyenje (azaz a visszakapott érték nulla), az azt jelenti hogy ő még a Kereskedések panelen belül létezik. Ha nullánál nagyobb értéke van, akkor pedig már csak a Számlatörténetben létezik.

    Az OrderClosePrice() -t ne használd, mert annak folyamatosan van értéke! (a záráskor a zárási ár, addig pedig az aktuális piaci árnak megfelelő Ask/Bid érték)

    A MODE_TRADES konstans használata felesleges, mivel ha SELECT_BY_TICKET módban választasz ki pozíciót, akkor a metatrader automatikusan tudni fogja, hogy melyik „fiókhoz” (Számlatörténet/Kereskedések) nyúljon.

    Továbbá a számlatörténetet a felhasználó is tudja korlátozni: ha pl. csak a napi lezárult kereskedéseket listázza ki a Számlatörténet ablakban, akkor az annál régebbi pozíciókat sehogy nem tudod elérni. Ezért ha az OrderSelect pozíciókiválasztás sikertelen, akkor ne is próbálkozz semmilyen művelettel.

    Szerintem erről a témáról is írok majd egy cikket:)

    Radulovic Attila
    Tag
    Bejegyzések száma: 653
    Hozzászólás: Riasztások #2665

    Létrehozol egy változót, amelybe raktározod a StringLen-től visszakapott értéket. Ha az aktuális StrinLen-től visszakapott érték eltér ettől, akkor nyomod az alertet.

    Radulovic Attila
    Tag
    Bejegyzések száma: 653

    A számláló beiktatását mindenképpen javaslom, igen! A legutóbbi, zárásról szóló cikkemben találsz részletes levezetést, az applikálható erre a problémára is.
    Ha x próbálkozás után nem sikerül valamit megoldani, akkor ettől függetlenül persze kezelni kell a helyzet további sorsát is.

    A GetLastError() függvénnyel le tudod kérdezni a hibakódot. A lekérdezés után a GetLastError() kiürül, úgyhogy kapásból rakd el a vélt/várt hiba után a GetLastError() által visszaadott egész számot.

    A szám jelentését itt találod, vagy használd az include\stderror.mqh fájlt!

15 bejegyzés megtekintése - 451-465 / 651