Hozzászólások

12 bejegyzés megtekintése - 31-42 / 42
  • Szerző
    Bejegyzés
  • Roden
    Tag
    Bejegyzések száma: 52

    Kösz. Szóval 6-os típus.
    Ezt a mi rákért nem tudták beleírni a MetaEditor súgójába az OrderType()-hoz azt nem értem?!

    Roden
    Tag
    Bejegyzések száma: 52

    Igen, ezt jól telibetaláltad:

    ennek a gyakorlati haszna a te stratégiádhoz kapcsolódik, nem a leggyakrabban előforduló elvárásokhoz.

    Ezzel az expertel ugyanis nem szoktam backtesztelni mert több (ígértesnek tűnő) startégiát futtatok vele egyetlen programon belül. Ezért aztán teljesen igazad van: ez így backtesztre teljesen alkalmatlan lenne.
    Azért kellett a fenti megoldás, hogy ha van egy újabb stratégia amit mondjuk M15-ön alapul akkor:

    if (NEWBAR>=15) { új stratégia }

    ‘és már kész is vagyok’.

    De sajnos az alapproblémám nem változott. Én állítom, hogy a kód hibátlan, de mégsem működik jól.
    Így lényegében arra keresem a választ, hogy én vagyok vak és nem látok valamilyen nyilvánvaló logikai bukfencet, vagy a MetaTrader szívat valamilyen bug-gal?

    Lévén a legutulsó javítások között is volt egy CopyTime()-al kapcsolatos hiba.

    (Egyébként pedig azért fontos, hogy pontosan a gyertyák elején fusson egy-egy kódrész, mert mintázat alapú stratégia is van a repertoárban. De ez már tényleg nem MQL-hez kötődő kérdés.)

    Roden
    Tag
    Bejegyzések száma: 52

    Köszi a választ, de a csatolt kód egyáltalán nem bonyolult lényegében megegyezik a te „A” verzióddal csupán annyi a különbség, hogy nem a Bars* hanem a Time változó értékét figyelem.
    Tulajdonképpen csak két vizsgálat fut le:
    1. Inicializálva van-e az időadatok tömbje (hogy legyen mihez viszonyítani)
    2. és ha igen akkor történt-e változás M1-en > és ha nem, akkor ezzel vége is> return(0);
    Egyszerű mint a fakocka, csak jól megtűzdeltem kommentekkel, hogy más erre tévedő halandó is könnyen értelmezhesse. :)

    Mivel az expertem három-négy fő részre tagolódik (menedzsment, kereskedés, eseménykezelés, grafikus-szöveges visszajelzés-tájékoztatás) és a kód kölönböző pontjain szükségem van a gyertya adatokra (más-más feladatok futnak percenként, 5 percenként és óránként) ezért van szükségem arra, hogy lehetőleg csak egyetlen vizsgálat fusson le a kód elején és a rendelkezésemre álljon egy globális változó amit az adott pontokon vizsgálhatok, hiszen ha (esetemben) NEWBAR értéke >=30, akkor abból következik, hogy 1,5,15 és 30 perces idősíkon is új gyertya van.

    (Így utóbb, most arra gyanakszom, hogy a referencia szerint az iTime() is futhat hibára és olyankor 0-t ad vissza)

    Persze a B. verzó is teljesen logikus megoldás, de valahol zavar a dolog, hogy számításokat is végezetetek a programban amikor egy szimpla összehasonlítás

    if (iTime(NULL,periods[z],0)>LastTime[z])

    is elég lenne.

    Azonkívül – bár még sosem irattam ki egy címkére a Time[0] értékét – de mi van, ha pl. egy egzotikus instrumentumnál (az M1 idősíkot figyelve) első 25 mp.-ben nem történik semmi. Akkor a NextRun 25 mp.-el eltolva indul a következő körben?

    (* Az az igazság, hogy a Bars változó értékében nem bízom. A szemem előtt zajlott le olyan szituáció, hogy egyszercsak – napközben – eltűnt 4-5 gyertya a chart-ról, keletkezett egy hatalmas gap a robotom nyitott egy ‘értelmetlen’ pozíciót. Szerencsére csak demó számla volt és csak azért értettem meg (gyorsan), hogy nem piaci szituációról van szó, mert egy másik brókernél ugyanazon az instrumentumon minden ‘nyugodt volt és békés’
    de a kettőt összevetve már látszott, hogy menetközben eltűnt néhány gyertya a chartról!!! Ilyen alapon néhyán „új” gyertya is lecsoroghat a chart „elejére” – mármint a legrégebbi gyertya elé – és akkor úgy vagyok átverve, hogy még ki se tudom deríteni mi történt. Szerintem a Bars csak arra jó, hogy lellenőrizzem van-e elegendő gyertyám pl. egy BrakeOut stratégia vizsgálatához.)

    Roden
    Tag
    Bejegyzések száma: 52
    Hozzászólás: Backteszt #2750

    Üdv. Radu!

    Az FXT fájlokkal kapcsolatban lenne egy költői kérdésem.
    Van valami ésszerű magyarázat arra, hogy miért kell minden egyes idősíkhoz egy külön FXT?
    A HST esetében még érthető a dolog.
    De ha az FXT fájl úgyis tick adatokat tartalmaz, akkor miért nincs egy alltick.fxt oszt csókolom?

    Roden
    Tag
    Bejegyzések száma: 52

    Köszönöm a tippet az Indítópultal kapcsolatban. Én is így próbáltam megoldani, de ezt még ki kell egészíteni az Autologon funkció bekapcsolásával.
    Windows7-en ez így néz ki: Automatikus bejelentkezés bekapcsolása

    Ill. még létrehoztam az ebben a bejegyzésben említett parancsikont amivel zárolni lehet a Windowst és azt is „bedobtam” az Indítópultba paranoia csökkentőnek :).

    Amúgy a Meta-t egy virtuális gépen futtatom. Más nem is megy azon a gépen.

    Mellékesen a #2455 bejegyzés elég szűkszavúra sikeredett. Miért kéne letöltenem azt a fájlt?

    Roden
    Tag
    Bejegyzések száma: 52

    Azt nem tudod véletlenül, hogy ha a vonalnak be van állítva az OBJPROP_RAY tulajdonsága akkor azt is figyelmebe veszi vagy csak a két megadott időérték közötti részt?

    Roden
    Tag
    Bejegyzések száma: 52

    Uh, de gyors voltál. Köszönöm a választ! Pontosan erre a funkcióra van szükségem.

    Roden
    Tag
    Bejegyzések száma: 52
    Hozzászólás: Error 130 #1986

    +1
    Istenem mennyi bosszúságot megspóroltam volna ha előbb benézek ide.
    Az egyik számlámon én se tudttam pozit nyitni, de mostmár tudom hogy miért.
    Köszi.

    Amúgy mql-ből kitudom deríteni valahogy, hogy egy számla ECN-e vagy sem?

    Roden
    Tag
    Bejegyzések száma: 52

    Instrumentum lista lekérdezése – az oroszok így csinálják :) :
    http://codebase.mql4.com/6134
    http://codebase.mql4.com/source/18718 (SymbolsLib.mq4)

    Roden
    Tag
    Bejegyzések száma: 52

    Sebaj. Ez is tuti.

    A fentebb levő Symbol_ID függvénynek leginkább akkor van értelme, ha az általa generált double értékből újból ki lehet nyerni az eredeti stringet. Ide bigyesztem azt is hátha vkit érdekel:

    string SydToName(double syd=0)
    {
    int karakterdb = StringLen(DoubleToStr(syd,0))/2;
    int charcode=0;
    string symbol_name=””;
    for (int i=1; i<=karakterdb; i++) {

    //az utolsó két számjegy kinyerése maradékos osztással
    charcode=MathMod(syd,100);

    //összerakjuk a szimbólumnevet karaktereneként
    symbol_name=StringConcatenate(CharToStr(charcode),symbol_name);

    // megrövidítjük két számjeggyel a következő ciklushoz
    syd=(syd-charcode)/100;
    }
    return(symbol_name);
    }

    Max 8 karakter hosszúságú neveket lehet vele helyesen átalakítnai. Tehát pl. a FxPro-n elérhető SILVEREURO szimbólumnevet nem. Ehhez tovább kéne fejleszteni, a tizedesjegyeket is bevonva a karakterábrázolásba.
    Persze nem csak szimbólumnevek hanem bármilyen NAGYBETŰS(!) ill. két számjeggyel kódolt (ASCII)karaktereket tartalmazó string is átadható vele.

    Mivel igen rövid előéletem van a programozást tekintve, ha bárki hibát talál az áltlam leírt kód(okban) vagy tud egy hatékonyabb megoldást és megírja, azt örömmel veszem.

    Roden
    Tag
    Bejegyzések száma: 52

    Köszönöm a kódot. Pontosan erre van szükségem.
    A _prefix-es névadás is jó ötletnek tűnik, pláne most hogy jobban megnéztem; a GlobalVariablesDeleteAll() függvény is mintha direkt ehhez lenne kitalálva.

    A kódott elnézve mindjárt felvetődött bennem a kérdés, hogy instrumentumtípusonként szeparálva (forex, commodities,stb.) is le lehetne kérdezni a szimbólumokat, mondjuk egy két dimenziós tömbbe?

    A Row változónak van vmilyen gyakorlati jelentősége, vagy inkább csak a jobb olvashatóság miatt van a kódban?

    Roden
    Tag
    Bejegyzések száma: 52

    Ha nincs más akkor a szimbólum névből lesz UID. :)

    double Symbol_ID (string sym=””)
    {
    int strl=StringLen(sym);
    string uid=””;
    for (int i=0; i<strl; i++) uid=StringConcatenate(uid,StringGetChar(sym, i));
    return (StrToDouble(uid));
    }

12 bejegyzés megtekintése - 31-42 / 42