R/bull.R

#' Visualization of Bull Market Spread Strategy
#' @description The bull() function generates a graph showing the profit and loss of bull spread trading strategies using call or put options. The reason why the bull market spreads strategy is constructed is that it is bullish on the market.
#' @note If there is a mutual occlusion problem in the image, you can run the dev. new () command first. If there is still occlusion problem, you can directly run bull command to call out the source code of the function, and eliminate the occlusion problem by modifying the corresponding graphic parameters.
#' @param K1 Execution Price of Option 1
#' @param opt1 Price of option 1
#' @param K2 Execution Price of Option 2
#' @param opt2 Price of Option 2
#' @param type Specifies whether to use call option or put option to carry bear market spread arbitrage. If it is a call option, use type = "call", indicating that the strategy is to buy a call option with a low execution price and sell a call option with a high execution price; if it is a put option, use type = "put", indicating that the strategy is to buy a put option with a low execution price and sell a put option with a high execution price. The default value is "call".
#' @examples
#' bull(K1 = 40, opt1 = 5, K2 = 60, opt2 = 3)
#' bull(K1 = 40, opt1 = 3, K2 = 45, opt2 = 5, type = "put")
#' @references
#' OTS package, WangXu <seniorwangxu@sina.com>
#' @seealso
#' \code{\link{bear}}, \code{\link{butterfly}}
#' @export
bull <- function (K1 = 40, opt1 = 5, K2 = 60, opt2 = 3, type = "call"){
  if (K1 >= K2)
    stop("K1 must small than K2")
  x = seq(K1 - 20, K2 + 20, 0.01)
  if (type == "call") {
    y1 = ifelse(x >= K1, x - K1 - opt1, -opt1)
    y2 = ifelse(x >= K2, K2 - x + opt2, opt2)
  }
  else if (type == "put") {
    y1 = ifelse(x <= K1, K1 - x - opt1, -opt1)
    y2 = ifelse(x <= K2, x - K2 + opt2, opt2)
  }
  y = y1 + y2
  plot(x, y, type = "l", ann = FALSE, ylim = c(min(y1, y2), max(y1, y2)), col = 2, lty = 1, lwd = 2)
  lines(x, y1, type = "l", col = 3, lty = 1, lwd = 1)
  lines(x, y2, type = "l", col = 4, lty = 1, lwd = 1)
  abline(h = 0, lty = 2)
  if (type == "call"){
    title(main = "Bull spread strategy using call options", xlab = "Stock price", ylab = "Payoff", cex.lab = 1)
    legend("topleft", c("Portfolio payoff", "Payoff from option with lower strike price", "Payoff of option with higher strike price"), col = 2:4, lty = 1, cex = 0.9)
  }
  else if (type == "put"){
    title(main = "Bull spread strategy using put options", xlab = "Stock price", ylab = "Payoff", cex.lab = 1)
    legend("bottomright", c("Portfolio payoff", "Payoff from option with lower strike price", "Payoff of option with higher strike price"), col = 2:4, lty = 1, cex = 0.75)
  }
}
czxa/FMFE documentation built on Nov. 6, 2019, 4:58 a.m.