Hozzászólások
-
SzerzőBejegyzés
-
Hozzászólás: Külső változó intervallumának leszűkítése #3477
Szia! Találtam megoldást az első kérdésedre.
#property script_show_inputs enum hourOfDay { H00, // 0 H01, // 1 H02, // 2 H03, // 3 H04, // 4 H05, // 5 H06, // 6 H07, // 7 H08, // 8 H09, // 9 H10, // 10 H11, // 11 H12, // 12 H13, // 13 H14, // 14 H15, // 15 H16, // 16 H17, // 17 H18, // 18 H19, // 19 H20, // 20 H21, // 21 H22, // 22 H23 // 23 }; enum minuteOfHour { M00, // 0 M01, // 1 M02, // 2 M03, // 3 M04, // 4 M05, // 5 M06, // 6 M07, // 7 M08, // 8 M09, // 9 M10, // 10 M11, // 11 M12, // 12 M13, // 13 M14, // 14 M15, // 15 M16, // 16 M17, // 17 M18, // 18 M19, // 19 M20, // 20 M21, // 21 M22, // 22 M23, // 23 M24, // 24 M25, // 25 M26, // 26 M27, // 27 M28, // 28 M29, // 29 M30, // 30 M31, // 31 M32, // 32 M33, // 33 M34, // 34 M35, // 35 M36, // 36 M37, // 37 M38, // 38 M39, // 39 M40, // 40 M41, // 41 M42, // 42 M43, // 43 M44, // 44 M45, // 45 M46, // 46 M47, // 47 M48, // 48 M49, // 49 M50, // 50 M51, // 51 M52, // 52 M53, // 53 M54, // 54 M55, // 55 M56, // 56 M57, // 57 M58, // 58 M59 // 59 }; //--- input parameters input hourOfDay H; // Óra input minuteOfHour M; // Perc input minuteOfHour S; // Másodperc int h; int m; int s; void OnStart() { h = H; m = M; s = S; }
Hozzászólás: Hibás gyertyák #3473Ha a Tickstory betöltés helyett a csv2fxt scriptet használom, akkor eltűnnek a vasárnapi egy órás gyertyák.
Hozzászólás: Teszter model beállítás lekérdezése #1675A *** al megjelölt sort feljebb kell tenni egy sorral, mert csak így lesz a maximális érték benne. Ahogy az előbb írtam az utolsó gyertya előtti tickek száma lenne benne.
if( elozo > 0 ) Gyertya++;
if( Ticks > MaxTick ) MaxTick = Ticks; // ***
if( Gyertya == TICK_TESZT )Hozzászólás: Teszter model beállítás lekérdezése #1672Megírtam egy minta kódot. Ebből az is kiderült, hogy a 12 kontroll pontból generált tick nem 12, hanem kb.: háromszor 12 ticket jelent. De így is működik. A TICK_TESZT konstansban lehet beállítani, hogy hány gyertyán teszteljen. Én EURUSD kereszten teszteltem, Más devizapáron esetleg a 100-as küszöb értéket változtatni kell.
ui: A „kisebb-egyenlő” relációt csak negálva tudtam bemásolni, a html miatt.
//--- Globális változók int Ticks; int Gyertya; int MaxTick; int Model; datetime elozo; int init() { Gyertya = 0; elozo = -1; MaxTick = 0; return(0); } #define TICK_TESZT 5 int start() { if( !(Gyertya > TICK_TESZT )) { if( Time[0] == elozo ) Ticks++; else { if( elozo > 0 ) Gyertya++; if( Gyertya == TICK_TESZT ) { if( Ticks > MaxTick ) MaxTick = Ticks; if ( MaxTick == 1 ) Model = 0; // egész gyertya else if( MaxTick < 100 ) Model = 1; // kontrol pontok else Model = 2; // minden tick Comment( "MaxTick = ", MaxTick, " Model = ", Model ); } Ticks = 1; elozo = Time[0]; } return(0); } // --- Itt jöhet a tesztelés return(0); }
Hozzászólás: Teszter model beállítás lekérdezése #1670Én azt csinálnám, hogy megszámolnám két egymás utáni gyertya között hányszor fut le a start függvény. Vagy egyszer, vagy 12-szer, vagy 12-nél többször. Így két-három gyertya elmegy ennek megállapítására, utána mehet a teszt.
Hozzászólás: Érthetetlen hiba #1644Nem szeretem az ilyen megmagyarázhatatlan jelenségeket, ezért megpróbáltam rekonstruálni a hibát. Leírom tanulságképpen, hogy fordulhat ilyesmi elő.
Ezt az indikátort már korábban elkészítettem, két buffert használtam benne. Ma reggel betettem egy harmadik buffert is, na ilyenkor az MT4 nem hajlandó figyelembe venni, hogy változott a bufferek száma, és az új buffernek nem foglal helyet a memóriában. Csak ha újra csatolom a charthoz.
Hozzászólás: Érthetetlen hiba #1643Szia Radu!
Megszűnt a hiba, már ne keresd. A kód további tesztelése során ellenőriztem a tömb méretét, és az ArraySize(BufferFuggo) nulla volt. Arra továbbra sem derült fény, hogy mi okozta. De amikor levettem a chartról az indikátort, és visszaraktam, megszűnt a hiba. Úgy látszik az MT4 kavart össze valamit. Mindenesetre sok időm ráment.
Hozzászólás: IsTesting() indikátorban #1626Szia Radu! Kösz a választ. Egy kiegészítő kérdésem van. Még csak két hónapja kezdtem el foglalkozni az MT4 programozással, 20 év programozási tapasztalattal. Szeretek minden lehetőségről, korlátról magam meggyőződni. Így akadtam ebbe a problémába is. Találtam egy megoldást, csak azt nem tudom, hogy ez mennyire függ az aktuális MT4 klienstől. Az indikátor init() függvényben lekérdezem a gyertyák számát:
bool tesztmod = false; int init() { if ( Bars == 0 ) tesztmod = true; // ... }
Ez az én brókeremnél működik. De vajon szabad ilyesmire alapozni egy kódot? Vagy egy alternatív megoldás lehet, hogy extern paraméterként a felhasználótól kérem be, hogy hol használja az indikátort.
Hozzászólás: IsTesting() indikátorban #1623Van egy multi timeframe indikátor, ami az iMA(NULL,PERIOD_D1,50,0,MODE_SMA,PRICE_CLOSE,0) értéket használja. Most 2012.08.20 19:40 van. Ha például múlt heti adatokon tesztelek M1-es charton, akkor az iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0) a régi értéket adja, de az iMA(NULL,PERIOD_D1,50,0,MODE_SMA,PRICE_CLOSE,0) a mostani értéket.
Teszt módban az expert és az indikátor esetében nem egyformán állítja be a gyertya tömböket az MT4. Expert esetén minden idősík gyertya tömbje kb.: 1000-el indul, és mindegyiket aktualizálja a tickek pillanatában. Viszont az indikátorokban csak az aktuális idősík gyertya adatai frissülnek, a többi marad a teszt előtti (kb.:65000)
Emiatt ha az indikátor egy függvényt nem aktuális idősík paraméterrel használ, teszt módban nem ugyan azt az értéket adja, mint amit ugyanakkor nem teszt módban adott. Lezárt (nem [0] indexü) gyertyák esetén az iBarShift függvénnyel tudom korrigálni. De az utolsó gyertya esetén ez sem jó, itt el kéne a kódnak ágazni teszt módtól függően. pl.: if(isTesting()) { …tesztmód… } else { …éles… }
-
SzerzőBejegyzés