@ Wei Jiang
First of all welcome.
So in no particular order..
Yes, after market close is identical to 'before_trading_start'. Any code placed in that method will run after all data has been updated from the previous day. The data is also adjusted for any splits that may have occurred. Also, the 'before_trading_start' method gets allotted a bit more compute time than any scheduled or 'handle_data" methods. Part of the reason for this is that the later tasks all need to happen within one bar, or minute, to be valid. The 'before_trading_start' method doesn't need to process within a 1 minute bar (it's before trading).
Anything you want to run after market close should be in 'before_trading_start'. You can use the pipeline structures (eg built in methods and filters) to get any of the data you need to feed your buy/sell logic. You aren't required to use pipeline. You could use the 'get_fundamentals" or 'get_history' methods. However, the pipeline approach optimizes the data fetches (runs faster) and gives you a lot of built methods to easily manipulate the results. Stick with pipeline unless there is some compelling reason not to.
The one comment you made "use make_pipeline to select candidate stocks to trade but not generating and saving parameters?" isn't entirely true. You can filter stocks within the pipeline paradigm but that is not required. The real beauty of using the pipeline approach is that it returns a simple powerful Pandas Dataframe of all the data or calculated data you want returned. The rows are indexed by security. The columns are whatever you specify when creating your pipe. This dataframe also has access to all the convenient Dataframe methods.
One caution. You wrote *'So it needs to save the parameters to be used in the next trading day, and keeps updating each day (after market close) * . Don't EVER save price or volume related data across trading days. Data is good for the day only. Any stock splits (which happen more than you would expect) won't be accounted for in saved data. The pipeline output, however, always accounts for stock splits.