Скриптовый язык для разработки торговой стратегии

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

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


person Pierreten    schedule 19.02.2010    source источник
comment
Должен ли ваш язык быть завершенным по Тьюрингу или вам нужно знать, что он остановится?   -  person Earlz    schedule 19.02.2010


Ответы (11)


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

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

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

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

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

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

person FMc    schedule 19.02.2010
comment
Очень качественный ответ; благодаря. Думаю, большинству из нас следует понять, что мы не дизайнеры языков, мы — разработчики! Мне нравится идея разработки инструментов на основе графического интерфейса в сочетании с интерфейсом сценария для моих опытных пользователей; действительно лучшее из обоих миров. - person Pierreten; 20.02.2010

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

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

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

person tadman    schedule 19.02.2010
comment
Ruby особенно хорош для написания DSL (необязательные круглые скобки и блоки облегчают это). Прочтите эту статью Мартина Фаулера о Ruby's Rake: martinfowler.com/articles/rake.html - person horseyguy; 19.02.2010

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

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

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

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

person Paul    schedule 19.02.2010

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

person Gabriel Becedillas    schedule 14.04.2012

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

person TA Developer    schedule 22.12.2012

Это может быть немного упрощенным, но многие пользователи Quant привыкли работать с макросами Excel и VBA. Можно ли использовать что-то вроде VBSCript, поскольку у них может быть некоторый опыт в этой области.

person Paddy    schedule 19.02.2010

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

Тем не менее, все, что вам нужно, это «минимум поддержки циклов, простой арифметики, логической оценки выражений».

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

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

person S.Lott    schedule 19.02.2010
comment
Отличное замечание, С.Лотт, я совершил ошибку, не отделив опытных пользователей от новичков. Я планирую включить Ruby для написания сценариев для упомянутых опытных пользователей. - person Pierreten; 20.02.2010

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

person Svante    schedule 19.02.2010

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

Вот небольшое сравнение из документации Processing.

Ява:

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

Обработка:

background(0);

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

person awesomo    schedule 19.02.2010

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

Затем, как только вы это сделаете, выберите язык. Почти наверняка вы захотите использовать DSL. Ruby и Lua действительно хороши в этом, IMO.

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

person Shadowfirebird    schedule 19.02.2010

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

person Duncan Krebs    schedule 05.08.2012