[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 656
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Из-за чего может происходить переполнение стека? При открытии позиции с большим размером тейка (тейк высчитывается от волатильности и умножается на 100, размер получился 41*100), в журнал записывается stack overflow и... будь здоров. Больше не открывается ни одна позиция, пока эта не закроется, а эта есс-но не закрывается из-за огромного тейка... И советник вообще уже не работает корректно, т.к. он должен закрывать все позиции при достижении заранее заданного общего профита открытых позиций... Но этого не происходит, хотя эта одна позиция уже давно в огромном профите, пунктов, этак порядка двух тысяч... Как бороться с этим? Ведь нельзя быть застрахованным от такой ситуации, когда открытые позы дружно переполнят стек и всё покатится кувырком...
стек не может переполняться просто числом которое вышло за пределы диапазона типа - будет другая ошибка
стек могут переполнить данные которые передаются в функцию или рекурсивный вызов функций без выхода из нее
start() то же функция - возможно там у тебя много переменных
стек это область памяти где сохраняются промежуточные значения (локальные переменные) функции, возможно ты сам разрушаешь стек если пользуешься динамическими массивами и не правильно проконтролировал диапазон массива, т.е записал данные не в массив а просто область памяти, которая идет сразу за массивом
попробуй часть массивов вынести в глобальные переменные - т.е. вынеси в самый верх советника
ЗЫ: по крайней мере так во всех языках программирования - думаю и в mql тоже самое
стек не может переполняться просто числом которое вышло за пределы диапазона типа - будет другая ошибка
стек могут переполнить данные которые передаются в функцию или рекурсивный вызов функций без выхода из нее
start() то же функция - возможно там у тебя много переменных
стек это область памяти где сохраняются промежуточные значения (локальные переменные) функции, возможно ты сам разрушаешь стек если пользуешься динамическими массивами и не правильно проконтролировал диапазон массива, т.е записал данные не в массив а просто область памяти, которая идет сразу за массивом
попробуй часть массивов вынести в глобальные переменные - т.е. вынеси в самый верх советника
ЗЫ: по крайней мере так во всех языках программирования - думаю и в mql тоже самое
Игорь, ты ж в курсе, что я пока избегаю пользовать массивы... У меня в коде всего парочка массивов - массив ордеров до тика и массив ордеров после тика. Они у меня в глобальной области переменных заданы. Забавно, что код открытия этих позиций я перенёс в другое место советника и ошибка исчезла. Похоже был рекурсивный вызов функций открытия ордеров, хотя я не стал над этим сильно ломать голову. Просто решил, что в коде проверки на достижение общей прибыли и закрытия всех позиций не уместно будет размещать открытие сразу после закрытия... Нагородил, блин... :)
я уже давно слепил себе шаблон для создания советника - у меня при выставлении ордера сразу выставляется признак (флаг) существования такого типа ордера и потом перед открытием нового ордера такого типа я всегда проверяю флаг - есть ли такой ордер, но я пишу советники с только с одним ордером
я уже давно слепил себе шаблон для создания советника - у меня при выставлении ордера сразу выставляется признак (флаг) существования такого типа ордера и потом перед открытием нового ордера такого типа я всегда проверяю флаг - есть ли такой ордер, но я пишу советники с только с одним ордером
Да, действительно "0", а как быть, подскажите - не получается и так и эдак (и равные периоды задавал) пробовал в обоих вариантах (новом и старом) Print("NormalizeDouble(c1b_1..., ноли выдаёт (показывает значение только c1b[i], все остальные включая c1s[i] - нули), помогите довести один из вариантов до рабочего состояния или хоть подсказкой поделитесь, кто увидит недочёт?
Новый:
Старый:
Целиком:
Юрий, на будущие, если код повторяется хотя бы дважды, его нужно выделять в метод, и не потребуется кучи массивов, загромождающих код.
Вот вам такой метод:
Я думаю с параметрами все ясно, вносите данные и варьируя параметром ma_shift получаете нужный вам сдвиг. Замечу, что этот метод можно использовать как шаблон, просто меняйте методы доступа к индикаторам i…(…) или iCustom(…). Теперь ваш блок принятия торговых решений выглядит как надо:
Соответственно нет теперь нужды в «старых» и «новых» вариантах, сделки открываются согласно заданным критериям (насколько я понял у вас трех баровый паттерн вершин/впадин сглаженного iCC). В файле исправленный вариант.
Здраствуйте.
Подскажите пожалуйста код, чтоб записать в массив цены со времени открытия ордера.
Как сделать так, чтоб каждая новая цена добавлялась в массив.
Здраствуйте.
Подскажите пожалуйста код, чтоб записать в массив цены со времени открытия ордера.
Как сделать так, чтоб каждая новая цена добавлялась в массив.
поконкретнее сформулируйте вопрос
если вам интересна текущая цена во время выставления ордера можно в коде который у Вас отвечает за выставление ордера добавить вызов функции, которая будет отвечать за запись текущей цены в глобальный массив с изменением счетчика индекса массива, который Вы потом можете посмотреть из любой точки кода
как проверить производительность советника - хотелось бы просто вывести время выполнения кода в миллисекундах
насколько производительнее МТ5 против МТ4
как проверить производительность советника - хотелось бы просто вывести время выполнения кода в миллисекундах
насколько производительнее МТ5 против МТ4
GetTickCount поможет https://docs.mql4.com/ru/common/GetTickCount
GetTickCount поможет https://docs.mql4.com/ru/common/GetTickCount
спс да оно - то что искал, ктонить замерял скорость однотипного кода для МТ4 и МТ5 ?