Hozzászólások

15 bejegyzés megtekintése - 586-600 / 651
  • Szerző
    Bejegyzés
  • Radulovic Attila
    Tag
    Bejegyzések száma: 653

    Most tudtam csak reagálni – email ment.

    Radulovic Attila
    Tag
    Bejegyzések száma: 653

    A névjegy menüpontban megtalálod az e-mail címemet!

    Radulovic Attila
    Tag
    Bejegyzések száma: 653
    Hozzászólás: Optimalizáció #1612

    Van egy rossz hírem: a lokális idő backtesztben megegyezik a szimulált szerveridővel, így az mindig ugyanaz lesz a deinitkor.

    Folyamatosan növekvő szám a fájlnévben megteszi, amit a fájlnévből kiolvasva tudsz ellenőrizni és növelni.

    Vendégposzt lehet belőle, ha gondolod – egyelőre nézzük meg, hogy mennyire univerzális amit kreálsz ;)

    Radulovic Attila
    Tag
    Bejegyzések száma: 653

    Minden OrderSend() függvény 4. paraméterét foglald bele az x helyére!

    Tehát ha ez van: SellPoint

    akkor ezt cseréld ki

    NormalizeDouble(SellPoint, Digits)

    -re! És így tovább…

    Radulovic Attila
    Tag
    Bejegyzések száma: 653
    Hozzászólás: Optimalizáció #1605

    Az MT saját számításaihoz nem férsz hozzá. Lehet, hogy Win32 trükkökkel igen de az már nem natív megoldás.

    A deinit() részben a saját kigyűjtött adataidat természetesen eléred, hiszen minden egyedi teszt végén a deinit le fog futni.

    Radulovic Attila
    Tag
    Bejegyzések száma: 653
    Hozzászólás: Optimalizáció #1602

    Sajnos az MT4 egyáltalán nem kényezteti el a tesztert ilyen szempontból. A legjobb esetben is csak a CSV táblázatok mentése, vagy a copy-paste marad: nincsen megfelelő (előre beépített) funkció az optimalizálás során kapott eredmények kultúrált és egyszerű kinyerésére.

    Sajnos ez a platform kötöttsége – ezt áthidalni meglehetősen körülményes, nekem még nem volt annyi életkedvem hogy megoldjam.

    Radulovic Attila
    Tag
    Bejegyzések száma: 653

    A NormalizeDouble(x, Digits); eljárást használd, az x természetesen a nyitási ár legyen. Ez meg fogja oldani az ilyen jellegű hibákat.

    Radulovic Attila
    Tag
    Bejegyzések száma: 653

    Jó a kérdés, nem voltam egyértelmű.

    A tick ugye a vezérlés kiindulópontja. Egy tick esetén elindul a program, és ameddig le nem fut, addig az új tickek elvesznek és azokra új programpéldány nem fog indulni – egyszerre tehát egy programpéldány létezhet.
    Közben – ha a program hosszabb ideig fut – az eredeti tickhez tartozó ár már valószínűleg „elöregszik”, ezért az összes belső árat és adatot frissíteni kell. Erre jó a RefreshRates, és ez küszöböli ki azt a problémát amit írtál.

    Magyarul egy végtelenített expert egyetlen egy tick alapján is szépen tud a végletekig dolgozni. Természetesen ez szélsőség és nem kell erőltetni, de néha jól jöhet. Általában század-ezredmásodperc alatt lefut a program egy-egy tickre, de esetenként – főleg volatilis piacnál és sok nyitási-zárási próbálkozásnál – akár több másodperces is lehet egy-egy tickhez tartozó futás. A lényeg: mindeközben egy jól megírt expert esetén nem veszítünk adatokat, csak másként használjuk fel őket.

    Radulovic Attila
    Tag
    Bejegyzések száma: 653

    Ha kiemelten fontos a pontos kötés, akkor érdemes LIMIT/STOP megbízásokat használni. Természetesen ha ez valamilyen oknál fogva nem megfelelő megoldás, akkor marad az instant (piaci) kötés.

    Ebben az esetben én a következő sémát követem:

    1) ellenőrizd hogy van-e elegendő pénz a nyitáshoz
    2) ellenőrizd hogy lehet-e egyáltalán kereskedni (IsTradeAllowed())
    3) egy for/while ciklussal x próbálkozású cikluson belül próbálj nyitni; minden OrderSend előtt legyen RefreshRates(); függvény – ez segít frissen tartani az adatokat, ha elnyúlnak a próbálkozások
    4) ügyelj a TP/SL/stop szint/freeze szint szabályokra – ha kell, módosítsd a megváltozott árnak megfelelően

    A Slippage paraméterrel minimum elmozdulási távolságban adhatod meg azt, hogy mi az a tolerancia amit a brókertől elfogadsz csúszásként.

    Ha mindenképpen csak az 1.200 ár a jó, akkor Slippage értéke legyen nulla és folyamatosan (NEM végtelen módon, hanem maximalizálva) próbálkoznod kell. A próbálkozások között jómagam legalább 1-200 milliszekundum szünetet hagyok.

    Ha az a lényeg, hogy a pozíció megszülessen egy tól-ig értéken belül (ez a jellemző), akkor szintén folyamatosan próbálkozva, 3-5 pont Slippage beállítással lehet küzdeni.
    Ez azt jelenti, hogy ha 1.120-as áron indítod a folyamatot 3 pont Slippage-dzsel, és közben a bróker megcsúszik akkor gyakorlatilag 1.117 -től 1.123 -ig minden árat elfogadsz. Ha ezen tartományon kívül lesz a jegyzett ár, akkor jön a második próbálkozás. És így tovább, és így tovább. Én általában – egy ticken belül – 15-ször próbálkozom. Amíg ez a 15 próbálkozás nem történik meg, addig nem fejeződik be a program működése. Ez hátrányt nem jelent, mivel a RefreshRates() miatt mindig a legfrissebb és legaktuálisabb árakkal fogsz újra és újra próbálkozni.

    Remélem, segítettem!

    Radulovic Attila
    Tag
    Bejegyzések száma: 653
    Hozzászólás: LONG változót? #1588

    Nemigazán, sajnos ez a platform egyik korlátja :(

    Radulovic Attila
    Tag
    Bejegyzések száma: 653
    Hozzászólás: MT4 hangjelzés #1582

    A módosítás alatt programozásra gondoltam. Ha eredetileg az indikátorba nem rakták bele ezt a funkciót, akkor bele kell rakni.

    Radulovic Attila
    Tag
    Bejegyzések száma: 653
    Hozzászólás: MT4 hangjelzés #1580

    Szia!

    Meg, de csak az indikátor módosításával.

    Radulovic Attila
    Tag
    Bejegyzések száma: 653

    Nem állítom, hogy 100%-ig tiszta amit leírtál, de sejtésem szerint globális változók + magic számok segítségével talán fájlműveletek nélkül megúszható a dolog. A tömbök használata talán maradna.

    Egy megoldás habár nem mindig a legoptimálisabb, ha megbízhatóan és stabilan működik akkor nem baj ha néha eltérünk a „papírformától”.

    Radulovic Attila
    Tag
    Bejegyzések száma: 653

    Az első verzióhoz nem kellenek sem tömbök, sem fájlba irkálás – nem teljesen értem, hogy miért volt szükséged ilyesmi megoldásra.

    A TP és SL esetén valóban vannak szabályok, amiket be kell tartanod (nem lehet őket megkerülni). Az esetek 99%-ban bőven megfelelőek a szabályok, néhány esetben azonban valóban előfordulhat olyan helyzet hogy borsot tör az orrunk alá.

    Alapvetően két dolgot kell szem előtt tartanod: takeprofit BUY pozi esetén csak az aktuális piaci ár fölé, SELL esetén pedig az aktuális piaci ár alá helyezhető el. Stoploss-nál pedig fordítva.

    Tehát az elhelyezhetőség NEM a nyitóártól függ, ez szokott lenni a legnagyobb félreértés a témában. Magyarul: TP-vel is kiszállhat az ember veszteséggel, és SL-el is kiszállhat az ember nyereséggel.

    Az, hogy mimimum mekkora az aktuális piaci ártól való „eltartás”, azt a stop szint (MarketInfo-ban MODE_STOPLEVEL) szabályozza. Ezen kívül érdemes még odafigyelni a MODE_FREEZELEVEL -re (fagyási szint) . Ezekről a fogalmakról érintőlegesen ebben a cikkben olvashatsz.

    Amennyiben a kiszámolt TP és SL beállítása szabályba ütközik, érdemes azt korrigálni. Ilyenkor előfordulhat, hogy a kilépési szint akaratunk ellenére valamennyivel elcsúszik – de még ez is jobb megoldás, mintha egy szabály be nem tartása miatt a pozícióink kilépési érték nélkül maradnak.

    Radulovic Attila
    Tag
    Bejegyzések száma: 653

    Szia!

    A fenti feladatra két megoldást tudok javasolni.

    1) Ehhez a megoldáshoz az expert állandó futtatása szükséges, és ún. piaci zárással fogunk a pozíciókból kilépni. Ekkor sem TP, sem SL megadása nem szükséges mert a pozíciókat maga az expert fogja zárni. (olyan, mintha állandóan ott ülnél a gép előtt és kézzel lezárogatnád a pozikat egy adott időpillanatban). Ehhez a magic szám alapján összegyűjtöd az adott pozíciókat, és az OrderProfit() összeadásával megvárod azt a pillanatot, amikor megfelelő profitot/veszteséget gyűjtöttek a pozícióid. Ekkor OrderClose() -zal zárod egyenként a pozíciókat. Nyilván ez a módszer nem teljesen pontos, viszont cserébe nem kell átlagárakkal és lotméretekkel bíbelődni.

    2) Ennél a módszernél a TP és SL kilépést fogjuk használni, amit nem az expert hanem a bróker végez el. Ergo kikapcsolt számítógépünk (szerverünk) nélkül is (nagy valószínűséggel) végbemegy a pozíciók zárulása. Ehhez viszont az kell, hogy a súlyozott átlagár és az elvárt profit alapján előre kiszámoljuk azt, az adott elvárt profit/veszteség szintünk árra vetítve hol lesz. Így több-kevesebb pontossággal beállíthatjuk azokat az árszinteket, ahol az általunk kívánt profit/veszteség megjelenik.
    Természetesen ezt minden új szint nyitásánál újra kell kalkulálnunk, és az összes pozíciónak újra beállítanunk. A kilépés egyszerre fog történni, azaz relatíve pontos lesz az zárásunk (ezzel szemben az első megoldásnál zárás közben csúszkálhat a piac, ami nyereséget/veszteséget okozhat a zárás során; heves piaci mozgásnál keresztül húzhatja az előzetes számításainkat).
    Mivel a TP és SL értékeinket előre látni fogja a brókercég, dealing desk -es bróker esetén manipulálhatja az árakat (stop hunting). ECN számlán ettől nem kell tartani.

    Ha további kérdésed van, akkor írd meg hogy melyik módszer a szimpatikusabb és segítek a továbbiakban.

15 bejegyzés megtekintése - 586-600 / 651