def main():
    findbillion_database = class_findbillion_database(dataset_path)

    #
    est_eps = class_est_eps(findbillion_database)
    est_yield = class_est_yield(findbillion_database)

    #-----------------------------------------
    # ground truth of dividend_cash
    fs_dividendpolicy = class_fs_dividendpolicy(findbillion_database)
    dividend_cash = fs_dividendpolicy.get_Dividend_Cash(stockid, year_est)

    #-----------------------------------------
    # methed 1: average cash dividend
    dividend_cash_avg = est_yield.get_average_5y_cash_dividend(
        stockid, year_stat)

    error_method1 = (dividend_cash_avg - dividend_cash) / dividend_cash * 100

    print("Average cash dividend: ")
    print("cash dividend (true):       {:2.2f}".format(dividend_cash))
    print("cash dividend (predict):    {:2.2f}".format(dividend_cash_avg))
    print("error of predict: {:2.2f}%".format(error_method1))

    #--------------------------------------------------
    # methed 2: average dividend payout ratio
    print("----------------------------------------")
    eps_est_last4q = est_eps.est_last_4q_eps_by_netincome_ratio(
        stockid, year_est, 4)
    est_dividend_cash = est_yield.est_cash_dividend_by_dividend_payout_ratio(
        stockid, year_stat, eps_est_last4q)

    error_method2 = (est_dividend_cash - dividend_cash) / dividend_cash * 100

    print("Average cash dividend payout ratio: ")
    print("cash dividend (true):       {:2.2f}".format(dividend_cash))
    print("cash dividend (predict):    {:2.2f}".format(est_dividend_cash))
    print("error of predict: {:2.2f}%".format(error_method2))

    #--------------------------------------------------
    # methed 3: estimate dividend payout ratio by linear regression
    print("----------------------------------------")
    eps_est = est_eps.est_last_4q_eps_by_netincome_ratio(stockid, year_est, 4)
    est_dividend_cash = est_yield.est_cash_dividend_by_linear_regression_5y(
        stockid, year_stat, eps_est)

    error_method3 = (est_dividend_cash - dividend_cash) / dividend_cash * 100

    print("Estimate cash dividend payout ratio by linear regression: ")
    print("cash dividend (true):       {:2.2f}".format(dividend_cash))
    print("cash dividend (predict):    {:2.2f}".format(est_dividend_cash))
    print("error of predict: {:2.2f}%".format(error_method3))
def main():
    year = 2019
    quarter = 4
    stockid = 2330

    findbillion_database = class_findbillion_database(dataset_path)
    financial_ratio = class_financial_ratio(findbillion_database)
    est_eps = class_est_eps(findbillion_database)
    eps_true = financial_ratio.get_eps_last_4q(stockid, year, quarter)

    eps_pred = est_eps.est_last_4q_eps_by_netincome_ratio(
        stockid, year, quarter)

    err_percentage = (eps_pred - eps_true) / eps_true * 100

    print("eps (true):       {:2.2f}".format(eps_true))
    print("eps (predict):    {:2.2f}".format(eps_pred))
    print("error of predict: {:2.2f}%".format(err_percentage))
def main():
    findbillion_database = class_findbillion_database(dataset_path)

    for year in year_list:
        print('----------------------------')
        print(year)

        # eps ground truth
        financial_ratio = class_financial_ratio(findbillion_database)
        eps_true = financial_ratio.get_eps_last_4q(stockid, year, quarter)

        # estimated eps
        est_eps = class_est_eps(findbillion_database)
        eps_pred = est_eps.est_last_4q_eps_by_netincome_ratio(
            stockid, year, quarter)

        # error
        err_percentage = (eps_pred - eps_true) / eps_true * 100

        print("eps (true):       {:2.2f}".format(eps_true))
        print("eps (predict):    {:2.2f}".format(eps_pred))
        print("error of predict: {:2.2f}%".format(err_percentage))
dataset_path = r'../../data'
save_path = r'../../~result'
num_cpu = 4
debug = 0

#year_stat_list = [2012, 2013, 2014, 2015, 2016, 2017]  # 2012~2017
#year_est_list =  [2013, 2014, 2015, 2016, 2017, 2018]  # 2013~2018
#hold_year = 1

year_stat_list = [2012, 2013, 2014, 2015]  # 2012~2017
year_est_list = [2013, 2014, 2015, 2016]  # 2013~2018
hold_year = 3
num_stock_sel = 10

findbillion_database = class_findbillion_database(dataset_path)
yield_buyin = 0.0625
yield_buyin_target = 0.05

np.random.seed(7)


def processing_roe_15pa(stockid, year_stat):
    print(format(stockid) + '...')

    financial_ratio = class_financial_ratio(findbillion_database)
    roe_avg = financial_ratio.get_ROE_avg(stockid, year_stat, 4, 5)
    if roe_avg is not None and roe_avg > 0.15:
        return stockid
    else:
        return None