Hozzászólások
-
SzerzőBejegyzés
-
Hozzászólás: MT4 a Windows 8 – ban #5018
Dobd át a radu@radu.hu -ra, megnézem – lehet hogy maga az indikátor szar, vagy sérült a fájl.
Hozzászólás: MT4 a Windows 8 – ban #5016Első olvasatra eléggé x-akta szaga van. Ha más indikátort raksz a Rendszermappa\MQL4\Indicators mappába akkor az látszik?
Hozzászólás: Tickstory probléma #4991Két problémáról beszélhetünk.
Tesztelés: a nem 99.9%-os adatok hibáját a 950-es build MT4 verizó okozza. Az oroszok átírtak egy-két dolgot a MT4-ben, ami akadályozza a Tickstory Lite működését. Emiatt a TSL fejlesztői azt javasolják, hogy térj vissza a 910-es MT4 verzióhoz, ahol ilyen probléma nincs.
Kondíciók exportálása: adtál meg valamilyen fájlnevet az expert megfelelő paraméteréhez? Ha nem, adj meg egy egyszerűt (pl. brokernev.mt4config). Lehet, hogy a brókercég nevében van & jel, ami a fájlnév mentésekor gondot okozhat és így nem születik meg a fájl. Ha ez nem oldja meg a problémádat, jelezd, van még ötletem.
Hozzászólás: Market is closed! #4990A 4 darab GetLastError + AccountFreeMarginCheck ellenőrzés felesleges, egy OnTick-ben elég egyszer lekérdezni. Az eredményt eltárolod és utána azt ellenőrzöd a további feltételekben. (Természetesen más a helyzet, ha egymás után esetlegesen több pozíciót nyitsz egy ticken belül – akkor jó, amit írsz.)
Hibát (hibás feltétel teljesüléseket) akkor tapasztalhatsz, ha nem veszed figyelembe amit korábban írtam (vagyis hogy egy GetLastError() függvény futtatás kinullázza a hibát).
A zárás és a nyitás folyamán pedig igen is muszáj ellenőrizned a GetLastError() -t, minden kísérlet után. A kardinális hibák (nincs pénz, nincs kereskedési jog, stb.) esetén le kell állítanod a próbálkozást, mert valószínűtlen hogy ezek megváltoznak a próbálkozások egzakt pillanatában.
Hibát ezerféle módon tudsz generálni szándékosan: az AccountFreeMarginCheck kapcsán pl. túl nagy lotméretet adsz meg nyitáshoz kicsi egyenleghez, pozíciónyitási hibához pedig BUY pozíció nyitása során Bid értéket használj. Ez utóbbi jellemzően azonnal hibát okoz, amellyel már tudsz tesztelni.
Első körben azt ellenőrizd, hogy előfordulhat-e az, hogy a robot valamely eljárása önmagát hívja-e meg. Ez szokott ilyen elszállást okozni a teszteren belül.
Második körben pedig nézd meg a Rendszermappa\tester\logs\ könyvtárat az elszállás után, hogy van-e az aznapi fájlban valami értékelhető infó. Ha van, akkor másold be egy részét ide!
Hozzászólás: Forex Tester 2 floating spread #4980Adatokat biztosan lehet a Forex Testerbe importálni, emlékeim szerint van erre egy külön panel. Nem foglalkoztam vele annyira mélyen, hogy tudjam: a beimportált adatok alkalmasak-e a változó spreades környezet kialakításához.
Javaslom, hogy importálj be adatokat (Tickstory Lite-tal tudsz exportálni pl. CSV formátumban is), és próbáld ki!
Hozzászólás: Market is closed! #4977Ha pl. nem csak egy puritán ellenőrzésről van szó, hanem naplózásról, hiba kijelzésről akkor többször lehet szükség a GetLastError() -ra. Ha ilyesmivel nem akarsz foglalkozni, akkor hagyd, egyszerűen csak fel akartam hívni a figyelmed egy gyakori problémára. A puritánság viszont nem mindig elegendő, főleg ha azt akarod tudni hogy a robot mit hisz/mit tesz éppen.
Szóval a feltevésed helyes, csak az én megvalósítási szokásaim mások, ezért említettem meg.
A megoldás maga pedig egyszerű, mint a faék:
errorCode = GetLastError(); if (errorCode == 0) { // Minden csudajó } else { // Hibakezelés Print ("Hiba történt: ", ErrorToString(errorCode)); }
Az ErrorToString például lehet egy saját hibaszöveg-kezelő függvény, igazából lényegtelen. Ha mindenhova GetLastError() -t írnál, akkor az első hívás után nullázódik a hiba értéke, a további feltételekben pedig ez zavart okozna. Így már okés a leírásom?:)
Hozzászólás: Market is closed! #4975A szkript elejére csak akkor rakd bele a margin vizsgálatot, ha ez mindenképpen szükséges a többi vizsgálat előtt. Lehet éppen logikus, de nem feltétlen; ha csak gyertyánként vizsgálod a beszálló lehetőségét (pl. indikátorok lezárt értékeit hasonlítva), akkor tökéletesen felesleges minden tickben szabad margint ellenőrizni.
Én összességében legtöbbször mindig csak akkor végzek szabad margin ellenőrzést, ha közvetlen a pozíciónyitás előtt állok, hiszen addig ameddig kérdéses hogy kötünk-e, felesleges az ellenőrzés – pláne minden tickben.
Arra figyelj, hogy a GetLastError() függvény meghívásakor a hibakód nullázódik, így a GetLastError() -t követő kódrésznél már új hibakód kerülhet mentésre (bármivel kapcsolatban). Érdemes tehát a függvény visszatérési értékét egy változóba menteni és azt kiértékelni, megelőzendő saját magunk szívatását :)
Hozzászólás: Market is closed! #4973A pozíciónyitási kísérlet után (ha többször próbálkozol, akkor a próbálkozások között is nyilván) lefuttatod a GetLastError() függvényt. Ha ez nullát ad vissza, akkor sikerült pozíciót nyitnod. Ha nem nullát ad vissza, hanem pl. ERR_MARKET_CLOSED értéket (132) vagy ehhez hasonló súlyos hibát, akkor szakítsd meg a pozíciónyitási rutint és állj le a próbálkozással. Ha ugyebár gyertyánként próbálkozol, akkor a legközelebbiben majd újra megpróbálod.
Így van, pontosan!
Ezt nem automatikusan csinálja, így van neki megadva. Ha te programoztad, akkor írd át úgy, hogy csak meghatározott feltételek teljesülésekor nyisson új pozíciót.
Hozzászólás: 920 vs 950 #4966Első körben ezt a cikket olvasd el. A link tele van további cikkekre való hivatkozással, így ha a cikkben tálalt megoldások közül a jó minőségű visszamenőleges adatok érdekelnek, akkor megtalálod benne a linket azzal kapcsolatban is.
Hozzászólás: Market is closed! #4965Ha mozog a piac, a robot is fut. Effektíve a piac mozog, és csak a brókered nem hagy kötni, nem a piac van zárva. A végeredmény ugyanaz.
Ezzel kapcsolatban lekérdezés-szerű megoldás nincsen, ha a piac zárva van, akkor ne próbálj tovább kötni. Ha periodikusan lép be a robotod (pl. gyertyánként egyszer), akkor ez bőven elegendő megoldás. Ha viszont pl. távolságalapú belépéseid vannak (azaz állandó ellenőrzés van és bármikor születhet kötés, akár gyertya közepén is), akkor neked kell kitalálnod valami workaroundot, pl. „market is closed” hibaüzenet esetén csak x percen múlva próbálkozol újra.
Hozzászólás: 920 vs 950 #4961No problemo :) A te megoldásod viszont csak a frissítés megakadályozására szolgál, korábbi verzióra nem tudsz vele visszaállni. Azaz ha már lefrissült 950-re, akkor nem feltétlen teljes megoldás. Ezért adtam a linket.
A lényeg, hogy sikerült megoldani!
Hozzászólás: 920 vs 950 #4959A korábban linkelt cikkben pontosan ez van benne, de nem baj :) Ezek szerint nem olvastad el!
-
SzerzőBejegyzés