Новая версия платформы MetaTrader 5 build 2265: Функции DirectX для 3D-визуализации в MQL5 и настройка инструментов в тестере стратегий - страница 20

 
Igor Makanu:

по моему разницы особой то и нет

Не знаю, как объяснить, что оба варианты плохие. Свой вариант Вам написал. Там без static нельзя.

 
Igor Makanu:

запустил профилировщик на таком коде, вызовов/время 1170 / 456 (94.21%)

потом профилировщик на таком коде, вызовов/время 1170 / 464 (89.92%)


по моему разницы особой то и нет

вот по вызовам функций раскидал


Что мешает все SymbolInfoDouble() получить в OnInit() в переменные, и использовать только переменные?

В таком же исполнении каждый раз идёт обращение за данными на сервер. А зачем? Можно же один раз их записать в переменные, и пользоваться этими данными - они же статичны.

 
Artyom Trishkin:

Что мешает все SymbolInfoDouble() получить в OnInit() в переменные, и использовать только переменные?

В таком же исполнении каждый раз идёт обращение за данными на сервер. А зачем? Можно же один раз их записать в переменные, и пользоваться этими данными - они же статичны.

да понятно это все, я разобраться хочу

fxsaber:

Не знаю, как объяснить, что оба варианты плохие. Свой вариант Вам написал. Там без static нельзя.

если не затруднит "воткните" в любой мой код оптимальное решение, Ваш код вижу, но не врублюсь как он будет работать

 
Igor Makanu:

если не затруднит "воткните" в любой мой код оптимальное решение, Ваш код вижу, но не врублюсь как он будет работать

Напишите, что вычисляет функция. Желательно с примером.

 
fxsaber:

Напишите, что вычисляет функция. Желательно с примером.

нормализация обьема ордера с проверкой на минимальный лот и на максимальный лот - с помощью fmax(ХХХ, SymbolInfoDouble(sym, SYMBOL_VOLUME_MAX) и fmin(ХХХ,SymbolInfoDouble(sym, SYMBOL_VOLUME_MIN)

округление с помощью   round(value /   SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP) * SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP)

и нормализация до кол-ва знаков после запятой с помощью NormalizeDouble(ХХХ, O_DigitsInVolumeStep) где O_DigitsInVolumeStep статик, можно на 2 заменить




тут в общем не пойму где компилятор перепроверяет инициализацию переменных, в моем коде не вижу переменных, только расчет относительно входных данных (const value )  и вызов функций из окружения терминала


пример:

void OnStart()
  {
   double lot = 0.0;
   while(lot<0.5)
   {
      Print("lot = ",lot," , NormLot = ",calcNormVol(lot));
      lot +=0.003;
   }
   
  }
//+------------------------------------------------------------------+
double calcNormVol(const double value)
{
   const string sym = _Symbol;
   const int O_DigitsInVolumeStep = 2;
   return(
   NormalizeDouble(
   fmax(
   fmin(
   SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP) * 
   round(value / 
   SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP)),
   SymbolInfoDouble(sym, SYMBOL_VOLUME_MAX)),  
   SymbolInfoDouble(sym, SYMBOL_VOLUME_MIN)), 
   O_DigitsInVolumeStep));

результаты работы скрипта:

2019.12.11 15:16:39.464 tst_volum (EURUSD,W1) lot = 0.0 , NormLot = 0.01

2019.12.11 15:16:39.464 tst_volum (EURUSD,W1) lot = 0.003 , NormLot = 0.01

2019.12.11 15:16:39.464 tst_volum (EURUSD,W1) lot = 0.006 , NormLot = 0.01

2019.12.11 15:16:39.464 tst_volum (EURUSD,W1) lot = 0.009000000000000001 , NormLot = 0.01

2019.12.11 15:16:39.464 tst_volum (EURUSD,W1) lot = 0.012 , NormLot = 0.01

2019.12.11 15:16:39.464 tst_volum (EURUSD,W1) lot = 0.015 , NormLot = 0.02

2019.12.11 15:16:39.464 tst_volum (EURUSD,W1) lot = 0.018 , NormLot = 0.02

2019.12.11 15:16:39.464 tst_volum (EURUSD,W1) lot = 0.021 , NormLot = 0.02

2019.12.11 15:16:39.464 tst_volum (EURUSD,W1) lot = 0.024 , NormLot = 0.02

2019.12.11 15:16:39.464 tst_volum (EURUSD,W1) lot = 0.027 , NormLot = 0.03

2019.12.11 15:16:39.464 tst_volum (EURUSD,W1) lot = 0.03 , NormLot = 0.03

2019.12.11 15:16:39.464 tst_volum (EURUSD,W1) lot = 0.03299999999999999 , NormLot = 0.03

2019.12.11 15:16:39.464 tst_volum (EURUSD,W1) lot = 0.036 , NormLot = 0.04

2019.12.11 15:16:39.464 tst_volum (EURUSD,W1) lot = 0.039 , NormLot = 0.04

2019.12.11 15:16:39.464 tst_volum (EURUSD,W1) lot = 0.042 , NormLot = 0.04

2019.12.11 15:16:39.464 tst_volum (EURUSD,W1) lot = 0.04500000000000001 , NormLot = 0.05

2019.12.11 15:16:39.464 tst_volum (EURUSD,W1) lot = 0.04800000000000001 , NormLot = 0.05

2019.12.11 15:16:39.464 tst_volum (EURUSD,W1) lot = 0.05100000000000001 , NormLot = 0.05

2019.12.11 15:16:39.464 tst_volum (EURUSD,W1) lot = 0.05400000000000001 , NormLot = 0.05

2019.12.11 15:16:39.464 tst_volum (EURUSD,W1) lot = 0.05700000000000002 , NormLot = 0.06

2019.12.11 15:16:39.464 tst_volum (EURUSD,W1) lot = 0.06000000000000002 , NormLot = 0.06

2019.12.11 15:16:39.464 tst_volum (EURUSD,W1) lot = 0.06300000000000001 , NormLot = 0.06

2019.12.11 15:16:39.464 tst_volum (EURUSD,W1) lot = 0.06600000000000002 , NormLot = 0.07000000000000001

2019.12.11 15:16:39.464 tst_volum (EURUSD,W1) lot = 0.06900000000000002 , NormLot = 0.07000000000000001

2019.12.11 15:16:39.464 tst_volum (EURUSD,W1) lot = 0.07200000000000002 , NormLot = 0.07000000000000001

2019.12.11 15:16:39.464 tst_volum (EURUSD,W1) lot = 0.07500000000000002 , NormLot = 0.08

2019.12.11 15:16:39.464 tst_volum (EURUSD,W1) lot = 0.07800000000000003 , NormLot = 0.08

2019.12.11 15:16:39.464 tst_volum (EURUSD,W1) lot = 0.08100000000000003 , NormLot = 0.08

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.08400000000000003 , NormLot = 0.08

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.08700000000000004 , NormLot = 0.09

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.09000000000000004 , NormLot = 0.09

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.09300000000000004 , NormLot = 0.09

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.09600000000000004 , NormLot = 0.1

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.09900000000000005 , NormLot = 0.1

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.102 , NormLot = 0.1

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1050000000000001 , NormLot = 0.11

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1080000000000001 , NormLot = 0.11

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1110000000000001 , NormLot = 0.11

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1140000000000001 , NormLot = 0.11

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1170000000000001 , NormLot = 0.12

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1200000000000001 , NormLot = 0.12

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1230000000000001 , NormLot = 0.12

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1260000000000001 , NormLot = 0.13

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1290000000000001 , NormLot = 0.13

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1320000000000001 , NormLot = 0.13

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1350000000000001 , NormLot = 0.14

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1380000000000001 , NormLot = 0.14

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1410000000000001 , NormLot = 0.14

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1440000000000001 , NormLot = 0.14

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1470000000000001 , NormLot = 0.15

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1500000000000001 , NormLot = 0.15

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1530000000000001 , NormLot = 0.15

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1560000000000001 , NormLot = 0.16

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1590000000000001 , NormLot = 0.16

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1620000000000001 , NormLot = 0.16

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1650000000000001 , NormLot = 0.17

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1680000000000001 , NormLot = 0.17

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1710000000000001 , NormLot = 0.17

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1740000000000001 , NormLot = 0.17

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1770000000000001 , NormLot = 0.18

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1800000000000001 , NormLot = 0.18

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1830000000000001 , NormLot = 0.18

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1860000000000001 , NormLot = 0.19

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1890000000000001 , NormLot = 0.19

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1920000000000001 , NormLot = 0.19

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1950000000000001 , NormLot = 0.2

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.1980000000000001 , NormLot = 0.2

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2010000000000001 , NormLot = 0.2

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2040000000000001 , NormLot = 0.2

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2070000000000001 , NormLot = 0.21

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2100000000000001 , NormLot = 0.21

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2130000000000001 , NormLot = 0.21

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2160000000000001 , NormLot = 0.22

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2190000000000001 , NormLot = 0.22

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2220000000000001 , NormLot = 0.22

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2250000000000001 , NormLot = 0.23

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2280000000000001 , NormLot = 0.23

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2310000000000001 , NormLot = 0.23

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2340000000000002 , NormLot = 0.23

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2370000000000002 , NormLot = 0.24

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2400000000000002 , NormLot = 0.24

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2430000000000002 , NormLot = 0.24

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2460000000000002 , NormLot = 0.25

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2490000000000002 , NormLot = 0.25

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2520000000000002 , NormLot = 0.25

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2550000000000002 , NormLot = 0.26

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2580000000000002 , NormLot = 0.26

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2610000000000002 , NormLot = 0.26

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2640000000000002 , NormLot = 0.26

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2670000000000002 , NormLot = 0.27

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2700000000000002 , NormLot = 0.27

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2730000000000002 , NormLot = 0.27

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2760000000000002 , NormLot = 0.28

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2790000000000002 , NormLot = 0.28

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2820000000000002 , NormLot = 0.28

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2850000000000002 , NormLot = 0.29

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2880000000000002 , NormLot = 0.29

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2910000000000002 , NormLot = 0.29

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2940000000000002 , NormLot = 0.29

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.2970000000000002 , NormLot = 0.3

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3000000000000002 , NormLot = 0.3

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3030000000000002 , NormLot = 0.3

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3060000000000002 , NormLot = 0.31

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3090000000000002 , NormLot = 0.31

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3120000000000002 , NormLot = 0.31

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3150000000000002 , NormLot = 0.32

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3180000000000002 , NormLot = 0.32

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3210000000000002 , NormLot = 0.32

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3240000000000002 , NormLot = 0.32

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3270000000000002 , NormLot = 0.33

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3300000000000002 , NormLot = 0.33

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3330000000000002 , NormLot = 0.33

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3360000000000002 , NormLot = 0.34

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3390000000000002 , NormLot = 0.34

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3420000000000002 , NormLot = 0.34

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3450000000000003 , NormLot = 0.35

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3480000000000003 , NormLot = 0.35

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3510000000000003 , NormLot = 0.35

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3540000000000003 , NormLot = 0.35

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3570000000000003 , NormLot = 0.36

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3600000000000003 , NormLot = 0.36

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3630000000000003 , NormLot = 0.36

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3660000000000003 , NormLot = 0.37

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3690000000000003 , NormLot = 0.37

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3720000000000003 , NormLot = 0.37

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3750000000000003 , NormLot = 0.38

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3780000000000003 , NormLot = 0.38

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3810000000000003 , NormLot = 0.38

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3840000000000003 , NormLot = 0.38

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3870000000000003 , NormLot = 0.39

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3900000000000003 , NormLot = 0.39

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3930000000000003 , NormLot = 0.39

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3960000000000003 , NormLot = 0.4

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.3990000000000003 , NormLot = 0.4

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4020000000000003 , NormLot = 0.4

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4050000000000003 , NormLot = 0.41

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4080000000000003 , NormLot = 0.41

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4110000000000003 , NormLot = 0.41

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4140000000000003 , NormLot = 0.41

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4170000000000003 , NormLot = 0.42

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4200000000000003 , NormLot = 0.42

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4230000000000003 , NormLot = 0.42

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4260000000000003 , NormLot = 0.43

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4290000000000003 , NormLot = 0.43

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4320000000000003 , NormLot = 0.43

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4350000000000003 , NormLot = 0.44

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4380000000000003 , NormLot = 0.44

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4410000000000003 , NormLot = 0.44

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4440000000000003 , NormLot = 0.44

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4470000000000003 , NormLot = 0.45

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4500000000000003 , NormLot = 0.45

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4530000000000003 , NormLot = 0.45

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4560000000000003 , NormLot = 0.46

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4590000000000004 , NormLot = 0.46

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4620000000000004 , NormLot = 0.46

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4650000000000004 , NormLot = 0.47

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4680000000000004 , NormLot = 0.47

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4710000000000004 , NormLot = 0.47

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4740000000000004 , NormLot = 0.47

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4770000000000004 , NormLot = 0.48

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4800000000000004 , NormLot = 0.48

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4830000000000004 , NormLot = 0.48

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4860000000000004 , NormLot = 0.49

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4890000000000004 , NormLot = 0.49

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4920000000000004 , NormLot = 0.49

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4950000000000004 , NormLot = 0.5

2019.12.11 15:16:39.465 tst_volum (EURUSD,W1) lot = 0.4980000000000004 , NormLot = 0.5


 
Igor Makanu:

нормализация обьема ордера с проверкой на минимальный лот и на максимальный лот - с помощью fmax(ХХХ, SymbolInfoDouble(sym, SYMBOL_VOLUME_MAX) и fmin(ХХХ,SymbolInfoDouble(sym, SYMBOL_VOLUME_MIN)

округление с помощью   round(value /   SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP) * SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP)

и нормализация до кол-ва знаков после запятой с помощью NormalizeDouble(ХХХ, O_DigitsInVolumeStep) где O_DigitsInVolumeStep статик, можно на 2 заменить

На глобальном уровне запомните значения SymbolInfoDouble один раз в переменные. И дальше используйте только эти переменные.

void OnStart()
  {
   double lot = 0.0;
   while(lot<0.5)
   {
      Print("lot = ",lot," , NormLot = ",calcNormVol(lot));
      lot +=0.003;
   }
   
  }
//+------------------------------------------------------------------+
const double VolumeStep = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP);
const double VolumeMax = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX);
const double VolumeMin = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);
const int O_DigitsInVolumeStep = 2;

double calcNormVol( const double value )
{
  return((value > VolumeMax) ? VolumeMax
                             : ((value < VolumeMin) ? VolumeMin
                                                    : NormalizeDouble(VolumeStep * (int)(value / VolumeStep + 0.5), O_DigitsInVolumeStep)));
}
 
fxsaber:

На глобальном уровне запомните значения SymbolInfoDouble один раз в переменные. И дальше используйте только эти переменные.

это решение я знаю

тут некая борьба между написать код правильно / быстрый / универсальный

Ваш способ будет работать, но он не обработает ситуацию смена счета - понятно, что это уже перебор,  все ситуации предусмотреть 


и в довесок - могу ошибаться, но по времени доступа обращение к глобально описанным переменным будет больше, чек к локальным, т.е. скорее все так будет быстрее:

double calcNormVol( const double value )
{
const double VolumeStep = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP);
const double VolumeMax = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX);
const double VolumeMin = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);
const int O_DigitsInVolumeStep = 2;

return((value > VolumeMax) ? VolumeMax
                             : ((value < VolumeMin) ? VolumeMin
                                                    : NormalizeDouble(VolumeStep * (int)(value / VolumeStep + 0.5), O_DigitsInVolumeStep)));
}

но опять же проблема с инициализацией, переключение на другой символ уже не даст этому коду корректно работать

....маразм конечно, переключать еще и символ, но в очередной раз вижу, что нужно писать отдельно код для оптимизатора, отдельно для работы на торговом счете - по другому никак

 
Igor Makanu:

в очередной раз вижу, что нужно писать отдельно код для оптимизатора, отдельно для работы на торговом счете - по другому никак

Именно так. Поэтому MT4Orders у Вас и не тормозит. Скорость нужна только в Тестере.

Igor Makanu:

и в довесок - могу ошибаться, но по времени доступа обращение к глобально описанным переменным будет больше, чек к локальным, т.е. скорее все так будет быстрее:

Это будет медленнее.
 
fxsaber:

Именно так. Поэтому MT4Orders у Вас и не тормозит. Скорость нужна только в Тестере.

Это будет медленнее.

Спасибо!

 
Alexey Viktorov:

Если я правильно понял, это регулярно и очень давно. попробуйте остановить отладку в функции OnInit() и пошагово перейти к первому тику. То-есть перейти из OnInit() в OnTick()

Такой переход происходит почти мгновенно.

Поставил точку останова на инициализации первой глобальной переменной (что вне функций). Сначала длится вышеобозначенная пауза, а потом идет переход на это место.

Такое ощущение, что робот распаковывается перед запуском. И именно на это уходит много времени. Но происходит такое только с Debug-EX5.