PDA

Zobacz pełną wersję : Alternatywna funkcja Sleep () w MT4, którą można przetestować?



Owxxixe
08-24-2015 16:14, 16:14
Czy istnieje alternatywa dla kodu uśpienia (Sleep) w MT4, który może być użyty do testowania w testerze egii?

Zgodnie z dokumentacją MT4 funkcja Sleep () nie zawiesza wykonania Expert Advisor w Strategy Tester.

Chciałbym zobaczyć, jak zmienia się wynik testu EA, jeśli zawieszę transakcję po dużej wartości TP przez X czasu.

Jakieś pomysły, jak to wdrożyć, aby można było je przetestować?

Owxxixe
11-28-2021 17:30, 17:30
Wszelkie obejścia będą mile widziane. Zasadniczo miałem coś takiego ... aż zdałem sobie sprawę, że nie robi nic w trybie testowym. Potrzebuję czegoś, co zasymuluje sen albo wstrzyma lub zawiesi funkcję i będzie działać również w trybie testowym. Mam funkcję, która zamyka wszystkie otwarte transakcje, jeśli ot pozycja przekracza rozszerzony zakres maksymalnych zysków. Chcę przetestować zawieszenie wszelkich przyszłych transakcji na X ilość czasu i potrzebuję go również w trybie testowym. Wstawiony kod void PipMaxCloseOut () {int totalorders = OrdersTotal (); for (int i = totalorders-1; igt; = 0; i--) {if (! OrderSelect (i, SELECT_BY_POS)) {Print (TimeToStr (TimeCurrent (), TIME_SECONDS), CHECK Funkcja gt;, __FUNCTION__, !! !!!, OrderMagicNumber (), Error code =, GetLastError ()); } else int result; if ((OrdersTotal () gt; 0) (OrderMagicNumber () == Trade1L)) {RefreshRates (); Drukuj (TimeToStr (TimeCurrent (), TIME_SECONDS), CLOSING Trade1L PipMax CLOSE OUT, Zamów PL:, OrderProfit (), Bid:, MarketInfo (Handel, MODE_BID), Otwórz transakcje:, OrdersTotal ()); result = OrderClose (OrderTicket (), OrderLots (), MarketInfo (Handel, MODE_BID), MaxSlippage * 2, CLR_NONE); if (result lt; = -1) {Print (BŁĄD, KTÓRY PRÓBUJE ZAMKNĄĆ Trade1L W TRAKCIE PipMax CLOSE OUT! ERROR CODE #, GetLastError ()); }} if ((OrdersTotal () gt; 0) (OrderMagicNumber () == Trade1S)) {RefreshRates (); Drukuj (TimeToStr (TimeCurrent (), TIME_SECONDS), CLOSING Trade1S PipMax CLOSE OUT, Zamów PL:, OrderProfit (), Zapytaj:, MarketInfo (Handel, MODE_ASK), Otwórz transakcje:, OrdersTotal ()); result = OrderClose (OrderTicket (), OrderLots (), MarketInfo (Handel, MODE_ASK), MaxSlippage * 2, CLR_NONE); if (result lt; = -1) {Print (BŁĄD PODCZAS TRWANIA ZAMKNIĘCIA Trade1S W TRAKCIE PipMax CLOSE OUT! ERROR CODE #, GetLastError ()); }}} Sleep (MilliSecs); }

sm
11-28-2021 18:51, 18:51
Przed wprowadzeniem nowego handlu, po prostu sprawdź ostatni czas zamknięcia handlu i jeśli upłynęło wystarczająco dużo czasu (twoje opóźnienie przed ponownym uruchomieniem transakcji).

Owxxixe
11-28-2021 20:11, 20:11
Tak to zrobiłem do tej pory, to jest testowanie. Niestety nie tak dobrze, jak się spodziewałem, filtruje więcej dobrych transakcji niż złych ... Przynajmniej testuje się na razie. Może zmodyfikować go później lub po prostu go usunąć. Dodano podwójne TimeMicroSecNow; podwójny TimeMicroSecAfterEQP; extern int MicroSecAfterEQP = 60000000; Zastąpiony tryb uśpienia: TimeMicroSecAfterEQP = GetMicrosecondCount (); I Przed nowymi transakcjami: TimeMicroSecNow = GetMicrosecondCount (); RefreshRates (); if (TimeMicroSecNow gt; TimeMicroSecAfterEQP MicroSecAfterEQP) {TRADE; }