Как создать язык программирования, адаптированный к финансовым инструментам?
Я работаю в бутике, специализирующимся на финансах.
мы думали о разработке языка для описания финансовых организаций, связанных с финансовыми рынками.
Это будет в основном использоваться как какой-то язык сценариев для замены многих процессов, выполняемых в электронных таблицах и макросах 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.
- R имеет большое количество пакетов финансов и временных рядов. Взгляните на финансы, эконометрика и серии вид. R также широко используется в области финансов (см. эта недавняя конференция в качестве примера).
- R может интегрироваться с Excel. Взгляните на этот блог на тема.
- R может запускать код C++ и взаимодействовать с C# через COM.
другая точка зрения, которая использует c#.
поскольку у вас уже есть мощный инструмент функционального программирования общего назначения, который ваши пользователи знакомы и купили в форме Excel, я бы хотел построить решение вокруг этого. Вы по-прежнему получаете возможность использовать другие сторонние дополнения и интегрированные опции (например, R и Mathematica)
Я бы посмотрел в надстройки управляемой автоматизации для пользовательских функций. Эти по сути, это проекты библиотеки c#, которые используют систему.Во время выполнения.InteropServices, как описано в этой статье текст ссылки. Для пользователей эти функции добавляются на уровне ячеек обычным способом с помощью мастера функций и могут быть более или менее такими, какими вы хотите их видеть. Тогда это ваш DSL. Потребители могут выбрать интегрировать функциональность в их существующих моделях легко. Было бы также быстро создать прототип, чтобы проверить осуществимость этого. Они полностью отлаживаемый.
кроме того, с помощью Visual Studio Tools for Office можно получить доступ к полной иерархии объектов excel и даже добавить области действий, которые могут быть выложены путем перетаскивания элементов управления для более сложных требований ввода данных. Я считаю, что можно даже использовать WPF с Excel таким образом, если вам нужно добавить специализированные визуализации. Если вам нужно сохранить данные обратно, чтобы сказать Sql Server, вы можете создать форму проверки поворота, используя это подход.
я звучу как M$ shill! (Просто чтобы установить рекорд, я не работаю на них).
вам нужно будет оценить производительность этого, и я не уверен, как это будет масштабироваться.
Саймон Пейтон-Джонс из Славы Хаскелла внес свой вклад в работу "составление контрактов: приключение в финансовой инженерии" в котором обсуждалось, как функциональные языки поддаются составлению исполняемых описаний контрактов на финансовые производные инструменты. Такой метод должен быть возможен с F#.
Я верю предложениям LexiFi направленный на коммерциализацию некоторых из этих исследований.
Если ваша базовая библиотека использует Java, вы должны взглянуть на выполнение DSL в Groovy. Есть ряд подкастов и статей об этом, попробуйте погуглить "DSL Groovy".
большинство финансовых учреждений (или их подразделений) уже приобрели лицензии Matlab. Я рекомендую вам взглянуть на объектно-ориентированные объекты, предлагаемые Matlab (и, действительно, на их Финансовых Инструментов).
впереди я думаю, что вы получаете три вещи:
1) доступ к среде высокого уровня, где пользователи могут сосредоточиться на проблеме, а не на реализации 2) наличие качественной графики 3) Безшовная интеграция с Excel и другими пакетами производительности
Я знаю, что вы хотите разработать язык (в отличие от приложения), но рассмотрите piggy-поддержку вашей семантики на хорошо известном языке - таким образом, вы избегаете кривой обучения для своих пользователей.