Hozzászólások
-
SzerzőBejegyzés
-
Hozzászólás: OrderSelect #4777
Ha fut mondjuk 15 robot egyszerre (különböző instrumentumokon), és a pozíciók állandóan nyílnak-záródnak egymástól függetlenül, akkor én az indexes megoldást biztosan nem látom jónak. Ezért fontos szerintem, hogy leszűrd a zárandó pozíciókat, és csak a konkrétakat zárd. Innentől kezdve abszolút nem érdekel, hogy közben megnyílt 50 pozíció és lezárult 22. Az indexes változatnál ezzel szemben a hatékonyság drasztikusan leesik az ilyen speciális esetekben.
A ERR_TOO_FREQUENT_REQUESTS -et akkor kapod, ha túl sok kérést küldesz a bróker felé. Ellenőrizd, hogy mi a kérés oka (módosítás, zárás, esetleg nyitás) és használj Sleep() -et. Pl. 200 milliszekundum már sokat segít az ügyön :)
Hozzászólás: Univerzális képlet #4775Jó úton jársz. Tulajdonképpen neked FOREX instrumentumok esetén egy multiplier (szorzó) kell, a többi instrumentum (DAX, SP500, indexek, FUTURES-ök, stb.) pedig divider. Azért multiplier, mert te pipben várod az inputokat a felhasználótól, és azokat felszorzod majd a szorzó és a point értékével annak érdekében, hogy a programod és a brókercég számára alkalmas szám jöjjön ki. (Ez persze oda-vissza működik, vagy szorzol, vagy osztasz)
Én a következőképpen dolgozom:
- 2 vagy 4 digites párok esetén a multiplier értéke = 1 (0.0001 / 0.0001 / 1 = 10)
- 3 vagy 5 digites párok esetén a multiplier értéke = 10 (0.00010 / 0.00001 / 10 = 10)
- 0 vagy 1 digites párok esetén a multiplier szintén 1 (0.1 / 0.1 = 1)
Divideres korrekció pedig ott szükséges, ahol a traderi gondolkodás eltér a legkisebb elmozdulási egységtől. Pl. DAX. Ott minden trader 1 kerek egészben gondolkodik, vagyis hogy ha 1055.0-ról 1056.0-ra mozdul az ár, akkor azt mondják: „1 daxot ment arrébb a piac”. Itt a pip szó használata több félreértést okoz (persze lehet erőltetni, de minek).
A robotodban ezért a legkisebb elmozdulási egységgel osztod a különbséget ugye alapból: (1056.0 – 1055.0) / 0.1 = 10. Tehát kijön, hogy itt 10-zel kell osztanod a kapott értéket ahhoz, hogy traderi gondolkodáshoz alkalmas szám jöjjön ki.Univerzális szabály: a traderi nyelv egységértékét elosztod a legkisebb elmozdulás egységével, vagyis DAX esetén 1 tizedes pontosságnál: 1 / 0.1 = 10. Ugyanez származtatott terméknél két tizedesjegynél: 1 / 0.01 = 100.
Természetesen figyelembe érdemes venni a további számítások során a ticksize-t is, vagyis hogy az ár mennyivel változhat minimum értékként (pl. ha ticksize 0.5, akkor csak ötösre és nullára végződhet az ár).
Lehet, hogy van ennél jobb módszer is, de automatikusan lekérdezhetőről nem tudok – rengeteg bróker van, és a cél az, hogy mindenhol tudd használni a programot. Bedrótozni soha nem drótozok semmit.
Hozzászólás: Historikus tick adatok #4772Nem lehet, a MT4 csak gyertyaadatokat (OHLC) tárol.
Az mpeter által javasolt módon tudod őket gyűjteni, esetlegesen kiírni valami fájlba, adatbázisba.
Hozzászólás: OrderSelect #4771Szerintem olvasd el ezt a cikket és ezt a cikket, ezekben részletesen leírtam a témával kapcsolatos véleményemet.
Én 5 éve gyakorlatilag sosem zárok indexelés, kizárólag ticket alapján. Minden robotomban van egy rutin, ami a pozíciószámlálást végzi – ebben megállapítom a robot logikájához tartozó fontos pozíciók ticket számát (legelső pozíció, legutolsó pozíció, vagy épp a szűrt pozíciókat elrakom tömbbe), és azok mindig rendelkezésre állnak. Index alapján szerintem csak egy pár hónapig zártam még 2010-ben, azonban ott kiderül az azzal kapcsolatos összes probléma, és váltottam a ticket szám alapú megoldásra.
Hozzászólás: az MT4-ben nincsen árvonal #4770Közben hozzáadtam egy cikket is, aktualizálva a korábbit a te problémádra, mely segít, ha egy charton nem látszódnak a pozíció nyitóár, SL és TP vonalai. Várom véleményed, hogy ez volt-e a probléma és hogy sikerült-e megoldanod.
Hozzászólás: az MT4-ben nincsen árvonal #4763Kattints ide és olvasd el ezt a leírást. Valószínűleg az instrumentum, amin kötöttél és a chart amit nézel az nem ugyanaz; ezt ellenőrizd! Részletek a cikkben.
Hozzászólás: OrderSelect #4762Igen, jól érted. Okosan kell használni az erőforrásokat, én csak akkor használok tömböket, ha nincs más megoldás. Látatlanban nem tudom megmondani, hogy ez nálad egyáltalán szükséges-e.
Ha több száz order van, akkor ez már valóban lehet gond – bár valós idejű futtatásnál én ilyen jellegű adatkezelésből nem tapasztaltam különösebb lassulást.
Egyébként mi a projekt? Mihez tartozik több száz kötés?
Hozzászólás: OrderSelect #4755Legtöbbször mindenképpen ciklust kell futtatnod – én ezt teszem. Természetesen további lehetőségek is vannak: pl. eltárolod a számot egy változóban, globális változóban. De mindentől függetlenül a „végigmegyek a pozíciókon” módszer kikerülhetetlen.
Hozzászólás: Tickstory probléma #4751Ha van forráskódod a robothoz, akkor fordítsd le a 765-ös Metaeditorban újra. Ha nincs, akkor a robot frissebb MT4-ben lett fordítva, ami nem kompatibilis – ezek szerint – a 765-össel.
Tickstory: ha megveszed a TSL-t, akkor a megvásárolt változat az addigi buildeket korlátlan ideig kezeli. Mindemellett értem a kérdésed, és utána is kérdezek a Tickstory-s srácoknál. Én azt javaslom, hogy tiltsd le az automatikus frissítést, és így meg tudod őrizni a jelenlegi 910-es build verziót – így pedig a megvásárolt Tickstory is addig bőven jó, míg a MetaQuotes nem mondja azt, hogy a 910-es változat idejétmúlt. Ez pedig azért várhatóan nem a következő hónapokban lesz.
Hozzászólás: OrderSelect #4738Szia Hornet!
A következő hibákat javítsd:
- soha ne használj fix ciklust; használd a ciklusban az OrdersTotal() / OrdersHistoryTotal() -t; szerintem ez a bajaid fő forrása
- a tömbökkel való munkában a lényeg a dinamikusság; írj ciklust arra, hogy keress egy kétdimenziós tömbben, mert ha 100 pozíciót akarsz kezelni akkor nem írhatod végig a 100 indexet a feltételekben
- a continue használata a legtöbbször nem indokolt; építsd fel úgy az if feltételeket, hogy eleve továbbmenjen a ciklus
- a kommentelés jó dolog, de használj konstansokat is, hogy olvasható legyen a kódod (1-es helyett OP_SELL használata); ha 1 hónap múlva megnézed majd, akkor is tudni kellene, hogy mit akartál egy-egy kódrészlettel
- ha már ismered a ticket számokat, akkor OrderSelect-nél is használhatod azokat
- az egymásba ágyazott ciklusok előnytelenül vannak elkészítve, ezért sokkal többször használod az erőforrásokat, mint az indokolt lenne; elég egyszer végigmenni minden pozíción, és körönként menteni a fontos adatokat a tömbbe
- szükségtelen két külön OrderSelect(); a pozíciót ticket szám alapján válaszd ki, ekkor a program automatikusan ki fogja választani (nem neked kell döntened, hogy melyik pool-ban kell kotorásszon). A kiválasztás után az OrderCloseTime() alapján eldönthető, hogy lezárt vagy élő pozícióról van szó
- a Számlatörténet fülön történő dátumkorlátozásra is figyelj, mert amennyiben a felhasználó lekorlátozza a számlatörténet megjelenített időszakát, az expertek sem férnek hozzá azokhoz a pozícióadatokhoz, amelyek nem látszanak
- boolean vizsgálatnál szükségtelen a == true; elég pl. az if (OrderSelect(h, SELECT_BY_POS)) { }
- az eredeti kérdés kapcsán pedig: írasd ki Print() segítségével hogy mely pozíciónál kapsz false -t vissza, így kiderül, hogy mi a hibás ticket szám amit ki akarsz választani – ennek alapján lehet majd tovább menni a nyomozásban. Lehet, hogy rossz / nem létező indexet akarsz kiválasztani, vagy nullát.
Hozzászólás: Label text hossza #4735Sajnos valóban csak 63 karaktert tud megjeleníteni. Csak egymás mellé helyezett objektumokkal tudod ezt megkerülni.
Hozzászólás: iMAOnArray #4714Nem dolgozom struktúrákkal. Az iMAOnArray speciális tömböt fogad, szóval ha a tömb típusa stimmel, még akár működhet is. Ki kell próbálni.
Itt van leírás a struktúrákról és osztályokról, hátha találsz idevágó infót.
Illetve itt van még szó a struktúrákról a „Arrays in structures” bekezdésben.
Hozzászólás: Szerver gondok #4711A „Rendszermappa megnyitása” paranccsal megnyitott mappában van ott a fájl? A robot csak ex4 fájl, vagy ex4+mq4? Egy fájlból áll a program? Van valamilyen külső hivatkozása (másik ex4, dll, bármi)?
Éles kereskedéshez egyébként mindenképp Windowsos rendszert javaslok.
Hozzászólás: Szerver gondok #4707Nyisd meg a rendszermappát a Fájl menü Rendszermappa megnyitása parancsával, és az így kapott elérési úton belül helyezd el a robotjaidat. Valószínű, hogy nem jó helyre másoltad be a robot fájlját.
Bővebb leírást itt találsz a témáról. Ha nem ez lenne a gond, akkor továbbmegyünk más irányba.
-
SzerzőBejegyzés