Forked from kyawswarthwin/TradingView Indicator Compute
Created
May 23, 2024 10:45
-
-
Save sadegh/71de1ba41158cc6a750078f423d96815 to your computer and use it in GitHub Desktop.
tradingview-indicator-compute.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| const INDICATORS = { | |
| 'Recommend.Other': { title: 'Oscillators Rating' }, | |
| 'Recommend.All': { title: 'Technical Rating' }, | |
| 'Recommend.MA': { title: 'Moving Averages Rating' }, | |
| RSI: { title: 'Relative Strength Index (14)' }, | |
| 'RSI[1]': null, | |
| 'Stoch.K': { title: 'Stochastic %K (14, 3, 3)' }, | |
| 'Stoch.D': { title: 'Stochastic %D (14, 3, 3)' }, | |
| 'Stoch.K[1]': null, | |
| 'Stoch.D[1]': null, | |
| CCI20: { title: 'Commodity Channel Index (20)' }, | |
| 'CCI20[1]': null, | |
| ADX: { title: 'Average Directional Index (14)' }, | |
| 'ADX+DI': { title: 'Positive Directional Indicator (14)' }, | |
| 'ADX-DI': { title: 'Negative Directional Indicator (14)' }, | |
| 'ADX+DI[1]': null, | |
| 'ADX-DI[1]': null, | |
| AO: { title: 'Awesome Oscillator' }, | |
| 'AO[1]': null, | |
| 'AO[2]': null, | |
| Mom: { title: 'Momentum (10)' }, | |
| 'Mom[1]': null, | |
| 'MACD.macd': { title: 'MACD Level (12, 26)' }, | |
| 'MACD.signal': { title: 'MACD Signal (12, 26)' }, | |
| 'Rec.Stoch.RSI': null, | |
| 'Stoch.RSI.K': { title: 'Stochastic RSI Fast (3, 3, 14, 14)' }, | |
| 'Rec.WR': null, | |
| 'W.R': { title: 'Williams Percent Range (14)' }, | |
| 'Rec.BBPower': null, | |
| BBPower: { title: 'Bull Bear Power' }, | |
| 'Rec.UO': null, | |
| UO: { title: 'Ultimate Oscillator (7, 14, 28)' }, | |
| close: { title: 'Close' }, | |
| EMA10: { title: 'Exponential Moving Average (10)' }, | |
| SMA10: { title: 'Simple Moving Average (10)' }, | |
| EMA20: { title: 'Exponential Moving Average (20)' }, | |
| SMA20: { title: 'Simple Moving Average (20)' }, | |
| EMA30: { title: 'Exponential Moving Average (30)' }, | |
| SMA30: { title: 'Simple Moving Average (30)' }, | |
| EMA50: { title: 'Exponential Moving Average (50)' }, | |
| SMA50: { title: 'Simple Moving Average (50)' }, | |
| EMA100: { title: 'Exponential Moving Average (100)' }, | |
| SMA100: { title: 'Simple Moving Average (100)' }, | |
| EMA200: { title: 'Exponential Moving Average (200)' }, | |
| SMA200: { title: 'Simple Moving Average (200)' }, | |
| 'Rec.Ichimoku': null, | |
| 'Ichimoku.BLine': { title: 'Ichimoku Base Line (9, 26, 52, 26)' }, | |
| 'Rec.VWMA': null, | |
| VWMA: { title: 'Volume Weighted Moving Average (20)' }, | |
| 'Rec.HullMA9': null, | |
| HullMA9: { title: 'Hull Moving Average (9)' }, | |
| 'Pivot.M.Classic.S3': { title: 'Pivot Classic S3' }, | |
| 'Pivot.M.Classic.S2': { title: 'Pivot Classic S2' }, | |
| 'Pivot.M.Classic.S1': { title: 'Pivot Classic S1' }, | |
| 'Pivot.M.Classic.Middle': { title: 'Pivot Classic P' }, | |
| 'Pivot.M.Classic.R1': { title: 'Pivot Classic R1' }, | |
| 'Pivot.M.Classic.R2': { title: 'Pivot Classic R2' }, | |
| 'Pivot.M.Classic.R3': { title: 'Pivot Classic R3' }, | |
| 'Pivot.M.Fibonacci.S3': { title: 'Pivot Fibonacci S3' }, | |
| 'Pivot.M.Fibonacci.S2': { title: 'Pivot Fibonacci S2' }, | |
| 'Pivot.M.Fibonacci.S1': { title: 'Pivot Fibonacci S1' }, | |
| 'Pivot.M.Fibonacci.Middle': { title: 'Pivot Fibonacci P' }, | |
| 'Pivot.M.Fibonacci.R1': { title: 'Pivot Fibonacci R1' }, | |
| 'Pivot.M.Fibonacci.R2': { title: 'Pivot Fibonacci R2' }, | |
| 'Pivot.M.Fibonacci.R3': { title: 'Pivot Fibonacci R3' }, | |
| 'Pivot.M.Camarilla.S3': { title: 'Pivot Camarilla S3' }, | |
| 'Pivot.M.Camarilla.S2': { title: 'Pivot Camarilla S2' }, | |
| 'Pivot.M.Camarilla.S1': { title: 'Pivot Camarilla S1' }, | |
| 'Pivot.M.Camarilla.Middle': { title: 'Pivot Camarilla P' }, | |
| 'Pivot.M.Camarilla.R1': { title: 'Pivot Camarilla R1' }, | |
| 'Pivot.M.Camarilla.R2': { title: 'Pivot Camarilla R2' }, | |
| 'Pivot.M.Camarilla.R3': { title: 'Pivot Camarilla R3' }, | |
| 'Pivot.M.Woodie.S3': { title: 'Pivot Woodie S3' }, | |
| 'Pivot.M.Woodie.S2': { title: 'Pivot Woodie S2' }, | |
| 'Pivot.M.Woodie.S1': { title: 'Pivot Woodie S1' }, | |
| 'Pivot.M.Woodie.Middle': { title: 'Pivot Woodie P' }, | |
| 'Pivot.M.Woodie.R1': { title: 'Pivot Woodie R1' }, | |
| 'Pivot.M.Woodie.R2': { title: 'Pivot Woodie R2' }, | |
| 'Pivot.M.Woodie.R3': { title: 'Pivot Woodie R3' }, | |
| 'Pivot.M.Demark.S1': { title: 'Pivot DM S1' }, | |
| 'Pivot.M.Demark.Middle': { title: 'Pivot DM P' }, | |
| 'Pivot.M.Demark.R1': { title: 'Pivot DM R1' } | |
| }; | |
| let S, | |
| x, | |
| g, | |
| F = ''; | |
| const M = {}; | |
| const xxx = { | |
| RSI: { | |
| control: 'condition', | |
| conditionFields: [], | |
| formatter: S, | |
| filterFormatter: x, | |
| displaySignal: !0, | |
| additionalColumns: ['RSI', 'RSI[1]'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processRSISignal', | |
| signalComputation: 'g.signalComputationFunctions.computeRSISignal' | |
| }, | |
| RSI7: { | |
| control: 'condition', | |
| conditionFields: [], | |
| formatter: S, | |
| filterFormatter: x, | |
| displaySignal: !0, | |
| additionalColumns: ['RSI7', 'RSI7[1]'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processRSISignal', | |
| signalComputation: 'g.signalComputationFunctions.computeRSISignal' | |
| }, | |
| ADX: { | |
| control: 'condition', | |
| conditionFields: [], | |
| formatter: S, | |
| filterFormatter: x, | |
| displaySignal: !0, | |
| additionalColumns: ['ADX', 'ADX+DI', 'ADX-DI', 'ADX+DI[1]', 'ADX-DI[1]'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processADXSignal', | |
| signalComputation: 'g.signalComputationFunctions.computeADXSignal' | |
| }, | |
| 'ADX+DI': { | |
| control: 'condition', | |
| conditionFields: ['ADX-DI'], | |
| formatter: S, | |
| filterFormatter: x | |
| }, | |
| 'ADX-DI': { | |
| control: 'condition', | |
| conditionFields: ['ADX+DI'], | |
| formatter: S, | |
| filterFormatter: x | |
| }, | |
| ATR: { | |
| control: 'condition', | |
| conditionFields: [] | |
| }, | |
| Mom: { | |
| control: 'condition', | |
| conditionFields: [], | |
| filterFormatter: x, | |
| displaySignal: !0, | |
| additionalColumns: ['Mom', 'Mom[1]'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processMomSignal', | |
| signalComputation: 'g.signalComputationFunctions.computeMomSignal' | |
| }, | |
| 'High.All': { | |
| control: 'toggle', | |
| filter: { operator: 'eless', value: 'high' }, | |
| formatter: S, | |
| forexFormatter: M | |
| }, | |
| 'Low.All': { | |
| control: 'toggle', | |
| filter: { operator: 'egreater', value: 'low' }, | |
| formatter: S, | |
| forexFormatter: M | |
| }, | |
| price_52_week_high: { | |
| control: 'toggle', | |
| filter: { operator: 'eless', value: 'high' }, | |
| formatter: S, | |
| forexFormatter: M | |
| }, | |
| price_52_week_low: { | |
| control: 'toggle', | |
| filter: { operator: 'egreater', value: 'low' }, | |
| formatter: S, | |
| forexFormatter: M | |
| }, | |
| is_primary: { | |
| title: 'F.quoteFieldTitles.is_primary[0]', | |
| control: 'toggle', | |
| filter: { operator: 'equal', value: !0 }, | |
| category: 1 | |
| }, | |
| 'High.6M': { | |
| control: 'toggle', | |
| filter: { operator: 'eless', value: 'high' }, | |
| formatter: S, | |
| forexFormatter: M | |
| }, | |
| 'Low.6M': { | |
| control: 'toggle', | |
| filter: { operator: 'egreater', value: 'low' }, | |
| formatter: S, | |
| forexFormatter: M | |
| }, | |
| 'High.3M': { | |
| control: 'toggle', | |
| filter: { operator: 'eless', value: 'high' }, | |
| formatter: S, | |
| forexFormatter: M | |
| }, | |
| 'Low.3M': { | |
| control: 'toggle', | |
| filter: { operator: 'egreater', value: 'low' }, | |
| formatter: S, | |
| forexFormatter: M | |
| }, | |
| 'High.1M': { | |
| control: 'toggle', | |
| filter: { operator: 'eless', value: 'high' }, | |
| formatter: S, | |
| forexFormatter: M | |
| }, | |
| 'Low.1M': { | |
| control: 'toggle', | |
| filter: { operator: 'egreater', value: 'low' }, | |
| formatter: S, | |
| forexFormatter: M | |
| }, | |
| EMA5: { | |
| control: 'condition', | |
| conditionFields: 'EMA5', | |
| displaySignal: !0, | |
| additionalColumns: ['EMA5', 'close'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processMASignal', | |
| signalComputation: 'g.signalComputationFunctions.computeMASignal' | |
| }, | |
| EMA10: { | |
| control: 'condition', | |
| conditionFields: 'EMA10', | |
| displaySignal: !0, | |
| additionalColumns: ['EMA10', 'close'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processMASignal', | |
| signalComputation: 'g.signalComputationFunctions.computeMASignal' | |
| }, | |
| EMA20: { | |
| control: 'condition', | |
| conditionFields: 'EMA20', | |
| displaySignal: !0, | |
| additionalColumns: ['EMA20', 'close'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processMASignal', | |
| signalComputation: 'g.signalComputationFunctions.computeMASignal' | |
| }, | |
| EMA30: { | |
| control: 'condition', | |
| conditionFields: 'EMA30', | |
| displaySignal: !0, | |
| additionalColumns: ['EMA30', 'close'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processMASignal', | |
| signalComputation: 'g.signalComputationFunctions.computeMASignal' | |
| }, | |
| EMA50: { | |
| control: 'condition', | |
| conditionFields: 'EMA50', | |
| displaySignal: !0, | |
| additionalColumns: ['EMA50', 'close'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processMASignal', | |
| signalComputation: 'g.signalComputationFunctions.computeMASignal' | |
| }, | |
| EMA100: { | |
| control: 'condition', | |
| conditionFields: 'EMA100', | |
| displaySignal: !0, | |
| additionalColumns: ['EMA100', 'close'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processMASignal', | |
| signalComputation: 'g.signalComputationFunctions.computeMASignal' | |
| }, | |
| EMA200: { | |
| control: 'condition', | |
| conditionFields: 'EMA200', | |
| displaySignal: !0, | |
| additionalColumns: ['EMA200', 'close'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processMASignal', | |
| signalComputation: 'g.signalComputationFunctions.computeMASignal' | |
| }, | |
| SMA5: { | |
| control: 'condition', | |
| conditionFields: 'SMA5', | |
| displaySignal: !0, | |
| additionalColumns: ['SMA5', 'close'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processMASignal', | |
| signalComputation: 'g.signalComputationFunctions.computeMASignal' | |
| }, | |
| SMA10: { | |
| control: 'condition', | |
| conditionFields: 'SMA10', | |
| displaySignal: !0, | |
| additionalColumns: ['SMA10', 'close'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processMASignal', | |
| signalComputation: 'g.signalComputationFunctions.computeMASignal' | |
| }, | |
| SMA20: { | |
| control: 'condition', | |
| conditionFields: 'SMA20', | |
| displaySignal: !0, | |
| additionalColumns: ['SMA20', 'close'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processMASignal', | |
| signalComputation: 'g.signalComputationFunctions.computeMASignal' | |
| }, | |
| SMA30: { | |
| control: 'condition', | |
| conditionFields: 'SMA30', | |
| displaySignal: !0, | |
| additionalColumns: ['SMA30', 'close'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processMASignal', | |
| signalComputation: 'g.signalComputationFunctions.computeMASignal' | |
| }, | |
| SMA50: { | |
| control: 'condition', | |
| conditionFields: 'SMA50', | |
| displaySignal: !0, | |
| additionalColumns: ['SMA50', 'close'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processMASignal', | |
| signalComputation: 'g.signalComputationFunctions.computeMASignal' | |
| }, | |
| SMA100: { | |
| control: 'condition', | |
| conditionFields: 'SMA100', | |
| displaySignal: !0, | |
| additionalColumns: ['SMA100', 'close'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processMASignal', | |
| signalComputation: 'g.signalComputationFunctions.computeMASignal' | |
| }, | |
| SMA200: { | |
| control: 'condition', | |
| conditionFields: 'SMA200', | |
| displaySignal: !0, | |
| additionalColumns: ['SMA200', 'close'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processMASignal', | |
| signalComputation: 'g.signalComputationFunctions.computeMASignal' | |
| }, | |
| 'Stoch.K': { | |
| control: 'condition', | |
| conditionFields: ''.concat(['Stoch.D']), | |
| formatter: S, | |
| displaySignal: !0, | |
| additionalColumns: ['Stoch.K', 'Stoch.D', 'Stoch.K[1]', 'Stoch.D[1]'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processStochSignal', | |
| signalComputation: 'g.signalComputationFunctions.computeStochSignal' | |
| }, | |
| 'Stoch.D': { | |
| control: 'condition', | |
| conditionFields: ''.concat(['Stoch.K']), | |
| formatter: S | |
| }, | |
| 'MACD.macd': { | |
| control: 'condition', | |
| conditionFields: ''.concat(['MACD.signal']), | |
| displaySignal: !0, | |
| additionalColumns: ['MACD.macd', 'MACD.signal'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processMACDSignal', | |
| signalComputation: 'g.signalComputationFunctions.computeMACDSignal' | |
| }, | |
| 'MACD.signal': { | |
| control: 'condition', | |
| conditionFields: ''.concat(['MACD.macd']) | |
| }, | |
| 'Aroon.Up': { | |
| control: 'condition', | |
| conditionFields: ['Aroon.Down'], | |
| formatter: S | |
| }, | |
| 'Aroon.Down': { | |
| control: 'condition', | |
| conditionFields: ['Aroon.Up'], | |
| formatter: S | |
| }, | |
| 'BB.upper': { | |
| control: 'condition', | |
| conditionFields: ''.concat(['BB.lower', 'KltChnl.upper', 'KltChnl.lower']), | |
| displaySignal: !0, | |
| additionalColumns: ['close', 'BB.upper'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processBBSellSignal', | |
| signalComputation: 'g.signalComputationFunctions.computeBBSellSignal' | |
| }, | |
| 'BB.lower': { | |
| control: 'condition', | |
| conditionFields: ''.concat(['BB.upper', 'KltChnl.upper', 'KltChnl.lower']), | |
| displaySignal: !0, | |
| additionalColumns: ['close', 'BB.lower'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processBBBuySignal', | |
| signalComputation: 'g.signalComputationFunctions.computeBBBuySignal' | |
| }, | |
| 'KltChnl.upper': { | |
| control: 'condition', | |
| conditionFields: ''.concat(['KltChnl.lower', 'BB.upper', 'BB.lower']) | |
| }, | |
| 'KltChnl.lower': { | |
| control: 'condition', | |
| conditionFields: ''.concat(['KltChnl.upper', 'BB.upper', 'BB.lower']) | |
| }, | |
| 'P.SAR': { | |
| control: 'condition', | |
| conditionFields: '', | |
| displaySignal: !0, | |
| additionalColumns: ['P.SAR', 'open'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processPSARSignal', | |
| signalComputation: 'g.signalComputationFunctions.computePSARSignal' | |
| }, | |
| 'Value.Traded': { control: 'range', formatter: 'D', category: 1 }, | |
| MoneyFlow: { | |
| control: 'condition', | |
| conditionFields: [], | |
| formatter: S | |
| }, | |
| ChaikinMoneyFlow: { | |
| control: 'condition', | |
| conditionFields: [], | |
| formatter: S | |
| }, | |
| goodwill: { control: 'range', formatter: 'D', category: 2 }, | |
| net_debt: { control: 'range', formatter: 'D', category: 2 }, | |
| total_debt: { control: 'range', formatter: 'D', category: 2 }, | |
| revenue_per_employee: { control: 'range', formatter: 'D', category: 2 }, | |
| return_on_invested_capital: { | |
| control: 'condition', | |
| conditionFields: [], | |
| category: 2, | |
| highlightChange: !0 | |
| }, | |
| after_tax_margin: { | |
| control: 'condition', | |
| conditionFields: [], | |
| category: 2, | |
| highlightChange: !0 | |
| }, | |
| pre_tax_margin: { | |
| control: 'condition', | |
| conditionFields: [], | |
| category: 2, | |
| highlightChange: !0 | |
| }, | |
| gross_margin: { | |
| control: 'condition', | |
| conditionFields: [], | |
| category: 2, | |
| highlightChange: !0 | |
| }, | |
| dividends_paid: { control: 'range', formatter: 'D', category: 2 }, | |
| dividend_yield_recent: { | |
| control: 'condition', | |
| conditionFields: [], | |
| category: 2, | |
| highlightChange: !0 | |
| }, | |
| basic_eps_net_income: { | |
| control: 'condition', | |
| conditionFields: [], | |
| formatter: S, | |
| filterFormatter: x, | |
| category: 2 | |
| }, | |
| net_income: { control: 'range', formatter: 'D', category: 2 }, | |
| gross_profit: { control: 'range', formatter: 'D', category: 2 }, | |
| gross_profit_fq: { control: 'range', formatter: 'D', category: 2 }, | |
| number_of_shareholders: { control: 'range', formatter: 'D', category: 2 }, | |
| float_shares_outstanding: { | |
| control: 'range', | |
| formatter: 'D', | |
| category: 2 | |
| }, | |
| total_shares_outstanding_fundamental: { | |
| control: 'range', | |
| formatter: 'D', | |
| category: 2 | |
| }, | |
| total_shares_outstanding: { | |
| control: 'range', | |
| formatter: 'D', | |
| category: 2 | |
| }, | |
| total_shares_diluted: { control: 'range', formatter: 'D', category: 2 }, | |
| total_value_traded: { control: 'range', formatter: 'D', category: 2 }, | |
| total_assets: { control: 'range', formatter: 'D', category: 2 }, | |
| total_current_assets: { control: 'range', formatter: 'D', category: 2 }, | |
| total_revenue: { control: 'range', formatter: 'D', category: 2 }, | |
| total_liabilities_fy: { control: 'range', formatter: 'D', category: 2 }, | |
| total_liabilities_fq: { control: 'range', formatter: 'D', category: 2 }, | |
| dividends_per_share_fq: { | |
| control: 'condition', | |
| conditionFields: [], | |
| formatter: S, | |
| filterFormatter: x, | |
| category: 2 | |
| }, | |
| earnings_per_share_diluted_ttm: { | |
| control: 'condition', | |
| conditionFields: [], | |
| formatter: S, | |
| filterFormatter: x, | |
| category: 2 | |
| }, | |
| enterprise_value_ebitda_ttm: { | |
| control: 'condition', | |
| conditionFields: [], | |
| formatter: S, | |
| filterFormatter: x, | |
| category: 2 | |
| }, | |
| enterprise_value_fq: { control: 'range', formatter: 'D', category: 2 }, | |
| price_revenue_ttm: { | |
| control: 'condition', | |
| conditionFields: [], | |
| formatter: S, | |
| filterFormatter: x, | |
| category: 2 | |
| }, | |
| number_of_employees: { control: 'range', formatter: 'D', category: 2 }, | |
| last_annual_eps: { | |
| control: 'condition', | |
| conditionFields: [], | |
| formatter: S, | |
| filterFormatter: x, | |
| category: 2 | |
| }, | |
| last_annual_revenue: { control: 'range', formatter: 'D', category: 2 }, | |
| CCI20: { | |
| control: 'condition', | |
| conditionFields: [], | |
| formatter: S, | |
| displaySignal: !0, | |
| additionalColumns: ['CCI20', 'CCI20[1]'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processCCI20Signal', | |
| signalComputation: 'g.signalComputationFunctions.computeCCI20Signal' | |
| }, | |
| 'DonchCh20.Upper': { | |
| control: 'condition', | |
| conditionFields: ''.concat(['DonchCh20.Lower']) | |
| }, | |
| 'DonchCh20.Lower': { | |
| control: 'condition', | |
| conditionFields: ''.concat(['DonchCh20.Upper']) | |
| }, | |
| HullMA9: { | |
| control: 'condition', | |
| conditionFields: 'HullMA9', | |
| displaySignal: !0, | |
| additionalColumns: ['Rec.HullMA9'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processSimpleSignal', | |
| signalComputation: 'g.signalComputationFunctions.computeSimpleSignal' | |
| }, | |
| AO: { | |
| control: 'condition', | |
| conditionFields: [], | |
| displaySignal: !0, | |
| additionalColumns: ['AO', 'AO[1]', 'AO[2]'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processAOSignal', | |
| signalComputation: 'g.signalComputationFunctions.computeAOSignal' | |
| }, | |
| 'Pivot.M.Classic.Middle': { | |
| formatter: S, | |
| forexFormatter: M, | |
| align: 'right' | |
| }, | |
| 'Pivot.M.Classic.R1': { | |
| formatter: S, | |
| forexFormatter: M, | |
| align: 'right' | |
| }, | |
| 'Pivot.M.Classic.R2': { | |
| formatter: S, | |
| forexFormatter: M, | |
| align: 'right' | |
| }, | |
| 'Pivot.M.Classic.R3': { | |
| formatter: S, | |
| forexFormatter: M, | |
| align: 'right' | |
| }, | |
| 'Pivot.M.Classic.S1': { | |
| formatter: S, | |
| forexFormatter: M, | |
| align: 'right' | |
| }, | |
| 'Pivot.M.Classic.S2': { | |
| formatter: S, | |
| forexFormatter: M, | |
| align: 'right' | |
| }, | |
| 'Pivot.M.Classic.S3': { | |
| formatter: S, | |
| forexFormatter: M, | |
| align: 'right' | |
| }, | |
| 'Pivot.M.Fibonacci.Middle': { | |
| formatter: S, | |
| forexFormatter: M, | |
| align: 'right' | |
| }, | |
| 'Pivot.M.Fibonacci.R1': { | |
| formatter: S, | |
| forexFormatter: M, | |
| align: 'right' | |
| }, | |
| 'Pivot.M.Fibonacci.R2': { | |
| formatter: S, | |
| forexFormatter: M, | |
| align: 'right' | |
| }, | |
| 'Pivot.M.Fibonacci.R3': { | |
| formatter: S, | |
| forexFormatter: M, | |
| align: 'right' | |
| }, | |
| 'Pivot.M.Fibonacci.S1': { | |
| formatter: S, | |
| forexFormatter: M, | |
| align: 'right' | |
| }, | |
| 'Pivot.M.Fibonacci.S2': { | |
| formatter: S, | |
| forexFormatter: M, | |
| align: 'right' | |
| }, | |
| 'Pivot.M.Fibonacci.S3': { | |
| formatter: S, | |
| forexFormatter: M, | |
| align: 'right' | |
| }, | |
| 'Pivot.M.Camarilla.Middle': { | |
| formatter: S, | |
| forexFormatter: M, | |
| align: 'right' | |
| }, | |
| 'Pivot.M.Camarilla.R1': { | |
| formatter: S, | |
| forexFormatter: M, | |
| align: 'right' | |
| }, | |
| 'Pivot.M.Camarilla.R2': { | |
| formatter: S, | |
| forexFormatter: M, | |
| align: 'right' | |
| }, | |
| 'Pivot.M.Camarilla.R3': { | |
| formatter: S, | |
| forexFormatter: M, | |
| align: 'right' | |
| }, | |
| 'Pivot.M.Camarilla.S1': { | |
| formatter: S, | |
| forexFormatter: M, | |
| align: 'right' | |
| }, | |
| 'Pivot.M.Camarilla.S2': { | |
| formatter: S, | |
| forexFormatter: M, | |
| align: 'right' | |
| }, | |
| 'Pivot.M.Camarilla.S3': { | |
| formatter: S, | |
| forexFormatter: M, | |
| align: 'right' | |
| }, | |
| 'Pivot.M.Woodie.Middle': { | |
| formatter: S, | |
| forexFormatter: M, | |
| align: 'right' | |
| }, | |
| 'Pivot.M.Woodie.R1': { | |
| formatter: S, | |
| forexFormatter: M, | |
| align: 'right' | |
| }, | |
| 'Pivot.M.Woodie.R2': { | |
| formatter: S, | |
| forexFormatter: M, | |
| align: 'right' | |
| }, | |
| 'Pivot.M.Woodie.R3': { | |
| formatter: S, | |
| forexFormatter: M, | |
| align: 'right' | |
| }, | |
| 'Pivot.M.Woodie.S1': { | |
| formatter: S, | |
| forexFormatter: M, | |
| align: 'right' | |
| }, | |
| 'Pivot.M.Woodie.S2': { | |
| formatter: S, | |
| forexFormatter: M, | |
| align: 'right' | |
| }, | |
| 'Pivot.M.Woodie.S3': { | |
| formatter: S, | |
| forexFormatter: M, | |
| align: 'right' | |
| }, | |
| 'Pivot.M.Demark.Middle': { | |
| formatter: S, | |
| forexFormatter: M, | |
| align: 'right' | |
| }, | |
| 'Pivot.M.Demark.R1': { | |
| formatter: S, | |
| forexFormatter: M, | |
| align: 'right' | |
| }, | |
| 'Pivot.M.Demark.S1': { | |
| formatter: S, | |
| forexFormatter: M, | |
| align: 'right' | |
| }, | |
| update_mode: { hiddenColumn: !1, hideSetupColumn: !0, skipField: !0 }, | |
| premarket_change: { | |
| title: 'Pre-market Change %', | |
| shortTitle: 'Pre-market chg %', | |
| control: 'condition', | |
| conditionFields: ['change'], | |
| highlightChange: !0 | |
| }, | |
| premarket_change_abs: { | |
| title: 'Pre-market Change', | |
| shortTitle: 'Pre-market chg', | |
| control: 'condition', | |
| conditionFields: ['change_abs'], | |
| forexFormatter: M, | |
| highlightChange: !0 | |
| }, | |
| premarket_change_from_open: { | |
| title: 'Pre-market Change from Open %', | |
| shortTitle: 'Pre-market chg from Open %', | |
| control: 'condition', | |
| conditionFields: [], | |
| highlightChange: !0 | |
| }, | |
| premarket_change_from_open_abs: { | |
| title: 'Pre-market Change from Open', | |
| shortTitle: 'Pre-market chg from Open', | |
| control: 'condition', | |
| conditionFields: [], | |
| forexFormatter: M, | |
| highlightChange: !0 | |
| }, | |
| premarket_close: { | |
| title: 'Pre-market Close', | |
| shortTitle: 'Pre-market Close', | |
| control: 'condition', | |
| conditionFields: [], | |
| formatter: S, | |
| filterFormatter: x, | |
| category: 1 | |
| }, | |
| premarket_gap: { | |
| title: 'Pre-market Gap %', | |
| shortTitle: 'Pre-market Gap %', | |
| control: 'condition', | |
| conditionFields: ['gap'], | |
| highlightChange: !0 | |
| }, | |
| premarket_high: { | |
| title: 'Pre-market High', | |
| shortTitle: 'Pre-market High', | |
| control: 'condition', | |
| conditionFields: [], | |
| formatter: S, | |
| filterFormatter: x, | |
| category: 1 | |
| }, | |
| premarket_low: { | |
| title: 'Pre-market Low', | |
| shortTitle: 'Pre-market Low', | |
| control: 'condition', | |
| conditionFields: [], | |
| formatter: S, | |
| filterFormatter: x, | |
| category: 1 | |
| }, | |
| premarket_open: { | |
| title: 'Pre-market Open', | |
| shortTitle: 'Pre-market Open', | |
| control: 'condition', | |
| conditionFields: [], | |
| formatter: S, | |
| filterFormatter: x, | |
| category: 1 | |
| }, | |
| premarket_volume: { | |
| title: 'Pre-market Volume', | |
| shortTitle: 'Pre-market Volume', | |
| control: 'range', | |
| formatter: 'D', | |
| category: 1 | |
| }, | |
| postmarket_change: { | |
| title: 'Post-market Change %', | |
| shortTitle: 'Post-market chg %', | |
| control: 'condition', | |
| conditionFields: ['change'], | |
| highlightChange: !0 | |
| }, | |
| postmarket_change_abs: { | |
| title: 'Post-market Change', | |
| shortTitle: 'Post-market chg', | |
| control: 'condition', | |
| conditionFields: ['change_abs'], | |
| forexFormatter: M, | |
| highlightChange: !0 | |
| }, | |
| postmarket_close: { | |
| title: 'Post-market Close', | |
| shortTitle: 'Post-market Close', | |
| control: 'condition', | |
| conditionFields: [], | |
| formatter: S, | |
| filterFormatter: x, | |
| category: 1 | |
| }, | |
| postmarket_high: { | |
| title: 'Post-market High', | |
| shortTitle: 'Post-market High', | |
| control: 'condition', | |
| conditionFields: [], | |
| formatter: S, | |
| filterFormatter: x, | |
| category: 1 | |
| }, | |
| postmarket_low: { | |
| title: 'Post-market Low', | |
| shortTitle: 'Post-market Low', | |
| control: 'condition', | |
| conditionFields: [], | |
| formatter: S, | |
| filterFormatter: x, | |
| category: 1 | |
| }, | |
| postmarket_open: { | |
| title: 'Post-market Open', | |
| shortTitle: 'Post-market Open', | |
| control: 'condition', | |
| conditionFields: [], | |
| formatter: S, | |
| filterFormatter: x, | |
| category: 1 | |
| }, | |
| postmarket_volume: { | |
| title: 'Post-market Volume', | |
| shortTitle: 'Post-market Volume', | |
| control: 'range', | |
| formatter: 'D', | |
| category: 1 | |
| }, | |
| earnings_per_share_forecast_next_fq: { | |
| control: 'condition', | |
| conditionFields: [], | |
| formatter: S, | |
| filterFormatter: x, | |
| category: 2 | |
| }, | |
| earnings_per_share_fq: { | |
| control: 'condition', | |
| conditionFields: [], | |
| formatter: S, | |
| filterFormatter: x, | |
| category: 2 | |
| }, | |
| 'Recommend.All': { | |
| control: 'select', | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processRecommendSignal', | |
| signalComputation: 'g.signalComputationFunctions.computeRecommendSignal', | |
| useDefaultRange: !0, | |
| sortable: !1, | |
| sortSelectedFirst: !1, | |
| defaultRange: 'g.recommendsRange', | |
| customFilterCondition: (t) => | |
| (0, g.generateRecommendsRequest)(t, 'Recommend.All') | |
| }, | |
| 'Recommend.MA': { | |
| control: 'select', | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processRecommendSignal', | |
| signalComputation: 'g.signalComputationFunctions.computeRecommendSignal', | |
| useDefaultRange: !0, | |
| sortable: !1, | |
| sortSelectedFirst: !1, | |
| defaultRange: 'g.recommendsRange', | |
| customFilterCondition: (t) => | |
| (0, g.generateRecommendsRequest)(t, 'Recommend.MA') | |
| }, | |
| 'Recommend.Other': { | |
| control: 'select', | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processRecommendSignal', | |
| signalComputation: 'g.signalComputationFunctions.computeRecommendSignal', | |
| useDefaultRange: !0, | |
| sortable: !1, | |
| sortSelectedFirst: !1, | |
| defaultRange: 'g.recommendsRange', | |
| customFilterCondition: (t) => | |
| (0, g.generateRecommendsRequest)(t, 'Recommend.Other') | |
| }, | |
| 'Stoch.RSI.K': { | |
| control: 'condition', | |
| conditionFields: ['Stoch.RSI.D'], | |
| formatter: S, | |
| displaySignal: !0, | |
| additionalColumns: ['Rec.Stoch.RSI'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processSimpleSignal', | |
| signalComputation: 'g.signalComputationFunctions.computeSimpleSignal' | |
| }, | |
| 'Stoch.RSI.D': { | |
| control: 'condition', | |
| conditionFields: ['Stoch.RSI.K'], | |
| formatter: S | |
| }, | |
| 'W.R': { | |
| control: 'condition', | |
| conditionFields: [], | |
| formatter: S, | |
| displaySignal: !0, | |
| additionalColumns: ['Rec.WR'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processSimpleSignal', | |
| signalComputation: 'g.signalComputationFunctions.computeSimpleSignal' | |
| }, | |
| ROC: { | |
| control: 'condition', | |
| conditionFields: [], | |
| formatter: S | |
| }, | |
| BBPower: { | |
| control: 'condition', | |
| conditionFields: [], | |
| displaySignal: !0, | |
| additionalColumns: ['Rec.BBPower'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processSimpleSignal', | |
| signalComputation: 'g.signalComputationFunctions.computeSimpleSignal' | |
| }, | |
| UO: { | |
| control: 'condition', | |
| conditionFields: [], | |
| formatter: S, | |
| displaySignal: !0, | |
| additionalColumns: ['Rec.UO'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processSimpleSignal', | |
| signalComputation: 'g.signalComputationFunctions.computeSimpleSignal' | |
| }, | |
| VWAP: { | |
| control: 'condition' | |
| // conditionFields: , | |
| // | |
| }, | |
| VWMA: { | |
| control: 'condition', | |
| // conditionFields: , | |
| // | |
| displaySignal: !0, | |
| additionalColumns: ['Rec.VWMA'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processSimpleSignal', | |
| signalComputation: 'g.signalComputationFunctions.computeSimpleSignal' | |
| }, | |
| ADR: { | |
| control: 'condition', | |
| conditionFields: '' | |
| }, | |
| 'Ichimoku.CLine': { | |
| control: 'condition', | |
| conditionFields: 'Ichimoku.CLine' | |
| }, | |
| 'Ichimoku.BLine': { | |
| control: 'condition', | |
| conditionFields: 'Ichimoku.BLine', | |
| displaySignal: !0, | |
| additionalColumns: ['Rec.Ichimoku'], | |
| mutateDisplayValue: 'g.signalDisplayFunctions.processSimpleSignal', | |
| signalComputation: 'g.signalComputationFunctions.computeSimpleSignal' | |
| } | |
| }; | |
| console.log( | |
| JSON.stringify( | |
| Object.keys(INDICATORS).reduce((previousValue, indicator) => { | |
| const obj = INDICATORS[indicator]; | |
| let result; | |
| if (obj) { | |
| result = { | |
| [indicator]: { | |
| ...INDICATORS[indicator] | |
| } | |
| }; | |
| let compute; | |
| if (xxx && xxx[indicator] && xxx[indicator]['additionalColumns']) { | |
| compute = { | |
| method: | |
| '//Compute.' + | |
| xxx[indicator]['mutateDisplayValue'].match( | |
| /process(.*)Signal/ | |
| )[1] + | |
| '//', | |
| paramKeys: xxx[indicator]['additionalColumns'] | |
| }; | |
| } | |
| if (compute) { | |
| result[indicator].compute = compute; | |
| } | |
| } else { | |
| result = { | |
| [indicator]: null | |
| }; | |
| } | |
| return { | |
| ...previousValue, | |
| ...result | |
| }; | |
| }, {}) | |
| ) | |
| ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment