Esempio n. 1
0
 def __compute_final_stats(self):
     self._final_stats["MeanProfit"] = np.mean(
         self._trade_detail["EverytimeProfit"])
     self._final_stats["MaxLoss"] = np.min(
         self._trade_detail["EverytimeProfit"])
     self._final_stats["FinalProfit"] = self._trade_detail[
         "EverytimeProfit"].values[-1]
     self._final_stats["MeanProfitPer"] = round(
         self._final_stats["MeanProfit"] / self.trader_fund * 100, 2)
     self._final_stats["FinalProfitPer"] = round(
         self._final_stats["FinalProfit"] / self.trader_fund * 100, 2)
     self._final_stats["MaxLossPer"] = round(
         self._final_stats["MaxLoss"] / self.trader_fund * 100, 2)
     self._final_stats["AnnualReturnPer"] = round(
         period_return2annual_return(
             self._final_stats["FinalProfitPer"] / 100,
             self._trade_period_years,
         ) * 100,
         2,
     )
     time_step_returns = (
         self._trade_detail["EverytimeProfit"] -
         self._trade_detail["EverytimeProfit"].shift(1)
     ) / (self._trade_detail["EverytimeProfit"].shift(1) + self.trader_fund)
     strategy_return = np.mean(time_step_returns)
     strategy_std = np.std(time_step_returns)
     self._final_stats["AnnualSharpRatio"] = calculate_sharp_ratio(
         strategy_return, strategy_std)
Esempio n. 2
0
    def __compute_compare_market(self):
        self._compare_market_detail = self._trade_detail[[
            "date", "EverytimeTotalProfit"
        ]].copy()
        self._compare_market_detail["CumDailyReturn"] = (
            np.log(self._compare_market_detail["EverytimeTotalProfit"]) -
            np.log(
                self._compare_market_detail["EverytimeTotalProfit"].shift(1))
        ).fillna(0)
        self._compare_market_detail["CumDailyReturn"] = round(
            self._compare_market_detail["CumDailyReturn"].cumsum(), 5)
        tai_ex = self.data_loader.get_data(
            dataset="TaiwanStockPrice",
            data_id="TAIEX",
            start_date=self.start_date,
            end_date=self.end_date,
        )[["date", "close"]]

        tai_ex["CumTaiExDailyReturn"] = (
            np.log(tai_ex["close"]) -
            np.log(tai_ex["close"].shift(1))).fillna(0)
        tai_ex["CumTaiExDailyReturn"] = round(
            tai_ex["CumTaiExDailyReturn"].cumsum(), 5)
        self._compare_market_detail = pd.merge(
            self._compare_market_detail,
            tai_ex[["date", "CumTaiExDailyReturn"]],
            on=["date"],
            how="left",
        )
        self._compare_market_detail = self._compare_market_detail.dropna()
        self._compare_market_stats = pd.Series()
        self._compare_market_stats["AnnualTaiexReturnPer"] = (
            period_return2annual_return(
                self._compare_market_detail["CumTaiExDailyReturn"].values[-1],
                self._trade_period_years,
            ) * 100)
        self._compare_market_stats["AnnualReturnPer"] = self._final_stats[
            "AnnualReturnPer"]
Esempio n. 3
0
def test_return2annual(period_return, period_years, expected):
    resp = period_return2annual_return(period_return, period_years)
    assert resp == expected