{"version":3,"sources":["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/symbolService.ts","webpack:///./src/views/Home/Chart.vue?d6fa","webpack:///./src/views/Home/Chart.vue","webpack:///./src/views/Home/Chart.vue?4ed5","webpack:///./src/views/Home/Chart.vue?86df","webpack:///./src/services/func.ts"],"names":["ClientSocket","dataSource","DataSource","TryTimes","Messages","OnMessage","OnOpen","OnError","isConnecting","timeoutInterval","autoConnect","context","this","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","length","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","arrayMethodUsesToLength","FIND","SKIPS_HOLES","USES_TO_LENGTH","Array","target","proto","forced","callbackfn","arguments","undefined","getSymbolPriceAsync","SymbolId","tryPostResult","res","Result","Price","getRssNewsAsync","addOrUpdateBatchAlertPrice","models","tryPostBooleanResult","addOrUpdateAlertPriceAsync","alertInfo","model","AlertInfo","PriceAlerts","getAlertPricesAsync","getAllAlertPricesAsync","removePriceAlertsAsync","PriceAlertId","updateFromYahooAsync","searchSymbolsAsync","input","type","searchOptionsAsync","expiration","getOptionDefInfo","symbolId","getWatchedOptions","generateOptions","Expiration","attrs","symbolPrice","CompanyName","toLocaleString","maximumFractionDigits","minimumFractionDigits","style","getChangeRate","toFixed","staticStyle","on","chartTypeChanged","value","$$v","chartType","expression","chatSetting","$set","_l","range","key","colorThemeChanged","item","resetSetting","applySetting","defaultSettings","interval","chartOnly","locale","colorTheme","gridLineColor","trendLineColor","fontColor","underLineColor","isTransparent","autosize","barStyle","hideTopToolbar","showDetails","withDateRanges","intervals","Object","freeze","techIntervals","barStyles","assign","parseInt","$route","query","msgCallBack","page","symbols","setUrl","symbolService","Date","getTime","setItem","components","SymbolName","setPriceValues","priceItem","Value","Name","LastTime","calcStrikePro","row","percent","OptionData","Right","Strike","StockPrice","StrikeProx"],"mappings":"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","file":"js/chunk-2e8f0a8c.js","sourcesContent":["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 {\r\n ContractSymbol, PriceAlert, PriceCls, StockPrice, OptionPrice, AlertTypeInfo, OptionSymbol, SymbolType\r\n} from '@/services/data'\r\nimport ServiceBase from '@/services/serviceBase'\r\n\r\nexport interface SymbolPriceAlert {\r\n Symbol: { Symbol: ContractSymbol; Alerts: PriceAlert[] }[];\r\n Name: string;\r\n Option: { Option: OptionSymbol; Alerts: PriceAlert[] }[];\r\n}\r\n\r\nexport interface RssFeeds {\r\n SymbolId: number;\r\n FeedIcon?: string;\r\n Link: string;\r\n FeedName: string;\r\n}\r\n\r\nexport interface RssNews {\r\n Title: string;\r\n Author: string;\r\n Link: string;\r\n Icon: string;\r\n PublishDate: string;\r\n}\r\n\r\nexport interface OptionScanRes {\r\n Symbol: ContractSymbol;\r\n Expirations: string[];\r\n Strikes: number[];\r\n Multiplier: number;\r\n}\r\n\r\nexport interface OptionWatchData extends OptionPrice {\r\n IsWatched: boolean;\r\n}\r\n\r\nexport default {\r\n async getSymbolPriceAsync (SymbolId: number) {\r\n const res = await ServiceBase.tryPostResult('/symbol/getSymbolWithPrice', { SymbolId })\r\n if (res.Result) {\r\n res.Result.Price = new PriceCls(res.Result.Price)\r\n }\r\n return res\r\n },\r\n async getRssNewsAsync (SymbolId: number) {\r\n return await ServiceBase.tryPostResult('/symbol/getRssNews', { SymbolId })\r\n },\r\n async addOrUpdateBatchAlertPrice (models: { AlertInfo: AlertTypeInfo; PriceAlerts: PriceAlert[] }[]) {\r\n return await ServiceBase.tryPostBooleanResult('/symbol/addOrUpdateBatchAlertPrice', models)\r\n },\r\n async addOrUpdateAlertPriceAsync (alertInfo: AlertTypeInfo, model: PriceAlert[]) {\r\n return await ServiceBase.tryPostBooleanResult('/symbol/addOrUpdateAlertPrice', {\r\n AlertInfo: alertInfo,\r\n PriceAlerts: model\r\n })\r\n },\r\n async getAlertPricesAsync (alertInfo: AlertTypeInfo) {\r\n return await ServiceBase.tryPostResult('/symbol/getAlertPrices', alertInfo)\r\n },\r\n async getAllAlertPricesAsync () {\r\n return await ServiceBase.tryPostResult('/symbol/getAllAlertPrices')\r\n },\r\n async removePriceAlertsAsync (PriceAlertId: number) {\r\n return await ServiceBase.tryPostBooleanResult('/symbol/removePriceAlerts', { PriceAlertId })\r\n },\r\n async updateFromYahooAsync () {\r\n return await ServiceBase.tryPostBooleanResult('/symbol/updateFromYahoo')\r\n },\r\n async searchSymbolsAsync (input: string, type: SymbolType) {\r\n return await ServiceBase.tryPostResult('/symbol/searchSymbols', { input, type })\r\n },\r\n async searchOptionsAsync (input: string, expiration: string) {\r\n return await ServiceBase.tryPostResult('/symbol/searchOptions', { input, expiration })\r\n },\r\n async getOptionDefInfo (symbolId: number) {\r\n return await ServiceBase.tryPostResult('/symbol/getOptionDefInfo', { symbolId })\r\n },\r\n async getWatchedOptions (SymbolId: number) {\r\n return await ServiceBase.tryPostResult('/symbol/getWatchedOptions', { SymbolId })\r\n },\r\n async generateOptions (SymbolId: number, Expiration: string) {\r\n return await ServiceBase.tryPostResult<{ Data: OptionWatchData[]; MarketState: number }>('/symbol/generateOptions', { SymbolId, Expiration })\r\n }\r\n}\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"m-auto\"},[(_vm.symbolPrice)?_c('div',{staticClass:\"bg-light p-3 font-weight-bold color-black\"},[_c('div',{staticClass:\"f-24\"},[_c('SymbolName',{attrs:{\"Symbol\":_vm.symbolPrice.Symbol}}),_vm._v(\" - \"+_vm._s(_vm.symbolPrice.Symbol.CompanyName)+\" \")],1),_c('div',{staticClass:\"f-30 mt-2\"},[_vm._v(_vm._s(_vm.symbolPrice.Price.getLast().toLocaleString('en-US', { maximumFractionDigits: 2, minimumFractionDigits: 2 }))+\" \"),_c('div',{staticClass:\"d-inline-block f-16\",style:('color:' + (_vm.symbolPrice.Price.getChange()<0 ? 'red' : 'darkgreen'))},[_c('span',[_vm._v(_vm._s(_vm.symbolPrice.Price.getChange().toLocaleString('en-US', { maximumFractionDigits: 2, minimumFractionDigits: 2 })))]),( _vm.symbolPrice.Price.getChange()>0 )?_c('span',{staticClass:\"ups\"}):_c('span',{staticClass:\"downs\"})]),_c('div',{staticClass:\"d-inline-block f-16\",style:('color:' + (_vm.symbolPrice.Price.getChange()<0 ? 'red' : 'darkgreen'))},[_vm._v(\" (\"+_vm._s(_vm.symbolPrice.Price.getChangeRate().toFixed(2))+\"% \"),( _vm.symbolPrice.Price.getChange()>0 )?_c('span',{staticClass:\"ups\"}):_c('span',{staticClass:\"downs\"}),_vm._v(\") \")])])]):_vm._e(),_c('table',{staticClass:\"w-100\"},[_c('tr',[_c('td',[_c('iframe',{staticStyle:{\"width\":\"100%\",\"min-height\":\"700px\"},attrs:{\"frameborder\":\"0\",\"src\":_vm.url}})]),_c('td',{staticClass:\"pt-2\",staticStyle:{\"width\":\"400px\",\"vertical-align\":\"top\"}},[_c('div',[_c('el-select',{staticClass:\"form-input\",attrs:{\"placeholder\":\"Select\"},on:{\"change\":_vm.chartTypeChanged},model:{value:(_vm.chartType),callback:function ($$v) {_vm.chartType=$$v},expression:\"chartType\"}},[_c('el-option',{attrs:{\"label\":\"Line Chart\",\"value\":\"Lightweight\"}}),_c('el-option',{attrs:{\"label\":\"Candle Stick Chart\",\"value\":\"Technical\"}})],1)],1),_c('div',{staticClass:\"mt-3 f-14\"},[_c('div',{staticClass:\"font-weight-bold mb-4\"},[_vm._v(\"Setting\")]),_c('div',{staticClass:\"d-flex align-items-center\"},[_c('span',{staticClass:\"mr-2\"},[_vm._v(\"Default Interval:\")]),( _vm.chartType==='Technical' )?_c('el-select',{staticClass:\"form-input\",staticStyle:{\"max-width\":\"100px\"},attrs:{\"placeholder\":\"Select\"},model:{value:(_vm.chatSetting.interval),callback:function ($$v) {_vm.$set(_vm.chatSetting, \"interval\", $$v)},expression:\"chatSetting.interval\"}},_vm._l((_vm.techIntervals),function(range){return _c('el-option',{key:range.key,attrs:{\"label\":range.key,\"value\":range.value}})}),1):_c('el-select',{staticClass:\"form-input\",staticStyle:{\"max-width\":\"100px\"},attrs:{\"placeholder\":\"Select\"},model:{value:(_vm.chatSetting.interval),callback:function ($$v) {_vm.$set(_vm.chatSetting, \"interval\", $$v)},expression:\"chatSetting.interval\"}},_vm._l((_vm.intervals),function(range){return _c('el-option',{key:range.key,attrs:{\"label\":range.key,\"value\":range.value}})}),1)],1),_c('div',{staticClass:\"d-flex align-items-center mt-2 mb-2\"},[_c('span',{staticClass:\"mr-2\"},[_vm._v(\"Color Theme:\")]),_c('el-select',{staticClass:\"form-input\",staticStyle:{\"max-width\":\"100px\"},attrs:{\"placeholder\":\"Select\"},on:{\"change\":_vm.colorThemeChanged},model:{value:(_vm.chatSetting.colorTheme),callback:function ($$v) {_vm.$set(_vm.chatSetting, \"colorTheme\", $$v)},expression:\"chatSetting.colorTheme\"}},[_c('el-option',{attrs:{\"label\":\"light\",\"value\":\"light\"}}),_c('el-option',{attrs:{\"label\":\"dark\",\"value\":\"dark\"}})],1)],1),( _vm.chartType==='Technical' )?_c('div',[_c('div',{staticClass:\"d-flex align-items-center mt-2 mb-2\"},[_c('span',{staticClass:\"mr-2\"},[_vm._v(\"Bar's Style:\")]),_c('el-select',{staticClass:\"form-input\",staticStyle:{\"max-width\":\"100px\"},attrs:{\"placeholder\":\"Select\"},on:{\"change\":_vm.colorThemeChanged},model:{value:(_vm.chatSetting.barStyle),callback:function ($$v) {_vm.$set(_vm.chatSetting, \"barStyle\", $$v)},expression:\"chatSetting.barStyle\"}},_vm._l((_vm.barStyles),function(item){return _c('el-option',{key:item.value,attrs:{\"label\":item.key,\"value\":item.value}})}),1)],1),_c('label',{staticClass:\"d-flex align-items-center mt-2 mb-2\"},[_c('el-checkbox',{model:{value:(_vm.chatSetting.hideTopToolbar),callback:function ($$v) {_vm.$set(_vm.chatSetting, \"hideTopToolbar\", $$v)},expression:\"chatSetting.hideTopToolbar\"}}),_c('span',{staticClass:\"ml-2\"},[_vm._v(\"Show top toolbar:\")])],1),_c('label',{staticClass:\"d-flex align-items-center mt-2 mb-2\"},[_c('el-checkbox',{model:{value:(_vm.chatSetting.showDetails),callback:function ($$v) {_vm.$set(_vm.chatSetting, \"showDetails\", $$v)},expression:\"chatSetting.showDetails\"}}),_c('span',{staticClass:\"ml-2\"},[_vm._v(\"Show details:\")])],1),_c('label',{staticClass:\"d-flex align-items-center mt-2 mb-2\"},[_c('el-checkbox',{model:{value:(_vm.chatSetting.withDateRanges),callback:function ($$v) {_vm.$set(_vm.chatSetting, \"withDateRanges\", $$v)},expression:\"chatSetting.withDateRanges\"}}),_c('span',{staticClass:\"ml-2\"},[_vm._v(\"Show bottom toolbar:\")])],1)]):_c('div',[_c('div',{staticClass:\"d-flex align-items-center mt-2 mb-2\"},[_c('div',{staticClass:\"d-flex align-items-center w-50\"},[_c('span',{staticClass:\"mr-2\"},[_vm._v(\"Price Line:\")]),_c('el-color-picker',{model:{value:(_vm.chatSetting.trendLineColor),callback:function ($$v) {_vm.$set(_vm.chatSetting, \"trendLineColor\", $$v)},expression:\"chatSetting.trendLineColor\"}})],1),_c('div',{staticClass:\"d-flex align-items-center w-50\"},[_c('span',{staticClass:\"mr-2\"},[_vm._v(\"Grid:\")]),_c('el-color-picker',{model:{value:(_vm.chatSetting.gridLineColor),callback:function ($$v) {_vm.$set(_vm.chatSetting, \"gridLineColor\", $$v)},expression:\"chatSetting.gridLineColor\"}})],1)]),_c('div',{staticClass:\"d-flex align-items-center mt-2 mb-2\"},[_c('div',{staticClass:\"d-flex align-items-center w-50\"},[_c('span',{staticClass:\"mr-2\"},[_vm._v(\"Under Line Area:\")]),_c('el-color-picker',{model:{value:(_vm.chatSetting.underLineColor),callback:function ($$v) {_vm.$set(_vm.chatSetting, \"underLineColor\", $$v)},expression:\"chatSetting.underLineColor\"}})],1),_c('div',{staticClass:\"d-flex align-items-center w-50\"},[_c('span',{staticClass:\"mr-2\"},[_vm._v(\"Font:\")]),_c('el-color-picker',{model:{value:(_vm.chatSetting.fontColor),callback:function ($$v) {_vm.$set(_vm.chatSetting, \"fontColor\", $$v)},expression:\"chatSetting.fontColor\"}})],1)])]),_c('div',[_c('el-button',{attrs:{\"size\":\"small\"},on:{\"click\":_vm.resetSetting}},[_vm._v(\"Reset\")]),_c('el-button',{attrs:{\"size\":\"small\",\"type\":\"primary\"},on:{\"click\":_vm.applySetting}},[_vm._v(\"Apply\")])],1)])])])])])}\nvar staticRenderFns = []\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\r\nimport { Component, Vue } from 'vue-property-decorator'\r\nimport symbolService from '@/services/symbolService'\r\nimport ws, { SocketMsg } from '@/services/socket'\r\nimport { PriceMsgContent, StockPrice } from '@/services/data'\r\nimport { setPriceValues } from '@/services/func'\r\nimport SymbolName from '@/components/SymbolName.vue'\r\n\r\nconst defaultSettings = {\r\n interval: '',\r\n chartOnly: true,\r\n locale: 'en',\r\n colorTheme: 'light',\r\n gridLineColor: '#F0F3FA',\r\n trendLineColor: '#2196F3',\r\n fontColor: '#787B86',\r\n underLineColor: '#E3F2FD',\r\n isTransparent: false,\r\n autosize: true,\r\n barStyle: 1,\r\n hideTopToolbar: false,\r\n showDetails: false,\r\n withDateRanges: false\r\n}\r\n// https://www.tradingview.com/widget/symbol-overview/\r\n// https://www.tradingview.com/widget/advanced-chart/\r\n@Component({\r\n components: {\r\n SymbolName\r\n }\r\n})\r\nexport default class Account extends Vue {\r\n url = ''\r\n symbolId: number\r\n symbolPrice: StockPrice = null\r\n chartType = 'Lightweight'\r\n intervals = Object.freeze([\r\n { key: '1D', value: '1D' },\r\n { key: '1M', value: '1M' },\r\n { key: '3M', value: '3M' },\r\n { key: '1Y', value: '12M' },\r\n { key: '5Y', value: '60M' },\r\n { key: 'All', value: 'All' }\r\n ])\r\n\r\n techIntervals = Object.freeze([\r\n { key: '1m', value: '1' },\r\n { key: '3m', value: '3' },\r\n { key: '5m', value: '5' },\r\n { key: '15m', value: '15' },\r\n { key: '30m', value: '30' },\r\n { key: '1h', value: '60' },\r\n { key: '2h', value: '120' },\r\n { key: '3h', value: '180' },\r\n { key: '4h', value: '240' },\r\n { key: '1d', value: 'D' },\r\n { key: '1w', value: 'W' }\r\n ])\r\n\r\n barStyles = Object.freeze([\r\n { key: 'Bars', value: 0 },\r\n { key: 'Candles', value: 1 },\r\n { key: 'Hello Candles', value: 9 },\r\n { key: 'Heikin Ashi', value: 8 },\r\n { key: 'Area', value: 3 },\r\n { key: 'Renko', value: 4 },\r\n { key: 'Line Break', value: 7 },\r\n { key: 'Kagi', value: 5 },\r\n { key: 'Point and Figure', value: 6 }\r\n ])\r\n\r\n chatSetting = Object.assign({}, defaultSettings)\r\n\r\n async mounted () {\r\n const symbolId: number = parseInt(this.$route.query.symbolId as string)\r\n ws.InitAll(this.msgCallBack)\r\n this.symbolId = symbolId\r\n ws.SendAll({ page: 'Chart', symbols: [this.symbolId] })\r\n this.setUrl()\r\n const res = await symbolService.getSymbolPriceAsync(symbolId)\r\n if (res.Result) {\r\n this.symbolPrice = res.Result\r\n }\r\n }\r\n\r\n destroyed (): void {\r\n ws.RemoveAll(this.msgCallBack)\r\n }\r\n\r\n chartTypeChanged () {\r\n this.setUrl()\r\n }\r\n\r\n setUrl () {\r\n if (window.location.host.startsWith('localhost') || window.location.host.startsWith('192.168')) {\r\n this.url = `http://localhost:5000/api/symbol/getChart?symbolId=${this.symbolId}&chartType=${this.chartType}×tamp=${new Date().getTime()}`\r\n } else {\r\n this.url = `https://agalica.com/api/symbol/getChart?symbolId=${this.symbolId}&chartType=${this.chartType}×tamp=${new Date().getTime()}`\r\n }\r\n }\r\n\r\n async msgCallBack (msg: SocketMsg) {\r\n if (msg.Action === 'resStk' && msg.MsgId === this.symbolId) {\r\n const content = msg.Content as PriceMsgContent\r\n setPriceValues(content, this.symbolPrice.Price)\r\n }\r\n }\r\n\r\n colorThemeChanged () {\r\n if (this.chatSetting.colorTheme === 'dark') {\r\n this.chatSetting.gridLineColor = '#2a2e39'\r\n this.chatSetting.trendLineColor = '#1976d2'\r\n this.chatSetting.fontColor = '#787b86'\r\n this.chatSetting.underLineColor = 'rgba(55, 166, 239, 0.15)'\r\n } else {\r\n this.chatSetting.gridLineColor = '#f0f3fa'\r\n this.chatSetting.trendLineColor = '#2196f3'\r\n this.chatSetting.fontColor = '#787b86'\r\n this.chatSetting.underLineColor = '#e3f2fd'\r\n }\r\n }\r\n\r\n resetSetting () {\r\n this.chatSetting = Object.assign({}, defaultSettings)\r\n localStorage.setItem('chat-settings', JSON.stringify(this.chatSetting))\r\n setTimeout(() => this.setUrl(), 100)\r\n }\r\n\r\n applySetting () {\r\n localStorage.setItem('chat-settings', JSON.stringify(this.chatSetting))\r\n setTimeout(() => this.setUrl(), 100)\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!./Chart.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!./Chart.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Chart.vue?vue&type=template&id=2853660d&\"\nimport script from \"./Chart.vue?vue&type=script&lang=ts&\"\nexport * from \"./Chart.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":""}