Realizacja breakpointów w testerze
Kategoria: Repozytorium kodu MQL4 |
25 marca 2009 o 22:17 |
Odpowiedzi: Brak |
Permalink
Dołączony do standardowej instalacji MetaTradera plik WinUser32.mqh (w experts\include) zawiera same interesujące funkcje. Na potrzeby tego wpisu zajmiemy się jedną z nich, a mianowicie keybd_event. keybd_event, jak sama nazwa wskazuje, symuluje zdarzenia klawiatury, a więc możemy w praktyce “udawać” naciśnięcia przycisków na klawiaturze.
W ten sposób można zastosować fajny trik, dzięki któremu jesteśmy w stanie zatrzymać tester w trybie visual mode poprzez zasymulowanie naciśnięcia klawisza pauzy.
Kod funkcji breakpoint() wygląda tak:
#include <WinUser32.mqh>
void breakpoint() {
if(IsVisualMode()) {
keybd_event(19,0,0,0);
Sleep(10);
keybd_event(19,0,2,0);
}
}
W miejscu w którym chcemy zatrzymać pracę testera po prostu umieszczamy wywołanie funkcji breakpoint.
Na koniec jeszcze kilka uwag:
- Na początku sprawdzamy czy tester chodzi w visual mode, bo tylko wtedy to zadziała
- Funkcja keybd_event jest wywoływana dwa razy, ponieważ za pierwszym razem wciskamy klawisz, za drugi go “rozluźniamy”
- Sleep jest konieczne, żeby ten klawisz był chwilę “wciśnięty”
- Tak działający breakpoint nie jest doskonały - jeśli tester uruchomiony jest w najszybszym trybie, a EA nie jest zbyt skomplikowane to możliwe, że tester zatrzyma się nawet kilkanaście świeczek po punkcie w którym chcieliśmy mieć breakpointa - a więc nie pozostaje nic innego jak zmniejszyć prędkość - wtedy breakpoint działa w miarę skutecznie
0 odpowiedzi do wpisu "Realizacja breakpointów w testerze"