Выпущен MetaTrader 4 Client Terminal build 600 с обновленным языком MQL4 и Маркетом приложений - страница 44

 

Ситуация следующая. Написал в 509 билде скрипт-тестер по ценам Open. Условие на "открытие" позиций выдают 4 машки. Например, MA1<MA2 && MA2>MA3 && MA3>MA4. Но скрипт ещё и оптимизирует периоды машек для достижения лучших результатов "торговли". Перенес скрипт в 604 билд. Все переделки - чуток подрихтовать, чтоб ушла кучка варнингов, ни одной ошибки. При наблюдении глазенапно (на моник выводится куча инфы) скрипт работает одинаково в обоих билдах. Но в в 604 выдает в 3 раза меньше найденных прибыльных вариантов. Практически, 509 выдает около 40 вариантов, 604 12-16. Хотя, совпадения и есть, но всего несколько штук. Разумеется, все тестирования на одном и том же фрейме, историческом периоде, валютной паре и по ценам Open. Слил в цсв в 2 колонки цены Open из 509 и 604 билда. 10 тысяч значений. Из одной колонки отнял вторую, все 10 тыс. разниц дали 0, т.е. цены Open одинаковые от обоих билдов. Далее, слил в цсв Open'ы из 509 и дал их 604-му. Скрипт отработал нормально (опять же глазенапно), но не выдал ни единого прибыльного варианта. Да, надо, наверное, сказать, что значит "скрипт отработал нормально". На экран выводится много информации: периоды машек, текущие профиты/убытки, количество сделок, содержимое массива, в который записываются все варианты "торговли". Вся инфа на экране "живая", т.е. все цифирьки мельтешат результаты в массив пишутся, листинг массива удлиняется... И т.д. В общем, в обоих билдах и во всех случаях действо на экране выглядит одинаково. Но в результирующий цсв пишутся только положительные варианты торговли. И не было записано ни одного, когда 604 работал по ценам Open от 509. Но это же скрипт. И ему нужны только цены Open. А эти цены в обоих билдах одинаковые. И если цены одинаковые, то в чем тогда разница? Цены во всех случаях нормализованы. К 5-знаку. Если кто-то знает, прошу поделиться.

 
Alexey_74:

Ситуация следующая. Написал в 509 билде скрипт-тестер по ценам Open. Условие на "открытие" позиций выдают 4 машки. Например, MA1<MA2 && MA2>MA3 && MA3>MA4. Но скрипт ещё и оптимизирует периоды машек для достижения лучших результатов "торговли". Перенес скрипт в 604 билд. Все переделки - чуток подрихтовать, чтоб ушла кучка варнингов, ни одной ошибки. При наблюдении глазенапно (на моник выводится куча инфы) скрипт работает одинаково в обоих билдах. Но в в 604 выдает в 3 раза меньше найденных прибыльных вариантов. Практически, 509 выдает около 40 вариантов, 604 12-16. Хотя, совпадения и есть, но всего несколько штук. Разумеется, все тестирования на одном и том же фрейме, историческом периоде, валютной паре и по ценам Open. Слил в цсв в 2 колонки цены Open из 509 и 604 билда. 10 тысяч значений. Из одной колонки отнял вторую, все 10 тыс. разниц дали 0, т.е. цены Open одинаковые от обоих билдов. Далее, слил в цсв Open'ы из 509 и дал их 604-му. Скрипт отработал нормально (опять же глазенапно), но не выдал ни единого прибыльного варианта. Да, надо, наверное, сказать, что значит "скрипт отработал нормально". На экран выводится много информации: периоды машек, текущие профиты/убытки, количество сделок, содержимое массива, в который записываются все варианты "торговли". Вся инфа на экране "живая", т.е. все цифирьки мельтешат результаты в массив пишутся, листинг массива удлиняется... И т.д. В общем, в обоих билдах и во всех случаях действо на экране выглядит одинаково. Но в результирующий цсв пишутся только положительные варианты торговли. И не было записано ни одного, когда 604 работал по ценам Open от 509. Но это же скрипт. И ему нужны только цены Open. А эти цены в обоих билдах одинаковые. И если цены одинаковые, то в чем тогда разница? Цены во всех случаях нормализованы. К 5-знаку. Если кто-то знает, прошу поделиться.


Несмотря на то, что тест по ценам Open, во внимание принимаются также цены High и Low. Поэтому их нужно бы сравнить аналогичным образом.

Хотя это только одна из догадок, т. к. информация далеко неполная.

 
Scriptong:


Несмотря на то, что тест по ценам Open, во внимание принимаются также цены High и Low. Поэтому их нужно бы сравнить аналогичным образом.

Хотя это только одна из догадок, т. к. информация далеко неполная.


Ок, уточню. ТОЛЬКО по ценам Open. Далее уточню:

- Обзовем для краткости

(MA1<MA2 && MA2>MA3 && MA3>MA4) байусловием.

(MA1>MA2 && MA2<MA3 && MA3<MA4) селусловием.

- Ну и, собссно, сам тестер. ))

if(байусловие) { buyopen=Open[i]; profit+=selopen-Open[i]; }

if(селусловие) { selopen=Open[i]; profit+=Open[i]-buyopen; }

Как видим, ничего, кроме Open. Доп. фишка только в том, что этот тестер вертится в оптимизаторе, который подбирает периоды машек.

Правда, оптимизатором является ГА. Но ГА без ГСЧ, это просто алгоритм. А вот ГСЧ у меня свой, оформлен в виде длл, т.е. можно сказать, что платформонезависим.

 

Подскажите, из-за чего возникает ошибка

Access violation read to 0x06B6E000 in 'C:\Users\Артем\AppData\Roaming\MetaQuotes\Terminal\8FD06A683FF4626F1C00C9778897E9F1\MQL4\Scripts\ScriptName.ex4'

Скрипт должен открыть файл и переписать из него данные в массив. Затем закрыть файл. В прошлых версиях MQL4 никаких ошибок при работе с этим скриптом не возникало.

Причем данные из файла считываются. Лог появляется только при закрытии файла.

 

Прошу прощения за непроизвольный обман. Подустал уже гонять одно и тоже туда и обратно. Промахнулся с массивами, когда кормил 604 ценами от 509.

Скрипт в билдах работает по разному, как и написал выше. В 509 около 40 вариантов, в 604 билде около 14.

Поправка. Сунул в 604 билд Open'ы от 509. И скрипт в 604 билде выдал 31 вариант. Т.е., фактически, равнозначно результатам работы в 509-м.

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

результат 604 билда по ценам Open из 509

Т.е. вот, что получилось. А если скрипт берет цены Open не из цсв от 509, а считывает свои с чарта, то выдает, максимум, 16 вариантов.

НО! На картинке ниже цсв с ценами Open из 509 и 604 билдов. Последняя колонка = разницы цен. Ноль везде.

Так в чем же причина?

 
delfik71091:

Подскажите, из-за чего возникает ошибка

Access violation read to 0x06B6E000 in 'C:\Users\Артем\AppData\Roaming\MetaQuotes\Terminal\8FD06A683FF4626F1C00C9778897E9F1\MQL4\Scripts\ScriptName.ex4'

Скрипт должен открыть файл и переписать из него данные в массив. Затем закрыть файл. В прошлых версиях MQL4 никаких ошибок при работе с этим скриптом не возникало.

Причем данные из файла считываются. Лог появляется только при закрытии файла.


Теперь циферные обозначения ошибок были:

0x06B6E000

0x0D29FFFC

0x078EC000

0x0796D000

0x0796F000

ЧТО ЭТО????????????????????????????????????????????????????????????????????

Весь код уже по 10 раз проверил. В используемых функциях описание нигде не меняется...

Два часа уже бьюсь. Оторвать руки автору нововведений.

 
delfik71091:

Теперь циферные обозначения ошибок были:

0x06B6E000

0x0D29FFFC

0x078EC000

0x0796D000

0x0796F000

ЧТО ЭТО????????????????????????????????????????????????????????????????????

Весь код уже по 10 раз проверил. В используемых функциях описание нигде не меняется...

Два часа уже бьюсь. Оторвать руки автору нововведений.

Добрый день. Приложите, пожалуйста, код для воспроизведения проблемы. Какая у вас ОС? Битность? Спасибо
 
delfik71091:

Теперь циферные обозначения ошибок были:

0x06B6E000

0x0D29FFFC

0x078EC000

0x0796D000

0x0796F000

ЧТО ЭТО????????????????????????????????????????????????????????????????????

Весь код уже по 10 раз проверил. В используемых функциях описание нигде не меняется...

Два часа уже бьюсь. Оторвать руки автору нововведений.

В новом эдиторе есть отладчик. Сможете локализовать при выполнении какой функции возникает ошибка? Если нет то нужен исходник.
Кстати, пожалуйста убедитесь что используете 604 билд терминала.
 
delfik71091:

Теперь циферные обозначения ошибок были:


Сообщение я понимаю так: Не могу прочесть в адрес хххх. То есть нет доступа для записи прочитанного. Например, лезем в чужой стек, в сегмент кода и пр. Прежде всего - размер файла, размер массива, сколько это в памяти, есть ли запас, в частности, на строки с двухбайтными символами вместо однобайтных.
 

Не могу понять, почему екзешник библиотеки (lib_Zemckikh.ex4') терминал ищет в папке Experts:

Есть некий индикатор Stoch-multyPrice. Он обращается к заголовочному файлу:

#include <lib_Zemckikh.mqh>

Этот файл (расположен в песочнице в папке "include"), в свою очередь, имеет директивы:

#import "lib_Zemckikh.ex4"

Файл "lib_Zemckikh.ex4 расположен в той же песочнице в папке libraries.

А терминал 604 build ищет "lib_Zemckikh.ex4 почему-то в Experts.

Cannot open file 'C:\Users\Борис\AppData\Roaming\MetaQuotes\Terminal\09FF11FDFB78D85984B576AD209A07DF\MQL4\Experts\lib_Zemckikh.ex4' [2]

В 603 все было нормально.
Причина обращения: