class_docstr: An object to perform a Monte Carlo run/simulation for finding
  optimised financial portfolios.
  
  Inherits from `MonteCarlo`.
class_docstr_tok: ["An","object","to","perform","a","Monte","Carlo","run\/simulation","for","finding","optimised","financial","portfolios",".","Inherits","from","`","MonteCarlo","`","."]
docstr: Performs a Monte Carlo run and gets a list of random portfolios
  and their corresponding quantities (Expected Return, Volatility,
  Sharpe Ratio).
  
  :return:
      :df_weights: DataFrame, holds the weights for each randomly generated portfolio
      :df_results: DataFrame, holds Expected Annualised Return, Volatility and
          Sharpe Ratio of each randomly generated portfolio
docstr_tok: ["Performs","a","Monte","Carlo","run","and","gets","a","list","of","random","portfolios","and","their","corresponding","quantities","(","Expected","Return",",","Volatility",",","Sharpe","Ratio",")",".",":","return",":",":","df_weights",":","DataFrame",",","holds","the","weights","for","each","randomly","generated","portfolio",":","df_results",":","DataFrame",",","holds","Expected","Annualised","Return",",","Volatility","and","Sharpe","Ratio","of","each","randomly","generated","portfolio"]
code: def _random_portfolios(self) -> Tuple[pd.DataFrame, pd.DataFrame]:
      """Performs a Monte Carlo run and gets a list of random portfolios
      and their corresponding quantities (Expected Return, Volatility,
      Sharpe Ratio).
  
      :return:
          :df_weights: DataFrame, holds the weights for each randomly generated portfolio
          :df_results: DataFrame, holds Expected Annualised Return, Volatility and
              Sharpe Ratio of each randomly generated portfolio
      """
      # run Monte Carlo to get random weights and corresponding quantities
      res = self.run(self._random_weights)
      # convert to pandas.DataFrame:
      weights_columns = list(self.returns.columns)
      result_columns = ["Expected Return", "Volatility", "Sharpe Ratio"]
      df_weights = pd.DataFrame(
          data=res[:, 0].tolist(), columns=weights_columns
      ).astype(np.float64)
      df_results = pd.DataFrame(
          data=res[:, 1].tolist(), columns=result_columns
      ).astype(np.float64)
      return (df_weights, df_results)
  
file_path: FinQuant/finquant/monte_carlo.py
imports: from typing import Any, Callable, Dict, Optional, Tuple
  import matplotlib.pylab
  import numpy
  import pandas
  from finquant.data_types import FLOAT, INT
  from finquant.quants import annualised_portfolio_quantities
  from finquant.type_utilities import type_validation
label_desc: Use image node_id 3 for calling the MonteCarloOpt obj's underlying member method code with example usage: obj._random_portfolios() and returns: df_weights,  df_results