[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 228

 
artmedia70:

Всё зависит от того, будет ли данная переменная доступна всем функциям советника (ну... не всем, но некоторым - точно). Тогда - глобальная.

Ежели используется только в одной функции - тогда локальная.

Вопрос из разряда "в какую воду цветы поставить, в простую или подслащенную" ... пока гадали, цветы веником стали, в баню... :))

:о)

Эти правила я, как бы, понял, но у меня на практике не работали ордера и пока искал проблему, перепробовав кучу вариантов и переместив переменные в глобальные, как статик, все заработало, хотя ф-ция одна. Правда я до сих пор не уверен, что из за этого. Короче я запутался и поэтому решил посоветоваться здесь. Вы не сазали про статик переменные. Может нужно их такими делать? Я не пойму, при повторном входе в старт (на тике, например) переменные обнуляются? А статик нет? Если да, то Мои тикеты становятся нулем?

PS Блин, занялся программированием вплотную, пишу грааль....., если травы хватит...., походу, я тут теперь завсегдатай :))

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

Боюсь при работе на H1 трудно будет вычислить волатильность для единичной свечки, нужно подумать как ее вычислить.
 
Fam:

:о)

Эту теорию я, как бы, понял, но у меня на практике не работали ордера и пока искал проблему, перепробовав кучу вариантов и переместив переменные в глобальные, как статик, все заработало, хотя ф-ция одна. Правда я до сих пор не уверен, что из за этого. Короче я запутался и поэтому решил посоветоваться здесь. Вы не сазали про статик переменные. Может нужно их такими делать? Я не пойму, при повторном входе в старт (на тике, например) переменные обнуляются? А статик нет? Если да, то Мои тикеты становятся нулем?

PS Блин, занялся программированием вплотную, пишу грааль....., если травы хватит...., походу, я тут теперь завсегдатай :))


Локальная переменная - переменная, объявленная внутри какой-либо функции. Областью видимости локальных переменных является тело функции, в которой эта переменная объявлена. Локальная переменная может быть проинициализирована константой или выражением, соответствующими ее типу.

Глобальная переменная - переменная, объявленная за пределами всех функций. Областью видимости глобальных переменных является вся программа. Глобальная переменная не локализована ни на каком уровне. Глобальная переменная может быть проинициализирована только соответствующей ее типу константой (но не выражением). Инициализация глобальных переменных производится однократно перед началом исполнения специальных функций.

Если управление в программе находится внутри какой-либо функции, то значения локальных переменных, объявленных в другой функции не доступны. Значение любой глобальной переменной доступно из любой специальной и пользовательской функции.

Статическая переменная

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

Статические переменные инициализируются однократно. Каждая статическая переменная может быть проинициализирована соответствующей ее типу константой (в отличие от простой локальной переменной, которая может быть проинициализирована любым выражением). Если явной инициализации нет, то статическая переменная инициализируется нулем. Статические переменные хранятся в постоянной области памяти программы, их значения не теряются при выходе из функции. Вместе с тем, статические переменные имеют ограничение, свойственное локальным переменным - областью видимости статической переменной остаётся функция, внутри которой эта переменная объявлена, в отличие от глобальных переменных, значение которых доступно из любого места программы.

https://book.mql4.com/ru/variables/types

 
Это все вроде как понятно. Получается, если придумана статическая переменная, которой значения не теряются при выходе из функции, то всех остальных переменных мы теряем значения на каждом тике? (если СТАРТ вызывается у меня на каждом тике)
 
Fam:
Это все вроде как понятно. Получается, если придумана статическая переменная, которой значения не теряются при выходе из функции, то всех остальных переменных мы теряем значения на каждом тике? (если СТАРТ вызывается у меня на каждом тике)

На каждом тике переинициализируются локальные переменные.

Не парьтесь - используйте глобальные для хранения тикетов и забудьте. Или сделайте массив (учёт ордеров). Массивы все статические по умолчанию.

 
Спасибо, я так и сделал. Просто хочу знать суть до конца. Вы не в курсе, как добиться Высокого качества моделирования и низкого рассогласования графиков? Такое ощущение, что это не от меня зависит и не от программы, а от плохой погоды (или хорошей, надо разобраться). Как программа может некачественно моделировать, не пойму, "человеческий" фактор?
 
ZZZEROXXX:

Боюсь при работе на H1 трудно будет вычислить волатильность для единичной свечки, нужно подумать как ее вычислить.
средняя амплитуда за 18 баров четко получается
 

Всем привет!

Подскажите пожалуйста мне вот в током вопросе:

Пытаюсь в программном коде добиться точного получения значения открытия(Open[i]) или закрытия(Close[i]) валютной пары EURUSD с пятизначным значением после нуля, а в ответ постоянно получаю округленное значение!

 
округлённое до скольки чисел после нуля? если числа после нуля вообще убираются, то ты пытаешься присвоить значение цены целочисленной (int) переменной, надо double