Изменение настроек (Settings) внутри кода индикатора

Страницы: 1
RSS
Изменение настроек (Settings) внутри кода индикатора, В окне свойств пользовательских настроек не отображается новое значение
 
Всех с новым и наступающим!

При работе индикатора программно из кода меняю числовое значение переменной из таблицы Settings (Settings.Offset) загруженного индикатора,
сразу рисуются линии по этим данным, но в окне свойств пользовательских настроек отображается старое значение (заданное в самом коде индикатора). Следовательно открыв настройки и просто нажав ОК старое значение затрет новое...
может не предусмотрено изменение настроек из кода, но это единственный просто интерфейс обмена данными с индикатором
 
Если это чисто внутренние данные, то может тогда и не хранить их в Settings.
А если необходимо именно в них, то можно перед выходом из функции Init установить необходимое значение и оно будет использоваться в расчетах.

Правда возникнет неоднозначная ситуация - в окне ввода параметров будет отображаться то, что ввел пользователь, а расчет будет вестись от переопределенного значения.
Но это уже вопрос к разработчикам - Settings явно кешируется и выдается в форме ввода из кеша, не учитывая, что параметры изменены в коде.
 
Nikolay, спасибо за ваш ответ!

вот такой пример
при открытии настроек значение Offset = 30

Код
Settings = {
   Name = "*Empty",
   Offset = 20
}

function Init()   
   Settings.Offset = 30
   return 1
end

function OnCalculate(index)
   Settings.Offset = 50
   return Settings.Offset
end

менять в коде значение нужно, пока не нашел другого способа, через окно настроек так же нужна возможность увидеть значение и поменять при необходимости

 
А зачем изменять два раза параметр? Одного раза достаточно. Что касается видеть - то нет. Это либо ошибка, либо разработчики не предполагают изменение вне настроек.
Правда если Вы хотите изменять и в коде и в поле настроек, то это уже другая задача: необходимо как-то "сказать коду", что поле изменено в форме и не изменяй его.

Впрочем, Вы можете решить данную задачу используя две (три) переменные.

Одна - в структуре Settings. Вторая - прошлое используемое значение (чтобы понимать, что в форме его изменили). Ну и третья - рабочая, значение которой берется из прошлых двух.
 
Nikolay, два раза в примере - это чтобы поймать момент когда перестают изменения параметров Settings отображаться в окне настроек, оказалось что в Init еще можно поменять, а в OnCalculate уже не подтягиваются изменения
Изменения в Settings было бы правильнее в моей задаче и делать в Init, если бы в Init правильно работал getDataSourceInfo(), но, согласно хэлпу Для корректной работы функции getDataSourceInfo, вызываемой из функции Init,  необходимо перезапустить Рабочее место QUIK после добавления индикатора на  график
а не хочется каждый раз перезапускать терминал, по крайней мере сейчас, во время отладки кода
 итого к разработчикам два вопроса:
1. можно ли исправить ситуацию, когда изменения пользовательских параметров таблицы Settings в OnCalculate не отображаются в диалоговом окне настроек?
2. можно ли исправить ситуацию, чтобы getDataSourceInfo() правильно работал в Init без перезапуска терминала?
Версия терминала ВТБ 9.2.3.15 и Demo 9.3.3.3
 
Код
function OnCalculate(index)
    local start = O(index)
    if start == nil then
        return nil
    end
    if MINSTEP == nil then
        local info = getDataSourceInfo()
        local secinfo = getSecurityInfo(info.class_code, info.sec_code)
        MINSTEP = secinfo.min_price_step
        STEP = Settings.Step
        -- ..........
    end
    local result = {}
    start = start - ((math.tointeger(rd.round(start / MINSTEP)) % STEP) * MINSTEP) + FIRST
    for x = 1, LINES, 1 do
        table.insert(result, start - (x * STEP * MINSTEP))
    end
    return table.unpack(result)
end

https://github.com/Roffild/qlua/blob/master/LuaIndicators/roffild_Levels.lua

Баги индикаторов
 
Roffild, добрый день! использование getDataSourceInfo в первом цикле OnCalculate не решает проблему отображения новых значений пользовательских переменных таблицы Settings в окне свойств индикатора
 
Прошу при возможности высказаться представителей QUIK clients support
Хочется даже услышать заветные слова об регистрации пожелания или просто объяснение текущей ситуации и способов ее решения

1. можно ли исправить ситуацию, когда изменения пользовательских параметров таблицы Settings в OnCalculate не отображаются в диалоговом окне настроек? - чтобы отображались актуальные значения
2. можно ли исправить ситуацию, чтобы getDataSourceInfo() правильно работал в Init без перезапуска терминала? - чтобы перезапуск терминала с подключенным индикатором на графике не требовался
 
Александр, добрый день!

В текущей реализации как-либо повлиять на описанное поведение нельзя.
Ваши пожелания зарегистрировано, мы постараемся их рассмотреть. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
 
считаю , что сохранение изменений параметров  settings не следует делать по следующей причине.
setting - это параметры скрипта по умолчанию.
Их изменения в режиме редактирования  позволяет выполнить подбор более лучших параметров.
Но если параметры подобрать не удалось, то перезагрузка скрипта возвращает все в начальное состояние.
----------------------
Если делать смену начальных параметров в процессе редактирования,
то автоматический возврат к начальным параметрам станет невозможным.
 
 
Roman Azarov, спасибо за ваш ответ, буду ждать обратной связи
 
nikolz, перезагрузка скрипта в любом случае приведет к сбросу параметров на начальные значения. это не "сохранение параметров settings", файл lua-скрипта индикатора оно не перезапишет
я их меняю в режиме редактирования, но программно, и новые значение не отображаются в диалоговом окне настроек индикатора, хотя индикатор работает по новым значениям, и нажатие кнопки ОК или Применить затрёт эти изменения на старые даже если открыта другая вкладка настроек графика
согласитесь, неправильно, когда переменная Settings.Offset равна 50, и рисуется 50, а настройках написано, что 30, и нажатие ОК запишет в нее 30 и будет рисоваться 30
 
Цитата
Александр написал:
nikolz, перезагрузка скрипта в любом случае приведет к сбросу параметров на начальные значения. это не "сохранение параметров settings", файл lua-скрипта индикатора оно не перезапишет
я их меняю в режиме редактирования, но программно, и новые значение не отображаются в диалоговом окне настроек индикатора, хотя индикатор работает по новым значениям, и нажатие кнопки ОК или Применить затрёт эти изменения на старые даже если открыта другая вкладка настроек графика
согласитесь, неправильно, когда переменная Settings.Offset равна 50, и рисуется 50, а настройках написано, что 30, и нажатие ОК запишет в нее 30 и будет рисоваться 30
возможно, я Вас не понял. Но у меня нет проблем с settings.
 
В качестве совета.
Вне зависимости от тайма графика , в индикатор приходят все тики или почти все.
Но чтобы алгоритм действительно работал по свечам, а не по тикам, ставьте  фильтр работы алгоритма по началу(концу) свечи
 
Страницы: 1
Читают тему
Наверх