PDA

Виж пълната версия : MQL4 - акуратност и бързина



winwin
18.07.2020, 12:22
Здравейте,

Чудех се при писането на експерт , дали множеството проверки на забавят работа на експерта.

Примерно:
- да проверява за достатъчно free margin преди да се опита да пусне сделка;
- да проверява за промяна в цената и слипидж на предходната сделка преди да пусне нова (при експерта с множество еднотипни сделки - примерно такъв, който пуска 10 х 0.4 лота вместо 4.0 лота наведнъж);
- проверка на стойностите връщани от функциите OrderSend() и други.

Mateev
19.07.2020, 08:38
Трудно ще забавиш една програма с разни проверки. Би се забавила само ако започнеш да въртиш някакви огромни цикли милиони или милиарди пъти.

За по-точен ориентир колко време отнема изпълнението на някакъв програмен код можеш да премериш времето посредством GetTickCount() или GetMicrosecondCount(), поставени в началото или в края на дадения участък от кода.

Аз например съм си написал код за специални таймери за измерване на времето, които ги използвам в дебъг режим точно за същата цел. Ограждам от двете страни изследвания код с Timer[i].Start и Timer[i].Stop, и измервам микросекундите между двете събития. След това натрупвам статистика за хилядите преминавания на програмата през този участък от кода, и на екрана визуализирам стойностите Count, Min, Average и Max.

winwin
19.07.2020, 18:36
Благодаря за съветите, ще ги вкарам в кода и ще тествам.

Mateev
20.07.2020, 07:45
Само искам да те предупредя, че този метод за измерване може да те подлъже, защото той всъщност измерва не времето на работа на твоята програма, а времето на работа на целия компютър. Затова е добре по време на тестове да не пускаш други програми. Също така не трябва да се шашкаш, ако Average е например 2 микросекунди , a Max например 10 000. Това се получава така именно защото операционната система е прекъсвала твоята програма да прави нещо друго, и то се е забавило.

Именно поради тази причина когато измерваш, вярвай на стойностите Min или Average и игнорирай какво показва Max.

Ето два мои класа - таймер и масив от таймери: