1.
Best Programming Languages for Finance & FinTech in 2022을 보면 금융에서 가장 많이 필요로 하는 언어를 순서대로 정리하고 있습니다. 예상대로 Python의 순위가 가장 높네요. 데이타, 기계학습하면 떠오르는 언어이기 때문입니다.또다른 Best Programming Languages for Finance & Fintech in 2022을 보더라도 역시나 Python이 높습니다. 그 기사를 비교해서 보면 가장 큰 차이점은 Scala입니다. 나라마다 환경이 다르니까 순위도 차이가 있는 듯 합니다. 저와 같은 또래들이 가장 많이 사용하였던 C/C++의 순위는 떨어지지 않지만 그렇다고 오르지도 않습니다. 생산성과 CI/CD 및 애자일이 중요한 문화에서 C++의 지위가 높아지기 힘들어 보입니다. 그럼에도 불구하고 여러가지 이유로 – 가장 중요한 점은 속도 – C++을 배우고자 하는 사람, 그 중에서 금융실뭉에 적용해보고자 하는 사람을 위한 책입니다.
Financial analysis and investment using language programming C++
저자는 유명한 분은 아닙니다. Michel Guirguis인데 그리스 분입니다. SSRN에 올라온 논문을 보면 주로 실용적인 논문으로 암호통화, 헤지펀드와 관련한 내용을 다루고 있습니다. 위 논문을 보면 금융회사에 다니는 사람이 C++를 이용하여 금융실무를 할 수 있도록 안내합니다. 예를 소개합니다. Calculation of portfolio variance and standard deviation을 다루고자 합니다.
위 과제를 C++로 어떻게 구현할까요? 위 책은 아래와 같이 보여줍니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
// Calculation of portfolio variance and standard deviation. #include <iostream> #include<cmath> using namespace std; int main() { //Identify the variables. double WeightShare = 0.80; double StandardDeviationShare = 0.20; double WeightSilver= 0.20; double StandardDeviationSilver = 0.12; double Variance; double StandardDeviationPercentage; /* Insert the mathematical formulas.As correlation is zero, we do not include the last part of the equation.*/ Variance =pow(WeightShare*StandardDeviationShare,2)+ pow(WeightSilver*StandardDeviationSilver,2) ; StandardDeviationPercentage = sqrt(Variance)*100; // Output functions. 209 Electronic copy available at: https://ssrn.com/abstract=3854475cout<< " Variance :"<< Variance <<endl; cout<< " Standard deviation Percentage :"<< StandardDeviationPercentage <<endl; system ("PAUSE"); return 0; } |
또다른 예입니다. Compare the call option price using a Jarrow – Rudd, (JR), binomial 3 steps tree with the Black and Scholes model입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
/* Calculate the call option prices using a Cox, Ross, Rubinstein,(CRR) binomial 3 steps tree. */ #include <iostream> #include<cmath> using namespace std; int main() { double S = 60; double K = 50; double r = 0.05; double q = 0.02; double T = 0.5; double sig = 0.3; //share price // strike price // risk-free interest rate // dividend yield. If the dividend is zero, then, it is // not included in the equation of risk neutral // probability of upmove. // life to maturity // volatility // Identify the variables. // u = multiplier of upmove. //d = multiplier of downmove. dt = steps expressed in years. //riskprobofupmove = risk neutral probability of upmove. //disfact = discount factor. double u; double d; double dt; double riskprobofupmove; double disfact; const int n = 3; // Identify tree steps binomial tree. // Insert the mathematical formulas. dt = T/n; u = exp(sig*sqrt(dt)); d = 1/u; disfact = exp(-r*dt); riskprobofupmove = (exp((r-q)*dt)-d)/(u-d); double callpayoffupmovestep3; // (Shareprice * upmove^3)-K double callpayoff3i; // (Shareprice * upmove^2 * downmove)-K double callpayoff3ii; // (Shareprice * downmove^2*upmove)-K Electronic copy available at: https://ssrn.com/abstract=3854475double callpayoffdownmovestep3; // (Shareprice * downmove^3) -K // The option prices are calculated backwards. callpayoffupmovestep3 = S*pow(u,3)-K; callpayoff3i = S * pow(u,2) * d -K; callpayoff3ii =S * pow(d,2)*u-K; callpayoffdownmovestep3 = S*pow(d,3)-K; callpayoffdownmovestep3 =0; double callpriceupmovestep2; double callpriceupdownmovestep2; double callpricedownmovestep2; callpriceupmovestep2 = (disfact*(riskprobofupmove*callpayoffupmovestep3) +(1-riskprobofupmove)*callpayoff3i); callpriceupdownmovestep2 =(disfact*(riskprobofupmove*callpayoff3i) +(1-riskprobofupmove)*callpayoff3ii); callpricedownmovestep2 =(disfact*(riskprobofupmove*callpayoff3ii) +(1-riskprobofupmove)*callpayoffdownmovestep3); double callpriceupmovestep1; double callpricedownmovestep1; callpriceupmovestep1 = (disfact*(riskprobofupmove*callpriceupmovestep2) +(1-riskprobofupmove)*callpriceupdownmovestep2); callpricedownmovestep1=(disfact*(riskprobofupmove*callpriceupdownmovestep2) +(1-riskprobofupmove)*callpricedownmovestep2); double callpricestep0; callpricestep0= (disfact*(riskprobofupmove*callpriceupmovestep1) +(1-riskprobofupmove)*callpricedownmovestep1); //Output functions. cout.setf(ios::fixed); cout.setf(ios::showpoint); cout.precision(4); cout<<"Steps expressed in years:"<< dt<<endl; cout<<"Multiplier of upmove:"<< u<<endl; cout<<"Multiplier of downmove:"<< d<<endl; cout<<" Discount factor:"<<disfact<<endl; cout<< "Risk neutral probability of upmove:"<<riskprobofupmove<<endl; cout<<"Call payoff upmove step [3]:"<<callpayoffupmovestep3<<endl; cout<<"Call payoff [3i]:"<<callpayoff3i<<endl; Electronic copy available at: https://ssrn.com/abstract=3854475cout<<"Call payoff [3ii]:"<<callpayoff3ii<<endl; cout<<"Call payoff downmove step [3]:"<<callpayoffdownmovestep3<<endl; cout<<"Call price upmove step[2]:"<<callpriceupmovestep2<<endl; cout<<"Call price updownmove step [2]:"<<callpriceupdownmovestep2<<endl; cout<<"Call price downmove step [2]:"<<callpricedownmovestep2<<endl; cout<<"Call price upmove step [1]:"<<callpriceupmovestep1<<endl; cout<<"Call price downmove step [1]:"<<callpricedownmovestep1<<endl; cout<<"Call price step[0]:"<<callpricestep0<<endl; system ("PAUSE"); return 0; } |
226쪽을 이런 식으로 구성하였습니다. 궁금한 점이 있으면 이메일로 질문을 하라고 합니다.
2.
저자가 위 논문에서 추천하는 책이 있습니다. Chandan Sengupta가 쓴 Financial Modeling using C++ 입니다. 자료를 구해서 대략 살펴보니까 눈에 들어오는 부분이 Review of Theory and Concepts라는 부분입니다. Time Value Of Money를 주제한 부분에서 개념을 길게 설명합니다. 투자와 금융에서 “시간이 왜 중요한지”를 소개합니다. 그리고 이런 개념에 기반하여 Mdeling Examples을 다룹니다. 구글링을 하시면 찾아보실 수 있습니다. 이 분의 또다른 저작인 Financial Modeling Using Excel and VBA도 확인하니까 비슷한 구성입니다. 개념과 예제르 이루졌네요. Excel과 관련한 자료는 Financial Modeling Using Excel and VBA에서 받을 수 있습니다.
Part Four: Financial Modeling Using VBA.
CHAPTER 18: How to Build Good VBA Models.
CHAPTER 19: Time Value of Money.
CHAPTER 20: Financial Planning and Investments.
CHAPTER 21: Analyzing Market History.
CHAPTER 22: Simulating Stock Prices.
CHAPTER 23: Options and Option Portfolios.
CHAPTER 24: Binomial Option Pricing.
투자금융을 하시는 분들의 경우 C++이든 Excel이든 업무에 도움을 받을 수 있을 듯 합니다.