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
Autor: Łukasz Tomaszkiewicz