Скачать MetaTrader 5

internal stack overflow

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Denis Shipunov
77
Denis Shipunov  

Добрый день!

При написании советника возникла вот такая ошибка.

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

o_o
Модератор
24086
o_o  

https://docs.mql4.com/ru/basis/preprosessor/compilation

stacksizeintразмер стека для рекурсивных вызовов
Denis Shipunov
77
Denis Shipunov  
sergeev:

https://docs.mql4.com/ru/basis/preprosessor/compilation

stacksizeintразмер стека для рекурсивных вызовов

а какой он по умолчанию? ВЫставлял любые значение - ошибка остается.

PapaYozh
3768
PapaYozh  
pippen81:

а какой он по умолчанию? ВЫставлял любые значение - ошибка остается.



Вы используете рекурсию?

Denis Shipunov
77
Denis Shipunov  
PapaYozh:


Вы используете рекурсию?


нет. Общая блок-схема советника выглядит так:

функция смены тика на минутном графике

старт

если функция смены тика на минутном графике=1

{

if 1.... то buy/sell

if 2.... то buy/sell

if 3.... то buy/sell

.............

if 100.... то buy/sell

}


Другими словами, каждую минуту рассматривается порядка ста If-ов, по рез-там которых открываются сделки buy/sell. Никакой модификации открытых ордеров пока нет. Цель советника - открыться в нужный момент

PapaYozh
3768
PapaYozh  
pippen81:

нет. Общая блок-схема советника выглядит так:

функция смены тика на минутном графике

старт

если функция смены тика на минутном графике=1

{

if 1.... то buy/sell

if 2.... то buy/sell

if 3.... то buy/sell

.............

if 100.... то buy/sell

}


Другими словами, каждую минуту рассматривается порядка ста If-ов, по рез-там которых открываются сделки buy/sell. Никакой модификации открытых ордеров пока нет. Цель советника - открыться в нужный момент




Возможно, в советнике используются массивы и где-то происходит обращение за пределы массива.
Denis Shipunov
77
Denis Shipunov  

тоже нет. До вставления последнего If-а все работает. Добавляю для примера самый простой If, что-то в роде:

if (((iOpen(NULL,PERIOD_H1,2)-iClose(NULL,PERIOD_H1,2))/Point)>5)

)
{
deal_buy (50,10,50);
Print("buy 3 candle..","");

}


и все. после этого не компилируется. То есть просто слишком большой синтаксис, насколько я понимаю. Поэтому и вопрос, есть ли какие-либо варианты вынести часть кода во внешние файлы и что-нибудь еще?

PapaYozh
3768
PapaYozh  
pippen81:

Поэтому и вопрос, есть ли какие-либо варианты вынести часть кода во внешние файлы и что-нибудь еще?



Можно написать библиотеку и заголовочный файл к ней.

Из советника директивой #include подключаете заголовочный файл, в котором осуществляется импорт функций библиотеки и должны находится их прототипы.

Denis Shipunov
77
Denis Shipunov  
спасибо, буду думать
Комбинатор
16290
Комбинатор  
Попробуйте if на switch переделать. Есть вероятность что прокатит.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий