Hozzászólások

3 bejegyzés megtekintése - 1-3 / 3
  • Szerző
    Bejegyzés
  • deepstack
    Tag
    Bejegyzések száma: 4
    Hozzászólás: OrderCloseBy invalid #1410

    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.

    deepstack
    Tag
    Bejegyzések száma: 4
    Hozzászólás: OrderCloseBy invalid #1407

    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.

    deepstack
    Tag
    Bejegyzések száma: 4
    Hozzászólás: OrderCloseBy invalid #1403

    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()?

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