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

 
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 Здесь будут собраны и обработаны наиболее частые вопр...
 

Здравствуйте. Написал мультивалютный, мультисимфольный индикатор для MT5. Всё работает как надо. Попробовал портировать на МТ4. Данный индикатор у меня есть и для этого терминала, только мультисимвольная, мультитаймфреймная часть отсутствует. Вот её я и решил портировать на MQL4. Вроде получилось, но только по началу. Вот такой дополнительный функционал получается в основном индикаторе на MT4:

UI

По клику мыши на соответствующей пиктограмме индикатор меняет символ и таймфрейм чарта на соответствующий, с помощью функции ChartSetSymbolPeriod(). Щелкаю по серой пиктограмме, в виде песочных часов (это значит, что бары не прогружены, нет синхронизации но данному символу и таймфрейму) и индикатор вылетает с "Access violation read to 0xАдрес". Данного бага в MQL5 программе, с которой сделан порт, я не наблюдал. Почему же он возникает в портированной версии?

И главное, видимых причин для AV в журнале нет. Было бы, например, array out of range или invalid pointer какой-нибудь... Но нет. Только Access violation. При нормальном запуске (запуск терминала или бросание индикатора на график) индикатор отлично стартует. Но когда щелкаю по пиктограмме, то AV и всё. Может быть ChartSetSymbolPeriod() инициирует создание индикатора в MT4 не так как обычно? Потому как простая смена таймфрейма, а также смена символа чарта не вызывает ничего подобного и индикатор продолжает работать. Но стоит прибегнуть к ChartSetSymbolPeriod() и инициировать смену символа и таймфрейма с её помощью, как тут же AV.