Tőzsdei Oktatóközpont kezdőknek - Huntraders.com

Közlemény

Collapse
No announcement yet.

MT4 Expert

Collapse
X
  • Szűrés
  • Idő
  • Mutat
Clear All
new posts

  • #16
    Ez a függőség igen kemény, hiába tudom biztosan hónapok óta, hogy forexen soha az életben nem fogok kereskedni többé, semmi sem változott, azóta is ugyanúgy fejlesztem tovább a robotjaimat minden nap, mintha mi se történt volna. Ennek eredményeképp az elmúlt pár napban rájöttem, hogy nem kell többé külső programokat használnom a robotjaim betanításához, ez sokkal egyszerűbben és gyorsabban megoldható mql-ben.

    Ez a csomag ugyanannak a robotnak ugyanazokkal a beállításokkal 28 devizapáron futtatott backtest kötéslistáit tartalmazza 2007-től múlt hétig. A legdurvább az, hogy a robotban használt statisztikai adatbázis legyártása erre az összesen másfél millió gyertyára mindössze másfél percig tartott. Ehhez egy mql4-ben írt szkriptet, a jforexből letöltött adatokat, és a Logic Friday nevű elektronikai tervezőprogram által generált c kódéhoz nagyon hasonló logikát használtam.

    Az elmúlt években már megszoktam, hogy nagyon gyorsan tudok nagyon szép backtest eredményeket kreálni, de ennek a cuccnak a teljesítménye rendesen meglepett. Magamnak megtartani biztosan nem fogom, csak még kicsit finomítok rajta, ötletelek a további fejlesztési-tuningolási lehetőségeken, aztán majd egyszer csak megjelenek itt vele. Addig is lehet játszani a kötéslistákkal, azért csak játszani, mert megfejteni őket gyakorlatilag esélytelen.

    Hozzászólás


    • #17
      Úgy döntöttem megfogadom azok tanácsát, akik a szakmai jellegű témákkal való foglalkozást javasolják a személyeskedés és más fórumtagok kommentjeinek kielemzése helyett. Az volt a tervem, hogy megvárom amíg jelentkezik valaki, akit az előzőleg posztolt eredmények érdekelnek, de most meggondoltam magam, és kérés nélkül is folytatom amit elkezdtem. Ha ezen a fórumon nem is érdekel senkit, biztosan lesznek olyan fejlesztők, akik megtalálják és hasznot tudnak majd húzni belőle. Másrészt tudom magamról, hogy a fórumon túl agresszív és túl okoskodó vagyok, ezért az érdektelenséget sokkal inkább eme tulajdonságaim miatti személyes antipátiának tudom be, mintsem a szakmai rész iránti érdeklődés teljes hiányának.

      Lehet hogy nem a legmegfelelőbb topikot választottam a publikáláshoz, amennyiben így érzitek, szólhattok nekem, vagy akár közvetlenül harzolnak is, hogy rakja át a hozzászólásaimat máshova. Ehhez az általánosságok című topikot tudnám ajánlani, ha már eddig is oda pakoltam a játékaimat, és ott nem zavartak senkit.

      Az egész abból indult, hogy nemrég készíteni akartam egy csaló robotot, ami a tesztelésekor a FileOpenHistory() függvény segítségével előre lát az időben, mindezt pusztán a játék és a vicc kedvéért. Ekkor szembesültem vele, hogy a meta újabb verzióiban ezt a megoldást letiltották. Ez önmagában nem is lett volna gond, mert DLL hívással meg tudtam oldani az aktuális hst fájl átmásolását a tester\files mappába, ahol egy sima FileOpen() függvénnyel is lehet ügyeskedni. A gondot az okozta, hogy a meta ekkor legújabb build 924-es verziójában pont DLL hívással kapcsolatos bugra panaszkodtak a fórumokon. Ezért kezdtem el más megoldáson gondolkozni, és ekkor jöttem rá, hogy a tökéletes teszt-eredmények előállításához nem is szükséges csalni. A korábban már sokat használt és hivatkozott gépi tanuló módszerek működéséhez hasonlóan elég az adatokat csoportokra osztani (szegmentálni), majd minden csoporthoz kiszámolni egy (vagy több különböző) célérték átlagát. Célérték gyakorlatilag bármilyen kiszállási stratégia profitban vagy valami speciálisabb mérőszámban mért eredménye lehet.

      Ami számomra új ebben, az maga az adatok csoportokra osztásának módszere. Biztosan nem én találtam ezt fel, biztosan létező és használatban lévő módszer, csak a nevét nem találtam meg. Az általam készített verzió logikai változókat használ, amik csak két értéket vehetnek fel, igaz/hamis, vagy 0/1. Fontos hogy az egyes logikai változók értékei függetlenek legyenek a többitől, különben az egyes csoportok nagyon egyenlőtlen számú gyertyát fognak tartalmazni. Hogy hány darab ilyen logikai változóra van szükség a csoportokra osztáshoz, azt két szám dönti el: egyik a csoportokra osztandó gyertyák darabszáma, a másik a csoportok mérete a gyertyák darabszámában megadva. Ezekből az adatokból először a csoportok számát kell kiszámolnunk úgy, hogy a gyertyák számát elosztjuk a csoportok méretével. Ha például van százezer gyertyánk, amit fel szeretnék osztani 1000 darab gyertyát tartalmazó csoportokra, akkor 100000/1000 = 100 darab csoportot kell alkotnunk.

      Ezután azt kell kiszámolni, hogy a meghatározott számú csoport létrehozásához hány darab logikai változóra van szükségünk. Mivel ezek a logikai változók összesen két értéket vehetnek fel, ezért egy darab változóval 2 darab csoportot tudunk alkotni, két változóval négyet, és így tovább, a kettő hatványainak megfelelően. Ezért a szükséges logikai változók száma az a szám lesz, amelyik hatványra emelve a kettőt a csoportok számához legközelebb eső számot kapjuk. Ez a szám a csoportok számának kettes alapú logaritmusának egészre kerekített értéke lesz. Mql4-ben gyárilag nincs kettes alapú logaritmus függvény, ezért itt a csoportok számának természetes alapú logaritmusát kell osztani a kettő természetes alapú logaritmusával. A fenti példát folytatva, hat darab logikai változóval 2^6 = 64 darab csoportunk lenne, hét darabbal 2^7 = 128, így a hetest választjuk, mert a kettőnek a hetedik hatványa van a legközelebb a 100-hoz.

      Ha ez megvan, deklarálnunk kell két tömböt, egyet a csoportok tagszámának, egyet pedig a célérték-átlagnak. A tömböket át kell méretezni 2^(logikai változók száma) méretre, vagyis akkorára, ahány variáció az adott számú logikai változóból kirakható.

      Ezek után egy ciklusban végig kell mennünk a gyertyákon, és minden gyertyánál kiszámolni a logikai változók és a célérték aktuális értékeit. A logikai változók sorozatából egy binary-array-to-decimal-number (logikai változó sorozat ==> decimális egész szám) függvénnyel egy nemnegatív egész számot képzünk, ez lesz a tömbök aktuális indexe, ahol a tagszám tömb értékét egyel növeljük, a célértéket pedig hozzáadjuk a célérték-átlag tömb ezen indexű helyén lévő értékhez.

      Ha végigértünk a gyertyákon, akkor egy újabb ciklusban a tömbjeinken megyünk végig, és ahol a tagszám nagyobb mint nulla, ott a célértéket elosztjuk a tagszámmal, így kapjuk meg a célértéknek az adott csoporthoz tartozó átlagát. Ezek után nincs más dolgunk, mint fájlba írni a két tömböt, lehetőleg bináris fájlba (ami nem txt vagy csv formátum), mert ezt a fájlt utólag úgysem ajánlott szerkeszteni, és a robotban beolvasni is gyorsabb. Ha a fájl írása kész, a robotunk teszteléséhez át kell másolnunk a meta tester\files mappájába.

      A robotban a logikai változókat kiszámoló, és a binary-to-decimal függvényre lesz szükségünk, plusz egy olyanra, ami az OnInit() függvényben beolvassa ezt a fájlt, plusz a tömbökre amikbe beolvassa őket. A pozícióba lépési jelet a célérték-átlag bizonyos határértékek alatti és feletti értékei adják, amennyiben a tagszám értéke nem nulla.

      Ami még fontos, hogy a gyertyák egyszeri végigolvasása alatt gyakorlatilag akárhány célértékre lehet átlagot számolni, csak az átlag tömböt két dimenziósnak kell deklarálni, az oszlopok számát pedig annyinak, ahány célértékkel dolgozunk. Vagy az is egy megoldás, ha a csoportosításkor nem használunk célértéket, hanem később optimalizálunk minden csoporthoz külön be- és kiszállási stratégiát, bár ez a megoldás jóval lassabb.

      Ez itt a szkript: aTemp.mq4
      és ez itt az expert: aTempEA.mq4

      Be kell másolni őket a megfelelő mappákba, majd metaeditorban meg kell nyitni és le kell fordítani őket. Ezután a szkriptet el kell indítani bármelyik tetszőleges charton. A Stop_Szint_Pontokban nevű beállításnak az aktuális idősík átlagos gyertyaméreténél kisebb értéket adni nem ajánlott. Ha a szkript végzett, a meta MQL4\Files mappájából a létrehozott fájlt át kell másolni a tester\files mappába, ezután lehet tesztelni az expertet. Érdemes ugyanazon az idősíkon és instrumentumon tesztelni, amelyiken a szkriptet lefuttattuk. Ha mindent jól csináltunk, valami ilyesmi teszt-eredményt kell látnunk:

      Click image for larger version

Name:	TempTeszt.gif
Views:	1
Size:	17,5 KB
ID:	152314

      Hozzászólás


      • #18
        Az előző bejegyzés jó hosszúra sikeredett, de így sem tudtam benne mindent leírni, amit fontosnak tartok.

        Legfontosabb azt kihangsúlyoznom, hogy ez a rendszer így nem több, mint egy nagyon leegyszerűsített példa az adat-csoportosításra használt elv szemléltetésére. Ha vannak benne hibák, és ha nem is működik tökéletesen, a módszer lényegének megértéséhez biztosan elég lesz.

        Sokat gondolkozom és dolgozom a további fejlesztési lehetőségeken, és eddig arra jutottam, hogy ezzel a módszerrel gyakorlatilag bármekkora statisztikai adatbázis készíthető, akárhány célértékre vonatkozóan. Méréseim szerint e bináris fájl beolvasásának sebessége nagyságrendileg 300 megabájt/másodperc, vagyis egy 300 megás ilyen statisztikai adatbázis használata mindössze 1 másodperccel növeli meg a robot inicializálásának az idejét. Viszonyításképp a 28 főbb devizapár összes egy órás hst adatsora 2007-től mostanáig összesen 70 megabájt sincs. A fájlok legyártásának ideje pedig nagyjából 2 perc/megabájt, és ilyen kis csoportok létrehozásánál egy megabájt körülbelül 2 millió gyertyát tud magába foglalni.

        Lehet használni több különböző logikai változó sorozatot, és ezek alapján több különböző csoportosítást végezni, és minden csoportosítás tartalmazhatja több célérték átlagát. Lehet használni időszűrést az adatokra, túl régieket nem használni, stb. A korábbi gyertyákra kapott előrejelzésekből is lehet logikai változókat számolni, és ilyen csoportokat alkotni, akár ugyanazon, akár más célérték(ek)re vonatkozóan, akár többszörös mélységig is. A lehetőségek száma erősen konvergál a rengeteg felé.

        Szeretném megjegyezni, hogy nagyon nem ilyen kódokat szoktam írni, a magyar nyelvű változónevek ugyanolyan szokatlanok, mint a kommentek írása a programba, ezek közül egyiket sem szoktam alkalmazni. Emellett még mindig csak hobbi programozó vagyok, a kódjaimat fontos eszerint kezelni. A programozási megoldások véletlenül sem tekintendőek oktatási célúnak, különben könnyen kialakulhat a híres vak-vezet-világtalant nevű szituáció.

        Hozzászólás


        • #19
          Sziasztok,

          Irtam is egy egyszeru kis progit félig a sugora tamaszkodva, de amikor tesztelem mt4-be ezt a hiba uzenetet hozza. A probléma itt nemaz altalam irt programmal van az hiba nélkül leforditja. Probaltam gyari experettel is ugyanez a hiba uzenet.
          Mi a probléma? köszi.

          más:
          Sajnos azt tapasztalom, hogy amit mt4 metaeditor elenged sarga hibauzenettel azt mt5 editor-nál már piros és nem engedi lefutattni. Nálatok is igy van?
          Csatolt fájlok

          Hozzászólás


          • #20
            nlot eredeti hozzászólása Hozzászólás megtekintése
            Az előző bejegyzés jó hosszúra sikeredett, de így sem tudtam benne mindent leírni, amit fontosnak tartok.

            Legfontosabb azt kihangsúlyoznom, hogy ez a rendszer így nem több, mint egy nagyon leegyszerűsített példa az adat-csoportosításra használt elv szemléltetésére. Ha vannak benne hibák, és ha nem is működik tökéletesen, a módszer lényegének megértéséhez biztosan elég lesz.

            Sokat gondolkozom és dolgozom a további fejlesztési lehetőségeken, és eddig arra jutottam, hogy ezzel a módszerrel gyakorlatilag bármekkora statisztikai adatbázis készíthető, akárhány célértékre vonatkozóan. Méréseim szerint e bináris fájl beolvasásának sebessége nagyságrendileg 300 megabájt/másodperc, vagyis egy 300 megás ilyen statisztikai adatbázis használata mindössze 1 másodperccel növeli meg a robot inicializálásának az idejét. Viszonyításképp a 28 főbb devizapár összes egy órás hst adatsora 2007-től mostanáig összesen 70 megabájt sincs. A fájlok legyártásának ideje pedig nagyjából 2 perc/megabájt, és ilyen kis csoportok létrehozásánál egy megabájt körülbelül 2 millió gyertyát tud magába foglalni.

            Lehet használni több különböző logikai változó sorozatot, és ezek alapján több különböző csoportosítást végezni, és minden csoportosítás tartalmazhatja több célérték átlagát. Lehet használni időszűrést az adatokra, túl régieket nem használni, stb. A korábbi gyertyákra kapott előrejelzésekből is lehet logikai változókat számolni, és ilyen csoportokat alkotni, akár ugyanazon, akár más célérték(ek)re vonatkozóan, akár többszörös mélységig is. A lehetőségek száma erősen konvergál a rengeteg felé.

            Szeretném megjegyezni, hogy nagyon nem ilyen kódokat szoktam írni, a magyar nyelvű változónevek ugyanolyan szokatlanok, mint a kommentek írása a programba, ezek közül egyiket sem szoktam alkalmazni. Emellett még mindig csak hobbi programozó vagyok, a kódjaimat fontos eszerint kezelni. A programozási megoldások véletlenül sem tekintendőek oktatási célúnak, különben könnyen kialakulhat a híres vak-vezet-világtalant nevű szituáció.
            irtad hogy eleged lett a forex-bol.
            Lemaradtam az előzményekről. Miért lett eleged belőle?

            Hozzászólás


            • #21
              rpr eredeti hozzászólása Hozzászólás megtekintése
              Irtam is egy egyszeru kis progit félig a sugora tamaszkodva, de amikor tesztelem mt4-be ezt a hiba uzenetet hozza. A probléma itt nemaz altalam irt programmal van az hiba nélkül leforditja. Probaltam gyari experettel is ugyanez a hiba uzenet.
              A hiba amit mutattál, mindenhol így van, mégpedig a múltbeli adatok hiányossága és gyenge minősége miatt. Egy megoldást tudok, ez pedig az, ha minden tickes és kontroll pontos tesztelést nem használunk, hanem csak az árak megnyitását ( a teszterben a devizapár kiválasztása alatti mező ).

              rpr eredeti hozzászólása Hozzászólás megtekintése
              Sajnos azt tapasztalom, hogy amit mt4 metaeditor elenged sarga hibauzenettel azt mt5 editor-nál már piros és nem engedi lefutattni. Nálatok is igy van?
              MT5-öt nem használok, ezért erről nem tudok érdemben nyilatkozni, de ha tippelnem kellene azt mondanám, hogy a két programnyelv nem ugyanaz, ezért nem működik MT5-ben az, ami MT4-ben igen. Nyisd meg mindkét metaeditorban a gyári robotokat ( Moving average és MACD Sample ), és tanulmányozd a különbségeket, szerintem lesz belőlük bőven.

              rpr eredeti hozzászólása Hozzászólás megtekintése
              irtad hogy eleged lett a forex-bol.
              Lemaradtam az előzményekről. Miért lett eleged belőle?
              Főként az általad is posztolt adatminőség-problémák miatt. Az egész világon nem találtam egyetlen egy olyan forex brókert sem, aki a múltbeli adatok hitelességére bármiféle garanciát vállalna. Sőt többnyire a valós időben érkező tickek hitelességéért sem vállalnak felelősséget, azok is csak tájékoztató jellegűek. És mióta tudunk az egyéni árszabás lehetőségéről/gyakorlatáról ( a dealing desk és a szerver oldali pluginok trükkjei miatt előfordul(hat), hogy más ask/bid árat lát az, aki éppen longban ül, mint az aki shortban, vagy épp semmiben ), azóta az is nyilvánvaló, hogy ez az adatprobléma az érkező tickek fájlba mentésével sem hidalható át. Itt mindenki egyet ért abban, hogy random árfolyammozgáson nem lehet pénzt keresni, valódi múltbeli adatok viszont nem léteznek, ezekből pedig logikusan és egyenesen az következik, hogy a forex nem más, mint egy komoly és menő szakmának eladott szerencsejáték. Drága és haszontalan számítógépes játékok helyett demóban játszani és/vagy stratégiákat fejleszteni játék gyanánt tökéletes, de pénzt beletenni szerintem nem érdemes. Aki az éles kereskedés függőjévé válik, az hosszú távon nagyon nagy eséllyel ( >99% ) összességében veszteséggel fog kiszálni belőle, és még örülhet, ha ennyivel megússza...

              Hozzászólás


              • #22
                nlot eredeti hozzászólása Hozzászólás megtekintése
                ...Itt mindenki egyet ért abban, hogy random árfolyammozgáson nem lehet pénzt keresni...
                Egy éve még mást mondtál. Megváltozott a véleményed?

                Hozzászólás


                • #23
                  Brian eredeti hozzászólása Hozzászólás megtekintése
                  Egy éve még mást mondtál. Megváltozott a véleményed?
                  Igazad van, ez a rész tényleg félreérthető volt.
                  Ezzel nem magamra céloztam, hanem mindenki másra, aki erről a kérdésről véleményt mondott itt.

                  Már nem végzek semmilyen komoly munkát a témával kapcsolatban, csak játszom olyan dolgokkal, amikhez épp kedvem van. Mint azt többször is írtam, már egy kicsit sem tudom komolyan venni ezt az iparágat, anélkül meg nehéz bármiféle komolynak nevezhető munkát végezni. Ezért a random chartos stratégiákkal sem haladtam semmit az elmúlt évben, az egy chartot kereskedő verziónál nem mentem tovább. Ezek a robotjaim pedig annyira keveset keresnek, amit a slippage gyakorlatban el is vinne, de azt legalább mindig minden teszten, szóval keresnek is meg nem is. A használható teljesítményhez több random chartot kellene kereskedni párhuzamosan, ami nagyságrendileg azt jelenti, hogy az egy chartos verzió variáció-számának végére nem csak pár nullát kellene írnom, hanem egy felkiáltójelet ( FAKTORIÁLIS ). És mivel az egy chartos robotnak is több mint 3000 optimalizálandó paramétere van, ezért a feladat tovább bonyolítását meghagyom mazochistáknak.

                  Hozzászólás


                  • #24
                    nlot eredeti hozzászólása Hozzászólás megtekintése
                    Ez itt a szkript: [ATTACH]8539[/ATTACH]
                    és ez itt az expert: [ATTACH]8540[/ATTACH]
                    Na kipróbálta valaki ezeket a cuccokat?
                    Ha igen, mi lett belőle, hasonló eredményeket adtak, mint nekem?

                    Gondolom az igazi programozók egyik fele szörnyülködik, a másik fele meg hempereg a röhögéstől, még szerencse hogy előre felkészítettem őket a várható megrázkódtatásra.
                    Nem bírtam magammal na, teljesen bezsongtam az eredményektől, és muszáj voltam közkinccsé tenni. Ezzel a módszerrel gyakorlatilag bárki képes hibátlan visszateszt eredményeket kreálni pillanatok alatt. Sőt bátran kijelenthetem, hogy erre a célra ez a legegyszerűbb és leggyorsabb megoldás amit csak ismerek.

                    Az első működőképes verzió létrehozása után viszonylag hamar dobtam fel ezeket ide, és bár eget verően nagy hibát azóta sem találtam bennük, ha több időt fordítok tesztelésre, akkor most az aprókból is kevesebb lenne (például a szkriptben a stop szintet elég lenne globálisan egyszer kiszámítani, nem kellene a stopszintes függvény minden hívásakor, vagy például az expertben a 20. sor utolsó szava "alatt", nem pedig "felett").

                    Azóta csináltam egy olyan változatot, amiben szűrni is lehet az eredményeket, és csak a hasznosakat írni fájlba. Ehhez menteni kell egy plusz tömböt is, ami tartalmazza az eredeti tömb-indexeket, a robot ezt használja a bináris kereséshez (ArrayBsearch + egy ellenőrzés, mert ide csak a telitalálat jó, a hozzá legközelebbi index nem).

                    Az eredmények szűrése hasznos lehet, ha:
                    - fájl használata helyett a robot kódjába szeretnénk fordítani a jelzéseket,
                    - egymástól nem független logikai változókat is szeretnénk használni, ami miatt sok üres szegmenst kapunk,
                    - bizonyos változók alapján előszűrést szeretnénk végezni az adatokban, és a további munkához csak azokat az adat-szegmenseket használni, ahol statisztikai előnynek látszó eltolódást fedezünk fel.

                    Amennyiben van igény az újabb fejlesztésekre, akkor hozni fogom őket, de ha csak nálam tapasztaltabb programozók foglalkoznak az üggyel, akkor feleslegesen erőlködnék vele. Mint írtam, a saját használatra írt kódjaim teljesen másképp néznek ki mint ezek, ezért is lenne jó tudnom, mire készüljek.

                    Továbbra is várok ezzel kacsolatban bármilyen jellegű észrevételt, javaslatot, és véleményt.

                    Hozzászólás


                    • #25
                      Gosor eredeti hozzászólása Hozzászólás megtekintése
                      Sziasztok, keresek egy olyan Indicatort vagy Expertet melly letudja manadgelni a poziciomat. Ugy ertem, hogy ha veszek PL.: EUR/USD-t 1,50 szintnel 0,20 L, es azt szeretnem, hogy ha eléri a 1,51 szintet akkor a 0,20 L-ot letudja felezni az expert vagy az indikator. Remélem érthető voltam Koszonom elore is a válaszokat
                      Megnyitod 1 pozíció helyett kettővel, és az egyik célárát odateszed.
                      Látogasd meg a Forex Klub weboldalát, kövess Facebookon, Youtubeon!

                      Hozzászólás


                      • #26
                        Sziasztok!

                        http://forex-strategies-revealed.com...iling-stop-eas

                        Ezen az oldalon van pár trailing stop expert ha valakit érdekel. A problémám hogy amit szerettem volna kipróbálni, az EMATrailingStop_v1.4.mq4 nem működik . Az old verzió, a v1 működik. Ha valaki ért hozzá és nem nagy meló, esetleg meg tudná heggeszteni a v1.4-et? Köszi

                        Hozzászólás


                        • #27
                          falcon eredeti hozzászólása Hozzászólás megtekintése
                          Sziasztok!

                          http://forex-strategies-revealed.com...iling-stop-eas

                          Ezen az oldalon van pár trailing stop expert ha valakit érdekel. A problémám hogy amit szerettem volna kipróbálni, az EMATrailingStop_v1.4.mq4 nem működik . Az old verzió, a v1 működik. Ha valaki ért hozzá és nem nagy meló, esetleg meg tudná heggeszteni a v1.4-et? Köszi
                          Belebarkácsoltam, így már lefordul. Be is tesz stopot a mozgóhoz. Devizákon működik, DAX-on nem annyira.
                          Csatolt fájlok
                          Látogasd meg a Forex Klub weboldalát, kövess Facebookon, Youtubeon!

                          Hozzászólás


                          • #28
                            Forex Klub eredeti hozzászólása Hozzászólás megtekintése
                            Belebarkácsoltam, így már lefordul. Be is tesz stopot a mozgóhoz. Devizákon működik, DAX-on nem annyira.
                            Köszönöm szépen Zoli! Szépen hasít, ahogy kell

                            Hozzászólás

                            Working...
                            X