The framework has two types of storage: "private" and "category".
Default to category settings unless you have a specific reason not to. Private settings only persist when the widget is loaded into the MyTrader page container; if the user opens your widget as a floating dialog or pop-up window, SavePrivateSettings() silently discards the data and your widget will appear not to remember anything.
Use private settings only when you specifically want each instance of the widget (e.g. two copies of the same widget on different pages) to have independent state, and you know the widget will only ever run inside the page container.
Use category settings for almost everything else: user preferences, filter selections, last-selected values, UI mode, etc. They work in every context and sync automatically across instances.
"Category" settings are data which is shared by all copies of your widget, script, or UDIX.
"Private" settings only apply to widgets, not to a script or UDIX, and only apply to widgets which have been loaded into the MyTrader page container, not to a widget which has been opened in a temporary floating or pop-up window.
You can think of "private" settings as "instance" settings. If a widget is loaded into the page container then it may be loaded and unloaded as the user switches between pages, or when the user logs out and logs back in again, but it remains the same instance of that widget. Whereas the same type of widget loaded into a new or temporary window is a different instance in each temporary window.
Each time a script or UDIX is loaded, it is treated as a new instance of that script/UDIX. Therefore, scripts and UDIXes don't have private settings.