Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Следи за новостями. Заходи на официальный канал нашей компании!
Denis Shipunov
77
Denis Shipunov 2012.07.18 05:48 

Добрый день!

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

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

o_O
Модератор
23316
o_O 2012.07.18 06:03  

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

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

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

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

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

PapaYozh
3768
PapaYozh 2012.07.18 06:25  
pippen81:

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



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

Denis Shipunov
77
Denis Shipunov 2012.07.18 06:33  
PapaYozh:


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


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

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

старт

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

{

if 1.... то buy/sell

if 2.... то buy/sell

if 3.... то buy/sell

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

if 100.... то buy/sell

}


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

PapaYozh
3768
PapaYozh 2012.07.18 06:40  
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 2012.07.18 06:47  

тоже нет. До вставления последнего 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 2012.07.18 07:05  
pippen81:

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



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

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

Denis Shipunov
77
Denis Shipunov 2012.07.18 07:12  
спасибо, буду думать
Комбинатор
15650
Комбинатор 2012.07.18 09:03  
Попробуйте if на switch переделать. Есть вероятность что прокатит.
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий