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

StackOverflow https://stackoverflow.com/questions/1889457

Вопрос

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

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

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

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

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

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

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

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

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

Редактировать:Я прочитал все ваши ответы, но я подожду еще некоторое время, прежде чем выбрать ответ.Однако все это очень полезные мнения !

РЕДАКТИРОВАТЬ 2:Я пометил высокопроизводительную марку как решение.Все ваши ответы очень полезны, и я доработал их все.Он был одним из первых, кто ответил, и его ответ весьма проницателен для нас.

Это было полезно?

Решение

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

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

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

С уважением

Другие советы

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

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

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

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

В идеале его необходимо запускать с помощью какого-либо механизма в Excel и возвращать результаты в Excel.

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

Кстати, ваши конкуренты Резолвер Один.Это то, что они делают.

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

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

Другая точка зрения, использующая C#.

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

я бы посмотрел Надстройки управляемой автоматизации для пользовательских функций.По сути, это библиотечные проекты C#, использующие System.Runtime.InteropServices, как описано в этой статье. текст ссылки.Пользователям эти функции добавляются на уровне ячейки обычным способом с помощью мастера функций и могут быть более или менее такими, какими вы хотите их видеть.Тогда это ваш DSL.Пользователи могут легко интегрировать эту функциональность в существующие модели.Также было бы быстро создать прототип чего-нибудь, чтобы проверить осуществимость этого.Они полностью отлаживаемы.

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

Я говорю как зазывал M$!(Просто чтобы внести ясность: я у них не работаю).

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

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

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

Jane Street Capital использует OCaml и описала свой опыт. здесь.Это довольно интересное, хотя и широкое чтение.

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

Если ваша базовая библиотека использует Java, вам следует рассмотреть возможность реализации DSL в Groovy.Об этом есть ряд подкастов и статей, попробуйте поискать в Google «DSL Groovy».

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

Заранее я думаю, что вы выиграете от трех вещей:

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top