OrderCloseBy invalid2012-04-13T14:52:49+00:00
8 bejegyzés megtekintése - 1-8 / 8
  • Szerző
    Bejegyzés
  • deepstack
    Tag
    Bejegyzések száma: 4

    Szia!

    Nagy érdeklődéssel olvasom blog bejegyzéseidet, nagyon hasznosnak tartom az oldaladat. Gratulálok hozzá.
    Én azt szeretném megoldani egy expertben, hogy egy általa megnyitott pozíció csak részlegesen legyen kistoppolva, és a maradék mennyiséggel tovább éljen a pozi. Mindezt a szerver oldalon, vagyis akkor is, ha épp nem fut a terminál.
    Arra gondoltam, hogy a pozi megnyitása után elhelyezek egy ellentétes irányú stop ordert is a csökkentett mennyiséggel, majd ha ez megnyílt, akkor OrderCloseBy()-jal jól lezárom a kistoppolódott részt.
    Az van, hogy ez működik is bizonyos brókerrel, de pl. az Equilorral nem: az OrderCloseBy() ERR_INVALID_TRADE_PARAMETERS hibát dob. Ez azt jelenti, hogy az Equilornál tiltva van a hedge pozik egymással szemben történő zárása? Vagy lehet valami, amiről nem tudok?
    Más megoldást csak úgy tudok elképzelni, hogy eleve két részletben nyitom meg a pozit, és az egyikre beállítom a megálmodott stoploss-t. De mivel egyáltalán nem biztos, hogy a stoploss-t életben akarom tartani (az eredeti tervemben olyan eset is van amikor a stop ordert még aktiválás előtt törölném), nem akartam elaprózni a pozikat.
    Mit javasolsz?

    Radulovic Attila
    Tag
    Bejegyzések száma: 646

    Ö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.

    deepstack
    Tag
    Bejegyzések száma: 4

    Köszönöm a választ!
    Bosszant, hogy van egy jó kis függvény, ami nem használható, ha “hordozható” EA-t akarok írni…
    Amúgy csak azért került képbe, hogy a szerver végezze el a felezést, mert így kisebb a kockázat, hogy tényleg megtörténik. A zárásokat szívesebben bízom a szerverre. Szóval lehet, hogy inkább felvállalom a többlet menedzselést.
    Apropó, az szerinted lekérdezhető, hogy támogatott funkció-e az OrderCloseBy()?

    Radulovic Attila
    Tag
    Bejegyzések száma: 646

    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.

    deepstack
    Tag
    Bejegyzések száma: 4

    Nagyon köszönöm, h foglalkoztál a kérdéseimmel. Igazán hálás vagyok érte.
    “Cserébe” 🙂 megpróbálom újra leírni , hogy mi az elv, mert az utolsó megjegyzésedből úgy látszik, rosszul fogalmaztam az első postban. Talán Te is és más olvasók is kapnak egy ötletet. A megoldás működik, csak az Equilor MT4-ben nem, mert ezek szerint az nem támogatja a kérdéses funkciót.

    Feladat: Egy megnyitott pozíciót részben kell kistoppolni egy adott – az aktuálisnál rosszabb – árfolyamon.
    Követelmény: Ne a terminál-ban futó EA végezze a zárást (“felezést”), hanem “stoploss”-szerűen a szerver.
    Elemzés: Milyen lehetőségek vannak a “stopploss”-szerű zárásra az MT4-ben:
    – OrderModify(), stoploss beállítása: nem jó, mert a teljes mennyiségre vonatkozik.
    – OrderClose(), ha az aktuális árfolyam (Bid / Ask) megegyezik a “stoploss” árfolyammal, zárás adott mennyiségre: nem jó, mert az EA hajtja végre, nem a szerver.
    – OrderSend(), ellentétes irányú függő pozi nyitása a lezárandó mennyiségre a “stoploss” árfolyamon: jó, mert a részleges mennyiségre vonatkozik, és a szerver hajtja végre.
    Megvalósítás OrderSend() segítségével:
    Mi legyen a command? Mivel ellentétes irányú függő pozit kell nyitni, olyan árfolyamon, ami rosszabb, mint az aktuális (azaz stoploss-ról van szó), ezért stop megbízást kell adni, azaz long pozi esetén: OP_SELLSTOP, short pozi esetén: OP_BUYSTOP.
    Továbbá az eredeti pozi (amit “felezünk”) ticket-je legyen: eredeti_ticket. Ezt írjuk bele a comment-be: “STOPLOSS#{eredeti_ticket}”. Erre még szükség lesz.
    A stop megbízás elhelyezése a szokásos módon történik:
    int stoploss_ticket = OrderSend(Symbol(), command, {lezárandó mennyiség}, {stoploss árfolyam}, {slippage}, null, null, comment, {magicnumber});
    Ez már majdnem jó, csak annyi a bibi, hogy ha ez is megnyílik (a szerver által!), akkor van két nyitott pozink egymással szemben, ami gyakorlatilag már megvalósította a részleges zárást a “stoploss” árfolyamon, csak “normalizálni” kéne ezeket úgy, hogy csak a le nem zárt mennyiségre vonatkozó pozi maradjon. Ez már nem kell, hogy a szerver oldalon történjen (bár jó lenne), hisz a kistoppolás már gyakorlatilag megtörtént.
    Pont ezt valósítja meg az OrderCloseBy(eredeti_ticket, stoploss_ticket) művelet. Vagyis annyiban bonyolultabb most a helyzet, hogy észre kell venni, hogy a szerver megnyitotta a stop megbízást, vagyis meg kell hívni az OrderCloseBy()-t. Ezért jelöltük meg a comment-ben a “STOPLOSS” megbízást, és rögzítettük ott az eredeti pozi ticket-jét. Az észrevevés csak annyi, h minden iterációban átnyálazzuk a megnyitott pozikat az ezen a blogon is jól megismert módon, keresve ez a comment-et.
    Hát ennyi lett volna.

    Radulovic Attila
    Tag
    Bejegyzések száma: 646

    Érdekes, amit leírtál.

    Én azt gondolom, hogy ha egy 0.2 méretű BUY pozíciód pluszban van, és te egy ellentétes pozíciót nyittatsz 0.1 értékben – egy függő megbízással (SELL LIMIT és BUY LIMIT kell, nem STOP megbízások!), akkor amikor az teljesül, akkor csak a jó irányba van biztosítva 0.1 BUY pozíció profitja (oda meg tök felesleges a 0.1-es buy, hiszen negatív profitot generál! Minek?!)

    Amennyiben az árfolyam visszatesztel, semmi nem véd meg attól, hogy a két pozíció összprofitja negatívvá váljon lévén hogy a BUY pozíció visszafordulása esetén annak a negatív profitján a SELL pozíció maximum csak tompít.

    Így nemigazán értem, hogy a fenti konfigurációnak mi lehet az előnye, ráadásul még az OrderCloseBy-jal is szenvedni kell.

    Lehet, hogy én nem értek valamit de a megoldásod abszolút nem segít se a profit megőrzésén, se egy sikeres pozíció bizonyos ponton történő megfelezésén, se a maradványpozi profitjának bebiztosításán.

    Oké, hogy a piaci zárások gyakran megbízhatatlanok, de azért korántsem annyira gáz a helyzet. Egy VPS szerver – jó áram- és internethozzáféréssel – igen sokat segíthet.

    deepstack
    Tag
    Bejegyzések száma: 4

    Igen, valamit félreértesz: nem a profit megőrzése a cél, hanem a veszteség minimalizálása (stop loss). Végig erről beszéltem. Vagyis csak azt az esetet vizsgáljuk, amikor az árfolyam a rossz irányba fordul. Ezért kell STOP megbízás és nem LIMIT megbízás. Idézet a blogodra belinkelt könyvből:
    “Buy Stop – egy függőben levő megbízás, egy olyan vételi megbízás, ami magasabb az aktuális árnál. A megbízást akkor fogják végrehajtani (piacira módosított Buy megbízással) ha az Ask ár a függőben levő megbízásban meghatározott értékre emelkedik.
    Sell Stop – egy függőben levő megbízás, egy olyan eladási megbízás, ami alacsonyabb, mint az aktuális. A megbízást akkor fogják végrehajtani (piacira módosított Sell megbízással) ha a Bid árajánlat a meghatározott értékre csökken.”
    Ezért SELL pozi esetén BUY STOP megbízásra van szükség a veszteség minimalizálására, BUY pozi esetén pedig SELL STOP-ra. És ennek megnyílása esetén tök mindegy merre megy az árfolyam, az aktuális profit/veszteség az adott mennyiségre nézve fix marad.
    Az OrderCloseBy-jal való plusz játék az ára annak a követelménynek, hogy a szerver hajtsa végre ezt a műveletet.

    Radulovic Attila
    Tag
    Bejegyzések száma: 646

    “És ennek megnyílása esetén tök mindegy merre megy az árfolyam, az aktuális profit/veszteség az adott mennyiségre nézve fix marad.”
    Ez rendben van, de ez csak abban az esetben igaz, ha a két pozíció lotmérete megegyezik.

    Te az elején részzárásról is beszéltél, engem ez kavart meg.

    A STOP megbízások kapcsán természetesen igazad van, elnéztem.

8 bejegyzés megtekintése - 1-8 / 8

A hozzászóláshoz jelentkezz be!

Adhatok Neked még több ingyenes tartalmat?

Értesítelek hetente megjelenő új tartalmaimról.

Hozzájárulok, hogy az adatvédelmi nyilatkozat szerint biztonságosan kezeld megadott adataimat, valamint hasznos anyagokat és egyedi ajánlatokat küldj nekem termékeiddel, szolgáltatásaiddal kapcsolatban e-mailben