Реализация правила с функцией определения объёма ордера
В quantstrat объём актива, участвующего в сделке, не всегда является фиксированным количеством акций. Конструкции, позволяющие quantstrat варьировать количество покупаемых или продаваемых акций, называются функциями определения объёма ордера. Самостоятельная реализация такой функции с нуля выходит за рамки данного курса — из-за сложного дополнительного синтаксиса.
Однако использовать готовую функцию определения объёма ордера достаточно просто. Важно знать: при работе с такой функцией аргумент orderqty больше не используется, поскольку объём ордера определяется самой функцией. Вызов функции определения объёма ордера внутри add.rule() не представляет особой сложности. Её входные параметры передаются вместе с остальными аргументами, с которыми вы работали на протяжении всей этой главы.
В данном упражнении вы используете аргумент osFUN, чтобы указать функцию osMaxDollar. Она передаётся не в виде строки, а как объект — то есть имя функции определения объёма ордера не нужно заключать в кавычки.
Дополнительные аргументы этой функции — tradeSize и maxSize — оба должны принимать значение tradesize, которое вы определили в одной из предыдущих глав. Оно уже доступно в вашем рабочем пространстве.
Это упражнение является частью курса
Финансовый трейдинг на R
Инструкции к упражнению
- Команда
add.rule(), использованная в предыдущих упражнениях, выведена в вашем рабочем пространстве. - Добавьте функцию определения объёма ордера в это правило, указав аргументы
osFUN,tradeSizeиmaxSize.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
# Add a rule that uses an osFUN to size an entry position
add.rule(strategy = strategy.st, name = "ruleSignal",
arguments = list(sigcol = "longentry", sigval = TRUE, ordertype = "market",
orderside = "long", replace = FALSE, prefer = "Open",
# Use the osFUN called osMaxDollar
osFUN = ___,
# The tradeSize argument should be equal to tradesize (defined earlier)
tradeSize = ___,
# The maxSize argument should be equal to tradesize as well
maxSize = ___),
type = "enter")