Пример #1
0
 def test_submit_order(self):
     p = Portfolio(
         buy_commission_rate=0.001,
         sell_commission_rate=0.0015, min_commission=5.0, round_lot=100)
     self.assertEqual((-10010.0, 10.0, 1000),
                      p._submit_order(side="buy", price=10.0, volume=1000))
     p.update_before_trade(divide_rate=1.0)
     self.assertEqual((5491.75, 11, 500),
                      p._submit_order(side="sell", price=11, volume=500))
     self.assertEqual(8.25, p.transaction_cost)
     self.assertEqual(9.0365, p.avg_price)
     self.assertEqual(500, p.volume)
     self.assertEqual(18.25, p.all_transaction_cost)
Пример #2
0
 def test_sell_all_stock(self):
     p = Portfolio(
         buy_commission_rate=0.001,
         sell_commission_rate=0.0015, min_commission=5.0, round_lot=100)
     # sellable==0 , 无可卖
     self.assertEqual((0.0, 10, 0), p._sell_all_stock(price=10))
     self.assertEqual((-10010.0, 10.0, 1000),
                      p._submit_order(side="buy", price=10.0, volume=1000))
     p.update_before_trade(divide_rate=1.0)
     self.assertEqual((10983.5, 11, 1000), p._sell_all_stock(price=11))
     self.assertEqual(16.5, p.transaction_cost)
     self.assertEqual(0, p.avg_price)
     self.assertEqual(0, p.volume)
     self.assertEqual(26.5, p.all_transaction_cost)
Пример #3
0
    def test_order_basic(self):
        p = Portfolio(
            buy_commission_rate=0.001,
            sell_commission_rate=0.0015, min_commission=5.0,
            round_lot=100)
        p.update_before_trade(divide_rate=1.0)
        self.assertEqual((-10010.0, 10.0, 1000),
                         p._submit_order(side="buy", price=10.0, volume=1000))
        p.update_after_trade(close_price=10.0, cash_change=-10010,
                             pre_portfolio_value=30000.0)
        # test update_after_trade
        self.assertEqual(-10.0, p.daily_pnl)
        self.assertEqual(10000.0, p.market_value)
        self.assertEqual(-10.0, p.pnl)
        self.assertEqual(0.0, round(p.daily_return, 3))
        p.update_before_trade(divide_rate=1.0)

        # sell && buy
        # pecent = 0
        self.assertEqual((10983.5, 11, 1000),
                         p.order_target_percent(
                             percent=0, price=11,
                             pre_portfolio_value=29990.0,
                             current_cash=19990))
        self.assertEqual(16.5, p.transaction_cost)
        self.assertEqual(0, p.avg_price)
        self.assertEqual(0, p.volume)
        self.assertEqual(26.5, p.all_transaction_cost)
        # percent 0.5, 增仓
        self.assertEqual((-14014.0, 10, 1400),
                         p.order_target_percent(percent=0.5, price=10,
                                                pre_portfolio_value=29990.0,
                                                current_cash=30973.5))
        self.assertEqual(30.5, p.transaction_cost)
        self.assertEqual(10.01, p.avg_price)
        self.assertEqual(1400, p.volume)
        self.assertEqual(40.5, p.all_transaction_cost)
        # test update after trade
        p.update_after_trade(close_price=10.0, cash_change=10983.5-14014.0,
                             pre_portfolio_value=29990.0)
        self.assertEqual(969.5, p.daily_pnl)
        self.assertEqual(14000.0, p.market_value)
        self.assertEqual(959.5, p.pnl)
        self.assertEqual(0.03233, round(p.daily_return, 5))
        # next day, buy_hold, then sell
        p.update_before_trade(divide_rate=1.0)
        # percent 0.452, 保持不变
        p.order_target_percent(percent=0.452, price=10,
                               pre_portfolio_value=29990.0)
        self.assertEqual(0, p.daily_pnl)
        self.assertEqual(14000.0, p.market_value)
        self.assertEqual(959.5, p.pnl)
        self.assertEqual(0.0, round(p.daily_return, 5))
        p.update_after_trade(close_price=10.0, cash_change=0.0,
                             pre_portfolio_value=29990.0)
        # next day
        p.update_before_trade(divide_rate=1.0)
        # percent 0.35, 减仓700
        p.order_target_percent(percent=0.35, price=10,
                               pre_portfolio_value=20000.0)
        self.assertEqual(10.5, p.transaction_cost)
        self.assertEqual(10.035, p.avg_price)
        self.assertEqual(700, p.volume)
        self.assertEqual(51, p.all_transaction_cost)