Advertisement
Guest User

Untitled

a guest
Sep 19th, 2017
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.06 KB | None | 0 0
  1. import sys
  2. # from PyQt4.QtGui import (QApplication, QDialog, QDataWidgetMapper, QTableWidget)
  3. # # , QAction, QApplication, QFileDialog, QIcon,
  4. # # QKeySequence, QMainWindow, QMessageBox, QShortcut, QTableWidget,
  5. # # QTableWidgetItem)
  6. #
  7. # # from PyQt4.QtSql import (QSqlTableModel)
  8. from PyQt4.QtCore import *
  9. from PyQt4.QtGui import *
  10. from PyQt4.QtSql import *
  11.  
  12. import ui_BSCS
  13. import BSCSEngine
  14. import mibian
  15. import pandas as pd
  16. import collections
  17.  
  18.  
  19. __version__ = "1.0.0"
  20.  
  21.  
  22. class MainWindow(QDialog, ui_BSCS.Ui_SBCSDialog):
  23.  
  24. def __init__(self, parent=None):
  25. super(MainWindow, self).__init__(parent)
  26. self.setupUi(self)
  27.  
  28. # f_UnderlyingPrice=float(self.UnderlyingPricelineEdit.text())
  29. # f_StrikePrice= float(self.StrikePricelineEdit.text())
  30. # f_Volatility= float(self.VolatilitylineEdit.text())
  31. # f_InterestRate= float(self.InterestRatelineEdit.text())
  32. # f_DividendYield= float(self.DividendYieldlineEdit.text())
  33. # f_TimeToExp= float(self.TimeToExplineEdit.text())
  34.  
  35. # print ("JKFrame",optionFrame )
  36.  
  37. self.model = QSqlTableModel(self)
  38. self.model.setTable("ParamTable")
  39. # self.model.setSort(STARTTIME, Qt.AscendingOrder)QSqlTableModel
  40. self.model.select()
  41.  
  42. self.mapper = QDataWidgetMapper(self)
  43. # self.mapper.setSubmitPolicy(QDataWidgetMapper.ManualSubmit)
  44. self.mapper.setSubmitPolicy(QDataWidgetMapper.AutoSubmit)
  45. self.mapper.setModel(self.model)
  46.  
  47. self.mapper.addMapping(self.UnderlyingPricelineEdit, 0)
  48. self.mapper.addMapping(self.StrikePricelineEdit, 1)
  49. self.mapper.addMapping(self.VolatilitylineEdit, 4)
  50. self.mapper.addMapping(self.InterestRatelineEdit, 2)
  51. self.mapper.addMapping(self.DividendYieldlineEdit,7)
  52. self.mapper.addMapping(self.TimeToExplineEdit,3)
  53. self.mapper.toFirst()
  54.  
  55. # print("JKFrame", optionFrame)
  56.  
  57. # __UnderlyingPrice = self.UnderlyingPricelineEdit
  58. # time to expiration need to ui
  59.  
  60. BSAsset = mibian.BS([float(self.UnderlyingPricelineEdit.text()),
  61. float(self.StrikePricelineEdit.text()),
  62. float(self.InterestRatelineEdit.text()),
  63. float(26)],volatility=float(self.VolatilitylineEdit.text()) )
  64.  
  65. Parameters = [
  66. ['UnderlyingPrice', float(self.UnderlyingPricelineEdit.text())],
  67. ['StrikePrice', float(self.StrikePricelineEdit.text())],
  68. ['Volatility', float(self.VolatilitylineEdit.text())],
  69. ['InterestRate',float(self.InterestRatelineEdit.text())],
  70. ['DividendYield', float(self.DividendYieldlineEdit.text())],
  71. ['TimeToExp', float(self.TimeToExplineEdit.text())],
  72. ]
  73. optionFrame = pd.DataFrame(Parameters, columns=['ParamName', 'ParamValue'])
  74. # myGreeks(optionFrame)
  75. # print ("JKFrame", optionFrame)
  76.  
  77.  
  78.  
  79. f_UnderlyingPrice=float(self.UnderlyingPricelineEdit.text())
  80. f_StrikePrice= float(self.StrikePricelineEdit.text())
  81. f_Volatility= float(self.VolatilitylineEdit.text())
  82. f_InterestRate= float(self.InterestRatelineEdit.text())
  83. f_DividendYield= float(self.DividendYieldlineEdit.text())
  84. f_TimeToExp= float(self.TimeToExplineEdit.text())
  85.  
  86. myOption(f_UnderlyingPrice=f_UnderlyingPrice,
  87. f_StrikePrice=f_StrikePrice,
  88. f_Volatility=f_Volatility,
  89. f_InterestRate=f_InterestRate,
  90. f_DividendYield=f_DividendYield,
  91. f_TimeToExp=f_TimeToExp
  92. )
  93.  
  94. # print ("UnderlyingPrice=", type(self.UnderlyingPricelineEdit))
  95.  
  96. # print("callPrice=",BSAsset.callPrice )
  97. # print ("Rounded=", "%.4f" % BSAsset.callDelta )
  98. # JK = "%.4f" % BSAsset.callDelta
  99. # def initGreeks():
  100. # BSCSEngine.initAsset()
  101.  
  102.  
  103. self.CallPricelineEdit.setText(str(round(BSAsset.callPrice, 4)))
  104. self.CallDeltalineEdit.setText(str(round(BSAsset.callDelta, 4)))
  105. self.CallGammalineEdit.setText(str(round(BSAsset.gamma, 4)))
  106. self.CallThetalineEdit.setText(str(round(BSAsset.callTheta, 4)))
  107. self.CallVegalineEdit.setText(str(round(BSAsset.vega, 4)))
  108. self.CallRholineEdit.setText(str(round(BSAsset.callRho, 4)))
  109.  
  110. self.PutPricelineEdit.setText(str(round(BSAsset.putPrice, 4)))
  111. self.PutDeltalineEdit.setText(str(round(BSAsset.putDelta, 4)))
  112. # self.PutDeltalineEdit.setText(JK)
  113. self.PutGammalineEdit.setText(str(round(BSAsset.gamma, 4)))
  114. self.PutThetalineEdit.setText(str(round(BSAsset.putTheta, 4)))
  115. self.PutVegalineEdit.setText(str(round(BSAsset.vega, 4)))
  116. self.PutRholineEdit.setText(str(round(BSAsset.putRho, 4)))
  117.  
  118.  
  119.  
  120. self.UnderlyingPricelineEdit.editingFinished.connect(self.do_UnderlyingPrice)
  121. self.StrikePricelineEdit.editingFinished.connect(self.do_StrikePrice)
  122. self.VolatilitylineEdit.editingFinished.connect(self.do_Volatility)
  123. self.InterestRatelineEdit.editingFinished.connect(self.do_InterestRate)
  124. self.DividendYieldlineEdit.editingFinished.connect(self.do_DividendYield)
  125. self.TimeToExplineEdit.editingFinished.connect(self.do_TimeToExp)
  126.  
  127. def do_UnderlyingPrice(self):
  128. print("UnderlyingPriceEditingFinished: ",self.UnderlyingPricelineEdit.text())
  129.  
  130. BSAsset = mibian.BS([float(self.UnderlyingPricelineEdit.text()),
  131. float(self.StrikePricelineEdit.text()),
  132. float(self.InterestRatelineEdit.text()),
  133. float(26)], volatility=float(self.VolatilitylineEdit.text()) )
  134.  
  135. self.setGreeks(BSAsset)
  136.  
  137. # self.CallPricelineEdit.setText(str(round(BSAsset.callPrice, 4)))
  138. # self.CallDeltalineEdit.setText(str(round(BSAsset.callDelta, 4)))
  139. # self.CallGammalineEdit.setText(str(round(BSAsset.gamma, 4)))
  140. # self.CallThetalineEdit.setText(str(round(BSAsset.callTheta, 4)))
  141. # self.CallVegalineEdit.setText(str(round(BSAsset.vega, 4)))
  142. # self.CallRholineEdit.setText(str(round(BSAsset.callRho, 4)))
  143. #
  144. # self.PutPricelineEdit.setText(str(round(BSAsset.putPrice, 4)))
  145. # self.PutDeltalineEdit.setText(str(round(BSAsset.putDelta, 4)))
  146. # self.PutGammalineEdit.setText(str(round(BSAsset.gamma, 4)))
  147. # self.PutThetalineEdit.setText(str(round(BSAsset.putTheta, 4)))
  148. # self.PutVegalineEdit.setText(str(round(BSAsset.vega, 4)))
  149. # self.PutRholineEdit.setText(str(round(BSAsset.putRho, 4)))
  150.  
  151. def do_StrikePrice(self):
  152. print("StrikePriceEditingFinished: ", self.StrikePricelineEdit.text())
  153. BSAsset = mibian.BS([float(self.UnderlyingPricelineEdit.text()),
  154. float(self.StrikePricelineEdit.text()),
  155. float(self.InterestRatelineEdit.text()),
  156. float(26)], volatility=float(self.VolatilitylineEdit.text()))
  157.  
  158. self.setGreeks(BSAsset)
  159.  
  160. # self.CallPricelineEdit.setText(str(round(BSAsset.callPrice, 4)))
  161. # self.CallDeltalineEdit.setText(str(round(BSAsset.callDelta, 4)))
  162. # self.CallGammalineEdit.setText(str(round(BSAsset.gamma, 4)))
  163. # self.CallThetalineEdit.setText(str(round(BSAsset.callTheta, 4)))
  164. # self.CallVegalineEdit.setText(str(round(BSAsset.vega, 4)))
  165. # self.CallRholineEdit.setText(str(round(BSAsset.callRho, 4)))
  166. #
  167. # self.PutPricelineEdit.setText(str(round(BSAsset.putPrice, 4)))
  168. # self.PutDeltalineEdit.setText(str(round(BSAsset.putDelta, 4)))
  169. # self.PutGammalineEdit.setText(str(round(BSAsset.gamma, 4)))
  170. # self.PutThetalineEdit.setText(str(round(BSAsset.putTheta, 4)))
  171. # self.PutVegalineEdit.setText(str(round(BSAsset.vega, 4)))
  172. # self.PutRholineEdit.setText(str(round(BSAsset.putRho, 4)))
  173.  
  174. def do_Volatility(self):
  175. print("VolatilityEditingFinished: ", self.VolatilitylineEdit.text())
  176.  
  177. def do_InterestRate(self):
  178. print("InterestRateEditingFinished: ", self.InterestRatelineEdit.text())
  179.  
  180. def do_DividendYield(self):
  181. print("DividendYieldEditingFinished: ", self.DividendYieldlineEdit.text())
  182.  
  183. def do_TimeToExp(self):
  184. print("TimeToExpEditingFinished: ", self.TimeToExplineEdit.text())
  185.  
  186. def setGreeks(self, BSAsset):
  187. self.CallPricelineEdit.setText(str(round(BSAsset.callPrice, 4)))
  188. self.CallDeltalineEdit.setText(str(round(BSAsset.callDelta, 4)))
  189. self.CallGammalineEdit.setText(str(round(BSAsset.gamma, 4)))
  190. self.CallThetalineEdit.setText(str(round(BSAsset.callTheta, 4)))
  191. self.CallVegalineEdit.setText(str(round(BSAsset.vega, 4)))
  192. self.CallRholineEdit.setText(str(round(BSAsset.callRho, 4)))
  193.  
  194. self.PutPricelineEdit.setText(str(round(BSAsset.putPrice, 4)))
  195. self.PutDeltalineEdit.setText(str(round(BSAsset.putDelta, 4)))
  196. self.PutGammalineEdit.setText(str(round(BSAsset.gamma, 4)))
  197. self.PutThetalineEdit.setText(str(round(BSAsset.putTheta, 4)))
  198. self.PutVegalineEdit.setText(str(round(BSAsset.vega, 4)))
  199. self.PutRholineEdit.setText(str(round(BSAsset.putRho, 4)))
  200.  
  201. # def recalcGreeks(self):
  202. # BSAsset = mibian.BS([float(self.UnderlyingPricelineEdit.text()),
  203. # float(self.StrikePricelineEdit.text()),
  204. # float(self.InterestRatelineEdit.text()),
  205. # float(26)], volatility=float(self.VolatilitylineEdit.text()))
  206. # return BSAsset
  207.  
  208.  
  209.  
  210. def main():
  211. app = QApplication(sys.argv)
  212. app.setOrganizationName("BCSM Ltd.")
  213. app.setOrganizationDomain("BCSM.us")
  214. app.setApplicationName("Black-Schole Calculator Simulator")
  215. # app.setWindowIcon(QIcon(":/icon.png"))
  216. BSCSEngine.DBConnect()
  217. form = MainWindow()
  218. form.show()
  219. app.exec_()
  220.  
  221. def jktest():
  222. Ret = 77
  223. return str(Ret)
  224.  
  225. def myGreeks(optionFrame):
  226. print ("JKFrame", optionFrame)
  227. print ("Nu")
  228.  
  229. # Parameters = [
  230. # ['UnderlyingPrice', float(self.UnderlyingPricelineEdit.text())],
  231. # ['StrikePrice', float(self.StrikePricelineEdit.text())],
  232. # ['Volatility', float(self.VolatilitylineEdit.text())],
  233. # ['InterestRate', float(self.InterestRatelineEdit.text())],
  234. # ['DividendYield', float(self.DividendYieldlineEdit.text())],
  235. # ['TimeToExp', float(self.TimeToExplineEdit.text())],
  236. # ]
  237. # optionFrame = pd.DataFrame(Parameters, columns=['ParamName', 'ParamValue'])
  238.  
  239. # SAsset = mibian.BS([float(self.UnderlyingPricelineEdit.text()),
  240. # float(self.StrikePricelineEdit.text()),
  241. # float(self.InterestRatelineEdit.text()),
  242. # float(26)], volatility=float(self.VolatilitylineEdit.text()))
  243. #
  244. # myBS = mibian.BS([optionFrame.P])
  245.  
  246. def BScalc(**kwargs):
  247. args = kwargs
  248. # print str(args)
  249. # print str(args['f_UnderlyingPrice'])
  250. BSAsset = mibian.BS([args['f_UnderlyingPrice'],
  251. args['f_StrikePrice'],
  252. args['f_InterestRate'],
  253. args['f_TimeToExp'],
  254. ], volatility=args['f_Volatility']
  255. )
  256. return BSAsset
  257.  
  258.  
  259. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement