Option Calls, Puts and days till third friday..afl
上传用户:shiqiang
上传日期:2009-06-12
资源大小:1289k
文件大小:8k
源码类别:

金融证券系统

开发平台:

Others

  1. //------------------------------------------------------------------------------
  2. //
  3. //  Formula Name:    Option Calls, Puts and days till third friday.
  4. //  Author/Uploader: Vladimir Gaitanoff 
  5. //  E-mail:          spam@vglib.com
  6. //  Date/Time Added: 2006-05-06 14:09:53
  7. //  Origin:          
  8. //  Keywords:        Option Options Third  Friday
  9. //  Level:           medium
  10. //  Flags:           indicator
  11. //  Formula URL:     http://www.amibroker.com/library/formula.php?id=620
  12. //  Details URL:     http://www.amibroker.com/library/detail.php?id=620
  13. //
  14. //------------------------------------------------------------------------------
  15. //
  16. //  // Initialization
  17. //
  18. //  _SECTION_BEGIN("Option Parameters");
  19. //
  20. //  StrikePrice = Param("Strike Price", 45, 0, 10000, 0.01);
  21. //
  22. //  InterestRate = Param("Interest Rate %", 6, 0, 100, 0.05);
  23. //
  24. //  //DaysToExpiration = Param("Days To Expiration", 30, 1, 365, 1);
  25. //
  26. //  Volatility = Param("Volatility", 0.3, 0, 1, 0.05);
  27. //
  28. //  _SECTION_END();
  29. //
  30. //  /*
  31. //
  32. //  Price = 56.25;
  33. //
  34. //  StrikePrice = 55;
  35. //
  36. //  Rate = 0.0285;
  37. //
  38. //  Time = 0.34;
  39. //
  40. //  Volatility = 0.28;
  41. //
  42. //  //expected: 456
  43. //
  44. //  */
  45. //
  46. //  // Function
  47. //
  48. //  function N(x)
  49. //
  50. //  {
  51. //
  52. //  b1 = 0.31938153;
  53. //
  54. //  b2 = -0.3565638;
  55. //
  56. //  b3 = 1.78147794;
  57. //
  58. //  b4 = -1.821256;
  59. //
  60. //  b5 = 1.33027443;
  61. //
  62. //  p = 0.2316419;
  63. //
  64. //  c2 = 0.3989423;
  65. //
  66. //  a = abs(x);
  67. //
  68. //  t = 1.0 / (1.0 + a * p);
  69. //
  70. //  b = c2 * exp(- x * x / 2.0);
  71. //
  72. //  m = ((((b5 * t + b4) * t + b3) * t + b2) * t + b1) * t;
  73. //
  74. //  m = 1.0 - b * m;
  75. //
  76. //  y = IIf(x >= 0.0, m, 1.0 - m);
  77. //
  78. //  return y;
  79. //
  80. //  }
  81. //
  82. //  function DaysInMonth(MonthNum,YearNum)
  83. //
  84. //  {
  85. //
  86. //  _Daysinmonth=IIf(MonthNum==1 OR MonthNum==3 OR MonthNum==5 OR MonthNum==7
  87. //  OR MonthNum==8 OR MonthNum==10 OR MonthNum==12,31,30);
  88. //
  89. //  Daysinmonthfeb=IIf(YearNum%4 == 0 AND YearNum%100!=0,29,28);
  90. //
  91. //  _Daysinmonth=IIf(MonthNum==2,Daysinmonthfeb,_Daysinmonth);
  92. //
  93. //  return _Daysinmonth;
  94. //
  95. //  }
  96. //
  97. //  function DaysToThirdFriday()
  98. //
  99. //  {
  100. //
  101. //  d = Day();
  102. //
  103. //  wd = DayOfWeek();
  104. //
  105. //  DaysToFriday = (5 - wd + 7) % 7;
  106. //
  107. //  FridayNumber = floor((d + DaysToFriday + 6) / 7);
  108. //
  109. //  ThirdFriday = d + DaysToFriday + (3 - FridayNumber) * 7;
  110. //
  111. //  _DaysToThirdFriday = IIf(ThirdFriday >= d, ThirdFriday - d, ThirdFriday - d
  112. //  + 28);
  113. //
  114. //  return _DaysToThirdFriday;
  115. //
  116. //  }
  117. //
  118. //  // Calculations
  119. //
  120. //  //Plot(DaysToFriday, "DaysToFriday", colorGreen);
  121. //
  122. //  //Plot(FridayNumber , "FridayNumber ", colorGreen);
  123. //
  124. //  //Plot(ThirdFriday, "ThirdFriday", colorGreen);
  125. //
  126. //  //Plot(_DaysToThirdFriday, "DaysToThirdFriday", colorGreen);
  127. //
  128. //  DaysToExpiration = DaysToThirdFriday();
  129. //
  130. //  Price = Close;
  131. //
  132. //  Rate = InterestRate / 100;
  133. //
  134. //  Time = DaysToExpiration / 365;
  135. //
  136. //  d1 = (ln(Price / StrikePrice) + (Rate + Volatility * Volatility / 2) *
  137. //  Time) / (Volatility * sqrt(Time));
  138. //
  139. //  d2 = d1 - Volatility * sqrt(Time);
  140. //
  141. //  ExpPowerMinusRt = exp(- Rate * Time);
  142. //
  143. //  CallPrice = Price * N(d1) - StrikePrice * ExpPowerMinusRt * N(d2);
  144. //
  145. //  PutPrice = StrikePrice * ExpPowerMinusRt * N(-d2) - Price * N(-d1);
  146. //
  147. //  _N(Title = StrFormat("{{DATE}} Strike %.2f, Days %g, Call %.2f, Put %.2f,
  148. //  Volatility %.2f %g" , StrikePrice, DaysToExpiration, CallPrice, PutPrice,
  149. //  Volatility, DayOfWeek() ));
  150. //
  151. //  //_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo
  152. //  %g, Close %g (%.1f%%) Vol " +WriteVal( V, 1.0 ) +" {{VALUES}}", O, H, L, C,
  153. //  SelectedValue( ROC( C, 1 )) ));
  154. //
  155. //  _SECTION_BEGIN("Call Option");
  156. //
  157. //  Plot(CallPrice, "Call = " + NumToStr(CallPrice, 1.2), ParamColor( "Color",
  158. //  colorGreen), ParamStyle("Style"));
  159. //
  160. //  _SECTION_END();
  161. //
  162. //  _SECTION_BEGIN("Put Option");
  163. //
  164. //  Plot(PutPrice, "Put = " + NumToStr(PutPrice, 1.2), ParamColor( "Color",
  165. //  colorRed), ParamStyle("Style"));
  166. //
  167. //  _SECTION_END();
  168. //
  169. //------------------------------------------------------------------------------
  170. // Initialization
  171. _SECTION_BEGIN("Option Parameters");
  172. StrikePrice = Param("Strike Price", 45, 0, 10000, 0.01);
  173. InterestRate = Param("Interest Rate %", 6, 0, 100, 0.05);
  174. //DaysToExpiration = Param("Days To Expiration", 30, 1, 365, 1);
  175. Volatility = Param("Volatility", 0.3, 0, 1, 0.05);
  176. _SECTION_END();
  177. /*
  178. Price = 56.25;
  179. StrikePrice = 55;
  180. Rate = 0.0285;
  181. Time = 0.34;
  182. Volatility = 0.28;
  183. //expected: 456
  184. */
  185. // Function
  186. function N(x)
  187. {
  188. b1 = 0.31938153; 
  189. b2 = -0.3565638; 
  190. b3 = 1.78147794; 
  191. b4 = -1.821256; 
  192. b5 = 1.33027443; 
  193. p = 0.2316419; 
  194. c2 = 0.3989423;
  195. a = abs(x);
  196. t = 1.0 / (1.0 + a * p);
  197. b = c2 * exp(- x * x / 2.0);
  198. m = ((((b5 * t + b4) * t + b3) * t + b2) * t + b1) * t;
  199. m = 1.0 - b * m;
  200. y = IIf(x >= 0.0, m, 1.0 - m);
  201. return y;
  202. }
  203. function DaysInMonth(MonthNum,YearNum)
  204. {
  205. _Daysinmonth=IIf(MonthNum==1 OR MonthNum==3 OR MonthNum==5 OR MonthNum==7 OR MonthNum==8 OR MonthNum==10 OR MonthNum==12,31,30);
  206. Daysinmonthfeb=IIf(YearNum%4 == 0 AND YearNum%100!=0,29,28);
  207. _Daysinmonth=IIf(MonthNum==2,Daysinmonthfeb,_Daysinmonth);
  208. return _Daysinmonth;
  209. }
  210. function DaysToThirdFriday()
  211. {
  212. d = Day();
  213. wd = DayOfWeek();
  214. DaysToFriday = (5 - wd + 7) % 7;
  215. ThirdFriday = d + DaysToFriday + (3 - floor((d + DaysToFriday) / 7)) * 7;
  216. _DaysToThirdFriday = ThirdFriday - d;
  217. return _DaysToThirdFriday;
  218. }
  219. // Calculations
  220. d = Day();
  221. wd = DayOfWeek();
  222. DaysToFriday = (5 - wd + 7) % 7;
  223. FridayNumber = floor((d + DaysToFriday + 6) / 7);
  224. ThirdFriday = d + DaysToFriday + (3 - FridayNumber) * 7;
  225. _DaysToThirdFriday = ThirdFriday - d;
  226. //Plot(DaysToFriday, "DaysToFriday", colorGreen);
  227. //Plot(FridayNumber , "FridayNumber ", colorGreen);
  228. Plot(ThirdFriday, "ThirdFriday", colorGreen);
  229. Plot(DaysToThirdFriday , "DaysToThirdFriday", colorGreen);
  230. DaysToExpiration = DaysToThirdFriday();
  231. Price = Close;
  232. Rate = InterestRate / 100;
  233. Time = DaysToExpiration / 365;
  234. d1 = (ln(Price / StrikePrice) + (Rate + Volatility * Volatility / 2) * Time) / (Volatility * sqrt(Time));
  235. d2 = d1 - Volatility * sqrt(Time);
  236. ExpPowerMinusRt = exp(- Rate * Time);
  237. CallPrice = Price * N(d1) - StrikePrice * ExpPowerMinusRt * N(d2);
  238. PutPrice = StrikePrice * ExpPowerMinusRt * N(-d2) - Price * N(-d1);
  239. //_N(Title = StrFormat("Strike %.2f, Days %g, Call %.2f, Put %.2f, Volatility %.2f %g" , StrikePrice, DaysToExpiration, CallPrice, PutPrice, Volatility, DayOfWeek() ));
  240. //_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) Vol " +WriteVal( V, 1.0 ) +" {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 )) ));
  241. _SECTION_BEGIN("Call Option");
  242. Plot(CallPrice, "Call = " + NumToStr(CallPrice, 1.2), ParamColor( "Color", colorGreen), ParamStyle("Style"));
  243. _SECTION_END();
  244. _SECTION_BEGIN("Put Option");
  245. Plot(PutPrice, "Put = " + NumToStr(PutPrice, 1.2), ParamColor( "Color", colorRed), ParamStyle("Style"));
  246. _SECTION_END();
  247. /*
  248. Plot(d1, "Value " + NumToStr(d1, 1.2), colorGreen);
  249. Plot(d2, "Value " + NumToStr(d2, 1.2), colorRed);
  250. Plot(N(d1), "Value " + NumToStr(d1, 1.6), colorGreen);
  251. Plot(N(d2), "Value " + NumToStr(d2, 1.6), colorRed);
  252. */
  253. /*CallPrice = Price * N(d1) - StrikePrice * ExpPowerMinusRt * N(d2);
  254. Plot(StrikePrice * ExpPowerMinusRt * N(d2), "StrikePrice * ExpPowerMinusRt * N(d2)", colorRed);
  255. Plot(ExpPowerMinusRt, "ExpPowerMinusRt " + NumToStr(ExpPowerMinusRt, 1.6), colorRed);
  256. Plot(N(d2), "N(d2) " + NumToStr(N(d2), 1.6), colorRed);
  257. */
  258. //PutPrice = StrikePriceExpPowerMinusRt* N(-d2) - Price * N(-d1);
  259. //Plot(CallPrice, "Call " + NumToStr(CallPrice, 1.6), colorGreen);
  260. //Plot(PutPrice, "Put = " + NumToStr(PutPrice, 1.2), colorRed);