Язык сценариев для разработки торговой стратегии
В настоящее время я работаю над компонентом торгового продукта, который позволит разработчику квантов или стратегий писать собственные собственные стратегии. Я, очевидно, не могу, чтобы они пишут эти стратегии на изначально скомпилированных языках (или даже на языке, который компилирует байт-код для работы на vm), так как их цикл dev/test должен составлять порядка минут.
Я смотрел на lua, python, ruby до сих пор и действительно наслаждался ими до сих пор, но все же нашел их небольшим "низким уровнем" для моих целевых пользователей. Должен ли я каким-то образом написать свой собственный синтаксический анализатор + интерпретатор, чтобы поддерживать язык с минимальной поддержкой цикла, простой арифметикой, анализом логических выражений или есть ли еще одна рекомендация, которую вы можете иметь? Заранее спасибо.
Ответы
Ответ 1
Марк-Джейсон Доминус, автор модуля Perl Text::Template, имеет некоторые идеи, которые могут иметь значение:
Когда люди создают модуль шаблона как этот, они почти всегда начните с разработки специального синтаксиса для подстановок. Например, они постройте его так, чтобы строка вроде %% VAR %% заменяется значением $VAR. Затем они осознают необходимость дополнительных форматирование, поэтому они вставляют некоторые специальный синтаксис для форматирования. затем им нужен цикл, поэтому они придумывают синтаксис цикла. Довольно скоро у них есть новый маленький язык шаблонов.
Этот подход имеет две проблемы: во-первых, их маленький язык испорчен. Если вам нужно что-то сделать автору не думал, вы проигрываете. Во-вторых: Кто хочет изучать другой язык?
Если вы пишете свой собственный мини-язык, вы можете оказаться в том же затруднительном положении - сохранить грамматику и парсер для инструмента, искалеченного дизайном.
Если настоящий язык программирования выглядит слишком низкоуровневым, решение может не состоять в том, чтобы отказаться от языка, а вместо этого предоставить вашим конечным пользователям функции полезности более высокого уровня, чтобы они могли работать со знакомыми понятиями, не заботясь вниз в сорняках основного языка.
Это позволяет начинающим пользователям работать на высоком уровне; однако вы и все конечные пользователи, обладающие ловкостью для него - ваши суперпользователи, все еще можете использовать всю мощь Ruby или Python или что-то еще.
Ответ 2
Похоже, вам может понадобиться создать какой-то доменный язык (DSL) для ваших пользователей, который может быть построен свободно на целевом языке. Ruby, Python и Lua имеют свои различные особенности в отношении синтаксиса, и в какой-то степени некоторые из них можно массировать с помощью умных определений функций.
Примером довольно надежного DSL является Cucumber, который реализует интересную стратегию преобразования пользовательских формулировок в фактический исполняемый код через серия регулярных выражений, применяемых к входным данным.
Другим кандидатом может быть JavaScript или какой-то DSL-мост для JavaScript, поскольку это позволит стратегии запускать клиентскую или серверную сторону. Это может помочь масштабировать ваше приложение, поскольку клиентские компьютеры часто имеют избыточную вычислительную мощность по сравнению с загруженным сервером.
Ответ 3
Вам понадобятся специально разработанные модули, независимо от того, что вы выберете, которые определяют ваши фирменные конструкции высокого уровня.
Вот некоторые из потребностей, которые я себе представляю - у вас могут быть некоторые из них уже рассмотрены: способ получить текущие и текущие и исторические кавычки, предыдущие данные о производительности и т.д. в приложение. Определить/опробовать/отправить различные виды заказов (ограничение/рынок/остановка, обмен, триггеры) или параметры параметров и т.д. Вам, вероятно, понадобятся несколько песочниц для тестирования, а также реальная вещь.
Quants хотят иметь возможность выполнять матричные операции, стохастическое исчисление, PDE.
Если вы хотите сделать это на python, загрузка NumPy станет началом.
Вы также можете начать с проприетарной системы, предназначенной для проведения математических финансовых исследований, таких как нечто, построенное на основе Mathematica или Matlab.
Ответ 4
Я работал над Алгоритмической торговой библиотекой Python (на самом деле для бэктестинга, а не для реальной торговли). Вы можете взглянуть на это: http://gbeced.github.com/pyalgotrade/
Ответ 5
Откажитесь от http://www.tadeveloper.com для фреймворка с использованием MATLAB в качестве языка сценариев. Преимущество MATLAB в том, что оно очень мощное, но вам не нужно быть программистом для его использования.
Ответ 6
Это может быть немного упрощенным, но многие пользователи квантов используются для работы с макросами Excel и VBA. Может быть, что-то вроде VBSCript можно использовать, так как они могут иметь некоторый опыт в этой области.
Ответ 7
Существующие языки "немного" низкого уровня для моих целевых пользователей.
Тем не менее, все, что вам нужно, это "минимум поддержки для циклизации, простой арифметики, оценки логического выражения"
У меня проблемы. Вам нужно только несколько функций. Что случилось со списком языков, которые вы предоставили? Они действительно предлагают эти функции?
Что отключает? Не стесняйтесь обновлять свой вопрос, чтобы расширить проблему.
Ответ 8
Я бы использовал Common Lisp, который поддерживает быструю разработку (у вас есть запущенное изображение и может компилировать/перекомпилировать отдельные функции) и адаптировать язык к вашему домену. Вы должны предоставлять функции и макросы в качестве строительных блоков для выражения стратегий, и весь язык будет доступен пользователю для их объединения.
Ответ 9
Определите язык первым - если возможно, используйте псевдоязык, называемый EBN, это очень просто (см. запись в Википедии).
Затем, как только вы это сделаете, выберите язык. Почти наверняка вы захотите использовать DSL. Ruby и Lua оба действительно хороши в этом, IMO.
Как только вы начнете работать над ним, вы можете обнаружить, что вернетесь к своему определению и настройте его. Но я думаю, что правильный порядок делать что-то.
Ответ 10
Есть ли что-то вроде Processing уровня сложности, на который вы стреляете? Обработка - хороший пример использования полномасштабного языка (Java) и сокращения/упрощения доступного синтаксиса только к подмножеству, применимому к проблемному домену (проблема domain = визуализация в случае обработки).
Здесь немного бок о бок сравнение из документов обработки.
Java:
g.setColor(Color.black)
fillRect(0, 0, size.width, size.height);
Обработка:
background(0);
Как и другие, вы можете просто написать достаточно высокоуровневых функций, так что большая часть сложности скрыта от пользователя, но вы по-прежнему сохраняете возможность делать более низкоуровневые вещи, когда это необходимо. Язык Wiring для Arduino следует этой стратегии использования тонкого слоя высокоуровневых функций поверх С, чтобы сделать его более доступный не программистам и любителям.
Ответ 11
Я был в том же здании лодки и торговал с моим собственным программным обеспечением. Java невелика, потому что вы хотите что-то более высокое, как вы говорите. У меня был большой успех, используя проект eclipse xtext. http://www.eclipse.org/Xtext Он выполняет всю сантехническую обработку парсеров и т.д. для вас и используя eclipse, вы можете быстро генерировать код с помощью функциональных редакторов. Я предлагаю изучить это, поскольку вы также рассматриваете другие варианты. Это в сочетании с платформой моделирования eclipse очень мощно для быстрого создания DSL, который звучит так, как вам нужно. - Дункан