def process_stock(self, stock_symbol): """ process the stock """ # get remaining cash for the stock stock_cash_table = StockCashTable() stock_cash = stock_cash_table.get_stock_cash_by_symbol(stock_symbol) # get current price of the stock stock_price = self.trade.get_stock_price(stock_symbol) print("process stock: " + stock_symbol) print("remaining_cash={0}".format(stock_cash.amount)) print("stock_price={0}".format(stock_price)) if abs(stock_price) < 0.005: return stock_price_range_table = StockPriceRangeTable() stock_price_range = \ stock_price_range_table.get_stock_stock_price_range_by_symbol( stock_symbol) price_low = stock_price_range.get_price_low() price_high = stock_price_range.get_price_high() simple_algorithm = SimpleAlgorithm(stock_symbol, price_low, price_high, stock_price) simple_algorithm.calculate() buy_or_sell = simple_algorithm.get_suggested_buy_or_sell() suggested_amount = simple_algorithm.get_suggested_amount() result = "Symbol: {0}\nBuy or Sell: {1}\nAmount: {2}".format( stock_symbol, buy_or_sell, suggested_amount) print(result) amount = int(suggested_amount/100) * 100 if amount >= 100: debug_msg = "stock_symbol: {0}\nbuy_or_sell: {1}\n" + \ "amount: {2}\nstock_price: {3}" debug_msg = debug_msg.format( stock_symbol, buy_or_sell, amount, stock_price) self.logger.debug(debug_msg) if buy_or_sell == "Buy": commission_id = self.trade.buy_stock( stock_symbol, stock_price, amount) time.sleep(3) commission_state = self.trade.get_commission_state( commission_id) if commission_state != "已成": result = self.trade.cancel_commission(commission_id) if result != 1: commission_state = self.trade.get_commission_state( commission_id) if commission_state == "已成": complete_buy_transaction(stock_symbol, stock_price, amount) else: print("Unknown error in canceling transaction") self.logger.debug( "Unknown error in canceling transaction.") else: complete_buy_transaction(stock_symbol, stock_price, amount) elif buy_or_sell == "Sell": lowest_buy_price = StockTransaction.\ get_lowest_buy_price(stock_symbol) lowest_buy_price_quantity = StockTransaction.\ get_lowest_buy_price_quantity( stock_symbol) lowest_gain = get_lowest_gain(stock_symbol) if lowest_gain is None: lowest_gain = 0.3 if stock_price - lowest_buy_price < lowest_gain: debug_msg = "stock_price is not high enough. {0} vs {1}" debug_msg = debug_msg.format( stock_price, lowest_buy_price) self.logger.debug(debug_msg) return if amount > lowest_buy_price_quantity: amount = lowest_buy_price_quantity commission_id = self.trade.sell_stock( stock_symbol, stock_price, amount) time.sleep(3) commission_state = self.trade.get_commission_state( commission_id) if commission_state != "已成": result = self.trade.cancel_commission(commission_id) if result != 1: commission_state = self.trade.get_commission_state( commission_id) if commission_state == "已成": complete_sell_transaction(stock_symbol, stock_price, amount) else: print("Unknown error in canceling transaction") self.logger.debug( "Unknown error in canceling transaction.") else: complete_sell_transaction(stock_symbol, stock_price, amount) else: print("Error!") return
def process_stock(self, stock_symbol): # get remaining cash for the stock stock_cash_table = StockCashTable() stock_cash = stock_cash_table.get_stock_cash_by_symbol(stock_symbol) # get current price of the stock stock_price = self.trade.get_stock_price(stock_symbol) print("process stock: " + stock_symbol) print("remaining_cash={0}".format(stock_cash.amount)) print("stock_price={0}".format(stock_price)) if(abs(stock_price) < 0.005): return stock_price_range_table = StockPriceRangeTable() stock_price_range = stock_price_range_table.get_stock_stock_price_range_by_symbol(stock_symbol) price_low = stock_price_range.get_price_low() price_high = stock_price_range.get_price_high() simple_algorithm = SimpleAlgorithm(stock_symbol, price_low, price_high, stock_price) simple_algorithm.calculate() buy_or_sell = simple_algorithm.get_suggested_buy_or_sell() suggested_amount = simple_algorithm.get_suggested_amount() result = "Symbol: {0}\nBuy or Sell: {1}\nAmount: {2}".format(stock_symbol, buy_or_sell, suggested_amount) print(result) amount = int(suggested_amount/100) * 100 # we suppost we need 10 for transaction service fee, which is a big enough number # for normal transaction if (buy_or_sell == "Buy"): cash_offset = -1 * (amount * stock_price + 10) else: cash_offset = amount * stock_price - 10 if (amount >= 100): debug_msg = "stock_symbol: {0}\nbuy_or_sell: {1}\namount: {2}\nstock_price: {3}".format(stock_symbol, buy_or_sell, amount, stock_price) self.logger.debug(debug_msg) debug_msg = "cash_offset: {0}".format(cash_offset) self.logger.debug(debug_msg) if (buy_or_sell == "Buy"): commission_id = self.trade.buy_stock(stock_symbol, stock_price, amount) time.sleep(3) commission_state = self.trade.get_commission_state(commission_id) if (commission_state != "已成"): result = self.trade.cancel_commission(commission_id) if (result != 1): commission_state = self.trade.get_commission_state(commission_id) if (commission_state == "已成"): self.add_transaction(stock_symbol, buy_or_sell, amount, stock_price) self.update_cash_table(stock_symbol, cash_offset) else: print("Unknown error in canceling transaction") self.logger.debug("Unknown error in canceling transaction.") else: self.add_transaction(stock_symbol, buy_or_sell, amount, stock_price) self.update_cash_table(stock_symbol, cash_offset) elif (buy_or_sell == "Sell"): commission_id = self.trade.sell_stock(stock_symbol, stock_price, amount) time.sleep(3) commission_state = self.trade.get_commission_state(commission_id) if (commission_state != "已成"): result = self.trade.cancel_commission(commission_id) if (result != 1): commission_state = self.trade.get_commission_state(commission_id) if (commission_state == "已成"): self.add_transaction(stock_symbol, buy_or_sell, amount, stock_price) self.update_cash_table(stock_symbol, cash_offset) else: print("Unknown error in canceling transaction") self.logger.debug("Unknown error in canceling transaction.") else: self.add_transaction(stock_symbol, buy_or_sell, amount, stock_price) self.update_cash_table(stock_symbol, cash_offset) else: print("Error!") return