Как разработать язык программирования, адаптированный к финансовым инструментам?
Я работаю в бутике, специализирующемся на финансах.
Мы думали о разработке языка для описания финансовых организаций, связанных с финансовыми рынками.
Это будет в основном использоваться как некоторый язык сценариев для замены многих процессов, запускаемых в электронных таблицах и макросах VBA.
Он должен быть простым и фактически должен вызывать различные библиотеки C++ и C# за кулисами. Он должен позволять пользователям абстрактно обрабатывать объекты, которые могут представлять временные ряды (внутридневные и ежедневные).
Он должен быть полностью отлаживаемым, когда у пользователя возникнут проблемы, мы должны быть в состоянии войти в код C++/C# и воспроизвести ошибки. В идеале он должен запускаться через какой-либо механизм в Excel и возвращать результаты в Excel. (к сожалению, почти каждый человек, работающий в сфере финансов, использует Excel)
Если бы вам пришлось выполнить эту задачу, как бы вы справились с этим?
Вы бы выбрали функциональный синтаксис?
Будете ли вы разрабатывать некоторый язык сценариев, который будет интерпретироваться, или вы скомпилируете его на другом языке (например, преобразование сценариев в C++ или C#)?
Я не нашел ни одного проекта с открытым исходным кодом для такого рода разработки, но есть ли коммерческий продукт, использующий этот вид синтаксиса?
РЕДАКТИРОВАТЬ: Я прочитал все ваши ответы, но я буду ждать больше времени, прежде чем выбрать ответ. Это все очень полезные мнения!
РЕДАКТИРОВАТЬ 2: Я отметил High-Performance Mark как решение. Все ваши ответы очень полезны, и я изменил их все. Он был одним из первых ответов, и его ответ весьма проницателен для нас.
9 ответов
Я предлагаю вам сконцентрироваться на разработке богатого набора классов на предпочитаемом вами ОО-языке (C# или C++, хотя я подозреваю, что вам может быть проще интегрировать первый с Excel). Это даст вам ваш язык для описания финансовых организаций, связанных с финансовыми рынками. Когда вы это сделаете, вы должны подумать, стоит ли продолжать оборачивать эти классы в некоторый предметно-ориентированный язык или просто предоставлять их вашему сообществу пользователей.
Я подозреваю, что ваш домен имеет некоторую неснижаемую сложность, и что промежуточный DSL должен быть (почти) таким же сложным, как и ваш набор классов, и поэтому вы мало что можете получить, создав его.
Другим подходом будет интеграция Excel с Mathematica, для которой Wolfram создаст некоторый набор инструментов. У меня нет такого опыта, но Mathematica, безусловно, подходит для любых вычислений, которые вам придется сделать.
С уважением
Я хотел бы обернуть библиотеки C++ в Python.
Я бы определил пакет беглых классов, которые, по сути, были моим предметно-ориентированным языком.
Я бы использовал язык Python, основанный на этих двух принципах. Я бы не стал изобретать свой новый синтаксис. Мир не нуждается в другом синтаксисе; у нас есть синтаксис и грамматика, достаточные для синтаксического анализа, достаточные для сохранения до конца времени.
Вы бы выбрали функциональный синтаксис? Python имеет функциональные возможности. Если вы осторожны с дизайном вашего класса Python, вы можете достичь чистого функционального стиля.
В идеале он должен запускаться через какой-либо механизм в Excel и возвращать результаты в Excel.
Поскольку интерпретатор Python может быть встроен в приложение C++ (или C#), вы можете легко создавать Excel API. От Excel до вашего нового языка, сделайте как можно меньше в C++ API, чтобы запустить функциональность Python.
Кстати, ваше соревнование - Resolver One. Это то, что они делают.
Саймон Пейтон-Джонс из известной группы Haskell внес вклад в статью "Составление контрактов: приключение в области финансового инжиниринга", в которой рассказывалось о том, как функциональные языки позволяют составлять исполняемые описания контрактов на производные финансовые инструменты. Такой метод должен быть возможен с F#.
Я считаю, что предложения LexiFi были направлены на коммерциализацию некоторых из этих исследований.
Еще одна точка зрения, которая использует C#.
Поскольку у вас уже есть мощный универсальный инструмент функционального программирования, с которым ваши пользователи знакомы и который приобрел форму Excel, я постараюсь найти решение, основанное на этом. Вы по-прежнему получаете возможность использовать другие сторонние надстройки и встроенные опции (например, R и Mathematica).
Я хотел бы изучить надстройки управляемой автоматизации для пользовательских функций. По сути, это проекты библиотеки C#, которые используют System.Runtime.InteropServices, как описано в этой статье. Для пользователей эти функции добавляются на уровне ячеек обычным способом с помощью мастера функций и могут быть более или менее такими, какими вы хотите их видеть. Это ваш DSL. Пользователи могут легко интегрировать функциональность в свои существующие модели. Также было бы быстро прототипировать что-то, чтобы проверить выполнимость этого. Они полностью отлаживаемы.
Кроме того, используя Visual Studio Tools for Office, вы можете получить доступ к полной иерархии объектов Excel и даже добавить панели действий, которые можно расположить, перетаскивая элементы управления для более сложных требований ввода данных. Я полагаю, что можно даже использовать WPF с Excel таким образом, если вам нужно добавить специализированные визуализации. Если вам нужно сохранить данные обратно, чтобы сказать Sql Server, вы можете создать форму проверки поворота, используя этот подход.
Я звучу как M$ shill! (Просто чтобы установить рекорд, я не работаю на них).
Вам необходимо оценить производительность этого, и я не уверен, как это будет масштабироваться.
ResolverOne ( http://www.resolversystems.com/products/resolver-one/) представляет собой комбинацию Excel и Python. Вы думали об использовании этого?
Я бы порекомендовал использовать R.
- R имеет большое количество пакетов финансов и временных рядов. Посмотрите на финансы, эконометрику и взгляды временных рядов. R также широко используется в области финансов (см. Эту недавнюю конференцию в качестве примера).
- R может интегрироваться с Excel. Взгляните на этот пост в блоге на эту тему.
- R может запускать код C++ и взаимодействовать с C# через COM.
Большинство финансовых учреждений (или их подразделений) уже приобрели лицензии Matlab. Я рекомендую вам взглянуть на объектно-ориентированные средства, предлагаемые Matlab (и, действительно, на их Финансовые инструменты).
Вначале я думаю, что вы получаете три вещи:
1) Доступ к среде высокого уровня, где пользователи могут сосредоточиться на проблеме, а не на реализации 2) Доступность высококачественной графики 3) Бесшовная интеграция с Excel и другими производительными пакетами
Я знаю, что вы хотите разработать язык (в отличие от приложения), но подумайте о том, чтобы поддерживать семантику в хорошо известном языке - таким образом вы избежите кривой обучения для ваших пользователей.
Если ваша базовая библиотека использует Java, вы должны взглянуть на создание DSL в Groovy. Есть несколько подкастов и статья об этом, попробуйте поискать в Google "DSL Groovy".