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
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
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
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
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
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