2010-02-19 8 views
15

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

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

+1

Нужен ли вам ваш язык, или вам нужно знать, что он отойдет? – Earlz

ответ

10

Mark-Jason Dominus, автор Text::Template модуля в Perl, есть некоторые идеи, которые могут иметь отношение:

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

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

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

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

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

+2

Очень качественный ответ; Благодарю. Я думаю, большинство из нас должно понять, что мы не разработчики языка, мы разработчики! Мне нравится идея создания GUI-инструментов в сочетании со сценарием для моих опытных пользователей; поистине лучшее из обоих миров. – Pierreten

1

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

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

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

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

8

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

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

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

+1

Tcl отлично подходит для реализации DSL –

+3

Ruby особенно хорош для написания DSL (дополнительные скобки и блоки облегчают это). Посмотрите эту статью Мартина Фаулера на Ruby's Rake: http://martinfowler.com/articles/rake.html – horseyguy

0

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

0

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

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

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

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

+0

Отличная точка S.Lott, я допустил ошибку, не отделяя опытных пользователей от новичков. Я планирую включить Ruby для сценариев теперь для опытных пользователей. – Pierreten

0

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

0

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

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

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

0

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

Вот немного бок о бок сравнение с документами обработки.

Java:

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

Обработка:

background(0); 

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

1

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

0

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

1

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

Смежные вопросы