[{"data":1,"prerenderedAt":611},["ShallowReactive",2],{"navigation_docs_en":3,"-en-dev-plugins":160,"-en-dev-plugins-surround":606},[4,25,87,121,136],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fen\u002Fgetting-started","en\u002F1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fen\u002Fgetting-started\u002Fintroduction","en\u002F1.getting-started\u002F1.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fen\u002Fgetting-started\u002Finstallation","en\u002F1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"First Launch","\u002Fen\u002Fgetting-started\u002Ffirst-launch","en\u002F1.getting-started\u002F3.first-launch","i-lucide-rocket",{"title":26,"icon":6,"path":27,"stem":28,"children":29,"page":6},"User Guide","\u002Fen\u002Fguide","en\u002F2.guide",[30,57,62,67,72,77,82],{"title":31,"path":32,"stem":33,"children":34},"File Import","\u002Fen\u002Fguide\u002Fimport","en\u002F2.guide\u002F1.import\u002Findex",[35,36,41,45,49,53],{"title":31,"path":32,"stem":33},{"title":37,"path":38,"stem":39,"icon":40},"MetaTrader 5","\u002Fen\u002Fguide\u002Fimport\u002Fmt5","en\u002F2.guide\u002F1.import\u002F1.mt5","i-lucide-file-spreadsheet",{"title":42,"path":43,"stem":44,"icon":40},"NinjaTrader 8","\u002Fen\u002Fguide\u002Fimport\u002Fninja-trader","en\u002F2.guide\u002F1.import\u002F2.ninja-trader",{"title":46,"path":47,"stem":48,"icon":40},"Interactive Brokers","\u002Fen\u002Fguide\u002Fimport\u002Finteractive-brokers","en\u002F2.guide\u002F1.import\u002F3.interactive-brokers",{"title":50,"path":51,"stem":52,"icon":40},"Quantower","\u002Fen\u002Fguide\u002Fimport\u002Fquantower","en\u002F2.guide\u002F1.import\u002F4.quantower",{"title":54,"path":55,"stem":56,"icon":40},"Standard CSV format","\u002Fen\u002Fguide\u002Fimport\u002Fstandard-csv","en\u002F2.guide\u002F1.import\u002F5.standard-csv",{"title":58,"path":59,"stem":60,"icon":61},"Dashboard and metrics","\u002Fen\u002Fguide\u002Fdashboard","en\u002F2.guide\u002F2.dashboard","i-lucide-chart-line",{"title":63,"path":64,"stem":65,"icon":66},"Calendar","\u002Fen\u002Fguide\u002Fcalendar","en\u002F2.guide\u002F3.calendar","i-lucide-calendar",{"title":68,"path":69,"stem":70,"icon":71},"Daily view","\u002Fen\u002Fguide\u002Fdaily-view","en\u002F2.guide\u002F4.daily-view","i-lucide-calendar-days",{"title":73,"path":74,"stem":75,"icon":76},"Trades","\u002Fen\u002Fguide\u002Ftrades","en\u002F2.guide\u002F5.trades","i-lucide-table",{"title":78,"path":79,"stem":80,"icon":81},"Notes panel","\u002Fen\u002Fguide\u002Fnotes","en\u002F2.guide\u002F6.notes","i-lucide-pen-tool",{"title":83,"path":84,"stem":85,"icon":86},"Tag system","\u002Fen\u002Fguide\u002Ftags","en\u002F2.guide\u002F7.tags","i-lucide-tag",{"title":88,"icon":6,"path":89,"stem":90,"children":91,"page":6},"Settings","\u002Fen\u002Fsettings","en\u002F3.settings",[92,97,102,106,111,116],{"title":93,"path":94,"stem":95,"icon":96},"Accounts","\u002Fen\u002Fsettings\u002Faccounts","en\u002F3.settings\u002F1.accounts","i-lucide-users",{"title":98,"path":99,"stem":100,"icon":101},"Symbols","\u002Fen\u002Fsettings\u002Fsymbols","en\u002F3.settings\u002F2.symbols","i-lucide-chart-candlestick",{"title":103,"path":104,"stem":105,"icon":86},"Tags","\u002Fen\u002Fsettings\u002Ftags","en\u002F3.settings\u002F3.tags",{"title":107,"path":108,"stem":109,"icon":110},"Backup","\u002Fen\u002Fsettings\u002Fbackups","en\u002F3.settings\u002F4.backups","i-lucide-database-backup",{"title":112,"path":113,"stem":114,"icon":115},"Plugins","\u002Fen\u002Fsettings\u002Fplugins","en\u002F3.settings\u002F6.plugins","i-lucide-puzzle",{"title":117,"path":118,"stem":119,"icon":120},"Options","\u002Fen\u002Fsettings\u002Foptions","en\u002F3.settings\u002F7.options","i-lucide-cog",{"title":122,"icon":6,"path":123,"stem":124,"children":125,"page":6},"Advanced","\u002Fen\u002Fadvanced","en\u002F4.advanced",[126,131],{"title":127,"path":128,"stem":129,"icon":130},"Configuration","\u002Fen\u002Fadvanced\u002Fconfiguration","en\u002F4.advanced\u002F1.configuration","i-lucide-settings",{"title":132,"path":133,"stem":134,"icon":135},"FAQ","\u002Fen\u002Fadvanced\u002Ffaq","en\u002F4.advanced\u002F3.faq","i-lucide-circle-help",{"title":137,"icon":138,"path":139,"stem":140,"children":141,"page":6},"Developer","i-lucide-code","\u002Fen\u002Fdev","en\u002F5.dev",[142,147,152,155],{"title":143,"path":144,"stem":145,"icon":146},"Technical reference","\u002Fen\u002Fdev\u002Ftechnical-reference","en\u002F5.dev\u002F1.technical-reference","i-lucide-server",{"title":148,"path":149,"stem":150,"icon":151},"External storage","\u002Fen\u002Fdev\u002Fexternal-storage","en\u002F5.dev\u002F2.external-storage","i-lucide-hard-drive",{"title":112,"path":153,"stem":154,"icon":115},"\u002Fen\u002Fdev\u002Fplugins","en\u002F5.dev\u002F3.plugins",{"title":156,"path":157,"stem":158,"icon":159},"Trade chart","\u002Fen\u002Fdev\u002Ftrade-chart","en\u002F5.dev\u002F4.trade-chart","i-lucide-candlestick-chart",{"id":161,"title":112,"body":162,"description":597,"extension":598,"links":599,"meta":600,"navigation":601,"path":153,"seo":602,"stem":154,"__hash__":605},"docs_en\u002Fen\u002F5.dev\u002F3.plugins.md",{"type":163,"value":164,"toc":587},"minimark",[165,183,188,198,202,209,250,253,329,333,339,405,409,412,443,447,473,485,489,496,549,553,556,576,580,583],[166,167,168,169,173,174,178,179,182],"p",{},"PnlTracker has a plugin system that allows you to extend its features ",[170,171,172],"strong",{},"without modifying the application's source code",". Plugins are developed in the ",[175,176,177],"code",{},"plugins-dev\u002F"," folder and compiled into ",[175,180,181],{},".zip"," format to be imported into the application. This is very convenient for adding custom features while keeping a clean codebase.",[184,185,187],"h2",{"id":186},"prerequisites","Prerequisites",[189,190,191,195],"ul",{},[192,193,194],"li",{},"Node.js ≥ 20",[192,196,197],{},"pnpm installed",[184,199,201],{"id":200},"compile-a-plugin","Compile a plugin",[166,203,204,205,208],{},"Replace ",[175,206,207],{},"hello-plugin"," with your plugin's name:",[210,211,216],"pre",{"className":212,"code":213,"language":214,"meta":215,"style":215},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","PLUGIN=hello-plugin npx vite build --config plugins-dev\u002Fvite.config.plugin.ts\n","bash","",[175,217,218],{"__ignoreMap":215},[219,220,223,227,231,234,238,241,244,247],"span",{"class":221,"line":222},"line",1,[219,224,226],{"class":225},"sTEyZ","PLUGIN",[219,228,230],{"class":229},"sMK4o","=",[219,232,207],{"class":233},"sfazB",[219,235,237],{"class":236},"sBMFI"," npx",[219,239,240],{"class":233}," vite",[219,242,243],{"class":233}," build",[219,245,246],{"class":233}," --config",[219,248,249],{"class":233}," plugins-dev\u002Fvite.config.plugin.ts\n",[166,251,252],{},"Examples with included plugins:",[210,254,256],{"className":212,"code":255,"language":214,"meta":215,"style":215},"PLUGIN=trade-stats-plugin npx vite build --config plugins-dev\u002Fvite.config.plugin.ts\n\nPLUGIN=file-processor-plugin npx vite build --config plugins-dev\u002Fvite.config.plugin.ts\n\nPLUGIN=instrument-type-fixer npx vite build --config plugins-dev\u002Fvite.config.plugin.ts\n",[175,257,258,277,284,304,309],{"__ignoreMap":215},[219,259,260,262,264,267,269,271,273,275],{"class":221,"line":222},[219,261,226],{"class":225},[219,263,230],{"class":229},[219,265,266],{"class":233},"trade-stats-plugin",[219,268,237],{"class":236},[219,270,240],{"class":233},[219,272,243],{"class":233},[219,274,246],{"class":233},[219,276,249],{"class":233},[219,278,280],{"class":221,"line":279},2,[219,281,283],{"emptyLinePlaceholder":282},true,"\n",[219,285,287,289,291,294,296,298,300,302],{"class":221,"line":286},3,[219,288,226],{"class":225},[219,290,230],{"class":229},[219,292,293],{"class":233},"file-processor-plugin",[219,295,237],{"class":236},[219,297,240],{"class":233},[219,299,243],{"class":233},[219,301,246],{"class":233},[219,303,249],{"class":233},[219,305,307],{"class":221,"line":306},4,[219,308,283],{"emptyLinePlaceholder":282},[219,310,312,314,316,319,321,323,325,327],{"class":221,"line":311},5,[219,313,226],{"class":225},[219,315,230],{"class":229},[219,317,318],{"class":233},"instrument-type-fixer",[219,320,237],{"class":236},[219,322,240],{"class":233},[219,324,243],{"class":233},[219,326,246],{"class":233},[219,328,249],{"class":233},[184,330,332],{"id":331},"included-examples","Included examples",[166,334,335,336,338],{},"The ",[175,337,177],{}," folder contains several example plugins you can use as a starting point:",[340,341,342,355],"table",{},[343,344,345],"thead",{},[346,347,348,352],"tr",{},[349,350,351],"th",{},"Plugin",[349,353,354],{},"Description",[356,357,358,368,377,386,395],"tbody",{},[346,359,360,365],{},[361,362,363],"td",{},[175,364,207],{},[361,366,367],{},"Demonstration plugin showing modals, toasts, and page slots on the dashboard, trades, calendar, and daily views.",[346,369,370,374],{},[361,371,372],{},[175,373,266],{},[361,375,376],{},"Displays a quick summary of recent trading performance in a modal.",[346,378,379,383],{},[361,380,381],{},[175,382,293],{},[361,384,385],{},"Upload, process, and download files directly in the browser.",[346,387,388,392],{},[361,389,390],{},[175,391,318],{},[361,393,394],{},"Bulk-fix the instrument type for all trades of an account.",[346,396,397,402],{},[361,398,399],{},[175,400,401],{},"tradingview-converter",[361,403,404],{},"Converts TradingView exports (backtests) to PnlTracker's Standard CSV format.",[184,406,408],{"id":407},"compile-a-release-version","Compile a release version",[166,410,411],{},"The release version is optimized and minified. It is intended for distribution.",[210,413,415],{"className":212,"code":414,"language":214,"meta":215,"style":215},"PLUGIN=hello-plugin RELEASE=true npx vite build --config plugins-dev\u002Fvite.config.plugin.ts\n",[175,416,417],{"__ignoreMap":215},[219,418,419,421,423,425,428,430,433,435,437,439,441],{"class":221,"line":222},[219,420,226],{"class":225},[219,422,230],{"class":229},[219,424,207],{"class":233},[219,426,427],{"class":225}," RELEASE",[219,429,230],{"class":229},[219,431,432],{"class":233},"true",[219,434,237],{"class":236},[219,436,240],{"class":233},[219,438,243],{"class":233},[219,440,246],{"class":233},[219,442,249],{"class":233},[184,444,446],{"id":445},"installation-in-pnltracker","Installation in PnlTracker",[448,449,450,457,467],"ol",{},[192,451,452,453,456],{},"Go to ",[170,454,455],{},"Settings > Plugins",".",[192,458,459,460,463,464,466],{},"Click ",[170,461,462],{},"Import plugin"," and select the generated ",[175,465,181],{}," file.",[192,468,469,470,456],{},"Enable the plugin, then click ",[170,471,472],{},"Run",[474,475,477,478,480,481,484],"callout",{"icon":476},"i-lucide-info","The complete source code of the plugin system is available in the ",[175,479,177],{}," folder. See the ",[175,482,483],{},"README"," files and examples to create your own extensions.",[184,486,488],{"id":487},"page-slots","Page slots",[166,490,491,492,495],{},"Plugins can inject content into existing pages via ",[170,493,494],{},"slots",". Each slot is identified by an ID. Available slots:",[340,497,498,510],{},[343,499,500],{},[346,501,502,505,508],{},[349,503,504],{},"Slot",[349,506,507],{},"Page",[349,509,354],{},[356,511,512,524,536],{},[346,513,514,519,521],{},[361,515,516],{},[175,517,518],{},"page-daily",[361,520,68],{},[361,522,523],{},"Injection into the Daily page",[346,525,526,531,533],{},[361,527,528],{},[175,529,530],{},"page-calendar",[361,532,63],{},[361,534,535],{},"Injection into the Calendar page",[346,537,538,543,546],{},[361,539,540],{},[175,541,542],{},"trade-filters",[361,544,545],{},"Trade filters",[361,547,548],{},"Injection into the TradeFilters component",[184,550,552],{"id":551},"ui-components","UI components",[166,554,555],{},"Plugins have access to ready-to-use UI components:",[189,557,558,564,570],{},[192,559,560,563],{},[175,561,562],{},"UIButton",": button",[192,565,566,569],{},[175,567,568],{},"UIInput",": input field",[192,571,572,575],{},[175,573,574],{},"UISelect",": dropdown select",[184,577,579],{"id":578},"sdk","SDK",[166,581,582],{},"The SDK exposes calculation functions (P&L, APPT, winrate, profit factor, recovery factor, Sharpe ratio, etc.), API access (get\u002Fpost\u002Fput\u002Fdelete), toast notifications, theme detection, and i18n locale.",[584,585,586],"style",{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":215,"searchDepth":279,"depth":279,"links":588},[589,590,591,592,593,594,595,596],{"id":186,"depth":279,"text":187},{"id":200,"depth":279,"text":201},{"id":331,"depth":279,"text":332},{"id":407,"depth":279,"text":408},{"id":445,"depth":279,"text":446},{"id":487,"depth":279,"text":488},{"id":551,"depth":279,"text":552},{"id":578,"depth":279,"text":579},"Plugin compilation and packaging guide for PnlTracker.","md",null,{},{"icon":115},{"title":603,"description":604},"Developer plugins - PnlTracker","Compile and package your custom plugins for PnlTracker.","48UHZsHN_m-OnHxAw1MhdZX9aG1Ay0nr3boK4iGdj7E",[607,609],{"title":148,"path":149,"stem":150,"description":608,"icon":151,"children":-1},"Configuration of the optional external storage server for PnlTracker.",{"title":156,"path":157,"stem":158,"description":610,"icon":159,"children":-1},"How the trade chart works in PnlTracker - Polygon integration, symbol mapping, caching, and rate limiting.",1785435086057]