Hozzászólások

15 bejegyzés megtekintése - 631-645 / 651
  • Szerző
    Bejegyzés
  • Radulovic Attila
    Tag
    Bejegyzések száma: 653
    Hozzászólás: OrderCloseBy invalid #1406

    A külföldi fórumokat elnézve nemigazán kérdezhető le.

    Ha OrderCloseBy -nál ERR_INVALID_TRADE_PARAMETERS hibaüzenetet kapsz, akkor üzemmódot váltasz. Ez az egy kultúr lehetőség van.

    De az általad írt szituációhoz az OrderCloseBy azért nem jó, mert vele csak ellentétes pozíciókat tudsz zárni.

    Radulovic Attila
    Tag
    Bejegyzések száma: 653
    Hozzászólás: OrderCloseBy invalid #1402

    Örülök, hogy tetszik a blog! :)

    Az OrderCloseBy funkció nem minden brókernél megengedett – így az Equilornál sem. Egyébként többszörös zárás során az egyik pozíció spreadjét meg lehet spórolni, igazából talán ez a legnagyobb előnye.

    A felezést gyakorlatilag csak piaci módon lehet leprogramozni, azaz kikapcsolt gépnél (szerver oldalon) nem lehet megoldani.

    Én egy pozíciót nyitok, és ezt a pozíciót felezem meg amikor a helyzet úgy kívánja. A maradékot általában nullába húzom, vagy csúszóstop megy rá – attól függ, hogy ki hogy kéri, igényli.

    A két részletben nyitás is jó megoldás, csak akkor ott több dologra kell figyelni a menedzselést illetően.

    Az utolsó stop orderes mondatodat nem értem, gondolom stoplossra gondoltál.

    Radulovic Attila
    Tag
    Bejegyzések száma: 653

    Nincs mit. Az már csak hab a tortán, hogy az avatarod miatt jöttem rá az egész Gravatar rendszer lényegére :D

    Radulovic Attila
    Tag
    Bejegyzések száma: 653

    Hello gezatata!

    Örülök, hogy tetszik az oldal!

    A kérdéseddel kapcsolatban: más instrumentumok árait a legegyszerűbben a MarketInfo eljárással tudod lekérdezni.

     
    double
       EURGBP_Ask = MarketInfo("EURGBP", MODE_ASK);
       EURGBP_Bid = MarketInfo("EURGBP", MODE_BID);

    Természetesen ez az összes instrumentumra működni fog. Azt vedd figyelembe, hogy az EURUSD tickjeitől függően lehet, hogy nem mindig a legfrissebb adatokat fogod látni. Azaz: ha az EURUSD -nak ritka tickjei vannak, és közben a többi lekérdezett devizapárhoz tartozó árak változnak, akkor valamennyire késve fogod látni az adatokat.

    Ha ez nagy problémát jelent, akkor lehet “végtelenítve” használni az expertet, amitől frissebbé válnak az adatlekérdezéseid. Ezt például így tudod megtenni:

     
    while (!IsStopped()) {
     
      RefreshRates();
     
      // A műveletek, amiket el akarsz végezni
     
      Sleep (100);
     
    }

    A Sleep() azért kell, mert egyébként olyan gyorsan akarná csinálni az expert a nagy semmit, hogy lefogja a processzort és megmakkan a terminál:)

    Végtelenített futás esetén az első ticktől kezdve a robot gyakorlatilag 100 milliszekundumonként fut le, teljesen függetlenül a beérkező tickektől. A RefreshRates() azért kell, hogy a terminál beépített változói, tömbjei (adatai) rendszeresen frissüljenek.

    Vedd figyelembe, hogy így hétvégén és zárt piacnál is fut az expert – erre fel kell készíteni esetlegesen. Ha adatokat írsz a naplóba, akkor pl. figyelni kell arra, hogy nehogy több száz megabájt méretűvé duzzadjanak feleslegesen a naplófájlok.

    A végtelenített expert esetében addig, ameddig az egy tickre elindult while() véget nem ér, nem fog felugrani F7-re az expert paraméterablaka sem.

    Remélem, segítettem!

    Radulovic Attila
    Tag
    Bejegyzések száma: 653
    Hozzászólás: Nem köt a robotom #1353

    Megkaptam e-mailben a robotod forráskódját.

    Három dologra figyelj:

    1) A zárásoknál azért fordul elő hogy csak egy pozíciót zár a robotod, mert amikor a for ciklusban a pozícióindex alapján nyálazza át a pozíciókat, akkor egy törlésnél az index maga is megváltozik, így gyakorlatilag lecsúszol egy pozíció zárásának lehetőségéről. Olvasd el ezt a cikket, habár nem pont erről szól de a „Az aktuális pozícióadatok pontossága” bekezdés a lényeg.

    Megoldás: zárás előtt számold meg, hány pozíciót kell zárnod. A for ciklus legyen benne egy while ciklusban, ami addig fut ameddig annyi zárás nem történt meg, amennyit számoltál. (legyen persze egy vészleállás is, nehogy végtelenségig próbáljon zárni valamit, amikor azt lehetetlen).

    A sikeres záráshoz vezess be egy változót, aminek értékét minden while/for ciklus előtt nullázod, és csak akkor növeled meg, ha a cikluson belül sikeres zárás történt. (OrderClose true -t ad vissza)

    2) A másik hiba – emiatt nálam egy darabot nem köt, ha pont a minimális bróker által elvárt stop szintre rakom a TakeProfit értéket – az, hogy a BUY pozíciónál az SL és TP értékeket nem Bid értéktől, míg SELL pozíciónál Ask értéktől számoljuk.

    Azaz, az alapvetésünk:
    egy BUY pozíció Ask áron nyílik, és Bid értéken zárul;
    egy SELL pozíció Bid áron nyílik, és Ask értéken zárul.

    Az SL és TP értékeket ennek fényében kell kiszámolni.

    3) Erről ugyan nem kérdeztél, de mondom: használj magic számokat! A robotod már egy extra kézi kötésnél is hibázni fog, mivel nem szűrsz a pozíciók között. A fent belinkelt cikk ebben is segít.

    Radulovic Attila
    Tag
    Bejegyzések száma: 653
    Hozzászólás: Nem köt a robotom #1352

    Kellene a kód mutatóba, mert anélkül nem tudok hatékonyan segíteni.

    Market makernél elvileg nem gond az SL/TP nyitáskor.

    Radulovic Attila
    Tag
    Bejegyzések száma: 653
    Hozzászólás: Nem köt a robotom #1350

    Az Expertek fület nézd meg, ott találod az esetleges hibaüzeneteket. Enélkül nem tudok sokat segíteni.

    Milyen brókerről van szó? Legvalószínűbb az ECN mód hibája, vagyis hogy az SL és TP értékeket csak a pozíció megnyílása után lehet beállítani. Backtesztben ilyen jellegű korlátozás viszont nincs.

    Ezen kívül van még pár ok, de meg kell nézni hogy egyáltalán a kötésig eljut-e a robot, vagy már odáig se.

    Radulovic Attila
    Tag
    Bejegyzések száma: 653

    Örülök, hogy segítettem!

    Radulovic Attila
    Tag
    Bejegyzések száma: 653
    Hozzászólás: Adatbekérés MT4 alatt #1344

    Sajnos nincsen elegánsabb (interaktívabb) adatbekérési lehetőség MT4-ben. Maximum külső modulok alapján.

    Ha végteleníted az expertet (while (!IsStopped()) { }) akkor elég egy tick, és gyakorlatilag leállításig fog futni. Természetesen ilyenkor az F7-tel való paraméterváltoztatás nem fog működni, de valamit valamiért.

    Ilyen esetben lehet még használni a billentyűzet (bizonyos billentyűk) figyelését is, azonban ez több példányban való futtatáskor nem működik minden példányra nézve megbízhatóan.

    A user32.dll se tesz csodát önmagában – a legjobb egy natív, mql4-es megoldás lenne, de erre nemigazán van sajnos lehetőség MT4-ben.

    Radulovic Attila
    Tag
    Bejegyzések száma: 653

    Én azt gondolom, hogy mindenképpen a szimbólumok string ellenőrzésével esnék neki a dolognak. Azon egyszerű oknál fogva, hogy gyakorlatilag mindig rendelkezésre állnak az adatok, nem kell globális változókkal vagy más adatmentéssel bajlódni.

    A következőket javaslom:

    1) olvasd be a számodra fontos pozíciókat (for az OrdersTotal() alapján, magic szám ellenőrzés ha kell, stb.)
    2) ha nincs egy pozíció sem, nyilván nyithatsz bármi.
    3) ha van pozíció, akkor minden iterációban vizsgáld meg, hogy az adott order OrderSymbol() -ján belül van-e olyan szövegrész, ami az új (nyitandó) pozíciód instrumentumában van. Tehát ha pl. EURUSD -ot akarsz kötni, akkor vizsgáld meg hogy van-e valamilyen EUR vagy USD végződésű/kezdetű szimbólumú pozíció.

    A konfigurálásnál annyit mindenképpen meg kell adni, hogy az első három és az utolsó három, vagy más karakterek együttállása azonosítja a keresztárfolyamok egy-egy oldalát. Vannak ugyanis olyan brókerek, ahol pl. raknak egy pontot az instrumentumok végére, vagy más postfixet. Van ahol prefix van, így ez teljesen változó lehet. Példa:

    EURUSD, USDJPY, stb. – 0-2. karakter, illetve 3-5. karakter
    microEURUSD, microUSDJPY – 5-7. karakter, illetve 8-10. karakter

    És így tovább.

    Összességében csak a fentieket kell leellenőrizned minden nyitás előtt.

    Radulovic Attila
    Tag
    Bejegyzések száma: 653

    Frissítettem a letöltéseket, így már a 2012 január utáni adatok is hozzáférhetőek php szkripteken keresztül.

    Radulovic Attila
    Tag
    Bejegyzések száma: 653
    Hozzászólás: ATR számítás #1246

    Azt szeretnéd, hogy a három nappal ezelőtti 22:00 órás M30-as gyertyától folyamatosan számoljuk végig a mindenkori pillanatig a 14-es ATR-t? Vagy csak a három nap 22 órás gyertyájához tartozó ATR érték átlaga kell ?

    Meg is akarod jeleníteni, vagy csak az adat elég?

    Radulovic Attila
    Tag
    Bejegyzések száma: 653

    Akkor csak meglett a csoportosítás is, ugye ? ;) Köszi a tippet!

    Radulovic Attila
    Tag
    Bejegyzések száma: 653

    Nem kaptam levelet tőled idáig.

    Közben észrevettem, hogy van frissebb birt’s patch, ezt feltettem erre az oldalra is. Ezzel nem szabad elszállnia már, és működni fog remélhetőleg.

    Milyen e-mail címre küldtél nekem levelet?

    Radulovic Attila
    Tag
    Bejegyzések száma: 653

    De maga a terminál is 409-es build? Azzal mennie kell.
    Nekem anno működött a JForexes megoldás, ámbár én mindig is a php-s letöltögetős módszert alkalmaztam. Milyen operációs rendszeren próbálkozol? Optimalizáció nincs véletlen bepipálva?

    A fájlokkal semmi gond nincs, működnek azok rendesen. Egyedül a 416-os kapcsán nincs frissítés.

    Mivel ez gyakorlatilag egy kész rendszer patkolása, mindig lesznek vele ilyesmi problémák.

15 bejegyzés megtekintése - 631-645 / 651