Как мне построить финансовый DSL? - PullRequest
1 голос
/ 18 ноября 2009

Я решил создать базу данных, отслеживающую предложения по кредитным картам, которые я получаю по почте, и одним из смущающих факторов было то, как представлять предложения. С минимальными финансовыми расходами и переменными ставками, а также с минимальными переменными ставками он становится немного сложнее, чем «10,99 процента». Я решил, что мне нужно создать язык для представления этих вещей, если у меня будет шанс сравнить или оценить эти предложения.

Вопрос в том, как мне это представить? Формулы слишком сложны для моделирования путем создания полей, поэтому я просто сохраню формулу в БД во всей ее красе. Да, это означает размывание границы между данными и исполнением, но так как это личный проект, я не так волнуюсь.

  1. Embedded python. Представьте формулу как Python, просто свяжите соответствующие переменные и вызовите формулу.
  2. Используйте язык, специфичный для предметной области. Я не могу быть первым, кто подумает о том, чтобы представлять вещи таким образом, и на самом деле я знаю, что нет. Существуют ли какие-либо бесплатные общедоступные языки, которые могут это представить?

Может кто-нибудь дать совет, какой подход лучше?

Ответы [ 3 ]

3 голосов
/ 18 ноября 2009

Это звучит несколько похоже на работу Саймона Пейтона Джонса и соавт. на , представляющем финансовые контракты с использованием библиотек комбинаторов , включая реализацию в Haskell , включая возможность запуска над ними функций оценки для вычисления стоимости контракта с учетом некоторой модели. Я не знаю достаточно о финансах, чтобы сказать вам, если это именно то, что вы ищете, но похоже, что это в правильном поле.

Что касается вашего конкретного вопроса, я обычно предпочитаю языки, специфичные для встроенных доменов (то есть DSL-подобные конструкции, встроенные в основной язык, такой как Ruby с его объектно-ориентированным метапрограммированием, Scheme с его макросами или библиотеки комбинаторов Haskell), так как он дает вам полную силу языка хоста бесплатно; обычно при написании предметно-ориентированного языка с его собственным синтаксисом, моделью исполнения, средой выполнения и т. д. вы сталкиваетесь с вещами, которые было бы легко сделать, если бы у вас был доступный существующий язык, но с этим трудно справиться, так как у вас нет t реализовал что-то в вашем DSL.

2 голосов
/ 18 ноября 2009

Мой голос за Embedded Python, если вы считаете, что должны хранить формулы в базе данных.

DSL кажется излишним; у вас уже есть отличный язык для оценки формул.

1 голос
/ 18 ноября 2009

Другой вариант - использовать R . У этого есть хорошее представление формулы; Вы сохраняете это как строку, а затем оцениваете ее с помощью функции eval (). Существуют также обширные финансовые библиотеки (см. финансовое представление CRAN ), включая Rmetrics .

R также очень хорошо взаимодействует с другими языками, включая python, java и C ++. Вы упомянули Python: вы можете использовать RPy, если хотите написать скрипт-обертку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...