Esempio n. 1
0
def test_get_stock_price(data_loader):
    obj = strategies.BackTest(
        stock_id="0056",
        start_date="2018-01-01",
        end_date="2019-01-01",
        trader_fund=500000.0,
        fee=0.001425,
        data_loader=data_loader,
        # strategy=ContinueHolding,
    )
    assert isinstance(obj.stock_price, pd.DataFrame)
Esempio n. 2
0
def test_bias(data_loader):
    obj = strategies.BackTest(
        stock_id="0056",
        start_date="2018-01-01",
        end_date="2019-01-01",
        trader_fund=500000.0,
        fee=0.001425,
        strategy=strategies.Bias,
        data_loader=data_loader,
    )
    obj.simulate()

    assert int(obj.final_stats.MeanProfit) == 984
    assert int(obj.final_stats.MaxLoss) == -863
    assert int(obj.final_stats.FinalProfit) == 2845

    assert obj.final_stats["MeanProfitPer"] == 0.20
    assert obj.final_stats["FinalProfitPer"] == 0.57
    assert obj.final_stats["MaxLossPer"] == -0.17

    assert obj.trade_detail.to_dict("r")[1] == {
        "EverytimeProfit": 0.0,
        "RealizedProfit": 0.0,
        "UnrealizedProfit": 0.0,
        "board_lot": 1000.0,
        "date": "2018-02-05",
        "hold_cost": 0.0,
        "hold_volume": 0.0,
        "signal": 0.0,
        "stock_id": "0056",
        "trade_price": 26.1,
        "trader_fund": 500000.0,
        "EverytimeTotalProfit": 500000.0,
        "CashEarningsDistribution": 0.0,
        "StockEarningsDistribution": 0.0,
    }

    assert obj.compare_market_detail.to_dict("r")[-1] == {
        "CumDailyReturn": -0.39843,
        "CumTaiExDailyReturn": -0.0963,
        "date": "2018-12-28",
    }

    assert obj.compare_market_stats["AnnualTaiexReturnPer"] == -9.6
    assert obj.compare_market_stats["AnnualReturnPer"] == 0.57
Esempio n. 3
0
def test_continue_holding(data_loader):
    obj = strategies.BackTest(
        stock_id="0056",
        start_date="2018-01-01",
        end_date="2019-01-01",
        trader_fund=500000.0,
        fee=0.001425,
        strategy=strategies.ContinueHolding,
        data_loader=data_loader,
    )
    obj.simulate()

    assert int(obj.final_stats.MeanProfit) == 2810
    assert int(obj.final_stats.MaxLoss) == -9663
    assert int(obj.final_stats.FinalProfit) == 3407

    assert obj.final_stats["MeanProfitPer"] == 0.56
    assert obj.final_stats["FinalProfitPer"] == 0.68
    assert obj.final_stats["MaxLossPer"] == -1.93

    assert obj.trade_detail.to_dict("r")[1] == {
        "stock_id": "0056",
        "date": "2018-01-03",
        "EverytimeProfit": -96.83,
        "RealizedProfit": 0.0,
        "UnrealizedProfit": -96.83,
        "board_lot": 1000,
        "hold_cost": 25.18583875,
        "hold_volume": 1000,
        "signal": 1,
        "trade_price": 25.15,
        "trader_fund": 474814.16125,
        "EverytimeTotalProfit": 474717.33125,
        "CashEarningsDistribution": 0.0,
        "StockEarningsDistribution": 0.0,
    }

    assert obj.compare_market_detail.to_dict("r")[-1] == {
        "CumDailyReturn": -0.61003,
        "CumTaiExDailyReturn": -0.0963,
        "date": "2018-12-28",
    }
    assert obj.compare_market_stats["AnnualTaiexReturnPer"] == -9.6
    assert obj.compare_market_stats["AnnualReturnPer"] == 0.68
Esempio n. 4
0
def test_max_min_period_bias(data_loader):
    obj = strategies.BackTest(
        stock_id="0056",
        start_date="2018-01-01",
        end_date="2019-01-01",
        trader_fund=500000.0,
        fee=0.001425,
        strategy=strategies.MaxMinPeriodBias,
        data_loader=data_loader,
    )
    obj.simulate()

    assert int(obj.final_stats.MeanProfit) == 0
    assert int(obj.final_stats.MaxLoss) == 0
    assert int(obj.final_stats.FinalProfit) == 0

    assert obj.final_stats["MeanProfitPer"] == 0
    assert obj.final_stats["FinalProfitPer"] == 0
    assert obj.final_stats["MaxLossPer"] == 0
Esempio n. 5
0
def test_ma_crossover(data_loader):
    obj = strategies.BackTest(
        stock_id="0056",
        start_date="2018-01-01",
        end_date="2019-01-01",
        trader_fund=500000.0,
        fee=0.001425,
        strategy=strategies.MaCrossOver,
        data_loader=data_loader,
    )
    obj.simulate()

    assert int(obj.final_stats.MeanProfit) == -381
    assert int(obj.final_stats.MaxLoss) == -1230
    assert int(obj.final_stats.FinalProfit) == -1230

    assert obj.final_stats["MeanProfitPer"] == -0.08
    assert obj.final_stats["FinalProfitPer"] == -0.25
    assert obj.final_stats["MaxLossPer"] == -0.25
Esempio n. 6
0
def test_short_sale_margin_purchase_ratio(data_loader):
    obj = strategies.BackTest(
        stock_id="0056",
        start_date="2018-01-01",
        end_date="2019-01-01",
        trader_fund=500000.0,
        fee=0.001425,
        strategy=strategies.ShortSaleMarginPurchaseRatio,
        data_loader=data_loader,
    )
    obj.simulate()

    assert int(obj.final_stats.MeanProfit) == 12946
    assert int(obj.final_stats.MaxLoss) == -14706
    assert int(obj.final_stats.FinalProfit) == 22576

    assert obj.final_stats["MeanProfitPer"] == 2.59
    assert obj.final_stats["FinalProfitPer"] == 4.52
    assert obj.final_stats["MaxLossPer"] == -2.94
Esempio n. 7
0
def test_institutional_investors_follower(data_loader):
    obj = strategies.BackTest(
        stock_id="0056",
        start_date="2018-01-01",
        end_date="2019-01-01",
        trader_fund=500000.0,
        fee=0.001425,
        strategy=strategies.InstitutionalInvestorsFollower,
        data_loader=data_loader,
    )
    obj.simulate()

    assert int(obj.final_stats.MeanProfit) == 6021
    assert int(obj.final_stats.MaxLoss) == -15410
    assert int(obj.final_stats.FinalProfit) == 10699

    assert obj.final_stats["MeanProfitPer"] == 1.2
    assert obj.final_stats["FinalProfitPer"] == 2.14
    assert obj.final_stats["MaxLossPer"] == -3.08
Esempio n. 8
0
def test_kd(data_loader):
    obj = strategies.BackTest(
        stock_id="0056",
        start_date="2018-01-01",
        end_date="2019-01-01",
        trader_fund=500000.0,
        fee=0.001425,
        strategy=strategies.Kd,
        data_loader=data_loader,
    )
    obj.simulate()

    assert int(obj.final_stats.MeanProfit) == 2356
    assert int(obj.final_stats.MaxLoss) == -1425
    assert int(obj.final_stats.FinalProfit) == 6196

    assert obj.final_stats["MeanProfitPer"] == 0.47
    assert obj.final_stats["FinalProfitPer"] == 1.24
    assert obj.final_stats["MaxLossPer"] == -0.29
Esempio n. 9
0
def test_naive_kd(data_loader):
    obj = strategies.BackTest(
        stock_id="0056",
        start_date="2018-01-01",
        end_date="2019-01-01",
        trader_fund=500000.0,
        fee=0.001425,
        strategy=strategies.NaiveKd,
        data_loader=data_loader,
    )
    obj.simulate()

    assert int(obj.final_stats.MeanProfit) == 5418
    assert int(obj.final_stats.MaxLoss) == -2094
    assert int(obj.final_stats.FinalProfit) == 15033

    assert obj.final_stats["MeanProfitPer"] == 1.08
    assert obj.final_stats["FinalProfitPer"] == 3.01
    assert obj.final_stats["MaxLossPer"] == -0.42
Esempio n. 10
0
def test_macd_crossover_add_strategy(data_loader):
    obj = strategies.BackTest(
        stock_id="0056",
        start_date="2018-01-01",
        end_date="2019-01-01",
        trader_fund=500000.0,
        fee=0.001425,
        # strategy=strategies.MacdCrossOver,
        data_loader=data_loader,
    )
    obj.add_strategy(strategies.MacdCrossOver)
    obj.simulate()

    assert int(obj.final_stats.MeanProfit) == 1347
    assert int(obj.final_stats.MaxLoss) == -397
    assert int(obj.final_stats.FinalProfit) == 3232

    assert obj.final_stats["MeanProfitPer"] == 0.27
    assert obj.final_stats["FinalProfitPer"] == 0.65
    assert obj.final_stats["MaxLossPer"] == -0.08
Esempio n. 11
0
def test_bias_add_strategy(data_loader):
    obj = strategies.BackTest(
        stock_id="0056",
        start_date="2018-01-01",
        end_date="2019-01-01",
        trader_fund=500000.0,
        fee=0.001425,
        # strategy=Bias,
        data_loader=data_loader,
    )
    obj.add_strategy(strategies.Bias)
    obj.simulate()

    assert int(obj.final_stats.MeanProfit) == 984
    assert int(obj.final_stats.MaxLoss) == -863
    assert int(obj.final_stats.FinalProfit) == 2845

    assert obj.final_stats["MeanProfitPer"] == 0.20
    assert obj.final_stats["FinalProfitPer"] == 0.57
    assert obj.final_stats["MaxLossPer"] == -0.17

    assert obj.trade_detail.to_dict("r")[1] == {
        "EverytimeProfit": 0.0,
        "RealizedProfit": 0.0,
        "UnrealizedProfit": 0.0,
        "board_lot": 1000.0,
        "date": "2018-02-05",
        "hold_cost": 0.0,
        "hold_volume": 0.0,
        "signal": 0.0,
        "stock_id": "0056",
        "trade_price": 26.1,
        "trader_fund": 500000.0,
        "EverytimeTotalProfit": 500000.0,
        "CashEarningsDistribution": 0.0,
        "StockEarningsDistribution": 0.0,
    }