Hozzászólások
-
SzerzőBejegyzés
-
Hozzászólás: Megbízáskor hibát ír ki. #1619
Most tudtam csak reagálni – email ment.
Hozzászólás: Megbízáskor hibát ír ki. #1613A névjegy menüpontban megtalálod az e-mail címemet!
Hozzászólás: Optimalizáció #1612Van 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 ;)
Hozzászólás: Megbízáskor hibát ír ki. #1606Minden 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…
Hozzászólás: Optimalizáció #1605Az 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.
Hozzászólás: Optimalizáció #1602Sajnos 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.
Hozzászólás: Megbízáskor hibát ír ki. #1601A 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.
Hozzászólás: Meddig érdemes folyamatosan ordert beadni? #1593Jó 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.
Hozzászólás: Meddig érdemes folyamatosan ordert beadni? #1591Ha 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őenA 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!
Hozzászólás: LONG változót? #1588Nemigazán, sajnos ez a platform egyik korlátja :(
Hozzászólás: MT4 hangjelzés #1582A 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.
Hozzászólás: MT4 hangjelzés #1580Szia!
Meg, de csak az indikátor módosításával.
Hozzászólás: Kereskedés lezárása X árfolyamon #1578Nem á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”.
Hozzászólás: Kereskedés lezárása X árfolyamon #1576Az 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.
Hozzászólás: Kereskedés lezárása X árfolyamon #1573Szia!
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.
-
SzerzőBejegyzés