{"version":3,"sources":["webpack:///./node_modules/core-js/modules/web.dom-collections.for-each.js","webpack:///./node_modules/core-js/internals/array-for-each.js","webpack:///./node_modules/core-js/modules/es.array.for-each.js","webpack:///./src/services/socket.ts","webpack:///./src/services/data.ts","webpack:///./src/components/SymbolName.vue?ff53","webpack:///./src/components/SymbolName.vue","webpack:///./src/components/SymbolName.vue?7cd3","webpack:///./src/components/SymbolName.vue?6647","webpack:///./node_modules/core-js/modules/es.array.find.js","webpack:///./src/services/settingService.ts","webpack:///./src/views/FreebieDetector/List.vue?8c01","webpack:///./src/views/FreebieDetector/List.vue?ef28","webpack:///./src/views/FreebieDetector/List.vue","webpack:///./src/views/FreebieDetector/List.vue?4fcc","webpack:///./src/views/FreebieDetector/List.vue?c5b7","webpack:///./src/components/NumberRowSelector.vue?25c5","webpack:///./src/components/NumberRowSelector.vue","webpack:///./src/components/NumberRowSelector.vue?94e6","webpack:///./src/components/NumberRowSelector.vue?066c","webpack:///./src/services/func.ts"],"names":["global","DOMIterables","forEach","createNonEnumerableProperty","COLLECTION_NAME","Collection","CollectionPrototype","prototype","error","$forEach","arrayMethodIsStrict","arrayMethodUsesToLength","STRICT_METHOD","USES_TO_LENGTH","module","exports","callbackfn","this","arguments","length","undefined","$","target","proto","forced","ClientSocket","dataSource","DataSource","TryTimes","Messages","OnMessage","OnOpen","OnError","isConnecting","timeoutInterval","autoConnect","context","state","user","jwt","ws","location","protocol","url","uid","window","host","startsWith","WebSocket","Socket","readyState","getWsUrl","onopen","sendMessages","onerror","err","reconnect","onmessage","msg","message","JSON","parse","data","Action","sendDirectMsg","i","onclose","e","clearInterval","setTimeout","init","action","content","send","stringify","MsgId","Content","shift","console","log","callback","push","removeArrayItem","source","close","server","local","Server","Local","GetSocketServer","localStorage","getItem","InitAll","addMessageCallBack","SendAll","sendContext","RemoveAll","removeMessageCallBack","SymbolType","PortfolioGroupCls","group","IsExpanded","Symbol","Items","ComboType","PreMarketStart","PreMarketEnd","PriceCls","price","Open","Close","Last","Bid","BidYtm","DailyBid","DailyBidYtm","Volume","AvgVolume","LastUpdated","NextEarnDate","LastClosed","Status","last","getLast","getClose","change","getChange","closed","getPreAfterChange","render","_vm","_h","$createElement","_c","_self","staticClass","Currency","SecType","class","SymbolClass","_v","_s","padStart","PrimaryExch","_e","staticRenderFns","name","component","$find","find","addToUnscopables","FIND","SKIPS_HOLES","Array","readSysSettingByNamesAsync","names","tryPostResult","addOrUpdateSysSettingAsync","settings","tryPostBooleanResult","readUserSettingsByNamesAsync","addOrUpdateUserSettingAsync","testPop3","testSmtp","directives","rawName","value","expression","FreebieSetting","PremiumPercentile","on","$event","showEditing","MinimumPremiumPercent","MinimumPremium","_l","item","key","StockPrice","SymbolId","_m","opt","index","State","Expiration","substr","Target","OptionPrice","Otm","Strike","attrs","style","FreebieRange","Run","showRangeDialog","Low","High","$num","Price","getChangeRate","toFixed","RangeDialogVisible","CurrentSymbol","model","EditingOtmRange","Freebie","$$v","$set","ref","staticStyle","freebieRangeRuler","Download","downloadRangeRuler","saveOtmRange","$t","SettingDialogVisible","EditingRuler","saveUserSetting","EditingSetting","isLoading","RangeType","validator","required","trigger","fun","Name","Value","ValueType","num","toLocaleString","maximumFractionDigits","minimumFractionDigits","msgCallBack","getWatchListAsync","freebieService","getOtmRanges","ranges","Result","p","q","DownloadRange","getOptions","getDetectedFreebies","res","Percentile","MinPremiumValue","MinPremiumPercent","SymbolOpts","Range","Options","filter","Gmt","PutOptions","CallPut","sort","a","b","CallOptions","requiredIntRule","requiredNumberRule","getSettingsAsync","$refs","freebieLowEditor","validate","freebieHighEditor","downloadLowEditor","downloadHighEditor","valid","updateRange","res1","res2","Error","$alert","toString","settingService","getWatchListsAsync","Symbols","map","optionId","cp","OptionId","po","page","symbols","options","right","strike","stockPrice","Math","floor","sp","SymbolUId","getOtm","findC","Uid","findP","components","NumberRowEditor","NumberRowSelector","SymbolName","formValue","nativeOn","preventDefault","submit","rules","handleChange","_n","inputValue","$emit","v","textForm","type","Number","setPriceValues","priceItem","LastTime","calcStrikePro","row","percent","OptionData","Right","StrikeProx"],"mappings":"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","file":"js/chunk-2a2cce3a.js","sourcesContent":["var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar forEach = require('../internals/array-for-each');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {\n createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);\n } catch (error) {\n CollectionPrototype.forEach = forEach;\n }\n}\n","'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\nmodule.exports = (!STRICT_METHOD || !USES_TO_LENGTH) ? function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n} : [].forEach;\n","'use strict';\nvar $ = require('../internals/export');\nvar forEach = require('../internals/array-for-each');\n\n// `Array.prototype.forEach` method\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\n$({ target: 'Array', proto: true, forced: [].forEach != forEach }, {\n forEach: forEach\n});\n","import store from '../store'\r\nimport utility from '@/common/utility'\r\n\r\nexport interface SocketMsg {\r\n MsgId: number;\r\n Action: string;\r\n Content?: any;\r\n}\r\n\r\nexport class ClientSocket {\r\n Socket: WebSocket\r\n DataSource = 'Server'\r\n TryTimes = 0\r\n Messages: Array = []\r\n OnMessage: Array<(msg: SocketMsg) => void> = []\r\n OnOpen: () => void = null\r\n OnError: (err: Event) => void = null\r\n isConnecting = false\r\n timeoutInterval = 0\r\n autoConnect = true\r\n context: object = null\r\n\r\n constructor (dataSource: string) {\r\n this.DataSource = dataSource\r\n }\r\n\r\n private getWsUrl () {\r\n if (store.state.user == null) {\r\n return null\r\n }\r\n const jwt = store.state.user.jwt\r\n const ws = location.protocol === 'https:' ? 'wss' : 'ws'\r\n let url: string = null\r\n if (this.DataSource === 'Local') {\r\n url = `ws://localhost:12479/ws?jwt=${jwt}&uid=${store.state.user.uid}`\r\n } else {\r\n url = `${ws}://${window.location.host}/api/ws?jwt=${jwt}&uid=${store.state.user.uid}`\r\n if (window.location.host.startsWith('localhost') || window.location.host.startsWith('192.168')) {\r\n url = `${ws}://localhost:5000/api/ws?jwt=${jwt}&uid=${store.state.user.uid}`\r\n }\r\n }\r\n return url\r\n }\r\n\r\n public init () {\r\n this.autoConnect = true\r\n if (typeof (WebSocket) !== 'undefined') {\r\n if (this.Socket && this.Socket.readyState < 2) {\r\n return\r\n }\r\n const url = this.getWsUrl()\r\n if (!url) {\r\n return\r\n }\r\n try {\r\n // console.log('Connecting to: ' + url)\r\n this.Socket = new WebSocket(url)\r\n // 监听socket连接\r\n this.Socket.onopen = () => {\r\n // the connection maybe connecting,but not connected here.\r\n this.sendMessages()\r\n if (this.OnOpen) {\r\n this.OnOpen()\r\n }\r\n }\r\n // 监听socket错误信息\r\n this.Socket.onerror = err => {\r\n // the connection maybe connecting,but not connected here.\r\n if (this.OnError) {\r\n this.OnError(err)\r\n }\r\n this.reconnect()\r\n }\r\n // 监听socket消息\r\n this.Socket.onmessage = msg => {\r\n const message = JSON.parse(msg.data) as SocketMsg\r\n if (message.Action === 'resAcc') this.sendDirectMsg('sendContext', this.context)\r\n if (this.OnMessage.length > 0) {\r\n for (let i = 0; i < this.OnMessage.length; i++) {\r\n this.OnMessage[i](message)\r\n }\r\n }\r\n }\r\n // on Close\r\n this.Socket.onclose = () => {\r\n this.reconnect()\r\n }\r\n } catch (e) {\r\n // console.log(e)\r\n }\r\n }\r\n }\r\n\r\n public sendContext (context: object) {\r\n this.context = context\r\n // console.log('sending', this.DataSource, context)\r\n this.sendDirectMsg('sendContext', context)\r\n }\r\n\r\n private reconnect () {\r\n if (!this.autoConnect) return\r\n if (this.isConnecting) {\r\n return\r\n }\r\n if (this.timeoutInterval) {\r\n clearInterval(this.timeoutInterval)\r\n }\r\n this.isConnecting = true\r\n this.timeoutInterval = setTimeout(() => {\r\n this.init()\r\n this.isConnecting = false\r\n }, 4000)\r\n }\r\n\r\n stopAutoConnect () {\r\n this.autoConnect = false\r\n }\r\n\r\n public sendDirectMsg (action: string, content: any) {\r\n if (this.Socket != null && this.Socket.readyState === 1) {\r\n try {\r\n // console.log('sendDirectMsg', this.DataSource, content)\r\n this.Socket.send(JSON.stringify({ MsgId: 0, Action: action, Content: content }))\r\n } catch (e) {\r\n }\r\n }\r\n }\r\n\r\n private sendMessages () {\r\n if (this.TryTimes > 3) {\r\n this.TryTimes = 0\r\n return\r\n }\r\n if (this.Socket != null && this.Socket.readyState === 1) {\r\n this.sendDirectMsg('sendContext', this.context)\r\n while (this.Messages.length > 0) {\r\n const msg = this.Messages.shift()\r\n console.log('sent delay message', this.DataSource, msg)\r\n try {\r\n this.Socket.send(JSON.stringify(msg))\r\n } catch (e) {\r\n console.log(e)\r\n }\r\n }\r\n this.TryTimes = 0\r\n } else {\r\n this.TryTimes++\r\n setTimeout(() => {\r\n this.sendMessages()\r\n }, 200)\r\n }\r\n }\r\n\r\n public addMessageCallBack (callback: (msg: SocketMsg) => void) {\r\n this.OnMessage.push(callback)\r\n }\r\n\r\n public removeMessageCallBack (callback: (msg: SocketMsg) => void) {\r\n utility.removeArrayItem(this.OnMessage, callback)\r\n }\r\n\r\n public sendMsg (msg: SocketMsg) {\r\n if (this.Socket == null || this.Socket.readyState !== 1) {\r\n if (msg.Action !== 'sendContext') { this.Messages.push(msg) }\r\n return\r\n }\r\n console.log('send msg', this.DataSource, msg)\r\n try {\r\n this.Socket.send(JSON.stringify(msg))\r\n } catch (e) {\r\n }\r\n }\r\n\r\n changeSource (source: string) {\r\n if (this.DataSource !== source) {\r\n this.DataSource = source\r\n this.close()\r\n }\r\n }\r\n\r\n close () {\r\n this.autoConnect = false\r\n if (this.Socket) {\r\n this.Socket.close()\r\n this.Socket = null\r\n }\r\n }\r\n}\r\n\r\nconst server = new ClientSocket('Server')\r\nconst local = new ClientSocket('Local')\r\n\r\nexport default {\r\n Server: server,\r\n Local: local,\r\n GetSocketServer (): ClientSocket {\r\n const dataSource = localStorage.getItem('StockDataSource')\r\n if (dataSource === 'Local') return local\r\n return server\r\n },\r\n InitAll (callback: (msg: SocketMsg) => void) {\r\n server.init()\r\n server.addMessageCallBack(callback)\r\n local.init()\r\n local.addMessageCallBack(callback)\r\n },\r\n SendAll (context: Record) {\r\n if (localStorage.getItem('StockDataSource') === 'Local') {\r\n server.sendContext(null)\r\n local.sendContext(context)\r\n } else {\r\n server.sendContext(context)\r\n local.sendContext(null)\r\n }\r\n },\r\n RemoveAll (callback: (msg: SocketMsg) => void) {\r\n server.removeMessageCallBack(callback)\r\n local.removeMessageCallBack(callback)\r\n }\r\n}\r\n","export interface ApiResult {\r\n Error: string;\r\n Result: T;\r\n}\r\n\r\nexport interface ApiBooleanResult {\r\n Error: string;\r\n Result: boolean;\r\n}\r\n\r\nexport interface JwtResult {\r\n jwt: string;\r\n chromeToken: string;\r\n}\r\n\r\nexport interface User {\r\n email: string;\r\n name: string;\r\n accNo: string;\r\n jwt: string;\r\n uid?: string;\r\n agentId?: string;\r\n}\r\n\r\nexport interface MessageText {\r\n success?: string;\r\n error?: string;\r\n}\r\n\r\nexport interface Sort {\r\n key: string;\r\n direction: string;\r\n}\r\n\r\nexport interface SocketResponse {\r\n Action: string;\r\n Content: T;\r\n}\r\n\r\nexport interface ContractSymbol {\r\n SymbolUId: number;\r\n SymbolId: number;\r\n Symbol: string;\r\n SecType: string;\r\n Currency: string;\r\n PrimaryExch: string;\r\n CompanyName: string;\r\n CondId?: number;\r\n Description?: string;\r\n Detail?: any;\r\n IssuerId?: string;\r\n}\r\n\r\nexport interface BasePortfolio {\r\n Position: number;\r\n MarketValue: number;\r\n AverageCost: number;\r\n DailyPL?: number;\r\n}\r\n\r\nexport interface Option {\r\n Right: string;\r\n Multiplier: number;\r\n Expiration: string;\r\n Strike: number;\r\n Code: string;\r\n}\r\n\r\nexport interface OptionRow {\r\n OptionId: number;\r\n OptionUId: number;\r\n LocalSymbol: string;\r\n Right: string;\r\n Multiplier: number;\r\n ExpirationDate: string;\r\n Strike: number;\r\n ComboType?: string;\r\n}\r\n\r\nexport interface OptionSymbol extends OptionRow, ContractSymbol {\r\n Expiration: string;\r\n}\r\n\r\nexport interface WatchOption {\r\n Option: OptionSymbol;\r\n Price: Price;\r\n}\r\n\r\nexport interface CryptoSymbol\r\n{\r\n CryptoId: number;\r\n Code: string;\r\n Name: string;\r\n}\r\n\r\nexport enum SymbolType\r\n{\r\n Stock = 1,\r\n Option = 2,\r\n Crypto = 3,\r\n Bond = 4\r\n}\r\n\r\nexport interface OtmRange {\r\n SymbolId: number;\r\n Low: number;\r\n High: number;\r\n Run?: boolean;\r\n RangeType?: 'Download' | 'Freebie';\r\n}\r\n\r\nexport interface OptionPrice {\r\n Option: OptionRow;\r\n Price: BasePrice;\r\n}\r\n\r\nexport interface PortfolioMessage extends BasePortfolio {\r\n PortfolioId: number;\r\n SecType: string;\r\n ConId: number;\r\n AccountName: string;\r\n StockPrice?: Price;\r\n OptionData?: OptionRow;\r\n MarketPrice: number;\r\n UnrealizedPL: number;\r\n Change: number;\r\n ChangeRate: number;\r\n Return: number;\r\n Alert?: boolean;\r\n ExRate: number;\r\n Exposure?: number;\r\n StrikeProx?: string;\r\n}\r\n\r\nexport interface PortfolioGroup {\r\n Symbol: ContractSymbol;\r\n Items: PortfolioMessage[];\r\n ComboType: number;\r\n IsExpanded?: boolean;\r\n}\r\n\r\nexport class PortfolioGroupCls implements PortfolioGroup {\r\n constructor (group: PortfolioGroup) {\r\n this.Symbol = group.Symbol\r\n this.Items = group.Items\r\n this.ComboType = group.ComboType\r\n }\r\n\r\n Symbol: ContractSymbol\r\n Items: PortfolioMessage[]\r\n ComboType: number;\r\n IsExpanded? = true\r\n}\r\n\r\nexport interface GroupedData {\r\n SecType: string;\r\n Items: T[];\r\n Keys: string[];\r\n Sort: Sort;\r\n}\r\n\r\nexport interface WatchListName {\r\n WatchListId: number;\r\n Name: string;\r\n Keys: string[];\r\n OptKeys: string[];\r\n CryptoKeys: string[];\r\n BondKeys: string[];\r\n IsSystem: boolean;\r\n IsReadOnly: boolean;\r\n FromUserId: number;\r\n Rank: number;\r\n}\r\n\r\nexport interface WatchGroup {\r\n WatchName: WatchListName;\r\n Symbols: WatchSymbol[];\r\n Options: WatchOption[];\r\n Cryptos: WatchCrypto[];\r\n Rank?: number;\r\n LastUpdated?: string;\r\n}\r\n\r\nexport interface BasePrice {\r\n Last: number;\r\n Bid?: number;\r\n Ask?: number;\r\n Open: number;\r\n Close: number;\r\n}\r\n\r\nexport interface Price extends BasePrice {\r\n Volume?: number;\r\n AvgVolume?: number;\r\n LastUpdated?: string;\r\n NextEarnDate?: string;\r\n LastClosed?: number;\r\n Status?: number;\r\n BidYtm?: number;\r\n Bid?: number;\r\n DailyBid?: number;\r\n DailyBidYtm?: number;\r\n\r\n getLast? (): number;\r\n\r\n getClose? (): number;\r\n\r\n getChange? (): number;\r\n\r\n getChangeRate? (): number;\r\n\r\n getPreAfterChange? (): number;\r\n\r\n getPreAfterChangeRate? (): number;\r\n}\r\n\r\nconst PreMarketStart = 4\r\nconst PreMarketEnd = 16\r\nconst InTrading = 8\r\nconst Closed = 64\r\n\r\nexport class PriceCls implements Price {\r\n Open: number\r\n Close: number\r\n Last: number\r\n Bid: number\r\n BidYtm?: number\r\n DailyBid?: number\r\n DailyBidYtm?: number\r\n Volume?: number\r\n AvgVolume?: number\r\n LastUpdated?: string\r\n NextEarnDate?: string\r\n LastClosed?: number\r\n Status?: number\r\n\r\n constructor (price: Price) {\r\n if (price != null) {\r\n this.Open = price.Open\r\n this.Close = price.Close\r\n this.Last = price.Last\r\n this.Bid = price.Bid\r\n this.BidYtm = price.BidYtm\r\n this.DailyBid = price.DailyBid\r\n this.DailyBidYtm = price.DailyBidYtm\r\n this.Volume = price.Volume\r\n this.AvgVolume = price.AvgVolume\r\n this.LastUpdated = price.LastUpdated\r\n this.NextEarnDate = price.NextEarnDate\r\n this.LastClosed = price.LastClosed\r\n this.Status = price.Status\r\n }\r\n }\r\n\r\n getLast (): number {\r\n if (this.Status === PreMarketStart || this.Status === PreMarketEnd) { // support pre after price for some us stocks\r\n return this.LastClosed\r\n } else {\r\n return this.Last\r\n }\r\n }\r\n\r\n getClose (): number {\r\n return this.Close\r\n }\r\n\r\n getChange (): number {\r\n const last = this.getLast()\r\n const close = this.getClose()\r\n if (close && last) {\r\n return last - close\r\n }\r\n return 0\r\n }\r\n\r\n getChangeRate (): number {\r\n const change = this.getChange()\r\n const closed = this.getClose()\r\n if (change) {\r\n return (change / closed) * 100\r\n }\r\n return 0\r\n }\r\n\r\n getPreAfterChange (): number {\r\n if (this.Status === PreMarketStart || this.Status === PreMarketEnd) {\r\n if (this.Last && this.LastClosed) {\r\n return (this.Last - this.LastClosed)\r\n }\r\n }\r\n return null\r\n }\r\n\r\n getPreAfterChangeRate (): number {\r\n const change = this.getPreAfterChange()\r\n if (change) {\r\n return (change / this.LastClosed) * 100\r\n }\r\n return null\r\n }\r\n}\r\n\r\nexport interface StockPrice {\r\n Symbol: ContractSymbol;\r\n Price: Price;\r\n ExRate?: number;\r\n}\r\n\r\nexport interface WatchSymbol extends StockPrice {\r\n WatchListId: number;\r\n NextEarnDate: string;\r\n Alert: boolean;\r\n Rank?: number;\r\n Target?: number;\r\n IsDownload?: boolean;\r\n IsDownloading?: boolean;\r\n Portfolio?: BasePortfolio;\r\n}\r\n\r\nexport interface WatchCrypto {\r\n WatchListId: number;\r\n Alert: boolean;\r\n Rank?: number;\r\n Target?: number;\r\n Symbol: CryptoSymbol;\r\n}\r\n\r\nexport interface AlertTypeInfo{\r\n type: 'Stock' | 'Option' | 'Bond';\r\n symbolId?: number;\r\n optionId?: number;\r\n}\r\n\r\nexport interface PriceAlert {\r\n PriceAlertId: number;\r\n AlertPrice: number;\r\n Type: string;\r\n TriggerToDo: boolean;\r\n Created?: string;\r\n CreatedStr?: string;\r\n IsDeleting?: boolean;\r\n SymbolId?: number;\r\n OptionId?: number;\r\n}\r\n\r\nexport interface PriceMsgContent {\r\n Name: string;\r\n Value: number;\r\n LastTime?: string;\r\n Status: number;\r\n}\r\n\r\nexport interface OptionMsgContent extends PriceMsgContent {\r\n ConId?: number;\r\n Otm: number;\r\n StockPrice: number;\r\n Target: number;\r\n}\r\n\r\nexport interface TransactionItem {\r\n SymbolTransId?: number;\r\n SymbolId: number;\r\n Quantity: number;\r\n CostPerShare: number;\r\n TransDate: string;\r\n Commission: number;\r\n Type: string;\r\n}\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.Symbol)?_c('div',{staticClass:\"d-inline-block\"},[( _vm.Symbol.Currency === 'HKD' && _vm.Symbol.SecType === 'STK' )?_c('span',{class:_vm.SymbolClass},[_vm._v(\" HKG:\"),_c('label',{class:_vm.SymbolClass},[_vm._v(_vm._s(_vm.Symbol.Symbol.padStart(4,'0')))])]):( _vm.Symbol.PrimaryExch == 'SEHKSZSE' )?_c('span',{class:_vm.SymbolClass},[_vm._v(\"SHE:\"),_c('span',{class:_vm.SymbolClass},[_vm._v(_vm._s(_vm.Symbol.Symbol.padStart(4,'0')))])]):( _vm.Symbol.SecType == 'BOND' )?_c('span',{class:_vm.SymbolClass},[_vm._v(\" \"+_vm._s(_vm.Symbol.Symbol)+\" \")]):_c('span',{class:_vm.SymbolClass},[_vm._v(_vm._s(_vm.Symbol.Symbol))])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { ContractSymbol } from '@/services/data'\r\nimport { Component, Vue, Prop } from 'vue-property-decorator'\r\n\r\n@Component\r\nexport default class SymbolName extends Vue {\r\n name = 'SymbolName'\r\n @Prop() Symbol: ContractSymbol\r\n @Prop() SymbolClass: string\r\n}\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SymbolName.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SymbolName.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SymbolName.vue?vue&type=template&id=171114f6&\"\nimport script from \"./SymbolName.vue?vue&type=script&lang=ts&\"\nexport * from \"./SymbolName.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","'use strict';\nvar $ = require('../internals/export');\nvar $find = require('../internals/array-iteration').find;\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar FIND = 'find';\nvar SKIPS_HOLES = true;\n\nvar USES_TO_LENGTH = arrayMethodUsesToLength(FIND);\n\n// Shouldn't skip holes\nif (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.find` method\n// https://tc39.es/ecma262/#sec-array.prototype.find\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES || !USES_TO_LENGTH }, {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND);\n","import serviceBase from '@/services/serviceBase'\r\nimport { ApiBooleanResult, ApiResult } from '@/services/data'\r\n\r\nexport interface Pop3OrSmtpModel {\r\n Server: string;\r\n Port: number;\r\n Ssl: boolean;\r\n}\r\n\r\nexport interface EmailModel {\r\n Reg: string;\r\n RegPwd: string;\r\n Statement: string;\r\n StatementPwd: string;\r\n TradeConfirm: string;\r\n TradeConfirmPwd: string;\r\n}\r\n\r\nexport interface SettingValueModel {\r\n Name: string;\r\n Value: string;\r\n ValueType: string;\r\n}\r\n\r\nexport default {\r\n async readSysSettingByNamesAsync (names: Array): Promise> {\r\n return await serviceBase.tryPostResult('/Setting/readSysSettingByNames', names)\r\n },\r\n async addOrUpdateSysSettingAsync (settings: SettingValueModel[]): Promise {\r\n return await serviceBase.tryPostBooleanResult('/Setting/addOrUpdateSysSetting', settings)\r\n },\r\n async readUserSettingsByNamesAsync (names: Array): Promise> {\r\n return await serviceBase.tryPostResult('/Setting/readUserSettingsByNames', names)\r\n },\r\n async addOrUpdateUserSettingAsync (settings: SettingValueModel[]): Promise {\r\n return await serviceBase.tryPostBooleanResult('/Setting/addOrUpdateUserSetting', settings)\r\n },\r\n async testPop3 (data: Pop3OrSmtpModel): Promise {\r\n return await serviceBase.tryPostBooleanResult('/Setting/testPop', data)\r\n },\r\n async testSmtp (data: Pop3OrSmtpModel): Promise {\r\n return await serviceBase.tryPostBooleanResult('/Setting/testSmtp', data)\r\n }\r\n}\r\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./List.vue?vue&type=style&index=0&id=255f0948&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(_vm.isLoading),expression:\"isLoading\"}],staticClass:\"m-auto\"},[_c('div',{staticClass:\"text-left\"},[_c('h2',[_vm._v(\"Freebie Detector\")]),(_vm.FreebieSetting)?_c('div',{staticClass:\"font-weight-bold pb-3\"},[_c('span',[_vm._v(\"Premium percentile requirement : \"+_vm._s(_vm.FreebieSetting.PremiumPercentile)+\" \"),_c('i',{staticClass:\"el-icon-setting ml-1 pointer text-primary\",on:{\"click\":function($event){return _vm.showEditing('PremiumPercentile')}}})]),_c('span',{staticClass:\"ml-3\"},[_vm._v(\"Minimum Premium (%) : \"+_vm._s(_vm.FreebieSetting.MinimumPremiumPercent)),_c('i',{staticClass:\"el-icon-setting ml-1 pointer text-primary\",on:{\"click\":function($event){return _vm.showEditing('MinimumPremiumPercent')}}})]),_c('span',{staticClass:\"ml-3\"},[_vm._v(\"Minimum Premium ($) : \"+_vm._s(_vm.FreebieSetting.MinimumPremium)),_c('i',{staticClass:\"el-icon-setting ml-1 pointer text-primary\",on:{\"click\":function($event){return _vm.showEditing('MinimumPremium')}}})])]):_vm._e(),_vm._l((_vm.Items),function(item){return _c('div',{key:item.StockPrice.Symbol.SymbolId,staticClass:\"d-flex pb-2 pt-2 border-bt\"},[_c('div',{staticClass:\"flex-fill\"},[_c('div',{staticClass:\"text-center font-weight-bold pb-2 border-bt\"},[_vm._v(\"Call\")]),_c('table',{staticClass:\"table table-borderless f-14\"},[_vm._m(0,true),(item.CallOptions)?_c('tbody',_vm._l((item.CallOptions),function(opt,index){return _c('tr',{key:index},[_c('td',{class:opt.State},[_vm._v(_vm._s(opt.Expiration.substr(0, 10)))]),_c('td',[_vm._v(_vm._s(opt.Target))]),_c('td',[_vm._v(_vm._s(opt.OptionPrice))]),_c('td',[_vm._v(_vm._s(opt.Otm)+\"%\")]),_c('td',[_vm._v(_vm._s(opt.Strike))])])}),0):_vm._e()])]),_c('div',{staticClass:\"color-black text-center pl-2 pr-2 pt-4 pb-3\"},[_c('div',{staticClass:\"f-16\"},[_c('SymbolName',{attrs:{\"Symbol\":item.StockPrice.Symbol,\"symbol-class\":\"font-weight-bold\"}}),_c('div',[_c('button',{staticClass:\"btn-text\",style:('color:' + (item.FreebieRange && item.FreebieRange.Run ? 'darkgreen' : 'red')),on:{\"click\":function($event){return _vm.showRangeDialog(item)}}},[_vm._v(\" Range \"),(item.FreebieRange && item.FreebieRange.Run)?_c('span',[_vm._v(_vm._s(item.FreebieRange.Low)+\" ~ \"+_vm._s(item.FreebieRange.High))]):_vm._e()])])],1),_c('div',{staticClass:\"f-14\"},[_c('div',[_vm._v(_vm._s(_vm.$num(item.StockPrice.Price.getLast())))]),_c('div',{staticClass:\"d-inline-block f-12\",style:('color:' + (item.StockPrice.Price.getChange()<0 ? 'red' : 'darkgreen'))},[_c('span',[_vm._v(_vm._s(_vm.$num(item.StockPrice.Price.getChange())))]),( item.StockPrice.Price.getChange()>0 )?_c('span',{staticClass:\"ups\"}):_c('span',{staticClass:\"downs\"})]),_c('div',{staticClass:\"d-inline-block f-12\",style:('color:' + (item.StockPrice.Price.getChange()<0 ? 'red' : 'darkgreen'))},[_vm._v(\" (\"+_vm._s(item.StockPrice.Price.getChangeRate().toFixed(2))+\"% \"),( item.StockPrice.Price.getChange()>0 )?_c('span',{staticClass:\"ups\"}):_c('span',{staticClass:\"downs\"}),_vm._v(\") \")])])]),_c('div',{staticClass:\"flex-fill\"},[_c('div',{staticClass:\"text-center font-weight-bold pb-2 border-bt\"},[_vm._v(\"Put\")]),_c('table',{staticClass:\"table table-borderless f-14\"},[_vm._m(1,true),(item.PutOptions)?_c('tbody',_vm._l((item.PutOptions),function(opt,index){return _c('tr',{key:index},[_c('td',{class:opt.State},[_vm._v(_vm._s(opt.Expiration.substr(0, 10)))]),_c('td',[_vm._v(_vm._s(opt.Target))]),_c('td',[_vm._v(_vm._s(opt.OptionPrice))]),_c('td',[_vm._v(_vm._s(opt.Otm)+\"%\")]),_c('td',[_vm._v(_vm._s(opt.Strike))])])}),0):_vm._e()])])])})],2),(_vm.RangeDialogVisible)?_c('el-dialog',{staticClass:\"text-center m-auto\",attrs:{\"visible\":_vm.RangeDialogVisible,\"append-to-body\":\"\",\"show-close\":true,\"close-on-click-modal\":false,\"title\":'% OTM Monitor Range ' + _vm.CurrentSymbol.Symbol,\"lock-scroll\":false,\"width\":\"900px\"},on:{\"update:visible\":function($event){_vm.RangeDialogVisible=$event}}},[_c('div',{staticClass:\"d-flex align-items-center\"},[_c('div',{staticClass:\"w-50\"},[_c('div',{staticClass:\"d-flex align-items-center\"},[_c('span',{staticClass:\"wd-150\"},[_vm._v(\"Detector\")]),_c('el-switch',{attrs:{\"active-color\":\"#4E6E9D\",\"inactive-color\":\"#aaaaaa\"},model:{value:(_vm.EditingOtmRange.Freebie.Run),callback:function ($$v) {_vm.$set(_vm.EditingOtmRange.Freebie, \"Run\", $$v)},expression:\"EditingOtmRange.Freebie.Run\"}})],1),_c('div',{staticClass:\"d-flex align-items-center\"},[_c('span',{staticClass:\"wd-150\"},[_vm._v(\"Monitor Range\")]),_c('NumberRowEditor',{ref:\"freebieLowEditor\",staticStyle:{\"width\":\"80px\"},attrs:{\"rules\":_vm.freebieRangeRuler,\"showButton\":false,\"disabled\":!_vm.EditingOtmRange.Freebie.Run},model:{value:(_vm.EditingOtmRange.Freebie.Low),callback:function ($$v) {_vm.$set(_vm.EditingOtmRange.Freebie, \"Low\", $$v)},expression:\"EditingOtmRange.Freebie.Low\"}}),_c('span',{staticClass:\"ml-2 mr-2 f-30\"},[_vm._v(\"~\")]),_c('NumberRowEditor',{ref:\"freebieHighEditor\",staticStyle:{\"width\":\"80px\"},attrs:{\"rules\":_vm.freebieRangeRuler,\"showButton\":false,\"disabled\":!_vm.EditingOtmRange.Freebie.Run},model:{value:(_vm.EditingOtmRange.Freebie.High),callback:function ($$v) {_vm.$set(_vm.EditingOtmRange.Freebie, \"High\", $$v)},expression:\"EditingOtmRange.Freebie.High\"}}),_c('span',[_vm._v(\"%\")])],1)]),_c('div',{staticClass:\"w-50\"},[_c('div',{staticClass:\"d-flex align-items-center\"},[_c('span',{staticClass:\"wd-150\"},[_vm._v(\"Capture Data\")]),_c('el-switch',{attrs:{\"active-color\":\"#4E6E9D\",\"inactive-color\":\"#aaaaaa\"},model:{value:(_vm.EditingOtmRange.Download.Run),callback:function ($$v) {_vm.$set(_vm.EditingOtmRange.Download, \"Run\", $$v)},expression:\"EditingOtmRange.Download.Run\"}})],1),_c('div',{staticClass:\"d-flex align-items-center\"},[_c('span',{staticClass:\"wd-150\"},[_vm._v(\"Capture Range\")]),_c('NumberRowEditor',{ref:\"downloadLowEditor\",staticStyle:{\"width\":\"80px\"},attrs:{\"rules\":_vm.downloadRangeRuler,\"showButton\":false,\"disabled\":!_vm.EditingOtmRange.Download.Run},model:{value:(_vm.EditingOtmRange.Download.Low),callback:function ($$v) {_vm.$set(_vm.EditingOtmRange.Download, \"Low\", $$v)},expression:\"EditingOtmRange.Download.Low\"}}),_c('span',{staticClass:\"ml-2 mr-2 f-30\"},[_vm._v(\"~\")]),_c('NumberRowEditor',{ref:\"downloadHighEditor\",staticStyle:{\"width\":\"80px\"},attrs:{\"rules\":_vm.downloadRangeRuler,\"showButton\":false,\"disabled\":!_vm.EditingOtmRange.Download.Run},model:{value:(_vm.EditingOtmRange.Download.High),callback:function ($$v) {_vm.$set(_vm.EditingOtmRange.Download, \"High\", $$v)},expression:\"EditingOtmRange.Download.High\"}}),_c('span',[_vm._v(\"%\")])],1)])]),_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":_vm.saveOtmRange}},[_vm._v(_vm._s(_vm.$t('button.save')))])],1):_vm._e(),(_vm.SettingDialogVisible)?_c('el-dialog',{staticClass:\"text-center m-auto\",attrs:{\"visible\":_vm.SettingDialogVisible,\"append-to-body\":\"\",\"show-close\":true,\"close-on-click-modal\":false,\"lock-scroll\":false,\"width\":\"500px\"},on:{\"update:visible\":function($event){_vm.SettingDialogVisible=$event}}},[_c('NumberRowEditor',{attrs:{\"rules\":_vm.EditingRuler},on:{\"change\":_vm.saveUserSetting},model:{value:(_vm.EditingSetting.Value),callback:function ($$v) {_vm.$set(_vm.EditingSetting, \"Value\", $$v)},expression:\"EditingSetting.Value\"}})],1):_vm._e()],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('thead',[_c('tr',[_c('th',[_vm._v(\"Expiration\")]),_c('th',[_vm._v(\"Target Option Price\")]),_c('th',[_vm._v(\"Current Option Price\")]),_c('th',[_vm._v(\"% OTM\")]),_c('th',[_vm._v(\"Strike\")])])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('thead',[_c('tr',[_c('th',[_vm._v(\"Expiration\")]),_c('th',[_vm._v(\"Target Option Price\")]),_c('th',[_vm._v(\"Current Option Price\")]),_c('th',[_vm._v(\"% OTM\")]),_c('th',[_vm._v(\"Strike\")])])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Vue, Component } from 'vue-property-decorator'\r\nimport { ContractSymbol, OptionMsgContent, OtmRange, PriceCls, PriceMsgContent } from '@/services/data'\r\nimport ws, { SocketMsg } from '@/services/socket'\r\nimport { setPriceValues } from '@/services/func'\r\nimport WatchListService from '@/services/watchListService'\r\nimport NumberRowEditor from '@/components/NumberRowEditor.vue'\r\nimport NumberRowSelector from '@/components/NumberRowSelector.vue'\r\nimport freebieService, { StockFreebie } from '@/services/freebieService'\r\nimport settingService, { SettingValueModel } from '@/services/settingService'\r\nimport SymbolName from '@/components/SymbolName.vue'\r\nimport validation, { Ruler } from '@/common/element-val'\r\n\r\ninterface FreebieSetting {\r\n PremiumPercentile: number;\r\n MinimumPremium: number;\r\n MinimumPremiumPercent: number;\r\n}\r\n\r\n@Component({\r\n components: {\r\n NumberRowEditor,\r\n NumberRowSelector,\r\n SymbolName\r\n }\r\n})\r\nexport default class FreebieDetector extends Vue {\r\n $refs: {\r\n freebieLowEditor: NumberRowEditor;\r\n freebieHighEditor: NumberRowEditor;\r\n downloadLowEditor: NumberRowEditor;\r\n downloadHighEditor: NumberRowEditor;\r\n }\r\n\r\n isLoading = false\r\n FreebieSetting: FreebieSetting = null\r\n Items: StockFreebie[] = []\r\n CurrentSymbol: ContractSymbol\r\n RangeDialogVisible = false\r\n EditingOtmRange: {SymbolId: number; Download: OtmRange;Freebie: OtmRange } = {\r\n SymbolId: null,\r\n Download: {\r\n SymbolId: null,\r\n Low: null,\r\n High: null,\r\n Run: null,\r\n RangeType: 'Download'\r\n },\r\n Freebie: {\r\n SymbolId: null,\r\n Low: null,\r\n High: null,\r\n Run: null,\r\n RangeType: 'Freebie'\r\n }\r\n }\r\n\r\n freebieRangeRuler = [{\r\n validator: validation.required(),\r\n trigger: 'trigger'\r\n }, {\r\n validator: validation.fun()(() => {\r\n if (this.EditingOtmRange == null) return true\r\n if (this.EditingOtmRange.Freebie.Low == null || this.EditingOtmRange.Freebie.High == null) return true\r\n else return this.EditingOtmRange.Freebie.Low < this.EditingOtmRange.Freebie.High && (this.EditingOtmRange.Freebie.High - this.EditingOtmRange.Freebie.Low) >= 1\r\n }, 'Low must be at least 1% lower than High'),\r\n trigger: 'blur'\r\n }]\r\n\r\n downloadRangeRuler = [{\r\n validator: validation.required(),\r\n trigger: 'trigger'\r\n }, {\r\n validator: validation.fun()(() => {\r\n if (this.EditingOtmRange == null) return true\r\n if (this.EditingOtmRange.Download.Low == null || this.EditingOtmRange.Download.High == null) return true\r\n else return this.EditingOtmRange.Download.Low < this.EditingOtmRange.Download.High && (this.EditingOtmRange.Download.High - this.EditingOtmRange.Download.Low) >= 1\r\n }, 'Low must be at least 1% lower than High'),\r\n trigger: 'blur'\r\n }]\r\n\r\n SettingDialogVisible = false\r\n EditingSetting: SettingValueModel = {\r\n Name: null,\r\n Value: null,\r\n ValueType: 'Number'\r\n }\r\n\r\n EditingRuler: Ruler = []\r\n\r\n $num (num: number): string {\r\n if (num != null && num !== undefined) {\r\n return num.toLocaleString('en-US', { maximumFractionDigits: 2, minimumFractionDigits: 2 })\r\n }\r\n return null\r\n }\r\n\r\n async mounted () {\r\n ws.Server.init()\r\n ws.Server.addMessageCallBack(this.msgCallBack)\r\n await this.getWatchListAsync()\r\n const ranges = await freebieService.getOtmRanges()\r\n if (ranges.Result && ranges.Result.length > 0) {\r\n ranges.Result.forEach(p => {\r\n const item = this.Items.find(q => q.StockPrice.Symbol.SymbolId === p.SymbolId)\r\n if (item) {\r\n if (p.RangeType === 'Download') item.DownloadRange = p\r\n if (p.RangeType === 'Freebie') item.FreebieRange = p\r\n }\r\n })\r\n }\r\n await this.getOptions()\r\n }\r\n\r\n async getOptions () {\r\n this.isLoading = true\r\n const res = await freebieService.getDetectedFreebies()\r\n if (res.Result) {\r\n this.FreebieSetting = {\r\n PremiumPercentile: res.Result.Percentile,\r\n MinimumPremium: res.Result.MinPremiumValue,\r\n MinimumPremiumPercent: res.Result.MinPremiumPercent\r\n }\r\n res.Result.SymbolOpts.forEach(p => {\r\n if (p.Range) {\r\n p.Options = p.Options.filter(q => q.Otm >= p.Range.Low && q.Otm <= p.Range.High)\r\n }\r\n })\r\n for (const item of this.Items) {\r\n const find = res.Result.SymbolOpts.find(p => p.SymbolId === item.StockPrice.Symbol.SymbolId)\r\n if (find) {\r\n item.Gmt = find.Gmt\r\n item.PutOptions = find.Options.filter(q => q.CallPut === 'P').sort((a, b) => {\r\n return a.Strike - b.Strike\r\n })\r\n item.CallOptions = find.Options.filter(q => q.CallPut === 'C').sort((a, b) => {\r\n return b.Strike - a.Strike\r\n })\r\n }\r\n }\r\n }\r\n this.sendContext()\r\n this.isLoading = false\r\n }\r\n\r\n async showRangeDialog (item: StockFreebie) {\r\n const ranges = await freebieService.getOtmRanges(item.StockPrice.Symbol.SymbolId)\r\n if (ranges.Result && ranges.Result.length > 0) {\r\n if (ranges.Result[0].RangeType === 'Download') item.DownloadRange = ranges.Result[0]\r\n if (ranges.Result[0].RangeType === 'Freebie') item.FreebieRange = ranges.Result[0]\r\n }\r\n this.CurrentSymbol = item.StockPrice.Symbol\r\n this.RangeDialogVisible = true\r\n this.EditingOtmRange.SymbolId = item.StockPrice.Symbol.SymbolId\r\n if (item.DownloadRange) { this.EditingOtmRange.Download = item.DownloadRange }\r\n if (item.FreebieRange) { this.EditingOtmRange.Freebie = item.FreebieRange }\r\n }\r\n\r\n async showEditing (name: string) {\r\n this.EditingSetting.Value = null\r\n this.EditingSetting.Name = name\r\n if (name === 'PremiumPercentile' || name === 'MinimumPremiumPercent') {\r\n this.EditingRuler = validation.requiredIntRule()\r\n } else if (name === 'MinimumPremium') {\r\n this.EditingRuler = validation.requiredNumberRule()\r\n }\r\n this.SettingDialogVisible = true\r\n this.EditingSetting.Value = await this.getSettingsAsync(name)\r\n }\r\n\r\n async saveOtmRange () {\r\n const valid: boolean = await this.$refs.freebieLowEditor.validate() &&\r\n await this.$refs.freebieHighEditor.validate() &&\r\n await this.$refs.downloadLowEditor.validate() &&\r\n await this.$refs.downloadHighEditor.validate()\r\n if (!valid) {\r\n return\r\n }\r\n this.EditingOtmRange.Freebie.SymbolId = this.EditingOtmRange.SymbolId\r\n this.EditingOtmRange.Download.SymbolId = this.EditingOtmRange.SymbolId\r\n const res1 = await freebieService.updateRange(this.EditingOtmRange.Download)\r\n const res2 = await freebieService.updateRange(this.EditingOtmRange.Freebie)\r\n if (res1.Error || res2.Error) {\r\n await this.$alert(res1.Error || res2.Error)\r\n } else {\r\n const item = this.Items.find(p => p.StockPrice.Symbol.SymbolId === this.EditingOtmRange.SymbolId)\r\n if (item.DownloadRange == null) {\r\n item.DownloadRange = { SymbolId: this.EditingOtmRange.SymbolId, Low: null, High: null, Run: false }\r\n } else item.DownloadRange = this.EditingOtmRange.Download\r\n if (item.FreebieRange == null) {\r\n item.FreebieRange = { SymbolId: this.EditingOtmRange.SymbolId, Low: null, High: null, Run: false }\r\n } else item.FreebieRange = this.EditingOtmRange.Freebie\r\n this.RangeDialogVisible = false\r\n this.CurrentSymbol = null\r\n }\r\n await this.getOptions()\r\n }\r\n\r\n async saveUserSetting () {\r\n this.EditingSetting.Value = this.EditingSetting.Value.toString()\r\n const res = await settingService.addOrUpdateUserSettingAsync([this.EditingSetting])\r\n if (res.Error) {\r\n await this.$alert(res.Error)\r\n } else {\r\n this.SettingDialogVisible = false\r\n await this.getOptions()\r\n }\r\n }\r\n\r\n async getSettingsAsync (name: string) {\r\n const res = await settingService.readUserSettingsByNamesAsync([name])\r\n for (const item of res.Result) {\r\n if (item.Name === name) {\r\n return item.Value\r\n }\r\n }\r\n }\r\n\r\n async getWatchListAsync () {\r\n const res = await WatchListService.getWatchListsAsync(null, 'Core Portfolio')\r\n if (res.Error) {\r\n await this.$alert(res.Error)\r\n return\r\n }\r\n for (const group of res.Result) {\r\n group.Symbols.forEach(p => {\r\n if (p.Price == null) {\r\n p.Price = new PriceCls({ Open: null, Close: null, Last: null })\r\n }\r\n })\r\n }\r\n if (res.Result.length > 0) {\r\n this.Items = res.Result[0].Symbols.map(p => {\r\n return {\r\n StockPrice: p,\r\n DownloadRange: null,\r\n FreebieRange: null,\r\n CallOptions: [],\r\n PutOptions: []\r\n }\r\n })\r\n }\r\n }\r\n\r\n sendContext () {\r\n const optionId = new Array()\r\n for (const item of this.Items) {\r\n for (const cp of item.CallOptions) {\r\n optionId.push(cp.OptionId)\r\n }\r\n for (const po of item.PutOptions) {\r\n optionId.push(po.OptionId)\r\n }\r\n }\r\n ws.Server.sendContext({\r\n page: 'freebielist',\r\n symbols: this.Items.map(p => p.StockPrice.Symbol.SymbolId),\r\n options: optionId\r\n })\r\n }\r\n\r\n destroyed (): void {\r\n ws.Server.removeMessageCallBack(this.msgCallBack)\r\n }\r\n\r\n getOtm (right: string, strike: number, stockPrice: number) {\r\n return right === 'C'\r\n ? Math.floor(((strike / stockPrice) - 1) * 100)\r\n : Math.floor((1 - (strike / stockPrice)) * 100)\r\n }\r\n\r\n async msgCallBack (msg: SocketMsg) {\r\n if (msg.Action === 'resNot' && msg.Content === 'freebie') {\r\n await this.getOptions()\r\n return\r\n }\r\n if (msg.Action === 'resStk') {\r\n for (const sp of this.Items) {\r\n if (sp.StockPrice.Price == null) {\r\n sp.StockPrice.Price = new PriceCls({ Open: null, Close: null, Last: null })\r\n }\r\n if (sp.StockPrice.Symbol.SymbolUId === msg.MsgId) {\r\n const content = msg.Content as PriceMsgContent\r\n setPriceValues(content, sp.StockPrice.Price)\r\n for (const item of sp.CallOptions) {\r\n item.StockPrice = sp.StockPrice.Price.Last\r\n item.Otm = this.getOtm(item.CallPut, item.Strike, item.StockPrice)\r\n }\r\n for (const item of sp.PutOptions) {\r\n item.StockPrice = sp.StockPrice.Price.Last\r\n item.Otm = this.getOtm(item.CallPut, item.Strike, item.StockPrice)\r\n }\r\n }\r\n }\r\n }\r\n if (msg.Action === 'resOpt') {\r\n const content = msg.Content as OptionMsgContent\r\n for (const sp of this.Items) {\r\n const findC = sp.CallOptions?.find(p => p.Uid === msg.MsgId)\r\n const findP = sp.PutOptions?.find(p => p.Uid === msg.MsgId)\r\n if (content.Name === 'OptPrice') {\r\n if (findC != null) {\r\n findC.OptionPrice = content.Value\r\n }\r\n if (findP != null) {\r\n findP.OptionPrice = content.Value\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./List.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./List.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./List.vue?vue&type=template&id=255f0948&scoped=true&\"\nimport script from \"./List.vue?vue&type=script&lang=ts&\"\nexport * from \"./List.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./List.vue?vue&type=style&index=0&id=255f0948&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"255f0948\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('el-form',{ref:\"textForm\",attrs:{\"model\":_vm.formValue},nativeOn:{\"submit\":function($event){$event.preventDefault();return _vm.submit()}}},[_c('el-form-item',{attrs:{\"rules\":_vm.rules,\"prop\":\"inputValue\"}},[_c('div',{staticClass:\"d-flex pt-3 input-group\"},[_c('el-select',{staticClass:\"form-input\",attrs:{\"autocomplete\":\"off\",\"placeholder\":\"Select\"},on:{\"change\":_vm.handleChange},model:{value:(_vm.formValue.inputValue),callback:function ($$v) {_vm.$set(_vm.formValue, \"inputValue\", _vm._n($$v))},expression:\"formValue.inputValue\"}},_vm._l((_vm.items),function(item){return _c('el-option',{key:item,attrs:{\"label\":item,\"value\":item}})}),1),_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":function($event){return _vm.submit()}}},[_vm._v(_vm._s(_vm.$t('button.save')))])],1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue, Prop, Model, Emit, Watch } from 'vue-property-decorator'\r\nimport { MessageText } from '@/services/data'\r\nimport { ElForm } from 'element-ui/types/form'\r\n\r\n@Component\r\nexport default class NumberRowSelector extends Vue {\r\n $refs: {\r\n textForm: ElForm;\r\n }\r\n\r\n mounted () {\r\n this.formValue.inputValue = this.value\r\n }\r\n\r\n formValue: { inputValue: number } = { inputValue: 0 }\r\n message: MessageText = null\r\n @Model('input', { type: Number }) value: number\r\n // do not put default value to prop value\r\n @Prop() rules: any\r\n @Prop() items: Array | number\r\n\r\n // @Emit('input')\r\n handleChange () {\r\n this.$emit('input', this.formValue.inputValue)\r\n }\r\n\r\n @Watch('value')\r\n onValueChanged (v: number) {\r\n this.formValue.inputValue = v\r\n }\r\n\r\n @Watch('formValue.inputValue')\r\n onInputValueChanged (v: number) {\r\n this.$emit('input', v)\r\n }\r\n\r\n // if use @Emit,do not use this.$emit again, @Emit will return the function value to parent\r\n submit () {\r\n this.$refs.textForm.validate((valid: boolean) => {\r\n if (valid) {\r\n this.$emit('change')\r\n }\r\n })\r\n }\r\n}\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NumberRowSelector.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NumberRowSelector.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./NumberRowSelector.vue?vue&type=template&id=b3e48cfa&\"\nimport script from \"./NumberRowSelector.vue?vue&type=script&lang=ts&\"\nexport * from \"./NumberRowSelector.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { PortfolioMessage, Price, PriceMsgContent } from '@/services/data'\r\n\r\nexport function setPriceValues (content: PriceMsgContent, priceItem: Price) {\r\n if (content.Value != null && priceItem) {\r\n if (content.Name === 'Last') {\r\n priceItem.LastUpdated = content.LastTime\r\n priceItem.Last = content.Value\r\n } else if (content.Name === 'Open') {\r\n priceItem.Open = content.Value\r\n } else if (content.Name === 'Close') {\r\n priceItem.Close = content.Value\r\n } else if (content.Name === 'Volume') {\r\n priceItem.Volume = content.Value\r\n } else if (content.Name === 'AvgVolume') {\r\n priceItem.AvgVolume = content.Value\r\n } else if (content.Name === 'Bid') {\r\n priceItem.Bid = content.Value\r\n }\r\n }\r\n}\r\n\r\nexport interface Group {\r\n Key: any;\r\n Entries: T[];\r\n}\r\n\r\nexport function groupBy (arr: Array, keySelector: (entry: T) => any): Group[] {\r\n const groups: Group[] = []\r\n for (const row of arr) {\r\n const key = keySelector(row)\r\n const find = groups.find(p => p.Key === key)\r\n if (find) {\r\n find.Entries.push(row)\r\n } else {\r\n groups.push({ Key: key, Entries: [row] })\r\n }\r\n }\r\n return groups\r\n}\r\n\r\nexport function calcStrikePro (row: PortfolioMessage, percent: number) {\r\n if (percent && row.SecType === 'OPT') {\r\n if (row.OptionData.Right === 'C') {\r\n const target = (100 - percent) / 100.0 * row.OptionData.Strike\r\n if (row.StockPrice.Last >= target && row.StockPrice.Last < row.OptionData.Strike) {\r\n row.StrikeProx = 'NTM'\r\n } else if (row.StockPrice.Last >= row.OptionData.Strike) {\r\n row.StrikeProx = 'ITM'\r\n } else if (row.StockPrice.Last < target) {\r\n row.StrikeProx = 'OOM'\r\n }\r\n }\r\n if (row.OptionData.Right === 'P') {\r\n const target = (100 + percent) / 100.0 * row.OptionData.Strike\r\n if (row.StockPrice.Last <= target && row.StockPrice.Last > row.OptionData.Strike) {\r\n row.StrikeProx = 'NTM'\r\n } else if (row.StockPrice.Last <= row.OptionData.Strike) {\r\n row.StrikeProx = 'ITM'\r\n } else if (row.StockPrice.Last > target) {\r\n row.StrikeProx = 'OOM'\r\n }\r\n }\r\n }\r\n}\r\n"],"sourceRoot":""}