Exemplo n.º 1
0
	    initial_volatility = volatility #not the variance, this is the square root of the variance
	    volatility_volatility = 0.0
	    rho = 0.0
	    kappa = 0.0
	    theta = 0.0
	    
	points = points
	underlying_heston_I = [Heston.Heston(rfir=rfir,current_price=current_price,initial_volatility=initial_volatility,volatility_volatility=volatility_volatility,rho=rho,kappa=kappa,theta=theta)]
	underlying_heston_II = [Heston.Heston(rfir=rfir,current_price=current_price,initial_volatility=initial_volatility,volatility_volatility=volatility_volatility,rho=rho,kappa=kappa,theta=theta)]
	underlying_heston_III = [Heston.Heston(rfir=rfir,current_price=current_price,initial_volatility=initial_volatility,volatility_volatility=volatility_volatility,rho=rho,kappa=kappa,theta=theta)]
	underlying_heston_IV = [Heston.Heston(rfir=rfir,current_price=current_price,initial_volatility=initial_volatility,volatility_volatility=volatility_volatility,rho=rho,kappa=kappa,theta=theta)]
	underlying_heston_V = [Heston.Heston(rfir=rfir,current_price=current_price,initial_volatility=initial_volatility,volatility_volatility=volatility_volatility,rho=rho,kappa=kappa,theta=theta)]
	underlying_heston_VI = [Heston.Heston(rfir=rfir,current_price=current_price,initial_volatility=initial_volatility,volatility_volatility=volatility_volatility,rho=rho,kappa=kappa,theta=theta)]
	underlying_black_scholes_VII = [Black_Scholes.Black_Scholes(rfir=rfir,current_price=current_price,volatility=volatility)]
	    
	if(option_number=="1"): derivative.append(European_Option.European_Option(underlying_heston_II,call=call,strike_price=strike_price,time_period=time_period,points=points))
	  
	elif((option_number=="2")or(option_number=="3")or(option_number=="11")):
	  if(option_number=="2"): derivative.append(Barrier_Option.Barrier_Option(underlying_heston_II,call=call,strike_price=strike_price,time_period=time_period,points=points,out=out,barrier=barrier,down=down))
	  elif(option_number=="3"): derivative.append(Barrier_Option.Barrier_Option(underlying_heston_IV,call=call,strike_price=strike_price,time_period=time_period,points=points,out=out,barrier=barrier,down=down))
	  elif(option_number=="11"): derivative.append(Barrier_Option.Barrier_Option(underlying_heston_I,call=call,strike_price=strike_price,time_period=time_period,points=points,out=out,barrier=barrier,down=down))
	
	elif(option_number=="12"): derivative.append(Digital_Double_Barrier_Option.Digital_Double_Barrier_Option(underlying_heston_IV,call=call,strike_price=strike_price,time_period=time_period,points=points,out=out,barrier=barrier,down=down,second_barrier=second_barrier))
	  
	elif(option_number=="13"): derivative.append(Asian_Option.Asian_Option(underlying_black_scholes_VII,call=call,strike_price=strike_price,time_period=time_period,points=points))
	  
	else:
	  if(option_number=="4"): derivative.append(Double_Barrier_Option.Double_Barrier_Option(underlying_heston_III,call=call,strike_price=strike_price,time_period=time_period,points=points,out=out,barrier=barrier,down=down,second_barrier=second_barrier))
	  elif(option_number=="5"): derivative.append(Double_Barrier_Option.Double_Barrier_Option(underlying_heston_I,call=call,strike_price=strike_price,time_period=time_period,points=points,out=out,barrier=barrier,down=down,second_barrier=second_barrier))
	  elif(option_number=="6"): derivative.append(Double_Barrier_Option.Double_Barrier_Option(underlying_heston_IV,call=call,strike_price=strike_price,time_period=time_period,points=points,out=out,barrier=barrier,down=down,second_barrier=second_barrier))
	  elif(option_number=="7"): derivative.append(Double_Barrier_Option.Double_Barrier_Option(underlying_heston_V,call=call,strike_price=strike_price,time_period=time_period,points=points,out=out,barrier=barrier,down=down,second_barrier=second_barrier))
Exemplo n.º 2
0
def generate_option(seed=1234,underlying_type="underlying",option_type="option",rfir_range=(0.0,0.1),current_price_range=(100,100),volatility_range=(0.0384,0.15),volatility_volatility_range=(0.425,1.0),rho_range=(-0.4644,0),kappa_range=(0.5,2.75),theta_range=(0.035,0.35),strike_price_range=(90,120),time_period_range=(1.0,5.0),barrier_range=(110,150),second_barrier_range=(66,90)):
    
    numpy.random.seed(int(seed))
    
    #Underlying
    rfir = numpy.random.random()*abs(rfir_range[1]-rfir_range[0]) + rfir_range[0]
    current_price = 100 #numpy.random.randint(current_price_range[0],current_price_range[1])
    
    #Underlying Type
    underlying_type_code = numpy.random.randint(0,13)
    
    if(underlying_type_code == 0 and underlying_type=="underlying"): underlying_type = "black_scholes"
    elif(underlying_type=="underlying"): underlying_type = "heston"
    
    if(underlying_type=="black_scholes"):
        volatility = numpy.random.random()*abs(volatility_range[1]-volatility_range[0]) + volatility_range[0]
        underlying = Black_Scholes.Black_Scholes(rfir,current_price,volatility)
        
    elif(underlying_type=="heston"):
        initial_volatility = numpy.random.random()*abs(volatility_range[1]-volatility_range[0]) + volatility_range[0]
        volatility_volatility = numpy.random.random()*abs(volatility_volatility_range[1]-volatility_volatility_range[0]) + volatility_volatility_range[0]
        rho = numpy.random.random()*abs(rho_range[1]-rho_range[0]) + rho_range[0]
        kappa = numpy.random.random()*abs(kappa_range[1]-kappa_range[0]) + kappa_range[0]
        theta = numpy.random.random()*abs(theta_range[1]-theta_range[0]) + theta_range[0]
        underlying = Heston.Heston(rfir,current_price,initial_volatility,volatility_volatility,rho,kappa,theta)
        
    else:
        underlying = Underlying.Underlying(rfir,current_price)
        
    #Option
    strike_price = numpy.random.randint(strike_price_range[0],strike_price_range[1])
    time_period = numpy.random.randint(time_period_range[0],time_period_range[1])
    call = numpy.random.randint(0,2)
    
    #Option Type
    option_type_code = numpy.random.randint(0,13)
    
    if(option_type=="option"):
        if(option_type_code == 0): option_type = "european"
        elif(0 < option_type_code < 4): option_type = "barrier"
        elif(3 < option_type_code < 11): option_type = "double_barrier"
        elif(option_type_code == 11): option_type = "digital_double_barrier"
        elif(option_type_code == 12): option_type = "asian"
    
    if(option_type=="european"):
        
        option = European_Option.European_Option([underlying],time_period,call,strike_price)
    elif(option_type=="asian"):
        points = 4096
        
        option = Asian_Option.Asian_Option([underlying],time_period,call,strike_price,points)
    elif(option_type=="barrier"):
        points = 4096
        barrier = numpy.random.randint(barrier_range[0],barrier_range[1])
        out = int(numpy.random.randint(0,3)>0)
        down = int(barrier<current_price)
        
        option = Barrier_Option.Barrier_Option([underlying],time_period,call,strike_price,points,barrier,out,down)
        
    elif(option_type=="double_barrier"):
        points = 4096
        second_barrier = numpy.random.randint(barrier_range[0],barrier_range[1])
        barrier = numpy.random.randint(second_barrier_range[0],second_barrier_range[1])
        out = int(numpy.random.randint(0,9)>0)
	down = 1.0
        
        option = Double_Barrier_Option.Double_Barrier_Option([underlying],time_period,call,strike_price,points,barrier,out,down,second_barrier)
        
    elif(option_type=="digital_double_barrier"):
        points = 4096
        second_barrier = numpy.random.randint(barrier_range[0],barrier_range[1])
        barrier = numpy.random.randint(second_barrier_range[0],second_barrier_range[1])
        out = int(numpy.random.randint(0,9)>0)
	down = 1.0
        
        option = Digital_Double_Barrier_Option.Digital_Double_Barrier_Option([underlying],time_period,call,strike_price,points,barrier,out,down,second_barrier)
    else: 
        option = Option.Option([underlying],time_period,call,strike_price)
        
    return option
Exemplo n.º 3
0
                          initial_volatility=initial_volatility,
                          volatility_volatility=volatility_volatility,
                          rho=rho,
                          kappa=kappa,
                          theta=theta)
        ]
        underlying_black_scholes_VII = [
            Black_Scholes.Black_Scholes(rfir=rfir,
                                        current_price=current_price,
                                        volatility=volatility)
        ]

        if (option_number == "1"):
            derivative.append(
                European_Option.European_Option(underlying_heston_II,
                                                call=call,
                                                strike_price=strike_price,
                                                time_period=time_period))

        elif ((option_number == "2") or (option_number == "3")
              or (option_number == "11")):
            if (option_number == "2"):
                derivative.append(
                    Barrier_Option.Barrier_Option(underlying_heston_II,
                                                  call=call,
                                                  strike_price=strike_price,
                                                  time_period=time_period,
                                                  points=points,
                                                  out=out,
                                                  barrier=barrier,
                                                  down=down))
            elif (option_number == "3"):
if (__name__ == '__main__' and len(sys.argv) > 3):
    platform_name = sys.argv[1]
    platform_arg = sys.argv[2]

    paths = int(sys.argv[3])

    underlying_I = Black_Scholes.Black_Scholes(rfir=0.12,
                                               current_price=52,
                                               volatility=0.30)
    underlying_II = Black_Scholes.Black_Scholes(rfir=0.06,
                                                current_price=90,
                                                volatility=0.20)
    options = [
        European_Option.European_Option([underlying_I],
                                        call=1.0,
                                        strike_price=50,
                                        time_period=0.25),
        European_Option.European_Option([underlying_II],
                                        call=1.0,
                                        strike_price=95,
                                        time_period=1.00),
        Barrier_Option.Barrier_Option([underlying_I],
                                      call=1.0,
                                      strike_price=50,
                                      time_period=0.25,
                                      barrier=100,
                                      out=1.0,
                                      down=0.0,
                                      points=int(252 * 0.25)),
        Barrier_Option.Barrier_Option([underlying_II],
                                      call=True,
 theta = 0.035
 
 #Kaiserslatuarn Option Number 5
 strike_price = 90
 barrier = 80.0
 second_barrier = 120
 out = 1.0
 call = 1.0
 down = 0.0
 
 parameter_set = "I"
 reference_value = 5.7576
 
 underlying = [Heston.Heston(rfir=rfir,current_price=current_price,initial_volatility=initial_volatility,volatility_volatility=volatility_volatility,rho=rho,kappa=kappa,theta=theta)]
 #option = [Double_Barrier_Option.Double_Barrier_Option(underlying,call=call,strike_price=strike_price,time_period=time_period,points=points,out=out,barrier=barrier,second_barrier=second_barrier,down=down)]
 option = [European_Option.European_Option(underlying,call=call,strike_price=strike_price,time_period=time_period,points=points)]
 
 
 multicore_cpu_platform = MulticoreCPU.MulticoreCPU(threads)
 
 mc_solver = MulticoreCPU_MonteCarlo.MulticoreCPU_MonteCarlo(option,paths,multicore_cpu_platform)
 mc_solver.generate()
 compile_output = mc_solver.compile()
 
 latency_error_plot = []
 confidence_interval_error_plot = []
 for i in range(1,11):
   #Speculative Step
   speculative_paths = 1000*i
   mc_solver.solver_metadata["paths"] = speculative_paths
   execution_output = mc_solver.execute()
Exemplo n.º 6
0
 volatility_volatility = 0.425
 rho = -0.4644
 kappa = 2.75
 theta = 0.035
 
 #Kaiserslatuarn Option Number 5
 strike_price = 90
 barrier = 80.0
 second_barrier = 120
 out = 1.0
 call = 1.0
 down = 0.0
 
 parameter_set = "I"
 reference_value = 5.7576
 
 #underlying = [Underlying.Underlying(rfir,current_price)]
 #option = [Option.Option(underlying,time_period,call,strike_price)]
 
 underlying = [Heston.Heston(rfir=rfir,current_price=current_price,initial_volatility=initial_volatility,volatility_volatility=volatility_volatility,rho=rho,kappa=kappa,theta=theta)]
 option = [Double_Barrier_Option.Double_Barrier_Option(underlying,call=call,strike_price=strike_price,time_period=time_period,points=points,out=out,barrier=barrier,second_barrier=second_barrier,down=down)]
 option.append(European_Option.European_Option(underlying,call=call,strike_price=strike_price,time_period=time_period))
 
 multicore_cpu_platform = MulticoreCPU.MulticoreCPU()
 
 mc_solver = MulticoreCPU_MonteCarlo.MulticoreCPU_MonteCarlo(option,paths,multicore_cpu_platform)
 mc_solver.generate()
 compile_output = mc_solver.compile()
 execution_output = mc_solver.execute()
 
 print execution_output
Exemplo n.º 7
0
def KS_Options(option_numbers=[]):
  derivative = []
  
  for i in option_numbers: 
    option_number = str(i)
    
    call = 1.0
    down = 0.0
    if(option_number=="1"):
	#Kaiserslatuarn Option Number 1
	strike_price = 100
	
	parameter_set = "II"
	reference_value = 34.9998

    elif(option_number=="2"):
	#Kaiserslatuarn Option Number 2
	strike_price = 100
	barrier = 120.0
	out = 1.0
	down = 0.0
	
	parameter_set = "II"
	reference_value = 0.10280
	
    elif(option_number=="3"):
	#Kaiserslatuarn Option Number 3
	strike_price = 100
	barrier = 120.0
	out = 1.0
	down = 0.0
	
	parameter_set = "IV"
	reference_value = 0.31606
	
    elif(option_number=="4"):
	#Kaiserslatuarn Option Number 4
	strike_price = 100
	barrier = 90.0
	second_barrier = 110
	out = 1.0
	
	parameter_set = "III"
	reference_value = 0.74870
	
    elif(option_number=="5"):
	#Kaiserslatuarn Option Number 5
	strike_price = 90
	barrier = 80.0
	second_barrier = 120
	out = 1.0
	
	parameter_set = "I"
	reference_value = 5.7576
	
    elif(option_number=="6"):
	#Kaiserslatuarn Option Number 6
	strike_price = 100
	barrier = 66
	second_barrier = 150
	out = 1.0
	
	parameter_set = "IV"
	reference_value = 3.0421
	
    elif(option_number=="7"):
	#Kaiserslatuarn Option Number 7
	strike_price = 90
	barrier = 66
	second_barrier = 150
	out = 1.0
	
	parameter_set = "V"
	reference_value = 0.017117
	
    elif(option_number=="8"):
	#Kaiserslatuarn Option Number 8
	strike_price = 100
	barrier = 66
	second_barrier = 150
	out = 1.0
	
	parameter_set = "VI"
	reference_value = 0.82286

    elif(option_number=="9"):
	#Kaiserslatuarn Option Number 9
	strike_price = 100
	barrier = 80
	second_barrier = 120
	out = 1.0
	call = 0.0
	
	parameter_set = "I"
	reference_value = 1.5294

    elif(option_number=="10"):
	#Kaiserslatuarn Option Number 10
	strike_price = 120
	barrier = 66
	second_barrier = 150
	out = 1.0
	
	parameter_set = "VI"
	reference_value = 0.17167

    elif(option_number=="11"):
	#Kaiserslatuarn Option Number 11
	strike_price = 100
	barrier = 120.0
	out = 0.0
	down = 0.0
	
	parameter_set = "I"
	reference_value = 4.9783

    elif(option_number=="12"):
	#Kaiserslatuarn Option Number 12
	strike_price = 100
	barrier = 66.0
	second_barrier = 150.0
	out = 1.0
	down = 0.0
	
	parameter_set = "IV"
	reference_value = 0.16805
	
    elif(option_number=="13"):
	strike_price = 105
	
	parameter_set = "VII"
	reference_value = 21.107505918279124 #26.090881

    current_price = 100

    if(parameter_set=="I"):
	#Kaiserslatuarn Parameter set I
	rfir = 0
	volatility = 0.0384
	time_period = 1

	initial_volatility = volatility #not the variance, this is the square root of the variance
	volatility_volatility = 0.425
	rho = -0.4644
	kappa = 2.75
	theta = 0.035

    elif(parameter_set=="II"):
	#Kaiserslatuarn Parameter set II
	rfir = 0.05
	volatility = 0.09
	time_period = 5

	initial_volatility = volatility #not the variance, this is the square root of the variance
	volatility_volatility = 1
	rho = -0.3
	kappa = 2
	theta = 0.09
	
    elif(parameter_set=="III"):
	#Kaiserslatuarn Parameter set III
	rfir = 0
	volatility = 0.04
	time_period = 1

	initial_volatility = volatility #not the variance, this is the square root of the variance
	volatility_volatility = 1
	rho = 0
	kappa = 0.5
	theta = 0.04
	
    elif(parameter_set=="IV"):
	#Kaiserslatuarn Parameter set IV
	rfir = 0
	volatility = 0.09
	time_period = 5

	initial_volatility = volatility #not the variance, this is the square root of the variance
	volatility_volatility = 1
	rho = -0.3
	kappa = 1
	theta = 0.09
	
    elif(parameter_set=="V"):
	#Kaiserslatuarn Parameter set V
	rfir = 0.08
	volatility = 0.04
	time_period = 10

	initial_volatility = volatility #not the variance, this is the square root of the variance
	volatility_volatility = 1
	rho = -0.9
	kappa = 0.5
	theta = 0.04
	
    elif(parameter_set=="VI"):
	#Kaiserslatuarn Parameter set VI
	rfir = 0
	volatility = 0.384
	time_period = 1

	initial_volatility = volatility #not the variance, this is the square root of the variance
	volatility_volatility = 0.425
	rho = -0.4644
	kappa = 2.75
	theta = 0.35
	
    elif(parameter_set=="VII"):
	#Asian Option Parameter Set
	rfir = 0.1
	volatility = 0.15
	time_period = 10
	
	initial_volatility = volatility #not the variance, this is the square root of the variance
	volatility_volatility = 0.0
	rho = 0.0
	kappa = 0.0
	theta = 0.0
	
    points = 4096
    #points = time_period*252 #Its assumed that there is a point for every trading day
    
    underlying_heston_I = [Heston.Heston(rfir=rfir,current_price=current_price,initial_volatility=initial_volatility,volatility_volatility=volatility_volatility,rho=rho,kappa=kappa,theta=theta)]
    underlying_heston_II = [Heston.Heston(rfir=rfir,current_price=current_price,initial_volatility=initial_volatility,volatility_volatility=volatility_volatility,rho=rho,kappa=kappa,theta=theta)]
    underlying_heston_III = [Heston.Heston(rfir=rfir,current_price=current_price,initial_volatility=initial_volatility,volatility_volatility=volatility_volatility,rho=rho,kappa=kappa,theta=theta)]
    underlying_heston_IV = [Heston.Heston(rfir=rfir,current_price=current_price,initial_volatility=initial_volatility,volatility_volatility=volatility_volatility,rho=rho,kappa=kappa,theta=theta)]
    underlying_heston_V = [Heston.Heston(rfir=rfir,current_price=current_price,initial_volatility=initial_volatility,volatility_volatility=volatility_volatility,rho=rho,kappa=kappa,theta=theta)]
    underlying_heston_VI = [Heston.Heston(rfir=rfir,current_price=current_price,initial_volatility=initial_volatility,volatility_volatility=volatility_volatility,rho=rho,kappa=kappa,theta=theta)]
    underlying_black_scholes_VII = [Black_Scholes.Black_Scholes(rfir=rfir,current_price=current_price,volatility=volatility)]
	
    if(option_number=="1"): derivative.append(European_Option.European_Option(underlying_heston_II,call=call,strike_price=strike_price,time_period=time_period))
      
    elif((option_number=="2")or(option_number=="3")or(option_number=="11")):
      if(option_number=="2"): derivative.append(Barrier_Option.Barrier_Option(underlying_heston_II,call=call,strike_price=strike_price,time_period=time_period,points=points,out=out,barrier=barrier,down=down))
      elif(option_number=="3"): derivative.append(Barrier_Option.Barrier_Option(underlying_heston_IV,call=call,strike_price=strike_price,time_period=time_period,points=points,out=out,barrier=barrier,down=down))
      elif(option_number=="11"): derivative.append(Barrier_Option.Barrier_Option(underlying_heston_I,call=call,strike_price=strike_price,time_period=time_period,points=points,out=out,barrier=barrier,down=down))
    
    elif(option_number=="12"): derivative.append(Digital_Double_Barrier_Option.Digital_Double_Barrier_Option(underlying_heston_IV,call=call,strike_price=strike_price,time_period=time_period,points=points,out=out,barrier=barrier,down=down,second_barrier=second_barrier))
      
    elif(option_number=="13"): derivative.append(Asian_Option.Asian_Option(underlying_black_scholes_VII,call=call,strike_price=strike_price,time_period=time_period,points=points))
      
    else:
      if(option_number=="4"): derivative.append(Double_Barrier_Option.Double_Barrier_Option(underlying_heston_III,call=call,strike_price=strike_price,time_period=time_period,points=points,out=out,barrier=barrier,down=down,second_barrier=second_barrier))
      elif(option_number=="5"): derivative.append(Double_Barrier_Option.Double_Barrier_Option(underlying_heston_I,call=call,strike_price=strike_price,time_period=time_period,points=points,out=out,barrier=barrier,down=down,second_barrier=second_barrier))
      elif(option_number=="6"): derivative.append(Double_Barrier_Option.Double_Barrier_Option(underlying_heston_IV,call=call,strike_price=strike_price,time_period=time_period,points=points,out=out,barrier=barrier,down=down,second_barrier=second_barrier))
      elif(option_number=="7"): derivative.append(Double_Barrier_Option.Double_Barrier_Option(underlying_heston_V,call=call,strike_price=strike_price,time_period=time_period,points=points,out=out,barrier=barrier,down=down,second_barrier=second_barrier))
      elif(option_number=="8"): derivative.append(Double_Barrier_Option.Double_Barrier_Option(underlying_heston_VI,call=call,strike_price=strike_price,time_period=time_period,points=points,out=out,barrier=barrier,down=down,second_barrier=second_barrier))
      elif(option_number=="9"): derivative.append(Double_Barrier_Option.Double_Barrier_Option(underlying_heston_I,call=call,strike_price=strike_price,time_period=time_period,points=points,out=out,barrier=barrier,down=down,second_barrier=second_barrier))
      elif(option_number=="10"): derivative.append(Double_Barrier_Option.Double_Barrier_Option(underlying_heston_VI,call=call,strike_price=strike_price,time_period=time_period,points=points,out=out,barrier=barrier,down=down,second_barrier=second_barrier))   

  return derivative