def __init__(self): # read configuration from json file with open('config.json', 'r') as file: config = json.load(file) self.api_key = config['api_key'] self.api_secret = config['api_secret'] self.api_passphrase = config['api_passphrase'] self.sandbox = config['is_sandbox'] self.symbol = config['symbol'] self.resolution = int(config['resolution']) self.valve = float(config['valve']) self.leverage = float(config['leverage']) self.size = float(config['size']) self.stopLossThreshold = float(config['stop_loss_threshold']) self.market = Market(self.api_key, self.api_secret, self.api_passphrase, is_sandbox=self.sandbox) self.trade = Trade(self.api_key, self.api_secret, self.api_passphrase, is_sandbox=self.sandbox) self.slack = WebClient(config['slack_token']) self.slack_channel = config['slack_channel']
def __init__(self): # read configuration from json file with open('config.json', 'r') as file: config = json.load(file) self.api_key = config['api_key'] self.api_secret = config['api_secret'] self.api_passphrase = config['api_passphrase'] self.sandbox = config['is_sandbox'] self.symbol = config['symbol'] self.leverage = config['leverage'] self.size = config['size'] self.depth = config['depth'] self.market = Market(self.api_key, self.api_secret, self.api_passphrase, is_sandbox=self.sandbox) self.trade = Trade(self.api_key, self.api_secret, self.api_passphrase, is_sandbox=self.sandbox) self.tick_size = 0 self.best_ask = 0 self.best_bid = 0 self.diff = 0 self.max_ask = 0 self.max_bid = 0 self.ask_list = {} self.bid_list = {}
class Hf(object): def __init__(self): # read configuration from json file with open('config.json', 'r') as file: config = json.load(file) self.api_key = config['api_key'] self.api_secret = config['api_secret'] self.api_passphrase = config['api_passphrase'] self.sandbox = config['is_sandbox'] self.symbol_a = config['symbol_a'] self.symbol_b = config['symbol_b'] self.spread_mean = float(config['spread_mean']) self.leverage = float(config['leverage']) self.size = int(config['size']) self.num_param = float(config['num_param']) self.trade = Trade(self.api_key, self.api_secret, self.api_passphrase, is_sandbox=self.sandbox) self.market = Market(self.api_key, self.api_secret, self.api_passphrase, is_sandbox=self.sandbox) def get_symbol_price(self, symbol): ticker = self.market.get_ticker(symbol) return float(ticker['price'])
def __init__(self): # read configuration from json file with open('config.json', 'r') as file: config = json.load(file) self.api_key = config['api_key'] self.api_secret = config['api_secret'] self.api_passphrase = config['api_passphrase'] self.sandbox = config['is_sandbox'] self.symbol_a = config['symbol_a'] self.symbol_b = config['symbol_b'] self.spread_mean = float(config['spread_mean']) self.leverage = float(config['leverage']) self.size = int(config['size']) self.num_param = float(config['num_param']) self.trade = Trade(self.api_key, self.api_secret, self.api_passphrase, is_sandbox=self.sandbox) self.market = Market(self.api_key, self.api_secret, self.api_passphrase, is_sandbox=self.sandbox)
def __init__(self): # read configuration from json file with open('config.json', 'r') as file: config = json.load(file) self.api_key = config['api_key'] self.api_secret = config['api_secret'] self.api_passphrase = config['api_passphrase'] self.sandbox = config['is_sandbox'] self.symbol = config['symbol'] self.leverage = config['leverage'] self.size = config['size'] self.market = Market(self.api_key, self.api_secret, self.api_passphrase, is_sandbox=self.sandbox) self.trade = Trade(self.api_key, self.api_secret, self.api_passphrase, is_sandbox=self.sandbox)
class Shock(object): def __init__(self): # read configuration from json file with open('config.json', 'r') as file: config = json.load(file) self.api_key = config['api_key'] self.api_secret = config['api_secret'] self.api_passphrase = config['api_passphrase'] self.sandbox = config['is_sandbox'] self.symbol = config['symbol'] self.resolution = int(config['resolution']) self.valve = float(config['valve']) self.leverage = float(config['leverage']) self.size = float(config['size']) self.stopLossThreshold = float(config['stop_loss_threshold']) self.market = Market(self.api_key, self.api_secret, self.api_passphrase, is_sandbox=self.sandbox) self.trade = Trade(self.api_key, self.api_secret, self.api_passphrase, is_sandbox=self.sandbox) self.slack = WebClient(config['slack_token']) self.slack_channel = config['slack_channel'] def error(self, error, message): message = message + ': ' + getattr(error, 'message', repr(error)) logging.error(message) self.slack_message(message) time.sleep(self.resolution) def create_sell_limit_order(self, price): try: trade = shock.trade.create_limit_order(shock.symbol, 'sell', self.leverage, self.size, price, timeInForce='IOC') except BaseException as e: self.error(e, 'limit sell order execution failed!') return None if trade is not None and 'orderId' in trade: self.slack_message('limit sell order executed: ' + 'order id = ' + trade['orderId']) return trade['orderId'] return None def create_sell_market_order(self): try: trade = shock.trade.create_market_order(shock.symbol, 'sell', self.leverage, timeInForce='IOC', size=self.size) except BaseException as e: self.error(e, 'market sell order execution failed!') return None if trade is not None and 'orderId' in trade: self.slack_message('market sell order executed: ' + 'order id = ' + trade['orderId']) return trade['orderId'] return None def create_buy_limit_order(self, price): try: trade = shock.trade.create_limit_order(shock.symbol, 'buy', self.leverage, self.size, price, timeInForce='IOC') except BaseException as e: self.error(e, 'limit buy order execution failed!') return None if trade is not None and 'orderId' in trade: self.slack_message('limit buy order executed: ' + 'order id = ' + trade['orderId']) return trade['orderId'] return None def create_buy_market_order(self): try: trade = shock.trade.create_market_order(shock.symbol, 'buy', self.leverage, timeInForce='IOC', size=self.size) except BaseException as e: self.error(e, 'market buy order execution failed!') return None if trade is not None and 'orderId' in trade: self.slack_message('market buy order executed: ' + 'order id = ' + trade['orderId']) return trade['orderId'] return None def get_order_by_id(self, trade_order_id): try: trade = shock.trade.get_order_details(trade_order_id) except BaseException as e: self.error(e, 'order retrieval failed!') return None return trade def get_position_details(self): try: details = self.trade.get_position_details(self.symbol) except BaseException as e: self.error(e, 'position detail retrieval failed!') details = None return details def get_kline_data(self, kline_from, kline_to): try: kline_data = self.market.get_kline_data(self.symbol, self.resolution, kline_from, kline_to) except BaseException as e: self.error(e, 'kline retrieval failed!') kline_data = None return kline_data def slack_message(self, message): logging.info(message) self.slack.chat_postMessage(channel=self.slack_channel, text=message) @staticmethod def is_three_line_strike(kline_data): first_candle_low = kline_data[-4][3] second_candle_low = kline_data[-3][3] third_candle_low = kline_data[-2][3] third_candle_high = kline_data[-2][2] fourth_candle_low = kline_data[-1][3] return fourth_candle_low < third_candle_low < second_candle_low < first_candle_low \ and now_price > third_candle_high @staticmethod def is_two_block_gapping(kline_data): first_candle_high = kline_data[-4][2] second_candle_high = kline_data[-3][2] second_candle_low = kline_data[-3][3] third_candle_low = kline_data[-2][3] third_candle_high = kline_data[-2][2] fourth_candle_low = kline_data[-1][3] gap_met = second_candle_low - third_candle_high > second_candle_low * .02 return first_candle_high > second_candle_high and third_candle_high < second_candle_low \ and gap_met and fourth_candle_low < third_candle_low @staticmethod def is_three_black_crows(kline_data): first_candle_high = kline_data[-5][2] second_candle_high = kline_data[-4][2] second_candle_low = kline_data[-4][3] third_candle_low = kline_data[-3][3] third_candle_high = kline_data[-3][2] fourth_candle_low = kline_data[-2][3] fifth_candle_low = kline_data[-1][3] return first_candle_high < second_candle_high < third_candle_high \ and second_candle_low > third_candle_low > fourth_candle_low > fifth_candle_low @staticmethod def is_evening_star(kline_data, kline_high_track): first_candle_high = kline_data[-3][2] second_candle_high = kline_data[-2][2] second_candle_low = kline_data[-2][3] third_candle_low = kline_data[-1][3] third_candle_high = kline_data[-1][2] return kline_high_track < first_candle_high < second_candle_high \ and second_candle_high - second_candle_low <= second_candle_high * .015 \ and third_candle_high - third_candle_low >= third_candle_high * .03
class Grid(object): def __init__(self): # read configuration from json file with open('config.json', 'r') as file: config = json.load(file) self.api_key = config['api_key'] self.api_secret = config['api_secret'] self.api_passphrase = config['api_passphrase'] self.sandbox = config['is_sandbox'] self.symbol = config['symbol'] self.leverage = config['leverage'] self.size = config['size'] self.depth = config['depth'] self.market = Market(self.api_key, self.api_secret, self.api_passphrase, is_sandbox=self.sandbox) self.trade = Trade(self.api_key, self.api_secret, self.api_passphrase, is_sandbox=self.sandbox) self.tick_size = 0 self.best_ask = 0 self.best_bid = 0 self.diff = 0 self.max_ask = 0 self.max_bid = 0 self.ask_list = {} self.bid_list = {} def get_symbol(self): try: symbol = self.market.get_contract_detail(self.symbol) self.tick_size = Decimal(symbol['tickSize']).quantize( Decimal("0.00")) self.diff = Decimal(self.tick_size * self.depth).quantize( Decimal("0.00")) logging.info('tick_size = %s' % self.tick_size) except Exception as e: logging.error(e) return def get_market_price(self): try: m = self.market.get_ticker(self.symbol) self.best_ask = Decimal(m['bestAskPrice']) self.max_ask = Decimal(self.best_ask + self.diff).quantize( Decimal("0.00")) self.best_bid = Decimal(m['bestBidPrice']) self.max_bid = Decimal(self.best_bid - self.diff).quantize( Decimal("0.00")) logging.debug('best_ask = %s' % self.best_ask) logging.debug('best_bid = %s' % self.best_bid) except Exception as e: logging.error(e) def cancel_order(self, order_id, side): try: oi = self.trade.get_order_details(order_id) if oi['isActive']: self.trade.cancel_order(order_id) if side == 'sell': del self.ask_list[order_id] elif side == 'buy': del self.bid_list[order_id] except Exception as e: logging.error('该订单状态不可撤回 side = %s, order_id = %s' % (side, order_id)) logging.error(e) def ask_maker(self, p): try: price = int(p * 100) / 100 ask = self.trade.create_limit_order(self.symbol, 'sell', self.leverage, self.size, float(price)) logging.debug('当前盘口价格 = %s,在合约 %s 以数量= %s,价格= %s,创建了卖单,卖单ID = %s' % (self.best_ask, self.symbol, self.size, float(price), ask['orderId'])) self.ask_list[ask['orderId']] = {'price': p} except Exception as e: logging.error(e) def bid_maker(self, p): try: price = int(p * 100) / 100 bid = self.trade.create_limit_order(self.symbol, 'buy', self.leverage, self.size, float(price)) logging.debug('当前盘口价格 = %s,在合约 %s 以数量= %s,价格= %s,创建了买单,卖单ID = %s' % (self.best_bid, self.symbol, self.size, float(price), bid['orderId'])) self.bid_list[bid['orderId']] = {'price': p} except Exception as e: logging.error(e)