Indicator · Pine Script v5 · Own pane

Fundamentals Graphing [Kioseff Trading]

by regalouisei· code credited to KioseffTrading

This indicator retrieves and displays fundamental financial metrics across up to fourteen selected symbols in a separate pane.

View on GitHub

GitHub stars2on the repository
Pine versionv5runs as is
Lines of code1,336
Settings40inputs
LicenceNone statedfile: MPL-2.0
Last update8 months ago25 Feb 2026

Add It to Your TradingView Chart

  1. 1Copy the scriptPress Copy script above, or the copy button on the code below.
  2. 2Open the Pine EditorOpen a TradingView chart and choose Pine Editor at the bottom of the screen.
  3. 3Paste over the templateCreate a new indicator, select all of the template text and paste. Press Save and give it a name.
  4. 4Add it to the chartPress Add to chart, then adjust the settings with the gear icon next to its name.

Source Code

1,336 lines of Pine Script v5 from pinescript/editors_picks/fundamentals-graphing-kioseff-trading.pine, published under MPL-2.0 (file header). Keep the author's credit and licence lines when you reuse it.

fundamentals-graphing-kioseff-trading.pine
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © KioseffTrading

//@version=5
indicator("Fundamentals Graphing [Kioseff Trading]", overlay = false, max_lines_count = 500, max_labels_count = 500)


import kaigouthro/hsvColor/15 as kai

// THANK YOU TV + PineCoders (:

string FQ   = "Financial Quarter"
string FY   = "Financial Year"

// Financial legends.
string F_NA = "⸺"
string F000 = "█ INCOME STATEMENTS █"
string F001 = "After tax other income/expense"
string F002 = "Average basic shares outstanding"
string F003 = "Other COGS"
string F004 = "Cost of goods"
string F005 = "Deprecation and amortization"
string F006 = "Diluted net income available to common stockholders"
string F007 = "Diluted shares outstanding"
string F008 = "Dilution adjustment"
string F009 = "Discontinued operations"
string F010 = "Basic EPS"
string F011 = "Diluted EPS"
string F012 = "EBIT"
string F013 = "EBITDA"
string F014 = "Equity in earnings"
string F015 = "Gross profit"
string F016 = "Taxes"
string F017 = "Interest capitalized"
string F018 = "Interest expense on debt"
string F019 = "Non-controlling/minority interest"
string F020 = "Net income before discontinued operations"
string F021 = "Net income"
string F022 = "Non-operating income, excl. interest expenses"
string F023 = "Interest expense, net of interest capitalized"
string F024 = "Non-operating interest income"
string F025 = "Operating income"
string F026 = "Operating expenses (excl. COGS)"
string F027 = "Miscellaneous non-operating expense"
string F028 = "Other operating expenses, total"
string F029 = "Preferred dividends"
string F030 = "Pretax equity in earnings"
string F031 = "Pretax income"
string F032 = "Research & development"
string F033 = "Selling/general/admin expenses, other"
string F034 = "Selling/general/admin expenses, total"
string F035 = "Non-operating income, total"
string F036 = "Total operating expenses"
string F037 = "Total revenue"
string F038 = "Unusual income/expense"

string F100 = "█ BALANCE SHEET █"
string F101 = "Accounts payable"
string F102 = "Accounts receivable - trade, net"
string F103 = "Accrued payroll"
string F104 = "Accumulated depreciation, total"
string F105 = "Additional paid-in capital/Capital surplus"
string F106 = "Tangible book value per share"
string F107 = "Book value per share"
string F108 = "Capitalized lease obligations"
string F109 = "Capital and operating lease obligations"
string F110 = "Cash & equivalents"
string F111 = "Cash and short term investments"
string F112 = "Common equity, total"
string F113 = "Common stock par/Carrying value"
string F114 = "Current portion of LT debt and capital leases"
string F115 = "Deferred income, current"
string F116 = "Deferred income, non-current"
string F117 = "Deferred tax assets"
string F118 = "Deferred tax liabilities"
string F119 = "Dividends payable"
string F120 = "Goodwill, net"
string F121 = "Income tax payable"
string F122 = "Net intangible assets"
string F123 = "Inventories - finished goods"
string F124 = "Inventories - progress payments & other"
string F125 = "Inventories - raw materials"
string F126 = "Inventories - work in progress"
string F127 = "Investments in unconsolidated subsidiaries"
string F128 = "Long term debt excl. lease liabilities"
string F129 = "Long term debt"
string F130 = "Long term investments"
string F131 = "Note receivable - long term"
string F132 = "Other long term assets, total"
string F133 = "Minority interest"
string F134 = "Notes payable"
string F135 = "Operating lease liabilities"
string F136 = "Other common equity"
string F137 = "Other current assets, total"
string F138 = "Other current liabilities"
string F139 = "Other intangibles, net"
string F140 = "Other investments"
string F141 = "Other liabilities, total"
string F142 = "Other receivables"
string F143 = "Other short term debt"
string F144 = "Paid in capital"
string F145 = "Gross property/plant/equipment"
string F146 = "Net property/plant/equipment"
string F147 = "Preferred stock, carrying value"
string F148 = "Prepaid expenses"
string F149 = "Provision for risks & charge"
string F150 = "Retained earnings"
string F151 = "Short term debt excl. current portion of LT debt"
string F152 = "Short term debt"
string F153 = "Short term investments"
string F154 = "Shareholders' equity"
string F155 = "Total assets"
string F156 = "Total current assets"
string F157 = "Total current liabilities"
string F158 = "Total debt"
string F159 = "Total equity"
string F160 = "Total inventory"
string F161 = "Total liabilities"
string F162 = "Total liabilities & shareholders' equities"
string F163 = "Total non-current assets"
string F164 = "Total non-current liabilities"
string F165 = "Total receivables, net"
string F166 = "Treasury stock - common"

string F200 = "█ CASHFLOW █"
string F201 = "Amortization"
string F202 = "Capital expenditures - fixed assets"
string F203 = "Capital expenditures"
string F204 = "Capital expenditures - other assets"
string F205 = "Cash from financing activities"
string F206 = "Cash from investing activities"
string F207 = "Cash from operating activities"
string F208 = "Deferred taxes (cash flow)"
string F209 = "Depreciation & amortization (cash flow)"
string F210 = "Change in accounts payable"
string F211 = "Change in accounts receivable"
string F212 = "Change in accrued expenses"
string F213 = "Change in inventories"
string F214 = "Change in other assets/liabilities"
string F215 = "Change in taxes payable"
string F216 = "Changes in working capital"
string F217 = "Common dividends paid"
string F218 = "Depreciation/depletion"
string F219 = "Free cash flow"
string F220 = "Funds from operations"
string F221 = "Issuance/retirement of debt, net"
string F222 = "Issuance/retirement of long term debt"
string F223 = "Issuance/retirement of other debt"
string F224 = "Issuance/retirement of short term debt"
string F225 = "Issuance/retirement of stock, net"
string F226 = "Net income (cash flow)"
string F227 = "Non-cash items"
string F228 = "Other financing cash flow items, total"
string F229 = "Financing activities - other sources"
string F230 = "Financing activities - other uses"
string F231 = "Other investing cash flow items, total"
string F232 = "Investing activities - other sources"
string F233 = "Investing activities - other uses"
string F234 = "Preferred dividends paid"
string F235 = "Purchase/acquisition of business"
string F236 = "Purchase of investments"
string F237 = "Repurchase of common & preferred stock"
string F238 = "Purchase/sale of business, net"
string F239 = "Purchase/sale of investments, net"
string F240 = "Reduction of long term debt"
string F241 = "Sale of common & preferred stock"
string F242 = "Sale of fixed assets & businesses"
string F243 = "Sale/maturity of investments"
string F244 = "Issuance of long term debt"
string F245 = "Total cash dividends paid"

string F300 = "█ STATISTICS █"
string F301 = "Accruals"
string F302 = "Altman Z-score"
string F303 = "Asset turnover"
string F304 = "Beneish M-score"
string F305 = "Buyback yield %"
string F306 = "Cash conversion cycle"
string F307 = "Cash to debt ratio"
string F308 = "COGS to revenue ratio"
string F309 = "Current ratio"
string F310 = "Days sales outstanding"
string F311 = "Days inventory"
string F312 = "Days payable"
string F313 = "Debt to assets ratio"
string F314 = "Debt to EBITDA ratio"
string F315 = "Debt to equity ratio"
string F316 = "Debt to revenue ratio"
string F317 = "Dividend payout ratio %"
string F318 = "Dividend yield %"
string F319 = "Dividends per share - common stock primary issue"
string F320 = "EPS estimates"
string F321 = "EPS basic one year growth"
string F322 = "EPS diluted one year growth"
string F323 = "EBITDA margin %"
string F324 = "Effective interest rate on debt %"
string F325 = "Enterprise value to EBITDA ratio"
string F326 = "Enterprise value"
string F327 = "Equity to assets ratio"
string F328 = "Enterprise value to EBIT ratio"
string F329 = "Enterprise value to revenue ratio"
string F330 = "Float shares outstanding"
string F331 = "Free cash flow margin %"
string F332 = "Fulmer H factor"
string F333 = "Goodwill to assets ratio"
string F334 = "Graham's number"
string F335 = "Gross margin %"
string F336 = "Gross profit to assets ratio"
string F337 = "Interest coverage"
string F338 = "Inventory to revenue ratio"
string F339 = "Inventory turnover"
string F340 = "KZ index"
string F341 = "Long term debt to total assets ratio"
string F342 = "Net current asset value per share"
string F343 = "Net income per employee"
string F344 = "Net margin %"
string F345 = "Number of employees"
string F346 = "Operating earnings yield %"
string F347 = "Operating margin %"
string F348 = "PEG ratio"
string F349 = "Piotroski F-score"
string F350 = "Price earnings ratio forward"
string F351 = "Price sales ratio forward"
string F352 = "Price to free cash flow ratio"
string F353 = "Price to tangible book ratio"
string F354 = "Quality ratio"
string F355 = "Quick ratio"
string F356 = "Research & development to revenue ratio"
string F357 = "Return on assets %"
string F358 = "Return on equity adjusted to book value %"
string F359 = "Return on equity %"
string F360 = "Return on invested capital %"
string F361 = "Return on tangible assets %"
string F362 = "Return on tangible equity %"
string F363 = "Revenue one year growth"
string F364 = "Revenue per employee"
string F365 = "Revenue estimates"
string F366 = "Shares buyback ratio %"
string F367 = "Sloan ratio %"
string F368 = "Springate score"
string F369 = "Sustainable growth rate"
string F370 = "Tangible common equity ratio"
string F371 = "Tobin's Q (approximate)"
string F372 = "Total common shares outstanding"
string F373 = "Zmijewski score"


string typeInput1        = input.string(F010 , "Data    ", inline = "100", group = "Initial Settings",
       options           =    [F_NA,
       F000, F001, F002, F003, F004, F005, F006, F007, F008, F009, F010, F011, F012, F013, F014, F015, F016, F017, F018, F019, F020, F021, F022, F023, F024, F025, F026, F027, F028, F029, F030, F031, F032, F033, F034, F035, F036, F037, F038, 
       F100, F101, F102, F103, F104, F105, F106, F107, F108, F109, F110, F111, F112, F113, F114, F115, F116, F117, F118, F119, F120, F121, F122, F123, F124, F125, F126, F127, F128, F129, F130, F131, F132, F133, F134, F135, F136, F137, F138, F139, F140, F141, F142, F143, F144, F145, F146, F147, F148, F149, F150, F151, F152, F153, F154, F155, F156, F157, F158, F159, F160, F161, F162, F163, F164, F165, F166,
       F200, F201, F202, F203, F204, F205, F206, F207, F208, F209, F210, F211, F212, F213, F214, F215, F216, F217, F218, F219, F220, F221, F222, F223, F224, F225, F226, F227, F228, F229, F230, F231, F232, F233, F234, F235, F236, F237, F238, F239, F240, F241, F242, F243, F244, F245,
       F300, F301, F302, F303, F304, F305, F306, F307, F308, F309, F310, F311, F312, F313, F314, F315, F316, F317, F318, F319, F320, F321, F322, F323, F324, F325, F326, F327, F328, F329, F330, F331, F332, F333, F334, F335, F336, F337, F338, F339, F340, F341, F342, F343, F344, F345, F346, F347, F348, F349, F350, F351, F352, F353, F354, F355, F356, F357, F358, F359, F360, F361, F362, F363, F364, F365, F366, F367, F368, F369, F370, F371, F372, F373])


px                   = input.string(defval = "Technology Services", title = "Preset", group = "Initial Settings",
                                     options = ["Technology Services", "Electronic Technology", "Financial Services", "Health Technology", "Consumer Non-Durables", "Energy Minerals", "Consumer Durables", "Commercial Services", "Retail Trade", "Transportation", "Utilities", "Custom"], inline = "100")
period               = input.string(defval = "Fiscal Quarter", title = "Period  ", options = ["Fiscal Quarter", "Fiscal Year"], inline = "70", group = "Initial Settings")
intervalsback        = input.int   (defval = 0, minval = 0, title = "Intervals Back    ", inline = "70", group = "Initial Settings")
reverse              = input.bool  (defval = false, title = "Reverse Colors"     , inline = "33", group = "Initial Settings")
revScale             = input.bool  (defval = false, title = "Reverse Scale"      , inline = "33", group = "Initial Settings")

columns              = input.string(defval = "Scatter + Columns", title = "Plot Type", group = "Plot Type",
                                     options= ["Scatter", "Columns", "Scatter + Columns", "Bar", "Pie Chart","Drop Down"])
sort                 = input.string(defval = "None", title = "Sort Data        ", options = ["None", "Descending", "Ascending"], group = "Scatter / Columns / Bars")
boxnobg              = input.bool  (defval = false, title = "Move Data to Box",             group = "Scatter / Columns / Bars"          )

searchF              = input.bool  (defval = false, title = "Use Search Function", inline = "40", group = "Search Function" )
search               = input.string(defval = "", title = "Search Function"       , inline = "40", group = "Search Function" )
upcolor              = input.color (defval = color.lime, title = "Up Color    "    , inline = "90", group = "Colors"          )
downcolor            = input.color (defval = color.red, title = "Down Color"   , inline = "90", group = "Colors"          )
midCol               = input.color (defval = color.white, title = "Median Color", inline = "90", group = "Colors"         )

usebg                = input.bool  (defval = true, title = "Use Background Color", inline = "91", group = "Colors"         )
cbg                  = input.color (defval = #000000, title = "Background Color"    , inline = "91", group = "Colors"          )

var timeArray        = array.new_int()

getId(simple string userFinancialChoice) =>

    string result = switch userFinancialChoice
        F001 => "AFTER_TAX_OTHER_INCOME" 
        F002 => "BASIC_SHARES_OUTSTANDING" 
        F003 => "COST_OF_GOODS_EXCL_DEP_AMORT" 
        F004 => "COST_OF_GOODS" 
        F005 => "DEP_AMORT_EXP_INCOME_S" 
        F006 => "DILUTED_NET_INCOME" 
        F007 => "DILUTED_SHARES_OUTSTANDING" 
        F008 => "DILUTION_ADJUSTMENT" 
        F009 => "DISCONTINUED_OPERATIONS" 
        F010 => "EARNINGS_PER_SHARE_BASIC" 
        F011 => "EARNINGS_PER_SHARE_DILUTED" 
        F012 => "EBIT" 
        F013 => "EBITDA" 
        F014 => "EQUITY_IN_EARNINGS" 
        F015 => "GROSS_PROFIT" 
        F016 => "INCOME_TAX" 
        F017 => "INTEREST_CAPITALIZED" 
        F018 => "INTEREST_EXPENSE_ON_DEBT" 
        F019 => "MINORITY_INTEREST_EXP" 
        F020 => "NET_INCOME_BEF_DISC_OPER" 
        F021 => "NET_INCOME" 
        F022 => "NON_OPER_INCOME" 
        F023 => "NON_OPER_INTEREST_EXP" 
        F024 => "NON_OPER_INTEREST_INCOME" 
        F025 => "OPER_INCOME" 
        F026 => "OPERATING_EXPENSES" 
        F027 => "OTHER_INCOME" 
        F028 => "OTHER_OPER_EXPENSE_TOTAL" 
        F029 => "PREFERRED_DIVIDENDS" 
        F030 => "PRETAX_EQUITY_IN_EARNINGS" 
        F031 => "PRETAX_INCOME" 
        F032 => "RESEARCH_AND_DEV" 
        F033 => "SELL_GEN_ADMIN_EXP_OTHER" 
        F034 => "SELL_GEN_ADMIN_EXP_TOTAL" 
        F035 => "TOTAL_NON_OPER_INCOME" 
        F036 => "TOTAL_OPER_EXPENSE" 
        F037 => "TOTAL_REVENUE" 
        F038 => "UNUSUAL_EXPENSE_INC" 

        F101 => "ACCOUNTS_PAYABLE" 
        F102 => "ACCOUNTS_RECEIVABLES_NET" 
        F103 => "ACCRUED_PAYROLL" 
        F104 => "ACCUM_DEPREC_TOTAL" 
        F105 => "ADDITIONAL_PAID_IN_CAPITAL" 
        F106 => "BOOK_TANGIBLE_PER_SHARE" 
        F107 => "BOOK_VALUE_PER_SHARE" 
        F108 => "CAPITAL_LEASE_OBLIGATIONS" 
        F109 => "CAPITAL_OPERATING_LEASE_OBLIGATIONS" 
        F110 => "CASH_N_EQUIVALENTS" 
        F111 => "CASH_N_SHORT_TERM_INVEST" 
        F112 => "COMMON_EQUITY_TOTAL" 
        F113 => "COMMON_STOCK_PAR" 
        F114 => "CURRENT_PORT_DEBT_CAPITAL_LEASES" 
        F115 => "DEFERRED_INCOME_CURRENT" 
        F116 => "DEFERRED_INCOME_NON_CURRENT" 
        F117 => "DEFERRED_TAX_ASSESTS" 
        F118 => "DEFERRED_TAX_LIABILITIES" 
        F119 => "DIVIDENDS_PAYABLE" 
        F120 => "GOODWILL" 
        F121 => "INCOME_TAX_PAYABLE" 
        F122 => "INTANGIBLES_NET" 
        F123 => "INVENTORY_FINISHED_GOODS" 
        F124 => "INVENTORY_PROGRESS_PAYMENTS" 
        F125 => "INVENTORY_RAW_MATERIALS" 
        F126 => "INVENTORY_WORK_IN_PROGRESS" 
        F127 => "INVESTMENTS_IN_UNCONCSOLIDATE" 
        F128 => "LONG_TERM_DEBT_EXCL_CAPITAL_LEASE" 
        F129 => "LONG_TERM_DEBT" 
        F130 => "LONG_TERM_INVESTMENTS" 
        F131 => "LONG_TERM_NOTE_RECEIVABLE" 
        F132 => "LONG_TERM_OTHER_ASSETS_TOTAL" 
        F133 => "MINORITY_INTEREST" 
        F134 => "NOTES_PAYABLE_SHORT_TERM_DEBT" 
        F135 => "OPERATING_LEASE_LIABILITIES" 
        F136 => "OTHER_COMMON_EQUITY" 
        F137 => "OTHER_CURRENT_ASSETS_TOTAL" 
        F138 => "OTHER_CURRENT_LIABILITIES" 
        F139 => "OTHER_INTANGIBLES_NET" 
        F140 => "OTHER_INVESTMENTS" 
        F141 => "OTHER_LIABILITIES_TOTAL" 
        F142 => "OTHER_RECEIVABLES" 
        F143 => "OTHER_SHORT_TERM_DEBT" 
        F144 => "PAID_IN_CAPITAL" 
        F145 => "PPE_TOTAL_GROSS" 
        F146 => "PPE_TOTAL_NET" 
        F147 => "PREFERRED_STOCK_CARRYING_VALUE" 
        F148 => "PREPAID_EXPENSES" 
        F149 => "PROVISION_F_RISKS" 
        F150 => "RETAINED_EARNINGS" 
        F151 => "SHORT_TERM_DEBT_EXCL_CURRENT_PORT" 
        F152 => "SHORT_TERM_DEBT" 
        F153 => "SHORT_TERM_INVEST" 
        F154 => "SHRHLDRS_EQUITY" 
        F155 => "TOTAL_ASSETS" 
        F156 => "TOTAL_CURRENT_ASSETS" 
        F157 => "TOTAL_CURRENT_LIABILITIES" 
        F158 => "TOTAL_DEBT" 
        F159 => "TOTAL_EQUITY" 
        F160 => "TOTAL_INVENTORY" 
        F161 => "TOTAL_LIABILITIES" 
        F162 => "TOTAL_LIABILITIES_SHRHLDRS_EQUITY" 
        F163 => "TOTAL_NON_CURRENT_ASSETS" 
        F164 => "TOTAL_NON_CURRENT_LIABILITIES" 
        F165 => "TOTAL_RECEIVABLES_NET" 
        F166 => "TREASURY_STOCK_COMMON" 

        F201 => "AMORTIZATION" 
        F202 => "CAPITAL_EXPENDITURES_FIXED_ASSETS" 
        F203 => "CAPITAL_EXPENDITURES" 
        F204 => "CAPITAL_EXPENDITURES_OTHER_ASSETS" 
        F205 => "CASH_F_FINANCING_ACTIVITIES" 
        F206 => "CASH_F_INVESTING_ACTIVITIES" 
        F207 => "CASH_F_OPERATING_ACTIVITIES" 
        F208 => "CASH_FLOW_DEFERRED_TAXES" 
        F209 => "CASH_FLOW_DEPRECATION_N_AMORTIZATION" 
        F210 => "CHANGE_IN_ACCOUNTS_PAYABLE" 
        F211 => "CHANGE_IN_ACCOUNTS_RECEIVABLE" 
        F212 => "CHANGE_IN_ACCRUED_EXPENSES" 
        F213 => "CHANGE_IN_INVENTORIES" 
        F214 => "CHANGE_IN_OTHER_ASSETS" 
        F215 => "CHANGE_IN_TAXES_PAYABLE" 
        F216 => "CHANGES_IN_WORKING_CAPITAL" 
        F217 => "COMMON_DIVIDENDS_CASH_FLOW" 
        F218 => "DEPRECIATION_DEPLETION" 
        F219 => "FREE_CASH_FLOW" 
        F220 => "FUNDS_F_OPERATIONS" 
        F221 => "ISSUANCE_OF_DEBT_NET" 
        F222 => "ISSUANCE_OF_LONG_TERM_DEBT" 
        F223 => "ISSUANCE_OF_OTHER_DEBT" 
        F224 => "ISSUANCE_OF_SHORT_TERM_DEBT" 
        F225 => "ISSUANCE_OF_STOCK_NET" 
        F226 => "NET_INCOME_STARTING_LINE" 
        F227 => "NON_CASH_ITEMS" 
        F228 => "OTHER_FINANCING_CASH_FLOW_ITEMS_TOTAL" 
        F229 => "OTHER_FINANCING_CASH_FLOW_SOURCES" 
        F230 => "OTHER_FINANCING_CASH_FLOW_USES" 
        F231 => "OTHER_INVESTING_CASH_FLOW_ITEMS_TOTAL" 
        F232 => "OTHER_INVESTING_CASH_FLOW_SOURCES" 
        F233 => "OTHER_INVESTING_CASH_FLOW_USES" 
        F234 => "PREFERRED_DIVIDENDS_CASH_FLOW" 
        F235 => "PURCHASE_OF_BUSINESS" 
        F236 => "PURCHASE_OF_INVESTMENTS" 
        F237 => "PURCHASE_OF_STOCK" 
        F238 => "PURCHASE_SALE_BUSINESS" 
        F239 => "PURCHASE_SALE_INVESTMENTS" 
        F240 => "REDUCTION_OF_LONG_TERM_DEBT" 
        F241 => "SALE_OF_STOCK" 
        F242 => "SALES_OF_BUSINESS" 
        F243 => "SALES_OF_INVESTMENTS" 
        F244 => "SUPPLYING_OF_LONG_TERM_DEBT" 
        F245 => "TOTAL_CASH_DIVIDENDS_PAID" 

        F301 => "ACCRUALS_RATIO" 
        F302 => "ALTMAN_Z_SCORE" 
        F303 => "ASSET_TURNOVER" 
        F304 => "BENEISH_M_SCORE" 
        F305 => "BUYBACK_YIELD" 
        F306 => "CASH_CONVERSION_CYCLE" 
        F307 => "CASH_TO_DEBT" 
        F308 => "COGS_TO_REVENUE" 
        F309 => "CURRENT_RATIO" 
        F310 => "DAY_SALES_OUT" 
        F311 => "DAYS_INVENT" 
        F312 => "DAYS_PAY" 
        F313 => "DEBT_TO_ASSET" 
        F314 => "DEBT_TO_EBITDA" 
        F315 => "DEBT_TO_EQUITY" 
        F316 => "DEBT_TO_REVENUE" 
        F317 => "DIVIDEND_PAYOUT_RATIO" 
        F318 => "DIVIDENDS_YIELD" 
        F319 => "DPS_COMMON_STOCK_PRIM_ISSUE" 
        F320 => "EARNINGS_ESTIMATE" 
        F321 => "EARNINGS_PER_SHARE_BASIC_ONE_YEAR_GROWTH" 
        F322 => "EARNINGS_PER_SHARE_DILUTED_ONE_YEAR_GROWTH" 
        F323 => "EBITDA_MARGIN" 
        F324 => "EFFECTIVE_INTEREST_RATE_ON_DEBT" 
        F325 => "ENTERPRISE_VALUE_EBITDA" 
        F326 => "ENTERPRISE_VALUE" 
        F327 => "EQUITY_TO_ASSET" 
        F328 => "EV_EBIT" 
        F329 => "EV_REVENUE" 
        F330 => "FLOAT_SHARES_OUTSTANDING" 
        F331 => "FREE_CASH_FLOW_MARGIN" 
        F332 => "FULMER_H_FACTOR" 
        F333 => "GOODWILL_TO_ASSET" 
        F334 => "GRAHAM_NUMBERS" 
        F335 => "GROSS_MARGIN" 
        F336 => "GROSS_PROFIT_TO_ASSET" 
        F337 => "INTERST_COVER" 
        F338 => "INVENT_TO_REVENUE" 
        F339 => "INVENT_TURNOVER" 
        F340 => "KZ_INDEX" 
        F341 => "LONG_TERM_DEBT_TO_ASSETS" 
        F342 => "NCAVPS_RATIO" 
        F343 => "NET_INCOME_PER_EMPLOYEE" 
        F344 => "NET_MARGIN" 
        F345 => "NUMBER_OF_EMPLOYEES" 
        F346 => "OPERATING_EARNINGS_YIELD" 
        F347 => "OPERATING_MARGIN" 
        F348 => "PEG_RATIO" 
        F349 => "PIOTROSKI_F_SCORE" 
        F350 => "PRICE_EARNINGS_FORWARD" 
        F351 => "PRICE_SALES_FORWARD" 
        F352 => "PRICE_TO_FREE_CASH_FLOW" 
        F353 => "PRICE_TO_TANGIBLE_BOOK" 
        F354 => "QUALITY_RATIO" 
        F355 => "QUICK_RATIO" 
        F356 => "RESEARCH_AND_DEVELOP_TO_REVENUE" 
        F357 => "RETURN_ON_ASSETS" 
        F358 => "RETURN_ON_EQUITY_ADJUST_TO_BOOK" 
        F359 => "RETURN_ON_EQUITY" 
        F360 => "RETURN_ON_INVESTED_CAPITAL" 
        F361 => "RETURN_ON_TANG_ASSETS" 
        F362 => "RETURN_ON_TANG_EQUITY" 
        F363 => "REVENUE_ONE_YEAR_GROWTH" 
        F364 => "REVENUE_PER_EMPLOYEE" 
        F365 => "SALES_ESTIMATES" 
        F366 => "SHARE_BUYBACK_RATIO" 
        F367 => "SLOAN_RATIO" 
        F368 => "SPRINGATE_SCORE" 
        F369 => "SUSTAINABLE_GROWTH_RATE" 
        F370 => "TANGIBLE_COMMON_EQUITY_RATIO" 
        F371 => "TOBIN_Q_RATIO" 
        F372 => "TOTAL_SHARES_OUTSTANDING" 
        F373 => "ZMIJEWSKI_SCORE" 
        =>      ""


upcol = switch reverse 
    false => revScale == false ? upcolor   : downcolor
    =>       revScale == false ? downcolor : upcolor

dncol = switch reverse 
    false => revScale == false ? downcolor : upcolor
    =>       revScale == false ? upcolor : downcolor 


per = switch period
   
    "Fiscal Quarter"        => "FQ"
    "Fiscal Year"           => "FY"


var float max = 0.0, var float min = 1e8

if time >= chart.left_visible_bar_time
    timeArray.unshift(math.round(time))
    max := math.max(high, max)
    min := math.min(low,  min)

calc = (max - min) / 10, st = "Symbols"


tf(string , string1, string2, string3, string4, string5, string6, string7, string8, string9, string10, stringx) => 

    prefix = "BATS:"
    switch px 

        "Technology Services"    => prefix + string   
        "Financial Services"     => prefix + string1  
        "Electronic Technology"  => prefix + string2      
        "Health Technology"      => prefix + string3      
        "Consumer Non-Durables"  => prefix + string4  
        "Energy Minerals"        => prefix + string5
        "Consumer Durables"      => prefix + string6
        "Commercial Services"    => prefix + string7
        "Retail Trade"           => prefix + string8
        "Transportation"         => prefix + string9
        "Utilities"              => prefix + string10

        =>                          stringx


type values
   
    float    symbolData
    string   symbol
    string   yearCount
    box      colmn
    color    symbolColor
    line     shapeLines
    linefill shapeLinesFill
    label    symbolLabel
    float    top
    float    bot
    int      l
    int      r
    array <float>  dataArr
    array <string> symbolArr

symbolMat = matrix.new<values>(2, 40)

req( x, simple string symbol ) => 
    
    n = request.financial(symbol, searchF == false ? getId(typeInput1) : getId(search), per, ignore_invalid_symbol = true)
    symbolMat.set(0, x, values.new(symbolData = n)), symbolMat.set(1, x, values.new(symbol = symbol))
    
    [n, symbol]


req(0 , tf("MSFT"   ,"BRK.B"   , "AAPL" , "JNJ"  , "CROX"  , "XOM" , "TSLA", "PYPL", "AMZN" , "UBER", "NEE" , input.symbol(defval = "MSFT", title = "Symbol 1",  inline = "0" , group = st))), [d1 ,s1 ] = req(1 , tf("GOOGL"  ,"JPM"   , "NVDA" , "LLY" , "BGS"   , "HES"  , "HAS"  , "NSSC", "W"    , "INSW" , "TRGP", input.symbol(defval = "AAPL", title = "Symbol 2 ", inline = "0" , group = st)))
req(2 , tf("META"   ,"BAC"     , "AVGO" , "ABBV" , "PG"    , "OXY" , "RIVN", "TRKA", "BBBY" , "AAL" , "RUN" , input.symbol(defval = "NVDA", title = "Symbol 3 ", inline = "2 ", group = st))), [d3 ,s3 ] = req(3 , tf("PAYX"   ,"WFC"   , "CSCO" , "MRK" , "CELH"  , "AMR"  , "RACE" , "ASST", "BBY"  , "SKYW" , "FE"  , input.symbol(defval = "V"   , title = "Symbol 4 ", inline = "2 ", group = st)))
req(4 , tf("ADBE"   ,"MS"      , "TXN"  , "DHR"  , "ELF"   , "CVX" , "LCID", "V"   , "GME"  , "LYFT", "D"   , input.symbol(defval = "MA"  , title = "Symbol 5 ", inline = "4 ", group = st))), [d5 ,s5 ] = req(5 , tf("INTU"   ,"SCHW"  , "RTX"  , "ABT" , "KO"    , "TELL" , "IDEX" , "MCO" , "CHWY" , "CSX"  , "PEG" , input.symbol(defval = "META", title = "Symbol 6 ", inline = "4 ", group = st)))
req(6 , tf("NFLX"   ,"AXP"     , "QCOM" , "BMY"  , "PEP"   , "DVN" , "F"   , "MA"  , "COST" , "ZIM" , "ES"  , input.symbol(defval = "SBUX", title = "Symbol 7 ", inline = "6 ", group = st))), [d7 ,s7 ] = req(7 , tf("ORCL"   ,"GS"    , "HON"  , "PFE" , "KHC"   , "AMPY" , "KBH"  , "MEDP", "WBA"  , "TDW"  , "MDU" , input.symbol(defval = "JNJ" , title = "Symbol 8 ", inline = "6 ", group = st)))
req(8 , tf("CRM"    ,"PLD"     , "INTC" , "TMO"  , "VFC"   , "COP" , "ROKU", "FOUR", "WMT"  , "UAL" , "DUK" , input.symbol(defval = "T"   , title = "Symbol 9 ", inline = "8 ", group = st))), [d9 ,s9 ] = req(9, tf("IBM"    ,"BLK"   , "ADI"  , "AMGN", "COTY"  , "ARCH" , "RIDE" , "EB"  , "EBAY" , "ODFL" , "SRE" , input.symbol(defval = "HD"  , title = "Symbol 10", inline = "8 ", group = st)))
req(10, tf("ACN"    ,"C"       , "NOC"  , "REGN" , "COCO"  , "VLO" , "GM"  , "MQ"  , "TGT"  , "DAL" , "SO"  , input.symbol(defval = "Z"   , title = "Symbol 11", inline = "10", group = st))), [d11,s11] = req(11, tf("ROP"    ,"AMT"   , "AMD"  , "ISRG", "NKE"   , "RRC"  , "ARVL" , "IPDN", "ULTA" , "FLNG" , "EIX" , input.symbol(defval = "AMZN", title = "Symbol 12", inline = "10", group = st)))
req(12, tf("ATVI"   ,"CB"      , "BA"   , "ZTS"  , "GLS"   , "BTU" , "FSR" , "CHGG", "HD"   , "FDX" , "CEG" , input.symbol(defval = "TSLA", title = "Symbol 13", inline = "12", group = st))), [d13,s13] = req(13, tf("SNPS"   ,"PGR"   , "LMT"  , "MDT" , "PM"    , "CRK"  , "GPRO" , "TWKS", "WISH" , "DHT"  , "AQN" , input.symbol(defval = "AMD" , title = "Symbol 14", inline = "12", group = st)))
req(14, tf("CDNS"   ,"MMC"     , "GD"   , "GILD" , "PM"    , "MPC" , "NKLA", "CPRT", "CVNA" , "HLBZ", "AEP" , input.symbol(defval = "GOOG", title = "Symbol 15", inline = "14", group = st))), [d15,s15] = req(15, tf("ADSK"   ,"USB"   , "MU"   , "SYK" , "UL"    , "PR"   , "WHR"  , "WEX" , "AAP"  , "LPG"  , "PPL" , input.symbol(defval = "NIO" , title = "Symbol 16", inline = "14", group = st)))
req(16, tf("NOW"    ,"FISV"    , "KLAC" , "VRTX" , "BROS"  , "MRO" , "GOEV", "PGNY", "LOW"  , "UPS" , "AWK" , input.symbol(defval = "BABA", title = "Symbol 17", inline = "16", group = st))), [d17,s17] = req(17, tf("EQIX"   ,"CME"   , "FTNT" , "BDX" , "BUD"   ,  "VET" , "LZB"  , "STGW", "CPNG" , "JBLU" , "NEP" , input.symbol(defval = "IBM" , title = "Symbol 18", inline = "16", group = st)))
req(18, tf("ADP"    ,"AON"     , "EMR"  , "MRNA" , "ONON"  , "EQT" , "DHI" , "PAYO", "BYND" , "UNP" , "CLNE", input.symbol(defval = "AFRM", title = "Symbol 19", inline = "18", group = st))), [d19,s19] = req(19, tf("MSCI"   ,"PNC"   , "MCHP" , "EW"  , "MDLZ"  ,  "KOS" , "FTDR" , "HURN", "FTCH" , "GSL"  , "NI"  , input.symbol(defval = "ABNB", title = "Symbol 20", inline = "18", group = st)))
req(20, tf("CTSH"   ,"CCI"     , "NXPI" , "DXCM" , "TSN"   , "CTRA", "WKHS", "FIS" , "M"    , "LUV" , "EXC" , input.symbol(defval = "MSFT", title = "Symbol 21", inline = "20", group = st))), [d21,s21] = req(21, tf("VRSK"   ,"SPG"   , "HPE"  , "A"   , "UAA"   , "OVV"  , "TPX"  , "OMC" , "BLDR" , "GOGL" , "ETR" , input.symbol(defval = "AAPL", title = "Symbol 22", inline = "20", group = st)))
req(22, tf("IT"     ,"ICE"     , "ANET" , "BIIB" , "CLX"   , "PXD" , "ARHS", "SPGI", "DLTR" , "ASC" , "PCG" , input.symbol(defval = "NVDA", title = "Symbol 23", inline = "22", group = st))), [d23,s23] = req(23, tf("ANSS"   ,"AJG"   , "KEYS" , "RMD" , "EL"    , "CNQ"  , "DPRO" , "TASK", "DG"   , "SYY"  , "CNP" , input.symbol(defval = "V"   , title = "Symbol 24", inline = "22", group = st)))
req(24, tf("EA"     ,"MET"     , "MSI"  , "ILMN" , "IPAR"  , "EOG" , "LEN" , "WE"  , "KSS"  , "STNG", "NFE" , input.symbol(defval = "MA"  , title = "Symbol 25", inline = "24", group = st))), [d25,s25] = req(25, tf("VRSN"   ,"PRU"   , "FTV"  , "MTD" , "BTI"   , "CEI"  , "GT"   , "AMN" , "TJX"  , "SAVE" , "LNT" , input.symbol(defval = "META", title = "Symbol 26", inline = "24", group = st)))
req(26, tf("EPAM"   ,"PSA"     , "ROK"  , "ALGN" , "K"     , "AR"  , "VSTO", "BTBT", "ETSY" , "FRO" , "AES" , input.symbol(defval = "SBUX", title = "Symbol 27", inline = "26", group = st))), [d27,s27] = req(27, tf("BR"     ,"AMP"   , "GRMN" , "WST" , "MO"    , "WMB"  , "HOG"  , "PIXY", "JWN"  , "EURN" , "AEE" , input.symbol(defval = "JNJ" , title = "Symbol 28", inline = "26", group = st)))
req(28, tf("FDS"    ,"AIG"     , "ON"   , "BAX"  , "HBI"   , "SWN" , "FFIE", "RELY", "CHPT" , "BAER", "NOVA", input.symbol(defval = "T"   , title = "Symbol 29", inline = "28", group = st))), [d29,s29] = req(29, tf("CSGP"   ,"WELL"  , "FLSR" , "HOLX", "KDP"   , "CHK"  , "CENN" , "MLEC", "AZO"  , "IMPP" , "ATO" , input.symbol(defval = "HD"  , title = "Symbol 30", inline = "28", group = st)))
req(30, tf("TTWO"   ,"TRV"     , "HPQ"  , "STE"  , "CL"    , "APA" , "TOL" , "BKKT", "MELI" , "VRRM", "NRG" , input.symbol(defval = "Z"   , title = "Symbol 31", inline = "30", group = st))), [d31,s31] = req(31, tf("PTC"    ,"VICI"  , "SWKS" , "WAT" , "DECK"  , "HCC"  , "LOVE" , "MEG" , "ROST" , "GNK"  , "BEP" , input.symbol(defval = "AMZN", title = "Symbol 32", inline = "30", group = st)))
req(32, tf("TRMB"   ,"AFL"     , "GLW"  , "INCY" , "CAG"   , "FANG", "FNKO", "GPN" , "CVS"  , "GRAB", "XEL" , input.symbol(defval = "TSLA", title = "Symbol 33", inline = "32", group = st))), [d33,s33] = req(33, tf("DXC"    ,"ALL"   , "HWM"  , "COO" , "KMB"   , "PARR" , "GRBK" , "ADT" , "TPR"  , "TNP"  , "DTE" , input.symbol(defval = "AMD" , title = "Symbol 34", inline = "32", group = st)))
req(34, tf("JKHY"   ,"COF"     , "ENPH" , "PKI"  , "TTCF"  , "PSX" , "PHM" , "UPWK", "LULU" , "NAT" , "MAXN", input.symbol(defval = "GOOG", title = "Symbol 35", inline = "34", group = st))), [d35,s35] = req(35, tf("CDW"    ,"URI"   , "TXT"  , "BIO" , "SAM"   , "CVE"  , "NVR"  , "PAGS", "SFM"  , "TRMD" , "WEC" , input.symbol(defval = "NIO" , title = "Symbol 36", inline = "34", group = st)))
req(36, tf("PAYC"   ,"BK"      , "MPWR" , "VTRS" , "CPB"   , "PBF" , "STLA", "VERI", "KR"   , "TNK" , "BWXT", input.symbol(defval = "BABA", title = "Symbol 37", inline = "36", group = st))), [d37,s37] = req(37, tf("TYL"    ,"CBRE"  , "NTAP" , "CTLT", "STZ"   , "WTI"  , "GOLF" , "NOTV", "DKS"  , "TK"   , "PNW" , input.symbol(defval = "IBM" , title = "Symbol 38", inline = "36", group = st)))
req(38, tf("GEN"    ,"O"       , "TDY"  , "TFX"  , "TR"    , "SU"  , "SWK" , "ADV" , "W"    , "NSC" , "ED"  , input.symbol(defval = "AFRM", title = "Symbol 39", inline = "38", group = st))), [d39,s39] = req(39, tf("MTCH"   ,"ARE"   , "LDOS" , "TECH", "LEVI"  , "CPE"  , "LKQ"  , "IPG" , "ORLY" , "ALK"  , "KEN" , input.symbol(defval = "ABNB", title = "Symbol 40", inline = "38", group = st)))


type dropDown
    float data
    float coordinate
    string symbol


var histData = matrix.new<values>(40, 1), var scatterShapes = matrix.new<values>(7, 40), var pieShapes  = matrix.new<values>(4, 1)    , mid = 0
cArray       = array.new <values>(),      var gemMat  = matrix.new<dropDown>(10, 40), right = 0


b( float ) =>
   
    max - ((max - min) * float )

x( float , mult ) =>
   
    timeArray.get(math.round(math.max(timeArray.indexof( right) + (mid * (float + (.20 * mult))), 0)))

append(string , bool , int  ) =>
    
    if timeframe.change("M") and month == int
        histData.add_row(histData.rows())
        histData.add_col(histData.columns())
        histData.set(histData.rows() - 1, 0, values.new(yearCount = string + str.tostring(bool == false ? year : year - 1)))

        for i = 0 to symbolMat.columns() - 1
            histData.set(i, histData.columns() - 1, values.new(symbolData = symbolMat.get(0, i).symbolData))

if per == "FQ"

    append("Q3 ", false, 10), append("Q4 ", true , 1)
    append("Q1 ", false, 4 ), append("Q2 ", false, 7)

else 

    if ta.change(year)
        
        histData.add_row(histData.rows())
        histData.add_col(histData.columns())
        histData.set(histData.rows() - 1, 0, values.new(yearCount = str.tostring(year - 1)))
        for i = 0 to symbolMat.columns() - 1
            histData.set(i, histData.columns() - 1, values.new(symbolData = symbolMat.get(0, i).symbolData))


if barstate.islastconfirmedhistory

    if timeframe.multiplier < 240 and not timeframe.isdwm
        runtime.error("Please Select 4-Hour Chart or Greater Resolution")
    
    colCond = columns != "Pie Chart" and columns != "Drop Down"
    
    if intervalsback != 0 
        for i = 0 to 39
            n = histData.get(i, histData.columns() - intervalsback)
            
            if not na(n)
                symbolMat.set(0, i, values.new(symbolData = nz(n.symbolData)))

    string dateF = switch intervalsback != 0
        
        false => "Current"
        =>      histData.get(histData.rows() - intervalsback, 0).yearCount

    copy = values.new(dataArr = array.new_float(), symbolArr = array.new_string()), 

    
    for i = 0 to symbolMat.columns() - 1
        
        array.push(copy.dataArr   ,   symbolMat.get(0, i).symbolData)
        array.push(copy.symbolArr ,   symbolMat.get(1, i).symbol    )   

    if sort != "None" or columns == "Pie Chart" or columns == "Drop Down"
        
        
        if columns != "Pie Chart" and columns != "Drop Down"
            
            order = switch sort 
              
                "Descending" => order.ascending
                =>              order.descending
            
            copy.dataArr.sort(order)

        else 
       
            order = order.descending, copy.dataArr.sort(order)


        for i = 0 to copy.symbolArr.size() - 1
            for x = 0 to copy.symbolArr.size() - 1
                if symbolMat.get(0, i).symbolData == copy.dataArr.get(x)
                    copy.symbolArr.set(x, symbolMat.get(1, i).symbol)



    right := chart.right_visible_bar_time, left = chart.left_visible_bar_time, 
    mid := timeArray.indexof(left) - timeArray.indexof(right)
    
    newLeft = 
              
              math.round(
              math.min(
              timeArray.indexof(left) - (mid * .06), 
              timeArray.size() - 1))

    newRight = 
              
              math.round(
              math.max(
              timeArray.indexof(right) + (mid * .06), 0))
    
    mid2 =    
              
              math.round(
              math.avg(timeArray.indexof(newLeft), 
              timeArray.indexof( newRight))), 


    scatterShapes.set(6, 0, 
                        
                         values.new(
                             colmn = box.new(
                                 
                                  timeArray.get(newLeft), 
                                  max, 
                                  timeArray.get(newRight), 
                                  min, 
                                  bgcolor      = boxnobg and usebg ? cbg  : na, 
                                  border_color = boxnobg ? color.white : na, 
                                  xloc         = xloc.bar_time
                                   
                                   )))

    pieShapes.set(0, 0, values.new(l = timeArray.get(newLeft))),  pieShapes.set(1, 0, values.new(top = max))
    pieShapes.set(2, 0, values.new(r = timeArray.get(newRight))), pieShapes.set(3, 0, values.new(bot = min))

    adcalc        = (pieShapes.get(1, 0).top - pieShapes.get(3, 0).bot) / 20
    nCalc         = copy.dataArr.range() / 20, xz = -1, n = 0.0

    if colCond
        n := switch revScale 
            false => copy.dataArr.min()    
            =>       copy.dataArr.max()
    else
        n := copy.dataArr.min()


    strFix = switch revScale
        true   => copy.dataArr.max() < 0 ? "0" : str.tostring(copy.dataArr.max() + nCalc, "###,###.##")
        false  => copy.dataArr.min() > 0 ? "0" : str.tostring(copy.dataArr.min() - nCalc, "###,###.##")
    
    
    scatterShapes.set(1, 0, 
                         
                         values.new(
                             symbolLabel = label.new(
                                  
                                  pieShapes.get(2, 0).r, 
                                  pieShapes.get(3, 0).bot - adcalc, 
                                  text      = strFix, 
                                  color     = #ffffff00, 
                                  style     = label.style_label_left, 
                                  textcolor = dncol, 
                                  xloc      = xloc.bar_time, 
                                  size      = size.small
                                  
                                  )))
    

    for x = 0 to 39
        
        pos = str.pos(copy.symbolArr.get(x), ":"), sub = str.substring(copy.symbolArr.get(x), pos + 1), calcY = 0.0
        if colCond
            calcY  := switch revScale 
                false => (min) + ((max) - (min)) * (copy.dataArr.get(x) - copy.dataArr.min())  / (copy.dataArr.range())
                true  => (max) - ((max) - (min)) * (copy.dataArr.get(x) - copy.dataArr.min())  / (copy.dataArr.range())
        else 
            calcY := (min) + ((max) - (min)) * (copy.dataArr.get(x) - copy.dataArr.min())  / copy.dataArr.range()
        
        yax = switch x != xz
            true  and calcY < pieShapes.get(3, 0).bot    => pieShapes.get(3, 0).bot
            true  and calcY > pieShapes.get(1, 0).top    => pieShapes.get(1, 0).top
            => calcY

        scatterShapes.set(0, x, values.new(symbolLabel =
                
                 label.new(
                 timeArray.get(newRight + ((mid/48) * (x + 1))), 
                 yax, 
                 xloc      = xloc.bar_time, 
                 textcolor = color.white, 
                 color     = #ffffff00    , 
                 style     = label.style_label_center, 
                 text      = sub +"\n⦿", size = size.small, 
                 tooltip   = str.tostring(copy.dataArr.get(x), "###,###,###.00")
                 )))

        

        if x <= 19

            loopdn = kai.hsv_gradient(x, 0, 10, dncol,  midCol)
            loopup = kai.hsv_gradient(x, 11, 19, midCol, upcol), xTrack = -1

            col = switch xTrack != x
                
                true and x <= 10 => loopdn
                => loopup

            scatterShapes.set(1, x + 1, values.new(symbolLabel =
                
                             label.new(
                             pieShapes.get(2, 0).r,
                             pieShapes.get(3, 0).bot + (adcalc * x), 
                             text      = str.tostring(n, "###,###.##" ) , 
                             color     = #ffffff00, 
                             style     = label.style_label_left, 
                             textcolor = col, 
                             xloc      = xloc.bar_time, 
                             size      = size.small
                             )))
            
            if colCond
                
                switch revScale 
                
                    false => n += nCalc
                    =>       n -= nCalc
            else
              
                n += nCalc

            cArray.push(values.new(symbolColor = col))
    
    scatterShapes.set(1, 21, values.new(symbolLabel =
             
             label.new(
             pieShapes.get(2, 0).r,
             pieShapes.get(1, 0).top , 
             text      = str.tostring(colCond ? revScale == false ? copy.dataArr.max() : copy.dataArr.min() : copy.dataArr.max(), "###,###.##"), 
             color     = #ffffff00, 
             style     = label.style_label_left, 
             textcolor = upcol, 
             xloc      = xloc.bar_time, 
             size      = size.small
              )))




    pieShapes.set(1, 0, values.new(top = pieShapes.get(1, 0).top + adcalc)), scatterShapes.get(6, 0).colmn.set_top(pieShapes.get(1, 0).top) 

    strFix2 = switch revScale
        
        false => copy.dataArr.max() < 0 ? "0" : str.tostring(copy.dataArr.max() + nCalc, "###,###.##")
        true  => copy.dataArr.min() > 0 ? "0" : str.tostring(copy.dataArr.min() - nCalc, "###,###.##")

    scatterShapes.set(1, 22, 
                        
                         values.new(
                        
                             symbolLabel = label.new(
                                 
                                 pieShapes.get(2, 0).r, 
                                 pieShapes.get(1, 0).top, 
                                 text      = strFix2, 
                                 color     = #ffffff00, 
                                 style     = label.style_label_left, 
                                 textcolor = upcol, 
                                 xloc      = xloc.bar_time, 
                                 size      = size.small
                                 
                                 )))
    for i = 0 to 1
        cArray.push(values.new(symbolColor = upcol))

    pieShapes.set(3, 0, values.new(bot = pieShapes.get(3, 0).bot - adcalc)), scatterShapes.get(6, 0).colmn.set_bottom(pieShapes.get(3, 0).bot),  minLab = math.round(20e20)
    
    if boxnobg == false

        for i = 0 to 39
            minLab := math.min(minLab, scatterShapes.get(0, i).symbolLabel.get_x())
        
        for i = 0 to 1
            
            [x1, y1, x2, y2] = switch i != -1
                true and i == 0 => [minLab, pieShapes.get(3, 0).bot, timeArray.get(newRight), pieShapes.get(3, 0).bot                 ]
                =>                 [timeArray.get(newRight), pieShapes.get(3, 0).bot, timeArray.get(newRight), pieShapes.get(1, 0).top]
            
            scatterShapes.set(2, i, values.new(shapeLines = 
                 line.new(x1, y1, x2, y2,
                                      xloc = xloc.bar_time,
                                      color = color.white
                                      )))
                                      


    cArray.unshift(values.new(symbolColor = dncol)), sortedy = array.new_float()
    
    for i = 0 to 22
        sortedy.push(scatterShapes.get(1, i).symbolLabel.get_y())

    sortedy.sort(order.descending), cArray.reverse(), copyColor = array.new_int()

    for i = 0 to 39
        for x = 1 to 22
            if scatterShapes.get(0, i).symbolLabel.get_y() >= sortedy.get(x)
                if scatterShapes.get(0, i).symbolLabel.get_y() <= sortedy.get(x - 1)
                    scatterShapes.get(0, i).symbolLabel.set_textcolor(cArray.get(x).symbolColor), copyColor.push(x)

        pos = str.pos          (copy.symbolArr.get(i), ":") 
        sub = str.substring(copy.symbolArr.get(i), pos + 1) 
        
        scatterShapes.set(3, i, 
                             values.new(
                                 symbolLabel = label.new(          
                                     scatterShapes.get(0, i).symbolLabel.get_x(), 
                                     pieShapes.get(3, 0).bot, 
                                     style = label.style_label_up, 
                                     textcolor = color.white, 
                                     color = #ffffff00, 
                                     text = "╷\n" + sub,
                                     xloc = xloc.bar_time, 
                                     size = size.small
                                     
                                     )))
    
    for i = 1 to 39
        if scatterShapes.get(3, i).symbolLabel.get_x() == scatterShapes.get(3, i - 1).symbolLabel.get_x()
            scatterShapes.get(3, i).symbolLabel.set_text(scatterShapes.get(3, i).symbolLabel.get_text() + "\n" + scatterShapes.get(3, i - 1).symbolLabel.get_text())
            scatterShapes.get(3, i - 1).symbolLabel.delete()
            
    if columns == "Columns" or columns == "Scatter + Columns" or columns == "Bar"
        for i = 0 to 39
            coordinateE = timeArray.indexof(scatterShapes.get(0, 1).symbolLabel.get_x()) - timeArray.indexof(scatterShapes.get(0, 0).symbolLabel.get_x())
            
            [coordinateL, coordinateR] = switch columns 
                "Bar" => [timeArray.get(timeArray.indexof(scatterShapes.get(0, i).symbolLabel.get_x()) - math.round(coordinateE / 2)),
                          timeArray.get(timeArray.indexof(scatterShapes.get(0, i).symbolLabel.get_x()) + math.round(coordinateE / 2))]
                =>       [timeArray.get(timeArray.indexof(scatterShapes.get(0, i).symbolLabel.get_x())), 
                          timeArray.get(timeArray.indexof(scatterShapes.get(0, i).symbolLabel.get_x()))]

            scatterShapes.set(4, i, 
                             values.new(
                                 colmn = box.new(
                                     coordinateL, 
                                     scatterShapes.get(0, i).symbolLabel.get_y(),
                                     coordinateR, 
                                     pieShapes.get(3, 0).bot, 
                                     xloc = xloc.bar_time, 
                                     border_color = columns == "Bar" ? cbg : na,
                                     border_width = columns == "Bar" ? 3 : 1,
                                     bgcolor = na
                                     
                                     )))
        
            for x = 1 to sortedy.size() - 1
                if scatterShapes.get(4, i).colmn.get_top() >= sortedy.get(x)
                    if scatterShapes.get(4, i).colmn.get_top() <= sortedy.get(x - 1)
                        scatterShapes.get(4, i).colmn.set_bgcolor(cArray.get(x).symbolColor)
                        if columns != "Bar"
                            scatterShapes.get(4, i).colmn.set_border_color(cArray.get(x).symbolColor)


            if columns == "Columns"
                scatterShapes.get(0, i).symbolLabel.delete()
    
                
            if columns == "Bar"
                if i == 39 
                    if boxnobg == false 
                        scatterShapes.get(2, 0).shapeLines.set_x1(scatterShapes.get(4, 39).colmn.get_right())
                    else 
                        scatterShapes.get(6, 0).colmn.set_bottom(scatterShapes.get(6, 0).colmn.get_bottom() - adcalc)
                    for x = 0 to 39
                        scatterShapes.get(0, x).symbolLabel.delete()
    

    add = switch per
        
        "FQ" => " (FQ)\n" + px + "\n" + dateF
        "FY" => " (FY)\n" + px + "\n" + dateF
    
    
    scatterShapes.set(5, 0, 
                 values.new(
                         symbolLabel = label.new(
                                 math.round(math.avg(pieShapes.get(0, 0).l, pieShapes.get(2, 0).r)), 
                                 pieShapes.get(1, 0).top, 
                                 color     = #ffffff00, 
                                 textcolor = color.white, 
                                 size      = size.large, 
                                 text      = searchF == false ? typeInput1 + add :
                                 search + add, xloc = xloc.bar_time
                                 )))

    allL = label.all, allB = box.all, allLi = line.all

    if columns == "Pie Chart"
        

        if allL.size() > 0
            for i = 0 to allL.size() - 1
                allL.shift().delete()
        if allB.size() > 0
            for i = 0 to allB.size() - 1
                allB.shift().delete()
        if allLi.size() > 0 
            for i = 0 to allLi.size() - 1
                allLi.shift().delete()
      
        if mid > 20
            
            newRight2 = math.round(math.max(timeArray.indexof( right) + (mid * .55), 0))
            newLeft2  = math.round(math.max(timeArray.indexof( right) + (mid * .45), 0))
            
            sub       = timeArray.slice(newRight2, newLeft)
            sub2      = timeArray.slice(newRight, newLeft2)    
            pc        = array.new_float(), pc2 = array.new_float()
            
            for i = 0 to 19
                pc.push (copy.dataArr.get(i))
                pc2.push(copy.dataArr.get(i+20))

            perCumu = array.new_float(), perCumu2 = array.new_float()
            
            for i = 0 to 19
                pc.set(i,  pc.get(i)  + math.abs(pc.min() ))
                pc2.set(i, pc2.get(i) + math.abs(pc2.min()))

            for i = 0 to 19

                perCumu .push(pc.get(i) / pc.sum() / 5 * 100)
                perCumu2.push(pc2.get(i) / pc2.sum() / 5 * 100)

            percCumu = 0.0, percCumu2 = 0.0

            for i = 0 to 6
                pieShapes.add_row(pieShapes.rows())
                
            for i = 0 to 19
                
                    //  thanking @rumpypumpydumpy (on every iteration of this loop) for the easy-to-work-with framework! 
                
                pieShapes.set(4, pieShapes.columns() - 1,
                         values.new(shapeLines = 
                                 line.new( 
                                             sub.get(math.round(math.cos(2 * math.pi / 20 * percCumu) * ((math.round((newLeft - newRight2) / 2)) - 1) + 
                                             (math.round((newLeft2 - newRight) / 2))  - 1)),
                                             math.avg(max, min) + math.sin(2 * math.pi / 20 * percCumu) * math.avg(max, min), 
                                             sub.get(math.round(sub.size()/2) - 1), 
                                             math.avg(max,min), 
                     
                     xloc=xloc.bar_time, color = #000000, width = 2
                                             
                                             )))
                percCumu += perCumu.get(i)

                pieShapes.set(5, pieShapes.columns() - 1,
                         values.new(shapeLines = 
                                 line.new( 
                                             sub2.get(math.round(math.cos(2 * math.pi / 20 * percCumu2) * ((math.round((newLeft2 - newRight) / 2)) - 1) 
                                             + (math.round((newLeft2 - newRight) / 2)) - 1)), 
                                             math.avg(max, min) + math.sin(2 * math.pi / 20 * percCumu2) * math.avg(max, min), 
                                             sub2.get(math.round(sub2.size()/2) - 1), 
                                             math.avg(max,min), 
                   
                     xloc=xloc.bar_time, color = #000000, width = 2
                   
                                             )))
                percCumu2 += perCumu2.get(i)
                
                pieShapes.add_col(pieShapes.columns())


            for i = 4 to 5
            
                [initialSet, plus] = switch i != -1 
                    
                    true and i == 4 => [6, 0 ]
                    =>                 [8, 20]
                
                pieShapes.set(initialSet, 0, 
                         
                         values.new(
                         
                             symbolLabel = label.new(

                                 math.round(math.avg(pieShapes.get(i, 0).shapeLines.get_x1(), pieShapes.get(i, pieShapes.columns() - 2).shapeLines.get_x1())), 
                                 math.avg(pieShapes.get(i, 0).shapeLines.get_y1(), pieShapes.get(i,  pieShapes.columns() - 2).shapeLines.get_y1()), 
                                                         text      = copy.symbolArr.get(pieShapes.columns() - 2 + plus) 
                                                             + "\n" + str.tostring(copy.dataArr.get(pieShapes.columns()-2 + plus)),
                                                         color     = color.new(cArray.get(copyColor.get(pieShapes.columns() - 2 + plus)).symbolColor, 50),
                                                         xloc      = xloc.bar_time, 
                                                         style     = label.style_label_center, 
                                                         textcolor = color.white, 
                                                         size      = size.small
                                     )))

            for i = 1 to pieShapes.columns() - 1


                if not na(pieShapes.get(4, i))
                    
                    if perCumu.variance() < 1

                        pieShapes.set(6, i, 
                                 values.new(
                                                 shapeLinesFill=linefill.new(
                                                 pieShapes.get(4, i).shapeLines, 
                                                 pieShapes.get(4, i - 1).shapeLines, 
                                                 color.new(cArray.get(copyColor.get(i - 1)).symbolColor, 33
                                                     
                                                     ))))
                        if i == 1
                            
                            pieShapes.set(6, 0, 
                                 values.new(
                                                 shapeLinesFill = linefill.new(
                                                 pieShapes.get(4, 0).shapeLines, 
                                                 pieShapes.get(4, pieShapes.columns() - 2).shapeLines, 
                                                 color.new(cArray.get(copyColor.get(pieShapes.columns()-2)).symbolColor, 33
                                                     
                                                     ))))

                    else 
                        
                        pieShapes.get(4, i - 1).shapeLines.set_color(color.white)
                        pieShapes.get(4, i - 1).shapeLines.set_style(line.style_dotted)
                    
                    pieShapes.set(7, i, values.new(symbolLabel=label.new(
                            
                             math.round(math.avg(line.get_x1(pieShapes.get(4, i).shapeLines), line.get_x1(pieShapes.get(4, i - 1).shapeLines))), 
                             math.avg(line.get_y1(

                                                 pieShapes.get(4, i).shapeLines), line.get_y1(pieShapes.get(4, i - 1).shapeLines)), 
                                                 text      = copy.symbolArr.get(i - 1) + "\n" + str.tostring(copy.dataArr.get(i - 1)), 
                                                 color     = color.new(cArray.get(copyColor.get(i - 1)).symbolColor, 50),
                                                 xloc      = xloc.bar_time, 
                                                 style     = label.style_label_center, 
                                                 textcolor = color.white, 
                                                 size      = size.small
                              
                             )))
               
                if not na(pieShapes.get(5, i))

                    if perCumu2.variance() < 1

                        pieShapes.set(8, i, 
                                     values.new(
                                         shapeLinesFill=linefill.new(
                                         pieShapes.get(5, i).shapeLines, 
                                         pieShapes.get(5, i - 1).shapeLines, 
                                         color.new(cArray.get(copyColor.get(i + 20 - (i == pieShapes.columns() - 1 ? 1 : 0))).symbolColor, 
                                         33
                                         ))))
                        
                        if i == 1 
                           
                            pieShapes.set(8, 0, 
                                     values.new(
                                         shapeLinesFill = 
                                         linefill.new(pieShapes.get(5, 0).shapeLines, 
                                         pieShapes.get(5, pieShapes.columns() - 2).shapeLines, 
                                         color.new(cArray.get(copyColor.get(20)).symbolColor, 
                                         33
                                         ))))


                    else 
                       
                       
                        pieShapes.get(5, i - 1).shapeLines.set_color(color.white)
                        pieShapes.get(5, i - 1).shapeLines.set_style(line.style_dotted)
                    

                    pieShapes.set(9, i, 
                                 
                                 values.new(
                                 
                                     symbolLabel=label.new(
                                             math.round(math.avg(line.get_x1(pieShapes.get(5, i).shapeLines), line.get_x1(pieShapes.get(5, i - 1).shapeLines))), 
                                             math.avg(line.get_y1(pieShapes.get(5, i).shapeLines), line.get_y1(pieShapes.get(5, i - 1).shapeLines)), 
                                                          text = copy.symbolArr.get(20 + i - 1) + "\n" + str.tostring(copy.dataArr.get(20 + i - 1)), 
                                                          color     = 
                                                          color.new(cArray.get(copyColor.get(i + 20 - (i == pieShapes.columns() - 1 ? 1 : 0))).symbolColor, 50),
                                                          xloc      = xloc.bar_time, 
                                                          style     = label.style_label_center, 
                                                          textcolor = color.white, 
                                                          size      = size.small
                                             )))
            maxLine = 0.
            for i = 0 to pieShapes.columns() - 1
                if not na(pieShapes.get(4, i)) and not na(pieShapes.get(5, i))
                    maxLine := math.max(
                                             maxLine, 
                                             line.get_y1(pieShapes.get(4, i).shapeLines), 
                                             line.get_y1(pieShapes.get(5, i).shapeLines
                                             ))
            
            pieShapes.add_row(pieShapes.rows()), pieShapes.set(11, 0, 
                             values.new(
                                 symbolLabel = label.new(  
                                     math.round(math.avg(timeArray.get( newRight2), timeArray.get( newLeft2))), 
                                     maxLine, 
                                     color = #ffffff00, 
                                     textcolor = color.white, 
                                     size = size.large, 
                                     text =searchF == false ? typeInput1 + add: search + add, xloc = xloc.bar_time
                     )))

        else 
            
            label.new(  
                         math.round(math.avg(chart.left_visible_bar_time, chart.right_visible_bar_time)), 
                         math.avg(max, min), color = #ffffff00, 
                         xloc = xloc.bar_time, size = size.huge, text = "🥧"
                         
                         )

    if columns == "Drop Down"
        iTrack = -1, gm = gemMat
        
        if allL.size() > 0
            for i = 0 to allL.size() - 1
                allL.shift().delete()
        if allB.size() > 0
            for i = 0 to allB.size() - 1
                allB.shift().delete()
        if allLi.size() > 0 
            for i = 0 to allLi.size() - 1
                allLi.shift().delete()
      
        

        aId1 = array.from(.80, .84,  .80, .76, .86, .82, .78, .74, .88, .72)
        aId2 = array.from(.80, .84,  .80, .76, .86, .82, .78, .74, .88, .72)
        aId3 = array.from(.0,  .0 ,  .0,  .0,  .10, .10, .10, .10, .20, .20)
        aId4 = array.from(.0,  .10 , .10, .10, .20, .20, .20, .20, .30, .30)
        

        for i = 0 to 39
           
           
            gm.set(0,  i, dropDown.new(data    = copy.dataArr.get(i  )))
            gm.set(1,  i, dropDown.new(symbol  = copy.symbolArr.get(i)))
            
            if i <= 9
            
                gm.set(2,  i, dropDown.new(coordinate = aId1.get(i)))
                gm.set(3,  i, dropDown.new(coordinate = aId2.get(i)))
                gm.set(4,  i, dropDown.new(coordinate = aId3.get(i))) 
                gm.set(5,  i, dropDown.new(coordinate = aId4.get(i)))

        base = array.new_line(), basel = array.new_label(), xT = -1

        for x = 0 to 3

            for i = 0 to 9
            
                if x >= 1

                    plus = switch x != xT
                        
                        true and x == 1 => 10
                        true and x == 2 => 20
                        true and x == 3 => 30

                    gm.set(2,  i+plus, dropDown.new(coordinate =  gm.get(2 , i ) .coordinate - (.20 * x)))
                    gm.set(3,  i+plus, dropDown.new(coordinate =  gm.get(3 , i ) .coordinate - (.20 * x)))
                    gm.set(4,  i+plus, dropDown.new(coordinate =  gm.get(4,  i)  .coordinate))
                    gm.set(5,  i+plus, dropDown.new(coordinate =  gm.get(5,  i)  .coordinate))
        
                if i == 0                   
                
                    gm.set(6, x, dropDown.new(coordinate = .86 - (.20 * x))), gm.set(7, x, dropDown.new(coordinate = .74 - (.20 * x)))
                    gm.set(8, x, dropDown.new(coordinate = .72 - (.20 * x))), gm.set(9, x, dropDown.new(coordinate = .88 - (.20 * x)))



        for i = 0 to gm.columns() - 1
            
            xm = cArray, xb = copyColor
            
            fc = revScale == false ? reverse == false ? downcolor  : upcolor : reverse == false ? upcolor : downcolor
            
            basel.push(
                         label.new(
                                     x           = int(x(gm.get(3, i).coordinate, 0)), 
                                     y           = b    (gm.get(5, i).coordinate    ), 
                                     text        = gm.get(1, i).symbol + "\n" + str.tostring(gm.get(0, i).data),
                                     size        = size.small,  
                                     xloc        = xloc.bar_time, 
                                     style       = label.style_label_center, 
                                     textcolor   = color.white, 
                                     color       = color.new(i == gm.columns() - 1 ? fc : xm.get(xb.get(i)).symbolColor, 60)
                                     
                                     ))

            base.push(
                         line.new(
                                     int(x(gm.get(2, i).coordinate, 0)), b(gm.get(4, i).coordinate), 
                                     int(x(gm.get(3, i).coordinate, 0)), b(gm.get(5, i).coordinate), 
                                     xloc = xloc.bar_time, color = #ffffff
                            
                                     ))

            if i <= 3

                base.push(
                             line.new(
                                         int(x(gm.get(6, i).coordinate, 0)), b(.10), 
                                         int(x(gm.get(7, i).coordinate, 0)), b(.10), 
                                         xloc = xloc.bar_time, color = color.white
                                         ))

                base.push(
                             line.new(
                                         int(x(gm.get(8, i).coordinate, 0)), b(.20), 
                                         int(x(gm.get(9, i).coordinate, 0)), b(.20), 
                                         xloc = xloc.bar_time, color = color.white
                                         ))



        base.push(
                     line.new(
                                 int(x(.84, 0)), b(.0), int(x(.16, 0)), b(.0), 
                                 xloc = xloc.bar_time, color = color.white
                                 ))

bgcolor(usebg and boxnobg == false ? cbg : na)

Overview

Fundamentals Graphing [Kioseff Trading] queries financial statements including income statement and balance sheet data such as basic EPS, revenue, EBIT, and debt metrics on quarterly or annual bases. Users can choose presets, customize plot styles between scatter and column graphs, adjust lookback intervals, sort values, and filter metrics using an integrated search function.

Details

Published by

regalouisei on GitHub

Code credit

KioseffTrading, as written in the script's header

Type

Indicator, Pine Script v5

Draws

Separate pane below the chart

Category

Screeners & dashboards

Markets

Stocks

Timeframes

H4 and above

Risk Notes

No repainting, lookahead or stacked entries were found in its code or README. That says nothing about how well it works: test it first.

Settings

The inputs you can change from the gear icon on the chart. Defaults are the author's.

SettingTypeDefaultVariable
Data    stringF010typeInput1
PresetstringTechnology Servicespx
Period  stringFiscal Quarterperiod
Intervals Back    int0intervalsback
Reverse Colorsboolfalsereverse
Reverse ScaleboolfalserevScale
Plot TypestringScatter + Columnscolumns
Sort Data        stringNonesort
Move Data to Boxboolfalseboxnobg
Use Search FunctionboolfalsesearchF
Search Functionstringsearch
Up Color    colorcolor.limeupcolor
Show all 40 settings
SettingTypeDefaultVariable
Down Colorcolorcolor.reddowncolor
Median Colorcolorcolor.whitemidCol
Use Background Colorbooltrueusebg
Background Colorcolor#000000cbg
Symbol 1symbolMSFTSymbol 1
Symbol 2 symbolAAPLSymbol 2
Symbol 3 symbolNVDASymbol 3
Symbol 4 symbolVSymbol 4
Symbol 5 symbolMASymbol 5
Symbol 6 symbolMETASymbol 6
Symbol 7 symbolSBUXSymbol 7
Symbol 8 symbolJNJSymbol 8
Symbol 9 symbolTSymbol 9
Symbol 10symbolHDSymbol 10
Symbol 11symbolZSymbol 11
Symbol 12symbolAMZNSymbol 12
Symbol 13symbolTSLASymbol 13
Symbol 14symbolAMDSymbol 14
Symbol 15symbolGOOGSymbol 15
Symbol 16symbolNIOSymbol 16
Symbol 17symbolBABASymbol 17
Symbol 18symbolIBMSymbol 18
Symbol 19symbolAFRMSymbol 19
Symbol 20symbolABNBSymbol 20
Symbol 21symbolMSFTSymbol 21
Symbol 22symbolAAPLSymbol 22
Symbol 23symbolNVDASymbol 23
Symbol 24symbolVSymbol 24
Third-party code. ForexR did not write, test or endorse this script, and the summary above was generated automatically from its code and README. Indicators describe the past, and a strategy's backtest can look better than live trading, especially when a script repaints. Check it in the Strategy Tester and on a demo account before you rely on it.

Similar Pine Scripts

948 stars

This indicator measures the chart symbol’s percentage change from the opening price at the start of each US presidential term and plots those values as histogram columns in a separate pane. Columns are offset so each administration appears separately, with a s

Indicator v6 Screeners & dashboards
Updated 10 days ago · GPL-3.0 GitHub repository of Presidents Performance

This indicator scans a pasted list of symbols for RSI directional momentum and shows matching long and short signals in a table in a separate pane. The user chooses continuous break, continuous retracement, flip break, flip retracement, divergence, or hidden d

Indicator v6 Oscillators & momentumDivergence
Updated 1 year ago · MPL-2.0 GitHub repository of Momentum Setup - RSI Directional Momentum Scanner

Tables-001

by ricardosantos79
261 stars

This indicator builds a TradingView table in a separate pane and fills its cells with fixed placeholder text according to whether each row and column index is even or odd. Users set the table position, the number of rows and columns, and the background, frame,

Indicator v4 Screeners & dashboards
Updated 4 years ago · None stated GitHub repository of Tables-001
257 stars

Donald SPX - Options Trading is an indicator designed to assist SPX index option traders by tracking session benchmarks and multi-timeframe moving average data. It calculates a 200-period weighted moving average (WMA) and requests multi-timeframe bar data from

Indicator v5 Moving averagesScreeners & dashboards Repaints
Updated 6 weeks ago · None stated GitHub repository of Donald SPX - Options Trading

Index Member Distribution

by TradersPost
218 stars

Calculates and plots a weighted histogram of constituent returns for major market indices (NDX, SPX, DJIA, and RUT) in a separate pane. Each histogram bin reflects the summed weights of members within that percentage return bracket. The script renders vertical

Indicator v6 Screeners & dashboards
Updated 3 months ago · None stated GitHub repository of Index Member Distribution

KamaFama

by Mastaaa1987
141 stars

KamaFama is an indicator that translates a Freqtrade trading strategy into Pine Script for visualization. It combines Kaufman Adaptive Moving Average (KAMA), MAMA/FAMA calculations derived via Hilbert Transform, Williams %R, and correlation trend filters to ev

Indicator v6 Moving averagesOscillators & momentum
Updated 6 weeks ago · MIT GitHub repository of KamaFama

More indicators

Trade Your Charts With a Regulated Broker

Compare brokers that connect to TradingView, with spreads, minimum deposits and leverage side by side.

Compare brokers