Общайтесь с разработчиками через Сервисдеск! - страница 121

 

Здравствуйте. Мой индикатор не проходит валидацию в Маркете по какой-то странной причине. Началось с того, что валидация ругалась на array out of range, в модуле PeakZigZag.mqh, там где раньше у меня при отладках и при работе с данным модулем всегда было всё в порядке. После вылетания валидации с array out of range я прописал проверку длины массива следующим образом:

array out of range

То есть, видно что, если

if(peaks.count != ArraySize(peaks.data)) {
  errMsg
  return raNone;
}

то сразу функция завершается и доступ к массиву peaks.data исключён. Почему же при следующей валидации мне всё равно выдало array out of range?

test on EURUSD,H1 (netting)

test on XAUUSD,D1 (netting)

2017.05.01 04:23:40 array out of range in 'PeakZigZag.mqh' (328,18)

Я исключил доступ к массиву peaks.data но управление всё равно передаётся к нему и проверка ругается.
 
Mihail Matkovskij:

Здравствуйте. Мой индикатор не проходит валидацию в Маркете по какой-то странной причине. Началось с того, что валидация ругалась на array out of range, в модуле PeakZigZag.mqh, там где раньше у меня при отладках и при работе с данным модулем всегда было всё в порядке. После вылетания валидации с array out of range я прописал проверку длины массива следующим образом:

То есть, видно что, если

то сразу функция завершается и доступ к массиву peaks.data исключён. Почему же при следующей валидации мне всё равно выдало array out of range?

Я исключил доступ к массиву но управление всё равно передаётся к нему и проверка ругается.


а может там 0-1 = -1? отрицательный элемент массива?

 
Vladislav Andruschenko:


а может там 0-1 = -1? отрицательный элемент массива?

И такое может быть. Сейчас проверю.

 
Vladislav Andruschenko:


а может там 0-1 = -1? отрицательный элемент массива?

Сделал следующим образом:

if(peaks.count <= 0 || peaks.count != ArraySize(peaks.data)) {
  errMsg
  return raNone;
}

Работает.

Просто раньше у меня данный модуль использовался на одном символе и одном таймфрейме. А сейчас он работает в мультивалютном, мультисимвольном индикаторе. Думаю, данный баг возникал из-за того, что история иногда синхронизируется не на всех символах и таймфреймах...

 
Mihail Matkovskij:

Сделал следующим образом:

Работает.

Просто раньше у меня данный модуль использовался на одном символе и одном таймфрейме. А сейчас он работает в мультивалютном, мультисимвольном индикаторе. Думаю, данный баг возникал из-за того, что история иногда синхронизируется не на всех символах и таймфреймах...

 Я тоже бьюсь над проблемой мультивалютного эксперта и историей. 
При чем раньше вроде все работало. Но спустя 10 обновлений , перестало. И вот теперь пытаюсь сравнить коды и найти, где я допустил ошибку. Потому что история вроде у всех загружается нормально и мультивалбтники работают нормально. 

Иногда ошибка глупая и по не внимательности. 
 
Vladislav Andruschenko:
 Я тоже бьюсь над проблемой мультивалютного эксперта и историей. 
При чем раньше вроде все работало. Но спустя 10 обновлений , перестало. И вот теперь пытаюсь сравнить коды и найти, где я допустил ошибку. Потому что история вроде у всех загружается нормально и мультивалбтники работают нормально. 

Иногда ошибка глупая и по не внимательности. 

Попробуйте:

if(Bars(symbol, timeframe) == 0) { // история не синхронизирована
  // 1. исправление данных (если нужно)
  // 2. выход
}
 
Mihail Matkovskij:

Попробуйте:


Не помогает. История есть. 
Это где то моя скорее ошибка. Но ее надо найти в 25000 строках..
 
Vladislav Andruschenko:

Не помогает. История есть. 
Это где то моя скорее ошибка. Но ее надо найти в 25000 строках..

В рабочих программах (а не учебных примерах)  это не предел :) 

 

подписался до сигнала, но MQL5.com не корректно копирует сделки, что делать? (вместо 0,02 копирует 0,01)

Файлы:
kopy1.jpg  121 kb
kopy2.jpg  75 kb
 
Aleksey Shostkin:

подписался до сигнала, но MQL5.com не корректно копирует сделки, что делать? (вместо 0,02 копирует 0,01)

1. прочитать справочную тему FAQ по сервису Сигналы

пункт 15: 

Как происходит округление процентного соотношения объемов сделок Поставщика и Подписчика?
Алгоритм округления процентов ступенчатый:

Если значение меньше 0.01%, то оно округляется до 0.001%, т.е. считается равным 0.001%. Примеры: 0.007% => 0.001%, 0.000099 => 0.001%.
  1. Если значение больше 0.01% и меньше 0.1%, то оно округляется до сотых долей. Примеры: 0.063% =>0.06%, 0.045 => 0.05%.
  2. Если значение больше 0.1% и меньше 1%, то оно округляется до десятых долей. Примеры: 0.11 => 0.1%, 0.25% => 0.3%.
  3. Если значение больше 1% и меньше 10%, то оно округляется в меньшую сторону до целого значения. Примеры: 6.25% => 6%, 7.79% =>7%.
  4. Если значение больше 10% и меньше 100%, то оно округляется в меньшую сторону до целого значения с шагом 5%. Пример: 29.7% => 25%.
  5. Если значение больше 100%, то оно округляется в меньшую сторону до целого значения с шагом 10%. Пример: 129.6% => 120%.


Пример расчета вы можете посмотреть в статье Принцип работы и преимущества торговых сигналов MetaTrader 4 и MetaTrader 5.


2. обязательно читать все сообщения сервиса Сигналы во вкладке терминала "Журнал".
FAQ по сервису Сигналы
FAQ по сервису Сигналы
  • 2015.12.03
  • www.mql5.com
Узнать за 15 минут: смотри обучающие видео по торговым сигналам в MetaTrader 4 и MetaTrader 5 Здесь будут собраны и обработаны наиболее частые вопр...
Причина обращения: