The above statement is incorrect: it must remain as "p1 = normal_cdf(z1)" The above statement too is incorrect, sorry. Fix: In FPM, z1 and z2 are functionally similar to original BSM's d1 and d2, but their values differ. In my above BSM code, z1 is identical to original BSM's d1, and z2 identical to original BSM's d2.
Another generic MISPRICING BUG in the Black-Scholes-Merton (BSM) option pricing model: BSM(S=100,K=100,t=1,s=200%,r=0%,q=0%) : CALL=68.268949213709 PUT=68.268949213709 s.a. https://www.optioncreator.com/options-calculator In contrast to BSM, for these same parameters, in the FPM option pricing model both CALL and PUT cannot become higher than 50, which is also very logical from a probability point of view, ie. for 50% up and 50% down probability. Ie. there is no mathematical rationale nor a logic for the premium becoming more than 50: FPM(S=100,K=100,t=1,s=200%,r=0%,q=0%) : CALL=47.724986805182 PUT=47.724986805182 In BSM the premium goes high up to 100 the higher the volatility is set, but in FPM the maximum it can be is 50, and we are not talking of any artificial capping here but of just the raw result of the algorithm.
With FPM it is possible to have CALL, PUT, and FairPUT all three together in the market! BUT: this all is not tested yet (it just takes some time), but I'm hopeful it will fit the bill, so to say, of causing no arbitrage. AND: when I tried (and failed) to add FairPUT to classic BSM (in the old thread), I unfortunately made an error (which I realize just now). So, now I think the FairPUT algorithm and functionality very well should work also with BSM, though this too is untested yet.
New Synthetic combinations with FairPut and k=2 (? means 'not tested yet') Code: List of Synthetics k=2 (A synthetic position is a way to create the payoff of a financial instrument using other financial instruments) Legend: LS: Long Stock SS: Short Stock LC: Long Call SC: Short Call LP: Long Put SP: Short Put LCFP: Long CFP (Long FairCall) SCFP: Short CFP (Short FairCall) LPFP: Long PFP (Long FairPut) SPFP: Short PFP (Short FairPut) Combinations to build Synthetics: k=2 1: LS + SS = (neutral nonsense) 2: LS + LC = (like a LS #1) 3: LS + SC = SP ie. "Covered Call" 4: LS + LP = LC ie. "Protective Put" or "Married Put" 5: LS + SP = (like a LS #2) 6: LS + LCFP = ? 7: LS + SCFP = ? 8: LS + LPFP = ? 9: LS + SPFP = ? 10: SS + LC = LP 11: SS + SC = (like a SS #1) 12: SS + LP = (like a SS #2) 13: SS + SP = SC 14: SS + LCFP = ? 15: SS + SCFP = ? 16: SS + LPFP = ? 17: SS + SPFP = ? 18: LC + SC = (neutral nonsense) 19: LC + LP = (like a "V", ie. a Long Straddle) 20: LC + SP = LS BUT: this is even a free lunch! :) 21: LC + LCFP = ? 22: LC + SCFP = ? 23: LC + LPFP = ? 24: LC + SPFP = ? 25: SC + LP = SS BUT: this is even a free lunch! :) 26: SC + SP = (like an "A", ie a Short Straddle; inverse of "LC + LP" Long Straddle) 27: SC + LCFP = ? 28: SC + SCFP = ? 29: SC + LPFP = ? 30: SC + SPFP = ? 31: LP + SP = (neutral nonsense) 32: LP + LCFP = ? 33: LP + SCFP = ? 34: LP + LPFP = ? 35: LP + SPFP = ? 36: SP + LCFP = ? 37: SP + SCFP = ? 38: SP + LPFP = ? 39: SP + SPFP = ? 40: LCFP + SCFP = (neutral nonsense) 41: LCFP + LPFP = ? 42: LCFP + SPFP = ? 43: SCFP + LPFP = ? 44: SCFP + SPFP = ? 45: LPFP + SPFP = (neutral nonsense) cReal = c(45) - cNN(5) = 40
New Synthetic combinations with FairPut and k=3 (a totally new land to discover ) (? means 'not tested yet') Code: List of Synthetics k=3 (A synthetic position is a way to create the payoff of a financial instrument using other financial instruments) Legend: LS: Long Stock SS: Short Stock LC: Long Call SC: Short Call LP: Long Put SP: Short Put LCFP: Long CFP (Long FairCall) SCFP: Short CFP (Short FairCall) LPFP: Long PFP (Long FairPut) SPFP: Short PFP (Short FairPut) Combinations to build Synthetics: k=3 1: LS + SS + LC = (neutral nonsense) 2: LS + SS + SC = (neutral nonsense) 3: LS + SS + LP = (neutral nonsense) 4: LS + SS + SP = (neutral nonsense) 5: LS + SS + LCFP = (neutral nonsense) 6: LS + SS + SCFP = (neutral nonsense) 7: LS + SS + LPFP = (neutral nonsense) 8: LS + SS + SPFP = (neutral nonsense) 9: LS + LC + SC = (neutral nonsense) 10: LS + LC + LP = ? 11: LS + LC + SP = ? 12: LS + LC + LCFP = ? 13: LS + LC + SCFP = ? 14: LS + LC + LPFP = ? 15: LS + LC + SPFP = ? 16: LS + SC + LP = ? 17: LS + SC + SP = ? 18: LS + SC + LCFP = ? 19: LS + SC + SCFP = ? 20: LS + SC + LPFP = ? 21: LS + SC + SPFP = ? 22: LS + LP + SP = (neutral nonsense) 23: LS + LP + LCFP = ? 24: LS + LP + SCFP = ? 25: LS + LP + LPFP = ? 26: LS + LP + SPFP = ? 27: LS + SP + LCFP = ? 28: LS + SP + SCFP = ? 29: LS + SP + LPFP = ? 30: LS + SP + SPFP = ? 31: LS + LCFP + SCFP = (neutral nonsense) 32: LS + LCFP + LPFP = ? 33: LS + LCFP + SPFP = ? 34: LS + SCFP + LPFP = ? 35: LS + SCFP + SPFP = ? 36: LS + LPFP + SPFP = (neutral nonsense) 37: SS + LC + SC = (neutral nonsense) 38: SS + LC + LP = ? 39: SS + LC + SP = ? 40: SS + LC + LCFP = ? 41: SS + LC + SCFP = ? 42: SS + LC + LPFP = ? 43: SS + LC + SPFP = ? 44: SS + SC + LP = ? 45: SS + SC + SP = ? 46: SS + SC + LCFP = ? 47: SS + SC + SCFP = ? 48: SS + SC + LPFP = ? 49: SS + SC + SPFP = ? 50: SS + LP + SP = (neutral nonsense) 51: SS + LP + LCFP = ? 52: SS + LP + SCFP = ? 53: SS + LP + LPFP = ? 54: SS + LP + SPFP = ? 55: SS + SP + LCFP = ? 56: SS + SP + SCFP = ? 57: SS + SP + LPFP = ? 58: SS + SP + SPFP = ? 59: SS + LCFP + SCFP = (neutral nonsense) 60: SS + LCFP + LPFP = ? 61: SS + LCFP + SPFP = ? 62: SS + SCFP + LPFP = ? 63: SS + SCFP + SPFP = ? 64: SS + LPFP + SPFP = (neutral nonsense) 65: LC + SC + LP = (neutral nonsense) 66: LC + SC + SP = (neutral nonsense) 67: LC + SC + LCFP = (neutral nonsense) 68: LC + SC + SCFP = (neutral nonsense) 69: LC + SC + LPFP = (neutral nonsense) 70: LC + SC + SPFP = (neutral nonsense) 71: LC + LP + SP = (neutral nonsense) 72: LC + LP + LCFP = ? 73: LC + LP + SCFP = ? 74: LC + LP + LPFP = ? 75: LC + LP + SPFP = ? 76: LC + SP + LCFP = ? 77: LC + SP + SCFP = ? 78: LC + SP + LPFP = ? 79: LC + SP + SPFP = ? 80: LC + LCFP + SCFP = (neutral nonsense) 81: LC + LCFP + LPFP = ? 82: LC + LCFP + SPFP = ? 83: LC + SCFP + LPFP = ? 84: LC + SCFP + SPFP = ? 85: LC + LPFP + SPFP = (neutral nonsense) 86: SC + LP + SP = (neutral nonsense) 87: SC + LP + LCFP = ? 88: SC + LP + SCFP = ? 89: SC + LP + LPFP = ? 90: SC + LP + SPFP = ? 91: SC + SP + LCFP = ? 92: SC + SP + SCFP = ? 93: SC + SP + LPFP = ? 94: SC + SP + SPFP = ? 95: SC + LCFP + SCFP = (neutral nonsense) 96: SC + LCFP + LPFP = ? 97: SC + LCFP + SPFP = ? 98: SC + SCFP + LPFP = ? 99: SC + SCFP + SPFP = ? 100: SC + LPFP + SPFP = (neutral nonsense) 101: LP + SP + LCFP = (neutral nonsense) 102: LP + SP + SCFP = (neutral nonsense) 103: LP + SP + LPFP = (neutral nonsense) 104: LP + SP + SPFP = (neutral nonsense) 105: LP + LCFP + SCFP = (neutral nonsense) 106: LP + LCFP + LPFP = ? 107: LP + LCFP + SPFP = ? 108: LP + SCFP + LPFP = ? 109: LP + SCFP + SPFP = ? 110: LP + LPFP + SPFP = (neutral nonsense) 111: SP + LCFP + SCFP = (neutral nonsense) 112: SP + LCFP + LPFP = ? 113: SP + LCFP + SPFP = ? 114: SP + SCFP + LPFP = ? 115: SP + SCFP + SPFP = ? 116: SP + LPFP + SPFP = (neutral nonsense) 117: LCFP + SCFP + LPFP = (neutral nonsense) 118: LCFP + SCFP + SPFP = (neutral nonsense) 119: LCFP + LPFP + SPFP = (neutral nonsense) 120: SCFP + LPFP + SPFP = (neutral nonsense) cReal = c(120) - cNN(40) = 80
Demonstrating FairPut in BSM: 3 sessions: 1) S_s=100 S_e=100 2) S_s=100 S_e=120 3) S_s=100 S_e=83.333333 (the "lognormal inverse" of S_e=120 for the same option params) _s: starting params, ie. entry _e: ending params, ie. exit or expiration CPO: Call Payoff PPO: Put Payoff FPCPO: FairPut/C Payoff FPPPO: FairPut/P Payoff Some/many of the internal variables are just for testing, ie. not necessarily needed. Code: ./NewOptions.exe 1 100 100 1 30 0 0 100 0 30 0 0 Args : ./NewOptions.exe 1 100 100 1 30 0 0 100 0 30 0 0 Params: AnnDays=1 K=100 S_s=100 t_s=1 s_s=30% r_s=0% q_s=0% S_e=100 t_e=0 s_e=30% r_e=0% q_e=0% f_s(S=100,K=100,t=1,s=30%,r=0%,q=0%) f_e(S=100,K=100,t=0,s=30%,r=0%,q=0%) BSM_s: S=100.000000 K=100.000000 t=1.000000 s=0.300000 r=0.000000 q=0.000000 --> C=11.923538474048 P=11.923538474048 st=0.300000 rt=0.000000 qt=0.000000 u=0.000000 ut=0.000000 exp_mqt=1.000000 exp_mrt=1.000000 exp_mut=1.000000 z2=-0.150000000000 z0=0.000000000000 z1=0.150000000000 p2=0.440382307630 p0=0.500000000000 p1=0.559617692370 FPC: Cup=11.923538474048 Pup=11.923538474048 (zX=0.000000 xDn=100.000000 xMd=100.000000 xUp=100.000000 DN=100.000000 MD=100.000000 UP=100.000000) S2K: z_S2K=0.000000 p_S2K=0.500000 pRest=0.500000 K2S: z_K2S=0.000000 p_K2S=0.500000 pRest=0.500000 Sx@: -1SD(p=0.158655)=74.081822 0SD(p=0.5)=100.000000 +1SD(p=0.158655)=134.985881 [based on S] Kx@: -1SD(p=0.158655)=74.081822 0SD(p=0.5)=100.000000 +1SD(p=0.158655)=134.985881 [based on K] BSM_e: S=100.000000 K=100.000000 t=0.000000 s=0.300000 r=0.000000 q=0.000000 --> C=0.000000000000 P=0.000000000000 st=0.000000 rt=0.000000 qt=0.000000 u=0.000000 ut=0.000000 exp_mqt=1.000000 exp_mrt=1.000000 exp_mut=1.000000 z2=-0.000000002235 z0=0.000000000000 z1=0.000000002235 p2=0.499999999108 p0=0.500000000000 p1=0.500000000892 FPC: Cup=0.000000000000 Pup=0.000000000000 (zX=0.000000 xDn=100.000000 xMd=100.000000 xUp=100.000000 DN=100.000000 MD=100.000000 UP=100.000000) S2K: z_S2K=0.000000 p_S2K=0.500000 pRest=0.500000 K2S: z_K2S=0.000000 p_K2S=0.500000 pRest=0.500000 Sx@: -1SD(p=0.158655)=100.000000 0SD(p=0.5)=100.000000 +1SD(p=0.158655)=100.000000 [based on S] Kx@: -1SD(p=0.158655)=100.000000 0SD(p=0.5)=100.000000 +1SD(p=0.158655)=100.000000 [based on K] OSOE: S_s to S_e : z=0.000000 Dn=100.000000 Md=100.000000 Up=100.000000 S_s to S_e w/o r,q: z=0.000000 Dn=100.000000 Md=100.000000 Up=100.000000 CPO: Call premium=11.923538 Long: credit=-11.923538 payoff=0.000000 profit=-11.923538(-100.000000%) Short: credit=11.923538 payoff=-0.000000 profit=11.923538(100.000000%) PPO: Put premium=11.923538 Long: credit=-11.923538 payoff=0.000000 profit=-11.923538(-100.000000%) Short: credit=11.923538 payoff=-0.000000 profit=11.923538(100.000000%) FPCPO: FairPut using C premium: premium=11.923538 Long: credit=-11.923538 payoff=0.000000 profit=-11.923538(-100.000000%) Short: credit=11.923538 payoff=-0.000000 profit=11.923538(100.000000%) FPPPO: FairPut using P premium: premium=11.923538 Long: credit=-11.923538 payoff=0.000000 profit=-11.923538(-100.000000%) Short: credit=11.923538 payoff=-0.000000 profit=11.923538(100.000000%) Code: ./NewOptions.exe 1 100 100 1 30 0 0 120 0 30 0 0 Args : ./NewOptions.exe 1 100 100 1 30 0 0 120 0 30 0 0 Params: AnnDays=1 K=100 S_s=100 t_s=1 s_s=30% r_s=0% q_s=0% S_e=120 t_e=0 s_e=30% r_e=0% q_e=0% f_s(S=100,K=100,t=1,s=30%,r=0%,q=0%) f_e(S=120,K=100,t=0,s=30%,r=0%,q=0%) BSM_s: S=100.000000 K=100.000000 t=1.000000 s=0.300000 r=0.000000 q=0.000000 --> C=11.923538474048 P=11.923538474048 st=0.300000 rt=0.000000 qt=0.000000 u=0.000000 ut=0.000000 exp_mqt=1.000000 exp_mrt=1.000000 exp_mut=1.000000 z2=-0.150000000000 z0=0.000000000000 z1=0.150000000000 p2=0.440382307630 p0=0.500000000000 p1=0.559617692370 FPC: Cup=11.923538474048 Pup=11.923538474048 (zX=0.000000 xDn=100.000000 xMd=100.000000 xUp=100.000000 DN=100.000000 MD=100.000000 UP=100.000000) S2K: z_S2K=0.000000 p_S2K=0.500000 pRest=0.500000 K2S: z_K2S=0.000000 p_K2S=0.500000 pRest=0.500000 Sx@: -1SD(p=0.158655)=74.081822 0SD(p=0.5)=100.000000 +1SD(p=0.158655)=134.985881 [based on S] Kx@: -1SD(p=0.158655)=74.081822 0SD(p=0.5)=100.000000 +1SD(p=0.158655)=134.985881 [based on K] BSM_e: S=120.000000 K=100.000000 t=0.000000 s=0.300000 r=0.000000 q=0.000000 --> C=20.000000000000 P=0.000000000000 st=0.000000 rt=0.000000 qt=0.000000 u=0.000000 ut=0.000000 exp_mqt=1.000000 exp_mrt=1.000000 exp_mut=1.000000 z2=40784641.863845914602 z0=40784641.863845914602 z1=40784641.863845914602 p2=1.000000000000 p0=1.000000000000 p1=1.000000000000 FPC: Cup=20.000000000000 Pup=0.000000000000 (zX=40784641.863846 xDn=83.333333 xMd=100.000000 xUp=120.000000 DN=83.333333 MD=100.000000 UP=120.000000) S2K: z_S2K=-40784641.863846 p_S2K=1.000000 pRest=0.000000 K2S: z_K2S=40784641.863846 p_K2S=0.000000 pRest=1.000000 Sx@: -1SD(p=0.158655)=119.999999 0SD(p=0.5)=120.000000 +1SD(p=0.158655)=120.000001 [based on S] Kx@: -1SD(p=0.158655)=100.000000 0SD(p=0.5)=100.000000 +1SD(p=0.158655)=100.000000 [based on K] OSOE: S_s to S_e : z=0.607739 Dn=83.333333 Md=100.000000 Up=120.000000 S_s to S_e w/o r,q: z=0.607739 Dn=83.333333 Md=100.000000 Up=120.000000 CPO: Call premium=11.923538 Long: credit=-11.923538 payoff=20.000000 profit=8.076462(67.735442%) Short: credit=11.923538 payoff=-20.000000 profit=-8.076462(-67.735442%) PPO: Put premium=11.923538 Long: credit=-11.923538 payoff=0.000000 profit=-11.923538(-100.000000%) Short: credit=11.923538 payoff=-0.000000 profit=11.923538(100.000000%) FPCPO: FairPut using C premium: premium=11.923538 Long: credit=-11.923538 payoff=0.000000 profit=-11.923538(-100.000000%) Short: credit=11.923538 payoff=-0.000000 profit=11.923538(100.000000%) FPPPO: FairPut using P premium: premium=11.923538 Long: credit=-11.923538 payoff=0.000000 profit=-11.923538(-100.000000%) Short: credit=11.923538 payoff=-0.000000 profit=11.923538(100.000000%) Code: ./NewOptions.exe 1 100 100 1 30 0 0 83.333333 0 30 0 0 Args : ./NewOptions.exe 1 100 100 1 30 0 0 83.333333 0 30 0 0 Params: AnnDays=1 K=100 S_s=100 t_s=1 s_s=30% r_s=0% q_s=0% S_e=83.333333 t_e=0 s_e=30% r_e=0% q_e=0% f_s(S=100,K=100,t=1,s=30%,r=0%,q=0%) f_e(S=83.333333,K=100,t=0,s=30%,r=0%,q=0%) BSM_s: S=100.000000 K=100.000000 t=1.000000 s=0.300000 r=0.000000 q=0.000000 --> C=11.923538474048 P=11.923538474048 st=0.300000 rt=0.000000 qt=0.000000 u=0.000000 ut=0.000000 exp_mqt=1.000000 exp_mrt=1.000000 exp_mut=1.000000 z2=-0.150000000000 z0=0.000000000000 z1=0.150000000000 p2=0.440382307630 p0=0.500000000000 p1=0.559617692370 FPC: Cup=11.923538474048 Pup=11.923538474048 (zX=0.000000 xDn=100.000000 xMd=100.000000 xUp=100.000000 DN=100.000000 MD=100.000000 UP=100.000000) S2K: z_S2K=0.000000 p_S2K=0.500000 pRest=0.500000 K2S: z_K2S=0.000000 p_K2S=0.500000 pRest=0.500000 Sx@: -1SD(p=0.158655)=74.081822 0SD(p=0.5)=100.000000 +1SD(p=0.158655)=134.985881 [based on S] Kx@: -1SD(p=0.158655)=74.081822 0SD(p=0.5)=100.000000 +1SD(p=0.158655)=134.985881 [based on K] BSM_e: S=83.333333 K=100.000000 t=0.000000 s=0.300000 r=0.000000 q=0.000000 --> C=0.000000000000 P=16.666667000000 st=0.000000 rt=0.000000 qt=0.000000 u=0.000000 ut=0.000000 exp_mqt=1.000000 exp_mrt=1.000000 exp_mut=1.000000 z2=-40784642.758630782366 z0=-40784642.758630782366 z1=-40784642.758630782366 p2=0.000000000000 p0=0.000000000000 p1=0.000000000000 FPC: Cup=20.000000480000 Pup=0.000000000000 (zX=-40784642.758631 xDn=120.000000 xMd=100.000000 xUp=83.333333 DN=83.333333 MD=100.000000 UP=120.000000) S2K: z_S2K=40784642.758631 p_S2K=0.000000 pRest=1.000000 K2S: z_K2S=-40784642.758631 p_K2S=1.000000 pRest=0.000000 Sx@: -1SD(p=0.158655)=83.333333 0SD(p=0.5)=83.333333 +1SD(p=0.158655)=83.333333 [based on S] Kx@: -1SD(p=0.158655)=100.000000 0SD(p=0.5)=100.000000 +1SD(p=0.158655)=100.000000 [based on K] OSOE: S_s to S_e : z=-0.607739 Dn=120.000000 Md=100.000000 Up=83.333333 S_s to S_e w/o r,q: z=-0.607739 Dn=120.000000 Md=100.000000 Up=83.333333 CPO: Call premium=11.923538 Long: credit=-11.923538 payoff=0.000000 profit=-11.923538(-100.000000%) Short: credit=11.923538 payoff=-0.000000 profit=11.923538(100.000000%) PPO: Put premium=11.923538 Long: credit=-11.923538 payoff=16.666667 profit=4.743129(39.779538%) Short: credit=11.923538 payoff=-16.666667 profit=-4.743129(-39.779538%) FPCPO: FairPut using C premium: premium=11.923538 Long: credit=-11.923538 payoff=20.000000 profit=8.076462(67.735446%) Short: credit=11.923538 payoff=-20.000000 profit=-8.076462(-67.735446%) FPPPO: FairPut using P premium: premium=11.923538 Long: credit=-11.923538 payoff=20.000000 profit=8.076462(67.735446%) Short: credit=11.923538 payoff=-20.000000 profit=-8.076462(-67.735446%)
Here I gave a practical definition for arbitrage: https://www.elitetrader.com/et/thre...e-chameleon-option.349956/page-5#post-5201939 This is important when talking of and about arbitrage. .
Yesterday I had a very interesting private discussion and conversation with @VolSkewTrader about FairPut. Here one can find details: https://www.elitetrader.com/et/thre...e-chameleon-option.349956/page-4#post-5201757 See also the other postings there, especially this one: https://www.elitetrader.com/et/thre...e-chameleon-option.349956/page-5#post-5201834