На всякий случай:
Сразу же после того, как клиентский терминал загрузит программу (эксперт или пользовательский индикатор) и запустит процесс инициализации глобальных переменных, будет послано событие Init, которое обрабатывается функцией OnInit(), если она есть. Это событие также генерируется после смены финансового инструмента и/или периода графика, после перекомпиляции программы в редакторе MetaEditor, после смены входных параметров из окна настройки эксперта или пользовательского индикатора. Советник также инициализируется после смены счета. Для скриптов событие Init не генерируется.
На всякий случай:
Сразу же после того, как клиентский терминал загрузит программу (эксперт или пользовательский индикатор) и запустит процесс инициализации глобальных переменных, будет послано событие Init, которое обрабатывается функцией OnInit(), если она есть. Это событие также генерируется после смены финансового инструмента и/или периода графика, после перекомпиляции программы в редакторе MetaEditor, после смены входных параметров из окна настройки эксперта или пользовательского индикатора. Советник также инициализируется после смены счета. Для скриптов событие Init не генерируется.
спасибо за ответ. мне это известно.
но в функции OnInit() уже стоит стандартный код:
//+------------------------------------------------------------------+ |
На всякий случай:
Сразу же после того, как клиентский терминал загрузит программу (эксперт или пользовательский индикатор) и запустит процесс инициализации глобальных переменных, будет послано событие Init, которое обрабатывается функцией OnInit(), если она есть. Это событие также генерируется после смены финансового инструмента и/или периода графика, после перекомпиляции программы в редакторе MetaEditor, после смены входных параметров из окна настройки эксперта или пользовательского индикатора. Советник также инициализируется после смены счета. Для скриптов событие Init не генерируется.
Тут еще важен факт того, что сначала происходит Deinit. А у вас там, наверняка, деструктор
По сути, переинициализация. То, что нужно хранить за пределами программы - храните за пределами. Глобальные переменные терминала, файлы.
А при деините надо смотреть причину и действовать соответственно.
ладно, при DeInit теряются введенные данные, которые при необходимости нужно хранить вне проги. ок, согласен.
но почему напрочь исчезают данные в поле CSpinEdit?!.
по умолчанию там - 2, а после перехода на другой тайм-фрейм - пусто, ни-че-го...
см. сканы в прицепе - ДО и ПОСЛЕ
ладно, при DeInit теряются введенные данные, которые при необходимости нужно хранить вне проги. ок, согласен.
но почему напрочь исчезают данные в поле CSpinEdit?!.
по умолчанию там - 2, а после перехода на другой тайм-фрейм - пусто, ни-че-го...
см. сканы в прицепе - ДО и ПОСЛЕ
Я ж не знаю логику вашей программы.
Что удаляется при деините, что нет.
Что создаётся при ините, что уже существует и, возможно, создаётся заново или сбрасывается...
Просто подсказываю направления, в которых можно копать.
Я ж не знаю логику вашей программы.
Что удаляется при деините, что нет.
Что создаётся при ините, что уже существует и, возможно, создаётся заново или сбрасывается...
Просто подсказываю направления, в которых можно копать.
при чем здесь логика программы?
при уходе с одного ТФ происходит деинит, при входе в новый ТФ происходит инит...
деинит стандартный для этого случая:
void OnDeinit(const int reason)
{
//--- очистим комментарии
Comment("");
//--- destroy dialog
ExtDialog.Destroy(reason);
}
вопрос в другом - почему при повторной инициализации проги на новом ТФ, пропадают значения полей CSpinEdit?
поля CEdit - обнуляются. это понятно. но почему пропадают значения в CSpinEdit?!.
CSpinEdit - тип int.
CEdit = тип - string.
Создайте глобальную переменную указывающую на то что панель уже создана (при смене таймфрейма она не сбрасывается) и в ините проверяйте. Если панель уже создана то незачем её пересоздавать при смене таймфрейма, как и нет необходимости удалять её в deinit.
bool START=true; void OnInit() { if(START) { "Создаём панель" START=false; } } void OnDeinit(const int reason) { if(reason!=REASON_CHARTCHANGE && reason!=REASON_PARAMETERS) { "Удаляем" } }
Создайте глобальную переменную указывающую на то что панель уже создана (при смене таймфрейма она не сбрасывается) и в ините проверяйте. Если панель уже создана то незачем её пересоздавать при смене таймфрейма, как и нет необходимости удалять её в deinit.
спасибо за совет, но увы...
при переходе с одного ТФ на другой и значения пропали, и панель с полями стали перемещаться по графику.
причем совершенно независимо друг от друга - поля сбежали от панели )))

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
создаю панель для ввода данных. на ней есть поля CEdit и CSpinEdit.
в пределах одного любого тайм-фрейма все работает прекрасно.
при смене тайм-фрейма графика (например, с m15 на h1) при открытой панели поля CEdit не сохраняют ранее введенные значения (обнуляются), значения с полей CSpinEdit вообще пропадают (пустое поле). хотя после нажатия на кнопки +/- поля CSpinEdit начинают работать по-прежнему.
вопросы знатокам.
1. как сохранять и показывать значения полей CSpinEdit после смены тайм-фрейма графика?
2. как сохранять значения полей CEdit после смены тайм-фрейма графика?