Realizacja breakpointów w testerze

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

Podziel się ze znajomymi:

Prześlij nam swoje uwagi

[contact-form-7 404 "Not Found"]
  • Facebook