powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Косвенный аргумент @
19 сообщений из 19, страница 1 из 1
Косвенный аргумент @
    #38696394
Palitra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется БД.
В ней около 40 исполняемых кодов. В каждом по 4-5 однотипных формулы.
Итого около 170 формул.
Формулы типа
Инструмент1*коэффициент1, инструмент 2*коэффициент2.
Таких инструментов 38.
Коэффициенты меняются довольно таки часто. Раз в 3-7 дней.
Переписывать все формулы вручну - жестко.
Стал использовать косвенный аргумент.

Имеется БД с четырмя полями, в которую вносятся формулы
1=Номер (число)
2=Описание (текст 150 символов)
3=Проверка (текст)
4=Формула (2500 символов)

Длина текстового поля для "Формулы" в реальности колеблется от 1300 до 1700 символов.

Что делаю. Прописываю формулу в поле Формулу.
Затем в выполняемом коде вытаскиваю эту формулу.
Перепробовал кучу способов, но результат один. Формула копируется, но не пересчитывается, даже не определяется, что это формула, в то же время, если написать w @frmполучается требуемый результат.
То есть формула рассчитывается, но вот это расчёт никак не могу заполучить.
Пример результатов прилагается
...
Рейтинг: 0 / 0
Косвенный аргумент @
    #38696414
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PalitraФормула копируется, но не пересчитывается, даже не определяется, что это формула, в то же время, если написатьЧто значит, не определяется, что это формула?
можно больше подробностей, нормальные примеры кода, а незамалеванный скриншот.
когда формула расчитывается а когда нет
есть ли в формуле дополнительные переменные ?
возможно просто не попадаете в область видимости переменных. переменные которые участвуют в "формуле" опишите как публичные.
...
Рейтинг: 0 / 0
Косвенный аргумент @
    #38696416
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используйте косвенность аргумента для команды quit:eval(expr) q @expr

 ...
 s result=$$eval(frm)
...
Рейтинг: 0 / 0
Косвенный аргумент @
    #38696430
Palitra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вставка формулы с коэффициентами происходит внутри исполняемого кода (в середине).
Цикл перерасчета данных повторяется непрерывно на пртяжении 9 часов (32000 раз).
Команда Quit в данном случае неприменима.
...
Рейтинг: 0 / 0
Косвенный аргумент @
    #38696440
Palitra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DAiMorPalitraФормула копируется, но не пересчитывается, даже не определяется, что это формула, в то же время, если написатьЧто значит, не определяется, что это формула?
можно больше подробностей, нормальные примеры кода, а незамалеванный скриншот.
когда формула расчитывается а когда нет
есть ли в формуле дополнительные переменные ?
возможно просто не попадаете в область видимости переменных. переменные которые участвуют в "формуле" опишите как публичные.

Формула работы на бирже.
Есть 38 эмитентов (торговых инструментов).
Для каждого своя доля. Сумма всех 38 долей дают 1.0
Если внутрь исполняемого кода вставить Итог=(Х1*K1)+(X2*K2)+(X3*K3)+...,
то код выполняется без проблем. Получаем результат 55.3843
Если этот же код прописать в БД "Формулы", то когда мы вытаскиваем этот код и вставляем в исполняемый код ничего не происходит.
А именно, если выводить результаты, то получаем следующее

Копируем формулу из БД = успешно
Присваиваем переменной формулу = успешно (Set frm=AvtoFormula.FORMULA)
Аналогичный результат получается если сделать      Set bbb="frm=AvtoFormula.FORMULA" 
      Set @bbbТак вот если сделать запрос, чему равна переменная frm то получим
(Х1*K1)+(X2*K2)+(X3*K3)+...,
А вот если сделать запрос, чему равна переменная @frm, то получим результат 55.3843

Я пытаюсь сделать так, чтобы переменной ZZZ назначился результат в виде итога= 55.3843, а не в виде (Х1*K1)+(X2*K2)+(X3*K3)+...,

Вопрос: Как это реализовать?
...
Рейтинг: 0 / 0
Косвенный аргумент @
    #38696492
eduard93
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Indirection

Подобный вызов завершится ошибкой: SET var1 = "2+2"
 SET x = @var1*6
Правильно - так: SET var1 = "var2"
 SET var2 = 2+2 //А вот SET var2 = "2+2" не пройдёт 
 SET x = @var1*6
 
Можно попробовать так: SET var1="2+2"
 X "set x="_a_"*6"Во 2м и 3м случае x=24.
...
Рейтинг: 0 / 0
Косвенный аргумент @
    #38696494
eduard93
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Последний, 3й сниппет, имелось в виду: SET var1="2+2" // А тут можно и SET var1=2+2
 X "set x="_var1_"*6"
...
Рейтинг: 0 / 0
Косвенный аргумент @
    #38696509
Palitra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
eduard93Последний, 3й сниппет, имелось в виду: SET var1="2+2" // А тут можно и SET var1=2+2
 X "set x="_var1_"*6"Все эти примеры я знаю.
В стандартной ситуации они работают.

Проблема в том, что.

Переменная var1 var2 var2 есть
Если сделать  set frm=Avtofirmula.Formula //, где значение Formula=(var1*K1)+(var2*K2)+(var3*K3)+... и берётся из внешнего файла
 Set bbb="Formula=frm"
 Set @bbbДают на выходе значение
Formula=(var1*K1)+(var2*K2)+(var3*K3)+...
где значение равно в виде ТЕКСТА а не в виде результата

Проблема начинается именно тогда, когда данные (название переменных) берутся из внешнего файла (файла с формулой).

Если же сделать Set Var1=(var1*K1)+(var2*K2)+(var3*K3)+...то var1 получим результат равный 55.34, то есть результат в виде ЧИСЛА!
...
Рейтинг: 0 / 0
Косвенный аргумент @
    #38696520
Palitra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Palitra,

Просто когда эти переменные Х1 Х2 Х3 стоят в формуле, которая первоначально расположена внутри исполняемого кода, то
Х1*К1+Х2*К2+... воспринимается как формула.

А если абсолютно такую же формулу скопировать из внешнего файла внутрь того же кода, то
Х1*К1+Х2*К2+...
воспринимается уже как текст и соответственно переменные Х1 Х2 Х3 не перемножаются на коэффициенты К1 К2 К3 и соответственно получаем не числовое значение а последовательность символов, которые нам бесполезны.
Вот в этом вся загвоздка.
...
Рейтинг: 0 / 0
Косвенный аргумент @
    #38696562
andrew000999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуйте set @@frm
...
Рейтинг: 0 / 0
Косвенный аргумент @
    #38696582
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Palitra ,
logistЖивучий вопрос, поднимается регулярно ;)

5549407   set var1=1,K1=1,var2=2,K2=2,var3=3,K3=3

  set frm="(var1*K1)+(var2*K2)+(var3*K3)" //, где значение Formula=(var1*K1)+(var2*K2)+(var3*K3)+... и берётся из внешнего файла
  Set bbb="Formula="_frm  ;ключевое изменение
  Set @bbb
  w FormulaРезультат:
Код: plaintext
14

PS:Соответственно рабочий код должен быть таким Set bbb="frm="_AvtoFormula.FORMULA
 Set @bbb
...
Рейтинг: 0 / 0
Косвенный аргумент @
    #38696583
Фотография DirksDR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Palitra,

так подойдет:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
USER>s var1=0.5 set k1=25
 
USER>set frm="z=(var1*k1)"
 
USER>set @frm
 
USER>w z
12.5
USER>
...
Рейтинг: 0 / 0
Косвенный аргумент @
    #38697412
Palitra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DirksDRтак подойдет:

 s var1=0.5 set k1=25
 set frm="z=(var1*k1)"
 set @frm
 w z
12.5Так не подойдет, так как если вводить как написали Вы, то все работает.
Имеем переменные внутри кода var1=0.5 k1=25
Если формулу вставить внутри исполняемого кода - как у вас, то все работает без проблем.
Но если эту же формулу скопировать из внешнего файла, то в результате выдаст следующий результат
(var1*k1)
можете попробовать сами.
...
Рейтинг: 0 / 0
Косвенный аргумент @
    #38697422
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PalitraЕсли формулу вставить внутри исполняемого кода - как у вас, то все работает без проблем.
Но если эту же формулу скопировать из внешнего файла, то в результате выдаст следующий результат
(var1*k1)
можете попробовать сами.а в чем разница между двумя этими вариантами по вашему коду?
...
Рейтинг: 0 / 0
Косвенный аргумент @
    #38697468
Palitra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DAiMor,

Итак, сравнил 4 варианта.

Вариант №1, наш стандартный - неверный результат
...
Рейтинг: 0 / 0
Косвенный аргумент @
    #38697472
Palitra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Palitra,

Вариант №2, предложенный
andrew000999
Неверный результат - вообще ошибка.

.
...
Рейтинг: 0 / 0
Косвенный аргумент @
    #38697473
Palitra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Palitra,

Вариант №3, предложенный
servit из г. Кишинёв, Республика Молдова
УСПЕШНЫЙ, то что нужно.
Ему за это Большое Человеческое Спасибо.

.
...
Рейтинг: 0 / 0
Косвенный аргумент @
    #38697475
Palitra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Palitra,

Вариант №4, производный от варианта №3
Также является успешным.

.
...
Рейтинг: 0 / 0
Косвенный аргумент @
    #38699681
o_nix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Palitra,

совсем последний видимо будет:
s @("rez="_formula)
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Косвенный аргумент @
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]