Как использовать цикл for или Laaply для усечения случайной переменной t на биржевых данных для имитации цен опционов с использованием библиотеки foptions

Я генерирую список усеченных случайных t-переменных, затем загружаю цену закрытия акции (quantmod), затем генерирую список возможных случайных цен акций, когда я пытаюсь включить это в цикл в lapply или для каждого, случайные переменные не распознаются. Ниже мой код, функция lapply выдает ошибку:

library(truncdist)
library(quantmod)
library(fOptions)

randomT <- rt(4,6)
randomOut <- dtrunc(randomT, spec = "t", df = 6,a= -2, b= 2)
startDate <- as.Date("2018-01-01") 
# Specify period of time we are interested in
randomOut <- randomT
endDate <- as.Date("2019-05-09") 
getSymbols('SPY',src='yahoo',from = startDate,to = endDate)
SpRtn <- dailyReturn(SPY,type='arithmetic')

rtn <- sum(SPYreturns)
dev <- sd(SPYreturns)
vol <- dev*sqrt(250)
dt <- 1/250
current <- tail(SPY$SPY.Close,1)
dayRtn <- rtn*dt
dayVol <- vol*sqrt(dt)
guess <- function (randomOut) current * exp(dayRtn + Vol * randomOut)
expected <- lapply (randomOut, FUN = guess)

gsb <- function() {
    GBSOption (TypeFlag = "p", S = expected,
               X = 280,
               ime = 18/250,
               r = 0.022,
               b = 0,
               sigma =0.16
               )
}

lapply(expected, FUN = gsb)

Вы вывалили сюда много плохо отформатированного кода и попросили нас это исправить. Взгляните на Как создать минимальный воспроизводимый пример. Некоторые из них не имеют особого смысла: randomOut присваивается, а затем сразу перезаписывается, комментарии занимают несколько строк без #, а Vol используется в функции guess, но никогда не назначается (хотя vol есть). Кроме того, вы говорите, что функция в прилипчивая, но их две, и вы не говорите нам, какая из них вызывает проблемы. Пожалуйста, очистите свой код и сократите его до чего-то более управляемого.

user10191355 16.05.2019 15:45

Последняя лаппа не дает ответа, первая лаппа работает нормально. Функция vol в предположениях должна быть dayVol, а время в функции gsb написано с ошибкой.

Con Fluentsy 17.05.2019 21:51

Я признаю, что мой код плохой, но я новичок в кодировании на R, вы удалили некоторые важные части, необходимые для запуска, я добавляю, редактирую и публикую

Con Fluentsy 17.05.2019 22:00

error > lapply(ожидаемый, FUN = gsb) Ошибка в FUN(X[[i]], ...) : неиспользуемый аргумент (X[[i]]) >

Con Fluentsy 17.05.2019 22:04

исправлен код ниже, все еще с вышеуказанной ошибкой.

Con Fluentsy 17.05.2019 22:04

randomT <- rt(4,6) должна быть запущена первой строкой, затем строка randout<-randomT должна быть удалена

Con Fluentsy 17.05.2019 22:08

У меня проблемы с редактированием переполнения стека и с тем, как добавить код, это меня бесконечно смущает, инструкции могут иметь смысл для робота-человека, они определенно не удобны для обычного пользователя.

Con Fluentsy 17.05.2019 22:10

комментарии остались от вырезания и вставки,и не нужны были я забыл удалить на скорую руку.

Con Fluentsy 17.05.2019 22:15

Вместо того, чтобы просто перечислять проблемы с кодом, вы должны их исправить.

user10191355 18.05.2019 07:17

Я отформатировал ваш код, не изменяя его. Пожалуйста, посмотрите, как я это сделал.

user10191355 18.05.2019 07:18
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
10
43
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Я добавил комментарии, где были определенные проблемы. Пожалуйста, прочтите их и постарайтесь разобраться в каждом вопросе. Пожалуйста, поймите также, что мне пришлось высказать некоторые предположения о ваших намерениях, так как я действительно ничего не знаю об этой теме. Тем не менее, я смог заставить все работать, просто исправив имена некоторых переменных и убедившись, что объекты, передаваемые в функции, имеют правильный класс. В частности, GBSOption требует числовой переменной для S, но expected имеет класс xts. Вам нужно подмножить его чем-то вроде S = expected[[1]], чтобы он заработал.

Этот код должен работать, но я не могу гарантировать, что он делает то, что должен делать:

library(truncdist)
library(quantmod)
library(fOptions)

# You assign randomOut using dtrunc, then immediately overwrite it with 
# randomT. Is that a mistake?
randomT <- rt(4,6)
randomOut <- dtrunc(randomT, spec = "t", df = 6, a = -2, b = 2)
#randomOut <- randomT

# Specify period of time we are interested in
startDate <- as.Date("2018-01-01") 
endDate <- as.Date("2019-05-09") 

getSymbols('SPY', src = 'yahoo', from = startDate, to = endDate)
SpRtn <- dailyReturn(SPY, type = 'arithmetic')

# You use SPYreturns in your orginal code, but there is no assignment to 
# SPYreturns. Do you mean SpRtn?
rtn <- sum(SpRtn)
dev <- sd(SpRtn)
vol <- dev * sqrt(250)
dt <- 1/250
current <- tail(SPY$SPY.Close, 1)
dayRtn <- rtn*dt
dayVol <- vol*sqrt(dt)

# You use `Vol` in the `guess` function, but the variable is called `vol`.
guess <- function (randomOut) current * exp(dayRtn + vol * randomOut)
expected <- lapply (randomOut, FUN = guess)

gsb <- function(expected) {
    GBSOption (TypeFlag = "p",
               # This was probably your biggest issue. `expected` points to an
               # xts object, but you need numeric, which means you need to
               # extract the first SPY.Close value.
               S = expected[[1]],
               X = 280,
               # You had `ime` here, but you need `Time`.
               Time = 18/250,
               r = 0.022,
               b = 0,
               sigma =0.16
               )
}

lapply(expected, FUN = gsb)

Да, я ценю вашу тяжелую работу, это именно то, чего я намеревался достичь, вы выбрали ошибки, которые я обнаружил, а также семантические и синтаксические ошибки, которые я не мог понять. Это было сделано с некоторой поспешностью. это показывает, что традиционная финансовая теория утверждает, что доходность акций является логарифмически нормальной, это использовало крах торговых кризисов козырей, чтобы проверить, что цены действительно могут быть смоделированы в эти периоды с усеченным t-распределением с 6 степенями свободы, я оценивал возможный эффект на конкретную забастовку шпионских опций. Большое спасибо, как мне оставить положительный отзыв?

Con Fluentsy 19.05.2019 07:58

Я рад слышать, что это работает @nhoj. Вы можете оставить положительный отзыв, приняв его с помощью ✓ слева, а также проголосовав за ответ.

user10191355 19.05.2019 10:24

Другие вопросы по теме