示例#1
0
    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']
示例#2
0
    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 = {}
示例#3
0
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'])
示例#4
0
    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)
示例#5
0
    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)
示例#6
0
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
示例#7
0
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)