Przyspieszanie testera

Kategoria: Repozytorium kodu MQL4 | 19 sierpnia 2009 o 00:09 | Odpowiedzi: 5 | Permalink

Często zachodzi potrzeba testowania EA na testerze w trybie wizualnym np. gdy testujemy wskaźniki harmoniczne lub też potrzebujemy zobaczyć na bieżąco czy EA składa zlecenia prawidłowo, ale nie zależy nam zbytnio na historii wizualnej zleceń.

Istnieje bardzo łatwa metoda przyspieszenia działania testera - usunięcie zbędnych (tzn. tych dotyczących historii transakcji) obiektów z wykresu. Poniżej prezentuję przykładowy kod do tego służący:

void cleanChart() {

    if(!IsTesting() || !IsVisualMode()) return;

    if(ObjectsTotal()>50) {
     for(int i=0;i<ObjectsTotal();i++) {
      string name=ObjectName(i);

      if(StringSubstr(name,0,1)=="#") {
       ObjectDelete(name);
      }
     }
    }
}

Przyrost wydajności można zauważyć zwłaszcza przy testowaniu dłuższych okresów oraz szczególnie w strategiach, które w jakiś sposób odwołują się do obiektów na wykresie lub też wykonują sporą liczbę transakcji.

5 odpowiedzi do wpisu "Przyspieszanie testera"

  • Wojtek

    21 sierpnia 2009 o 00:54

    Witam, mam pytanko: a czy wiesz może, jak zrobić, żeby przy testowaniu z podglądem na wykresie było na wstępie od razu więcej słupków niż 1000? Problem jest o tyle istotny, że gdy chcemy wypróbować EA, które się "uczy" na historii to w przypadku testera EA nie ma praktycznie z czego sie uczyć... jedyny sposób to korzystanie z około 1000 słupków a potem douczanie EA wraz ze wzrostem ilości słupków na wykresie... Niestety takie rozwiązanie często jest mało praktyczne :/ Pozdrawiam

  • luktom

    21 sierpnia 2009 o 12:22 | Odwiedź stronę WWW autora

    Może po prostu odpal tester N dni wcześniej, a w EA daj jakiś warunek, że dopiero po przeleceniu 1000 słupków zaczyna handel?

  • Wojtek

    21 sierpnia 2009 o 13:18

    hmm niestety jest mały problem... praktycznie wszystkie główne obliczenia są wykonywane w funkcji init() dlatego potrzebuję mieć na starcie jak najwięcej świeczek :/ natomiast niezabardzo mogę robić obliczeń w funkcji start bo "nauka" potrafi trwać dzień i dłużej :PP i jest to tylko jednorazowy etap - w funkcji start planuję zato wstawić "douczanie" mojego głupiutkiego jeszcze EA :). Pozdrawiam

  • luktom

    21 sierpnia 2009 o 13:22 | Odwiedź stronę WWW autora

    Przenieś init do innej funkcji, no i wywołaj ją jednokrotnie po tym, jak EA przeleci przez 1000 słupków i sprawa załatwiona - uczenie odbędzie się raz, przy czym będziesz miał już gotowe dane do tego uczenia.

  • Wojtek

    21 sierpnia 2009 o 14:07

    hmm w sumie o stworzeniu nowej funkcji, która miałaby to wszystko wykonywać nie pomyślałem O_o :/. dzięki za pomoc - niedługo to sprawdze :) i najwyżej się odezwe :P Pozdrawiam :D