def setUpClass(cls): cls.events = Queue() cls.execution = IBExecutionHandler(cls.events, CONFIG) cls.future = FuturesContract('GC', exp_year=2016, exp_month=6) cls.stock = Stock('AAPL') while cls.execution.next_valid_order_id is -1: time.sleep(.1)
def add_stocks(self, code_list): """보유주식에 포함시킨다. :param code: :return: """ for code in code_list: self.보유주식[code] = Stock.get_instance(code)
def update_sell(self, stock: Stock, price_per_stock: int, amount: int, reason: str): """특정 주식을 매도했을때, 계좌정보를 업데이트 :param code: :param amount: :return: """ # stock 객체 업데이트 stock.trading_reason = reason stock.update_sell(price_per_stock, amount) if cfg_mgr.debug_mode(): pass # self.print_attr('SELL', stock.stock_name, stock.code, reason) # pdb.set_trace() # 계좌 정보 업데이트 self.예수금 += stock.매매금액 self.총평가금액 += stock.평가금액변동 self.총매입금액 += stock.매입금액변동 self.총최대매입금액 = max(self.총매입금액, self.총최대매입금액) self.추정자산 = self.예수금 + self.총평가금액 # 현금(예수금) + 주식(총평가금액) self.총누적손익 += stock.실현손익 self.총평가손익 = float(self.총평가금액 - self.총매입금액) # 보유한 주식의가치로 얻은 손익 self.총손익 = self.총평가손익 + self.총누적손익 # 개념상 손익 (현금의 손익 + 가치의 손익) try: self.총수익률 = self.총평가손익 / self.총매입금액 * 100 # 보유한 주식에 대한 총 수익률 except ZeroDivisionError as e: self.총수익률 = 0.0 self.총누적수익률 = float(self.총누적손익) / self.총최대매입금액 * 100 # 실현한 수익에 대한 총 수익률 self.sell_transaction(stock) if stock.보유수량 == 0: del self.보유주식[stock.code] else: self.보유주식[stock.code] = stock try: if cfg_mgr.debug_mode(): self.print_attr('SELL', stock.stock_name, stock.code, reason) # pdb.set_trace() except Exception: pdb.set_trace() print("Exception") return ""
def setUpClass(cls): cls.events = Queue() cls.start_date = dt.datetime(year=2015, month=12, day=1) cls.end_date = dt.datetime(year=2015, month=12, day=31) cls.products = [Stock('MSFT')] cls.data = StockBacktestDataHandler(cls.events, cls.products, cls.start_date, cls.end_date) cls.execution = StockBacktestExecutionHandler(cls.events) cls.strategy = BuyStrategy(cls.events, cls.data, cls.products) cls.backtest = StockBacktest(cls.events, cls.strategy, cls.data, cls.execution, cls.start_date, cls.end_date)
def update_buy(self, stock: Stock, price_per_stock: int, amount: int, reason: str): """특정 주식을 매수했을때, 계좌정보를 업데이트 :param code: :param price_per_stock: :param amount: :return: """ # stock 객체 업데이트 stock.trading_reason = reason stock.update_buy(price_per_stock, amount) if cfg_mgr.debug_mode(): pass # self.print_attr('BUY', stock.stock_name, stock.code, reason) # need to move to util/common pkg # pdb.set_trace() # 계좌 정보 업데이트 self.예수금 -= stock.매매금액 self.총평가금액 += stock.평가금액변동 self.총매입금액 += stock.매입금액변동 self.총최대매입금액 = max(self.총매입금액, self.총최대매입금액) self.추정자산 = self.예수금 + self.총평가금액 # 현금(예수금) + 주식(총평가금액) # self.총누적손익 += self.총누적손익 --> 변동없음 self.총평가손익 = float(self.총평가금액 - self.총매입금액) # 보유한 주식의가치로 얻은 손익 self.총손익 = self.총평가손익 + self.총누적손익 # 개념상 손익 (현금의 손익 + 가치의 손익) self.총수익률 = self.총평가손익 / self.총매입금액 * 100 # 보유한 주식에 대한 총 수익률 self.총누적수익률 = float(self.총누적손익) / self.총최대매입금액 * 100 # 실현한 수익에 대한 총 수익률 # 보유주식에 포함 self.보유주식[stock.code] = stock self.buy_transaction(stock) try: if cfg_mgr.debug_mode(): self.print_attr('BUY', stock.stock_name, stock.code, reason) # need to move to util/common pkg # pdb.set_trace() except Exception: # pdb.set_trace() print("Exception")
def get_stock_list(self, date): """특정일에 조건검색식으로부터 검출된 모든 stock list 를 반환 :param date: :return: """ code_list = self.detected_code_list(date) stock_list = [ Stock.get_instance(code) for code in code_list if code not in self.disable_code_list ] return stock_list
def get_stock_list_at_timestamp(self, timestamp): """특정시간(timestamp)에 조건검색식으로부터 검출된 stock list를 반환 :param timestamp: :return: """ ret = [] for code, time_series in self.condi_hist.items(): if code in self.disable_code_list: continue if timestamp in time_series: ret.append(Stock.get_instance(code)) return ret
def test_stock(self): stock = Stock('AAPL') self.assertEqual('AAPL', stock.symbol) self.assertEqual('Apple Inc.', stock.name) self.assertEqual('Consumer Goods', stock.sector)
import pandas as pd import datetime as dt from Queue import Queue from trading.stock import Stock from stock_backtest.data_handler import StockBacktestDataHandler from stock_backtest.execution_handler import StockBacktestExecutionHandler from stock_backtest.backtest import StockBacktest from strategies.buy_strategy_stock import BuyStrategy events = Queue() products = [Stock('MSFT'), Stock('ORCL')] symbols = [product.symbol for product in products] start_date = dt.datetime(year=2012, month=1, day=1) end_date = dt.datetime(year=2016, month=1, day=10) data = StockBacktestDataHandler(events, products, start_date, end_date) execution = StockBacktestExecutionHandler(events) strategy = BuyStrategy(events, data, products, initial_cash=100000) backtest = StockBacktest(events, strategy, data, execution, start_date, end_date) backtest.run() print strategy.time_series.head(5) print strategy.positions_series.head(5) print strategy.transactions_series.head(5) print strategy.returns_series.head(5)