Скриптовый язык для разработки торговой стратегии - PullRequest
15 голосов
/ 19 февраля 2010

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

До сих пор я смотрел на lua, python, ruby ​​и до сих пор наслаждался всеми ими, но все же нашел их немного «низкими» для моих целевых пользователей.Нужно ли мне как-то написать свой собственный синтаксический анализатор + интерпретатор для поддержки языка с минимальной поддержкой циклических вычислений, простой арифметической оценки логических выражений или есть еще какие-нибудь рекомендации, которые кто-либо из вас может получить?Заранее спасибо.

Ответы [ 11 ]

10 голосов
/ 19 февраля 2010

Марк-Джейсон Доминус, автор модуля Text :: Template в Perl, имеет некоторые идеи, которые могут иметь отношение к делу:

Когда люди создают модуль шаблона, подобный этомуони почти всегда начинают с изобретения специального синтаксиса для подстановок.Например, они строят его так, чтобы строка типа %% VAR %% заменялась значением $ VAR.Затем они понимают необходимость дополнительного форматирования, поэтому они вводят специальный синтаксис для форматирования.Затем им нужен цикл, поэтому они изобретают синтаксис цикла.Довольно скоро у них появился новый маленький шаблонный язык.

У этого подхода есть две проблемы: во-первых, их маленький язык покалечен.Если вам нужно сделать что-то, о чем автор не подумал, вы проиграете.Второе: кто хочет изучать другой язык?

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

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

Это позволяет начинающим пользователям работать на высоком уровне;однако вы и любые конечные пользователи, обладающие способностью к этому, - ваши суперпользователи - все равно можете использовать всю мощь Ruby, Python или чего-либо еще.

8 голосов
/ 19 февраля 2010

Похоже, вам может понадобиться создать какой-то предметно-ориентированный язык (DSL) для ваших пользователей, который может быть свободно построен поверх целевого языка.У Ruby, Python и Lua есть свои причуды в отношении синтаксиса, и в некоторой степени некоторые из них могут быть обработаны умными определениями функций.

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

Другим кандидатом может быть JavaScript или какой-то мост DSL-JavaScript, так какпозволит стратегии работать на стороне клиента или на стороне сервера.Это может помочь масштабировать ваше приложение, поскольку клиентские машины часто имеют избыточную вычислительную мощность по сравнению с сильно загруженным сервером.

1 голос
/ 22 декабря 2012

Проверьте http://www.tadeveloper.com для платформы тестирования на истории с использованием MATLAB в качестве языка сценариев. Преимущество MATLAB в том, что он очень мощный, но вам не нужно быть программистом, чтобы использовать его.

1 голос
/ 14 апреля 2012

Я работал над библиотекой алгоритмического трейдинга Python (фактически для тестирования на истории, а не для реальной торговли).Вы можете взглянуть на это: http://gbeced.github.com/pyalgotrade/

1 голос
/ 19 февраля 2010

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

Вот некоторые из потребностей, которые я предполагаю - у вас, возможно, уже есть некоторые из них: способ получить текущие позиции, текущие и исторические цитаты, предыдущие данные о производительности и т. Д. ... в приложении. Определите / протестируйте / отправьте различные виды ордеров (лимит / рынок / стоп, какой обмен, триггеры) или параметры опций и т. Д. Вам, вероятно, понадобится несколько песочниц для тестирования, а также реальные вещи.

Кванты хотят иметь возможность выполнять матричные операции, стохастическое исчисление, PDE.
Если вы хотите сделать это в Python, загрузка NumPy была бы началом.

Вы также можете начать с проприетарной системы, предназначенной для проведения математических финансовых исследований, например, построенной на основе Mathematica или Matlab.

0 голосов
/ 05 августа 2012

Я был в той же лодке и торговал со своим собственным программным обеспечением.Ява не велика, потому что вы хотите что-то более высокого уровня, как вы говорите.У меня был большой успех с использованием проекта eclipse xtext.http://www.eclipse.org/Xtext Он выполняет всю работу по сборке синтаксических анализаторов и т. Д., И с помощью eclipse вы можете быстро сгенерировать код с помощью функциональных редакторов.Я предлагаю рассмотреть это, так как вы рассматриваете и другие варианты.Это в сочетании с платформой моделирования eclipse очень эффективно для быстрого создания DSL, которые звучат так, как вам нужно.- Дункан

0 голосов
/ 19 февраля 2010

Это что-то вроде Обработка уровень сложности, за который вы стреляете?Обработка является хорошим примером использования полноценного языка (Java) и сокращения / упрощения доступного синтаксиса только для подмножества, применимого к проблемной области (проблемная область = визуализация в случае обработки).

ВотНебольшое параллельное сравнение с документами Обработки.

Java:

g.setColor(Color.black)
fillRect(0, 0, size.width, size.height);

Обработка:

background(0);

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

0 голосов
/ 19 февраля 2010

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

Тогда, когда у вас есть это, выберите язык. Почти наверняка вы захотите использовать DSL. И Руби, и Луа действительно хороши в этом, ИМО.

Как только вы начнете работать над этим, вы можете обнаружить, что вернулись к своему определению и настроили его. Но я думаю, что это правильный порядок действий.

0 голосов
/ 19 февраля 2010

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

0 голосов
/ 19 февраля 2010

Существующие языки являются "немного" низкоуровневыми "для моих целевых пользователей."

Все, что вам нужно, это "минимум поддержки циклической, простой арифметической оценки логического выражения"

Я не понимаю проблемы.Вы хотите только несколько функций.Что не так с предоставленным вами списком языков?Они действительно предлагают эти функции?

Что за разъединение?Не стесняйтесь обновить свой вопрос, чтобы узнать, в чем проблема.

...