Язык сценариев для разработки торговой стратегии

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

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

15
задан mob 15 June 2016 в 11:55
поделиться

8 ответов

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

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

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

-121--2402883-

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

# if we presuppose that <b>a</b> is object from @Aniko's reply
> class(a)
[1] "anova"      "data.frame"
# after doing a bit of that sapply magic you get
> a
Analysis of Deviance Table

Model 1: y ~ x
Model 2: y ~ x + I(x^2)
               Resid. Df Resid. Dev Df Deviance
y ~ x                  8     15.503            
y ~ x + I(x^2)         7     12.060  1   3.4428

Вы можете сделать что-то подобное:

# load xtable library
library(xtable)
# sink output to html file
sink("~/anova_specs.html")  # suppose you're running R on Linux "~/"
print(xtable(a), type = "html")
sink()

Это не так красиво, как таблица LaTeX, но она имеет формулу модели...

-121--4998109-

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

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

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

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

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

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

10
ответ дан 1 December 2019 в 03:34
поделиться

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

0
ответ дан 1 December 2019 в 03:34
поделиться

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

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

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

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

0
ответ дан 1 December 2019 в 03:34
поделиться

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

0
ответ дан 1 December 2019 в 03:34
поделиться

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

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

Java:

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

Processing:

background(0);

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

0
ответ дан 1 December 2019 в 03:34
поделиться

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

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

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

8
ответ дан 1 December 2019 в 03:34
поделиться

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

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

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

0
ответ дан 1 December 2019 в 03:34
поделиться

Раздел Миграция из Cocoa Touch в разделе Обзор технологии ОС iPhone предоставляет хороший обзор различий со ссылками на более конкретные документы для каждого уровня.

Большим отличием является уровень пользовательского интерфейса. На Mac у вас есть рамка AppKit, на iPhone - UIKit. Меньшие различия наблюдаются в структуре Фонда (см. выше).

-121--1155586-

Это зависит от реализации ОС, но обычно существует структура данных «планируемого потока» для повышения эффективности.

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

-121--4690605-

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

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

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

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

1
ответ дан 1 December 2019 в 03:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: