Как создать язык программирования, адаптированный к финансовым инструментам?

Я работаю в бутике, специализирующимся на финансах.

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

Это будет в основном использоваться как какой-то язык сценариев для замены многих процессов, выполняемых в электронных таблицах и макросах VBA.

Это должно быть просто, и на самом деле он должен вызывать различные библиотеки C++ и C# за кулисами. Он должен позволять пользователям обрабатывать абстрактные объекты, которые могут представлять время серия (суточный и дневной).

Он должен быть полностью отлаживаемым, когда у пользователя будет проблема, мы должны иметь возможность войти в код C++/C# и воспроизвести ошибки. В идеале он должен быть запущен через какой-то механизм в Excel и возвращать результаты в Excel. (к сожалению, почти каждый человек, работающий в области финансов, использует Excel)

Если бы вам нужно было выполнить эту задачу, как бы вы это сделали ?

вы бы пошли на функциональный синтаксис ?

вы бы разработали какой-то язык сценариев, который будет интерпретироваться или вы бы скомпилировали его на другом языке (например, преобразование скриптов в C++ или c#) ?

Я не нашел никакого проекта с открытым исходным кодом для такого рода разработки, но есть ли какой-либо коммерческий продукт, использующий такой синтаксис ?

EDIT: я прочитал все ваши ответы, но я буду ждать больше времени, прежде чем выбрать ответ. Они все очень полезные мнения, хотя !

EDIT2: I маркированный высокопроизводительный Марк как решение. Все ваши ответы очень полезны,и я модифицировал их все. Он был одним из первых ответов, и его ответ довольно проницателен для нас.

9 ответов


Я предлагаю вам сосредоточиться на разработке богатого набора классов на вашем предпочтительном языке OO (либо C#, либо c++, хотя я подозреваю, что вам может быть легче интегрировать первый с Excel). Это дало бы вам ваш язык для описания финансовых организаций, связанных с финансовыми рынками. После этого следует решить, следует ли продолжать переносить эти классы на определенный доменный язык или просто предоставлять их пользователю сообщество.

Я подозреваю, что ваш домен имеет некоторую неприводимую сложность и что промежуточный DSL должен быть (почти) таким же сложным, как ваш набор классов, и что, следовательно, вы мало выиграете от его создания.

другим подходом было бы интегрировать Excel с Mathematica, для которого Wolfram производит какой-то набор инструментов. У меня нет опыта в этом, но Mathematica, безусловно, подходит для любых вычислений, которые вам придется делать.

в отношении


Я бы обернул библиотеки C++ в Python.

Я бы определил пакет беглых классов, которые-по сути - были моим доменным языком.

Я бы использовал язык Python непосредственно на основе этих двух основ. Я бы не стал изобретать свой собственный синтаксис. Миру не нужен другой синтаксис; у нас достаточно синтаксиса и грамматики, чтобы анализировать, достаточно, чтобы продержаться до конца времен.

вы бы пошли на функциональный синтаксис ? Python имеет функциональные возможности. Если вы будете осторожны с дизайном класса Python, вы можете достичь чистого функционального стиля.

в идеале он должен быть запущен через какой-то механизм в Excel и возвращать результаты в Excel.

поскольку интерпретатор Python может быть встроен в приложение c++ (или c#), вы можете легко создать API Excel. От Excel до вашего нового языка сделайте как можно меньше в API C++, чтобы инициировать Python функциональность.

кстати, ваш конкурс Сельсин Один. Вот что они делают.


ResolverOne (http://www.resolversystems.com/products/resolver-one/) представляет собой комбинацию Excel и Python. Ты думал об этом?


Я бы рекомендовал использовать R.


другая точка зрения, которая использует c#.

поскольку у вас уже есть мощный инструмент функционального программирования общего назначения, который ваши пользователи знакомы и купили в форме Excel, я бы хотел построить решение вокруг этого. Вы по-прежнему получаете возможность использовать другие сторонние дополнения и интегрированные опции (например, R и Mathematica)

Я бы посмотрел в надстройки управляемой автоматизации для пользовательских функций. Эти по сути, это проекты библиотеки c#, которые используют систему.Во время выполнения.InteropServices, как описано в этой статье текст ссылки. Для пользователей эти функции добавляются на уровне ячеек обычным способом с помощью мастера функций и могут быть более или менее такими, какими вы хотите их видеть. Тогда это ваш DSL. Потребители могут выбрать интегрировать функциональность в их существующих моделях легко. Было бы также быстро создать прототип, чтобы проверить осуществимость этого. Они полностью отлаживаемый.

кроме того, с помощью Visual Studio Tools for Office можно получить доступ к полной иерархии объектов excel и даже добавить области действий, которые могут быть выложены путем перетаскивания элементов управления для более сложных требований ввода данных. Я считаю, что можно даже использовать WPF с Excel таким образом, если вам нужно добавить специализированные визуализации. Если вам нужно сохранить данные обратно, чтобы сказать Sql Server, вы можете создать форму проверки поворота, используя это подход.

я звучу как M$ shill! (Просто чтобы установить рекорд, я не работаю на них).

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


Саймон Пейтон-Джонс из Славы Хаскелла внес свой вклад в работу "составление контрактов: приключение в финансовой инженерии" в котором обсуждалось, как функциональные языки поддаются составлению исполняемых описаний контрактов на финансовые производные инструменты. Такой метод должен быть возможен с F#.

Я верю предложениям LexiFi направленный на коммерциализацию некоторых из этих исследований.


Джейн стрит капитал использует OCaml, и написал свой опыт здесь. Это довольно интересно, если широко читать.

для вашей среды, если вы следовали их модели, вы могли бы использовать F#, который начал жизнь как диалект OCaml, но который, конечно, работает в мире .NET.


Если ваша базовая библиотека использует Java, вы должны взглянуть на выполнение DSL в Groovy. Есть ряд подкастов и статей об этом, попробуйте погуглить "DSL Groovy".


большинство финансовых учреждений (или их подразделений) уже приобрели лицензии Matlab. Я рекомендую вам взглянуть на объектно-ориентированные объекты, предлагаемые Matlab (и, действительно, на их Финансовых Инструментов).

впереди я думаю, что вы получаете три вещи:

1) доступ к среде высокого уровня, где пользователи могут сосредоточиться на проблеме, а не на реализации 2) наличие качественной графики 3) Безшовная интеграция с Excel и другими пакетами производительности

Я знаю, что вы хотите разработать язык (в отличие от приложения), но рассмотрите piggy-поддержку вашей семантики на хорошо известном языке - таким образом, вы избегаете кривой обучения для своих пользователей.