Если кнопка в советнике, то можно сохранять ее статус в переменных советника, созданных на глобальном уровне (не путать с глобальными переменными терминала). Но для советника можно еще проще - идентифицировать смену ТФ в OnDeinit() и не удалять кнопку.
В индикаторе такое не пройдет, т. к. он отключается при смене ТФ, подключаясь затем заново. Поэтому для него подойдет только запись состояния в сторонний ресурс (файл, глобальные переменные терминала, web).
Для работы с глобальными переменными терминала используются функции с названием, начинающихся с GlobalVariable. В документации по языку раздел так и называется "Глобальные переменные терминала".
Разбираюсь с этим объектом и столкнулся с проблемой - припереключении таймфрейма кнопка переходит в начальное состояние, кто как решил эту проблему?
Мне пока видется только запись в файл состояния кнопки и считывание при переключении. Еще один вариант с глобальными переменными, но что то не нашел как их создовать((
Как написали выше, достаточно не удалять кнопку. Причём это справедливо и для индикаторов тоже.
//+------------------------------------------------------------------+ int OnInit() { ObjectCreate(0, "Baton", OBJ_BUTTON, 0, 0, 0); ObjectSetInteger(0, "Baton", OBJPROP_XDISTANCE, 20); ObjectSetInteger(0, "Baton", OBJPROP_YDISTANCE, 70); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { return(rates_total); } //+------------------------------------------------------------------+ void OnDeinit(const int reason) { if(reason != REASON_CHARTCHANGE && reason != REASON_TEMPLATE) ObjectsDeleteAll(0, "Baton", 0, OBJ_BUTTON); } //+------------------------------------------------------------------+При смене ТФ,кнопка не меняет свою отжатость/нажатость )))
Разбираюсь с этим объектом и столкнулся с проблемой - припереключении таймфрейма кнопка переходит в начальное состояние, кто как решил эту проблему?
Мне пока видется только запись в файл состояния кнопки и считывание при переключении. Еще один вариант с глобальными переменными, но что то не нашел как их создовать((
Зачем что-то придумывать, давно все придумано, сохраняйте состояние кнопки и загружайте при ее пересоздании.
Самый удобный способ через глобальные переменные. Я делаю вот так, по такому шаблону.
void State(string sName,double lState) { string stest=""; if(IsTesting()) stest="tester"; string sexpert=WindowExpertName(); ::GlobalVariableSet(StringFormat("%s%s_%s_%s",stest,sexpert,_Symbol,sName),lState); } double State(string sName) { string stest=""; if(IsTesting()) stest="tester"; string sexpert=WindowExpertName(); if(::GlobalVariableCheck(StringFormat("%s%s_%s_%s",stest,sexpert,_Symbol,sName))) return (double)::GlobalVariableGet(StringFormat("%s%s_%s_%s",stest,sexpert,_Symbol,sName)); return 0.0; }
Первая функция сохраняет состояние (можете сделать и bool), вторая загружает состояние из переменной.
При этом под тестер создается отдельная переменная, которую нужно удалять, чтобы не мешать работе робота если он на графике.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Разбираюсь с этим объектом и столкнулся с проблемой - припереключении таймфрейма кнопка переходит в начальное состояние, кто как решил эту проблему?
Мне пока видется только запись в файл состояния кнопки и считывание при переключении. Еще один вариант с глобальными переменными, но что то не нашел как их создовать((