Előfordul , hogy Backtestelés közben észre vesszük , hogy különböző nagyságú lyukak vannak az adatsorunkban , ez számos kellemetlenséget okozhat , főleg ha sok terméken szeretnénk tesztelni.
Ezen a hibán próbálunk segíteni a következő programunkkal.:

                A hisztorikus adatokat : c:\Users\userneve\Documents\NinjaTrader 7\db\ - mappában tárolja el a Ninajtrader. Számunka a db\minute\ mappa lesz érdekes , ugyanis ide mentődnek le a backtesteléshez szükséges adatok (Backtestelésnél érdemes a napos adatokat is perces adatokból kinyernünk : 1440 perc) . Amint megnézzük a mappában található fileokat láthatjuk , hogy naponként tárolódnak el a gyertyaadatok.
Szükségünk van egy programra , ami észreveszi a fileokat egy adott mappában és egymáshoz viszonyítva végigellenőrzi , hogy melyik két nap között van hiány a mappában található adatok  között.

A program nagyjából így néz ki:

  private void button1_Click(object sender, EventArgs e)
{ if (adatok.Text == "" || adatok.Text == null) { MessageBox.Show("Nem írtál be mappát hogy hol keressem!"); return; }
         var Files = new DirectoryInfo(adat).GetFiles().OrderBy(f => f.Name).ToList();
           DateTime datum = Convert.ToDateTime("1900-01-01"); ;
           DateTime datumelozo=Convert.ToDateTime("1900-01-01");
           string ev, ho, nap;
           foreach (var item in Files) //for ciklus végigszalad a filokon
           {
               ev = Left(item.Name, 4);
               ho = Mid(item.Name, 4, 2);
               nap = Mid(item.Name, 6, 2);
               try { datum = Convert.ToDateTime(ev + "-" + ho + "-" + nap);
              }
               catch { MessageBox.Show("A mappában van olyan adat ami nem Ninjatrader idő adat !!");return;}
               if(datum != datumelozo.AddDays(1) && datumelozo != Convert.ToDateTime("1900-01-01") && datum.DayOfWeek != DayOfWeek.Sunday && datum.AddDays(-1).DayOfWeek != DayOfWeek.Sunday)  
               {
                   Listbox(Convert.ToString("Adathiba :" + datum));
               }
               datumelozo = datum;  
           }
        }
Program nem foglalkozik a hétvégékkel , az ünnepnapokat hibaként fogja értékelni.

Egy rövid videót is készítettem a progi használatáról:




A programot letölthetjük innen (ha a vírusírtó jelezne valamit [mint pl a példavideóban is] , akkor a forrás alapján ellenőrizhető , hogy mit tartalmaz a kód (semmi kártékonyat)

daszilagyi 2013.01.19. 21:27

Market Replay

A sorozat következő tagjaként a market replay adatok letöltéséről fogok néhány szót ejteni.
A megfelelő replay adatokon való tesztelés fontos lehet egy stratégia tesztelése során , ugyanis ezzel a módszerrel véleményem szerint pontosabb képet kaphatunk  az általunk megírt robot működéséről, könnyebben kiderülhetnek rejtett hibái.

Market Replay adatokhoz a következő módon juthatunk(File-Utilities- Download Replay Data):
replay_1.jpg


Ekkor kapjuk meg a következő pop – up ablakot , ahol beállíthatjuk a letölteni kívánt instrumentumunkhoz tick adatokat.
replay_2.jpg

És Itt jön a fő ok amiért fontosnak tartottam a cikk megírását:  Mint ahogy a fenti képen láthatjuk sajnos csak 1 napra visszamenőleg tudjuk letölteni az adatokat. Ha 1 , netalán 2 hónapra akarjuk futtatni a tesztet ez jelentős számú kattintásunkba fog kerülni , ugyanis minden letöltés után az ablak bezáródik.

De a kattintásainkat szerencsére automatizálhatjuk  egy egyszerű parancssoros C# program segítségével , ami a billentyűkombók lenyomásával letölti / végigklikkeli a hőn áhított letöltéseket.


        static void replay()
       {
            DateTime StartDate = new DateTime();
            DateTime EndDate = new DateTime();
            string instrumentum;
           try{
            Console.WriteLine("Ird be hogy mikortól töltsük le");
StartDate = Convert.ToDateTime(Console.ReadLine());
}
catch { Console.WriteLine("Hiba a tól dátumban"); return; }
try
{
                Console.WriteLine("Ird be hogy meddig töltsük le");
                   EndDate = Convert.ToDateTime(Console.ReadLine());
}
            catch { Console.WriteLine("Hiba az ig dátumban"); return; }
           if (StartDate == null || StartDate < Convert.ToDateTime("1800.01.01")) { Console.WriteLine("Nem írtál be tól dátumot");return; }
            if (EndDate == null || EndDate < Convert.ToDateTime("1800.01.01")) { Console.WriteLine("Nem írtál be tól dátumot"); return; }
         try
            {
                Console.WriteLine("instrumentum kezdőbetűje");
                instrumentum = Console.ReadLine();
            }
            catch { Console.WriteLine("HIBA"); return; }  
            int DayInterval = 1;
            List<DateTime> dateList = new List<DateTime>();
            while (StartDate <= EndDate)
            {
                if (StartDate.DayOfWeek != DayOfWeek.Saturday || StartDate.DayOfWeek != DayOfWeek.Sunday)
                {
                    //SetForegroundWindow(hWnd);
                    SendKeys.SendWait("%f");  //filemenu
                    SendKeys.SendWait("u");   //utilities
                    SendKeys.SendWait("d");   //download replay data
                    SendKeys.SendWait("{TAB}");      //default
                    SendKeys.SendWait(instrumentum); //istrumentum kezdőbetűje
SendKeys.SendWait("{TAB}");
SendKeys.SendWait(Convert.ToString(StartDate.Year));  //év
                    SendKeys.SendWait("{RIGHT}");
                    SendKeys.SendWait(Convert.ToString(StartDate.Month)); //hó
                    SendKeys.SendWait("{RIGHT}");
                    SendKeys.SendWait(Convert.ToString(StartDate.Day));    //nap
                    SendKeys.SendWait("{ENTER}");
                    Console.WriteLine("Ido : " + StartDate);
                    System.Threading.Thread.Sleep(100000);
                    SendKeys.SendWait("{ENTER}");
                    StartDate = StartDate.AddDays(DayInterval);
                }
            }
        }

Használja mindenki egészséggel. A link amit kirakok ide tartalmazza a kódot annyival kibővítve , hogy aktiválja mindig a Control Center ablakot , ugyanis ha a háttérben van , vagy kisablakban lenn a tálcán a billentyűkombók nem működnének.
Az exe file-t itt találjátok: http://www.4shared.com/file/0A7XW-l7/ninjareplay.html
A forráskódfile-t pedig itt: http://www.4shared.com/file/-mSSbRA_/replay_downloader.html

süti beállítások módosítása