Ошибки, баги, вопросы - страница 3276

 
Igor Semyonov #:

Неправильная работа параметра request.price функции OnTradeTransaction().

Тестер стратегий: функция работает правильно, параметр не равен нулю.

Онлайн-торговля:

Instant Execution:  функция работает правильно, параметр не равен нулю.

Market Execution и Exchange Execution:  функция работает не правильно, параметр равен нулю.

Тоже самое касается параметра и trans.price

Прилагаю скриншот по параметрам пакета данных по исполнению Instant Execution:

Далее скриншот по исполнению Market Execution, такой же и по Exchange Execution:


 

Ошибка в Документации.

int _Period

В переменной _Period хранится значение таймфрейма текущего графика.

Правильный тип ENUM_TIMEFRAMES.


Документация по MQL5: Предопределенные переменные / _Period
Документация по MQL5: Предопределенные переменные / _Period
  • www.mql5.com
_Period - Предопределенные переменные - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Неправильная работа тестера (билд 3559).

Период тестирования 01.01.2022-15.01.2023. С 17.02.2022 тестер перестал выполнять сделки, но довел прогресс тестирования до 100%, как ни в чем не бывало, и подвел итоги к дате 17.02.2022.

CS 0 09:15:25.586 Tester EURUSD,H1 (MetaQuotes-Demo): testing of Experts\Magic Triangles.ex5 from 2022.01.01 00:00 to 2023.01.15 00:00

.........

CS 0 09:15:57.779 Core 1 2022.02.17 03:55:30   request sell 166.6 EURJPY at 131.426, close #77925 (131.426 / 131.431 / 131.426)

CS 0 09:15:57.779 Core 1 2022.02.17 03:55:30   deal #77928 sell 166.6 EURJPY at 131.426 done (based on order #77928)

CS 0 09:15:57.779 Core 1 2022.02.17 03:55:30   deal performed [#77928 sell 166.6 EURJPY at 131.426]

CS 0 09:15:57.779 Core 1 2022.02.17 03:55:30   order performed sell 166.6 at 131.426 [#77928 sell 166.6 EURJPY at 131.426]

CS 0 09:15:57.779 Core 1 2022.02.17 03:55:30   instant buy 166.6 EURUSD at 1.13810, close #77924 (1.13809 / 1.13810 / 1.13809)

CS 0 09:15:57.779 Core 1 2022.02.17 03:55:30   deal #77929 buy 166.6 EURUSD at 1.13810 done (based on order #77929)

CS 0 09:15:57.779 Core 1 2022.02.17 03:55:30   deal performed [#77929 buy 166.6 EURUSD at 1.13810]

CS 0 09:15:57.779 Core 1 2022.02.17 03:55:30   order performed buy 166.6 at 1.13810 [#77929 buy 166.6 EURUSD at 1.13810]

CS 0 09:15:57.779 Core 1 2022.02.17 03:55:33   

CS 0 09:16:11.205 Core 1 final balance 1111522.78 pips

CS 0 09:16:11.205 Core 1 EURUSD,H1: 30259526 ticks, 6461 bars generated. Environment synchronized in 0:00:00.021. Test passed in 0:00:45.618 (including ticks preprocessing 0:00:09.173).

CS 0 09:16:11.205 Core 1 EURUSD,H1: total time from login to stop testing 0:00:45.639 (including 0:00:00.815 for history data synchronization)

CS 0 09:16:11.205 Core 1 109089791 total ticks for all symbols

CS 0 09:16:11.205 Core 1 EURJPY: generate 39930622 ticks in 0:00:03.385, passed to tester 39930622 ticks

CS 0 09:16:11.205 Core 1 EURUSD: generate 30259526 ticks in 0:00:02.559, passed to tester 30259526 ticks

CS 0 09:16:11.205 Core 1 USDJPY: generate 38899643 ticks in 0:00:03.229, passed to tester 38899643 ticks

CS 0 09:16:11.205 Core 1 2538 Mb memory used including 46 Mb of history data, 2112 Mb of tick data

CS 0 09:16:11.205 Core 1 log file "C:\Users\user\AppData\Roaming\MetaQuotes\Tester\B9D320CDD52F9172D3D24FA5E42290D5\Agent-127.0.0.1-3000\logs\20230117.log" written

CS 0 09:16:14.149 Core 1 connection closed

 

или я где то ошибся (поправьте меня пожалуйста), или, похоже, функция ArrayCompare () не работает.

код для проверки:

input int EthSize = 10000;
input int ArrayS  = 5;

void OnStart()
{
  MathSrand ((int)GetMicrosecondCount ()); // reset of the generator
  struct S_S
  {
    double ethalon [];
  };
  
  S_S s [];
  ArrayResize (s, EthSize);
  
  for (int e = 0; e < EthSize; e++) 
  { 
    ArrayResize (s [e].ethalon, ArrayS);
    for (int i = 0; i < ArrayS; i++) s [e].ethalon [i] = RNDfromCI (-10.0, 10.0);
  }
  
  double array [];
  ArrayResize (array, ArrayS);
  
  for (int i = 0; i < ArrayS; i++) array [i] = RNDfromCI (-10.0, 10.0);
  
  Print ("----");
  ulong st = GetMicrosecondCount ();
  
  string str = "";
  
  for (int t = 0; t < EthSize; t++)
  {
    if (ArrayCompare (s [t].ethalon, array, 0, 0, WHOLE_ARRAY) != 0)
    {
      for (int i = 0; i < ArrayS; i++) str+= s [t].ethalon [i] + "|";
      Print (str);
      str = "";
      for (int i = 0; i < ArrayS; i++) str+= array [i] + "|";
      Print (str);
      
      Print (t);
      break;
    }
  }
  
  Print (GetMicrosecondCount () - st);
}

double RNDfromCI (double min, double max)
{
  if (min == max) return (min);
  double Min, Max;
  if (min > max)
  {
    Min = max;
    Max = min;
  }
  else
  {
    Min = min;
    Max = max;
  }
  return (double(Min + ((Max - Min) * (double)MathRand () / 32767.0)));
}


результат:

2023.01.17 11:08:43.413    TestClone (EURUSD,M1)    ----
2023.01.17 11:08:43.413    TestClone (EURUSD,M1)    -9.316995757927183|6.173589281899471|-8.003479110080264|-7.089144566179388|-0.7791375469222075|
2023.01.17 11:08:43.413    TestClone (EURUSD,M1)    2.927030243842891|-1.4725180822168653|-6.542252876369519|-4.393749809259316|1.927854243598743|
2023.01.17 11:08:43.413    TestClone (EURUSD,M1)    0
2023.01.17 11:08:43.413    TestClone (EURUSD,M1)    25

как видно из результата, массивы не равны, но функция вернула 0.

Bild 3555

 
Andrey Dik #:

или я где то ошибся (поправьте меня пожалуйста)

ЗЫ ArrayPrint - удобная вещь.

ArrayPrint(s[t].ethalon);
ArrayPrint(array);
      
Print (t);
 
fxsaber #:
if (ArrayCompare (s [t].ethalon, array, 0, 0, WHOLE_ARRAY) != 0)

да, точно, нужно "==".

теперь к ArrayCompare () претензий нет.

 

Предлагаю реализовать в Маркете для продавцов устанавливать нулевую цену месячной подписки на продукты без права оставлять отзывы (для предотвращения накруток).

Это позволит продавцам организовать акции, позволяя покупателям полноценно испробовать продукт в реале. Особенно касается продуктов, которые нельзя протестировать в тестере (всевозможные панели, утилиты и библиотеки).

 

Друзья подскажите как удалить нечитаемые символы ?  time stop 2032:02:16

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

 
Vladimir Pastushak #:

Друзья подскажите как удалить нечитаемые символы ?  time stop 2032:02:16

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

может быть пропарсить строку, извлечь допустимые символы и сформировать новую уже читаемую строку
 
Andrey Dik #:
может быть пропарсить строку, извлечь допустимые символы и сформировать новую уже читаемую строку

Вы уверены, что при извлечении, кака не прицепиться к последнему сиволу?