Esempio n. 1
0
    def __init__(self):
        """ 初始化
        """
        self.strategy = config.strategy
        self.platform = const.COINSUPER_PRE
        self.account = config.accounts[0]["account"]
        self.access_key = config.accounts[0]["access_key"]
        self.secret_key = config.accounts[0]["secret_key"]
        self.symbol = config.symbol

        self.order_no = None  # 创建订单的id
        self.create_order_price = "0.0"  # 创建订单的价格

        # 交易模块
        cc = {
            "strategy": self.strategy,
            "platform": self.platform,
            "symbol": self.symbol,
            "account": self.account,
            "access_key": self.access_key,
            "secret_key": self.secret_key,
            "order_update_callback": self.on_event_order_update
        }
        self.trader = Trade(**cc)

        # 订阅行情
        Market(const.MARKET_TYPE_ORDERBOOK, self.platform, self.symbol, self.on_event_orderbook_update)
Esempio n. 2
0
    def __init__(self):
        """ 初始化
        """
        self.strategy = config.strategy
        self.platform = const.OKEX
        self.account = config.platforms.get(self.platform, {}).get("account")
        self.access_key = config.platforms.get(self.platform,
                                               {}).get("access_key")
        self.secret_key = config.platforms.get(self.platform,
                                               {}).get("secret_key")
        self.passphrase = config.platforms.get(self.platform,
                                               {}).get("passphrase")
        self.symbol = config.symbol

        self.order_no = None  # 创建订单的id
        self.create_order_price = "0.0"  # 创建订单的价格

        # 交易模块
        cc = {
            "strategy": self.strategy,
            "platform": self.platform,
            "symbol": self.symbol,
            "account": self.account,
            "access_key": self.access_key,
            "secret_key": self.secret_key,
            "passphrase": self.passphrase,
            "order_update_callback": self.on_event_order_update
        }
        self.trader = Trade(**cc)

        # 订阅行情
        Market(const.MARKET_TYPE_ORDERBOOK, self.platform, self.symbol,
               self.on_event_orderbook_update)
Esempio n. 3
0
    def __init__(self):
        """ 初始化
        """
        self.strategy = config.strategy
        self.platform = const.OKEX_SWAP
        self.account = config.accounts[0]["account"]
        self.access_key = config.accounts[0]["access_key"]
        self.secret_key = config.accounts[0]["secret_key"]
        self.symbol = config.symbol

        self.kline_data = KLineData(self.platform)

        # 交易模块
        cc = {
            "strategy": self.strategy,
            "platform": self.platform,
            "symbol": self.symbol,
            "account": self.account,
            "access_key": self.access_key,
            "secret_key": self.secret_key,
            "order_update_callback": self.on_event_order_update
        }
        # self.trader = Trade(**cc)

        # 订阅行情
        Market(const.MARKET_TYPE_KLINE, self.platform, self.symbol,
               self.on_event_kline_update)
Esempio n. 4
0
    def __init__(self):
        """ 初始化
        """
        self.strategy = config.strategy
        self.platform = const.BITMEX
        self.account = config.platforms.get(self.platform, {}).get("account")
        self.access_key = config.platforms.get(self.platform, {}).get("access_key")
        self.secret_key = config.platforms.get(self.platform, {}).get("secret_key")
        self.symbol = config.symbol

        self.buy_open_order_no = None  # 开仓做多订单号
        self.buy_open_quantity = "10"  # 开仓数量(USD)
        self.sell_close_order_no = None  # 多仓平仓订单号
        self.sell_close_time_down = 0  # 平仓倒计时

        self.current_price = None  # 当前盘口价格,为了方便,这里假设盘口价格为 卖一 和 买一 的平均值

        # 交易模块
        cc = {
            "strategy": self.strategy,
            "platform": self.platform,
            "symbol": self.symbol,
            "account": self.account,
            "access_key": self.access_key,
            "secret_key": self.secret_key,
            "order_update_callback": self.on_event_order_update,
            "position_update_callback": self.on_event_position_update
        }
        self.trader = Trade(**cc)

        # 订阅行情
        Market(const.MARKET_TYPE_ORDERBOOK, self.platform, self.symbol, self.on_event_orderbook_update)

        # 注册系统循环回调
        LoopRunTask.register(self.on_ticker, 1)  # 每隔1秒执行一次回调
Esempio n. 5
0
    def __init__(self):
        """ 初始化
        """
        self.strategy = "my_strategy"
        self.platform = BINANCE
        self.account = config.platforms.get(self.platform, {}).get("account")
        self.access_key = config.platforms.get(self.platform,
                                               {}).get("access_key")
        self.secret_key = config.platforms.get(self.platform,
                                               {}).get("secret_key")
        self.symbol = config.symbol
        self.name = config.strategy

        self.order_no = None  # 创建订单的id
        self.create_order_price = "0.0"  # 创建订单的价格

        # 交易模块
        self.trader = Trade(self.strategy,
                            self.platform,
                            self.symbol,
                            self.account,
                            asset_update_callback=self.on_event_asset_update,
                            order_update_callback=self.on_event_order_update)

        # 订阅行情
        Market(const.MARKET_TYPE_ORDERBOOK, const.BINANCE, self.symbol,
               self.on_event_orderbook_update)
Esempio n. 6
0
    def __init__(self):
        """ 初始化
        """
        self.strategy = config.strategy
        self.platform = const.BINANCE
        self.account = config.accounts[0]["account"]
        self.access_key = config.accounts[0]["access_key"]
        self.secret_key = config.accounts[0]["secret_key"]
        self.symbol = config.symbol

        self.buy_open_order_no = None  # 开仓做多订单号
        self.buy_open_price = 0
        self.buy_open_quantity = "0.003"  # 开仓数量(USD)
        self.sell_close_order_no = None  # 多仓平仓订单号
        self.sell_close_time_down = 0  # 平仓倒计时
        self.bsud_usdt_price = 0
        self.btc_busd_relative = {}
        self.highest_price = 0
        self.lowest_price = 999999
        self.threshold = 0.001

        #self.current_price = None  # 当前盘口价格,为了方便,这里假设盘口价格为 卖一 和 买一 的平均值

        # 交易模块
        cc = {
            "strategy": self.strategy,
            "platform": self.platform,
            "symbol": self.symbol,
            "account": self.account,
            "access_key": self.access_key,
            "secret_key": self.secret_key,
            "order_update_callback": self.on_event_order_update,
            "position_update_callback": self.on_event_position_update
        }
        self.trader = Trade(**cc)

        # 订阅行情
        Market(const.MARKET_TYPE_ORDERBOOK, 'binance', 'BTC/USDT',
               self.on_event_orderbook_btcusdt_update)
        Market(const.MARKET_TYPE_ORDERBOOK, 'binance', 'BUSD/USDT',
               self.on_event_orderbook_busdusdt_update)
        Market(const.MARKET_TYPE_ORDERBOOK, 'binance', 'BTC/BUSD',
               self.on_event_orderbook_update)

        # 注册系统循环回调
        LoopRunTask.register(self.on_ticker, 1)  # 每隔1秒执行一次回调
Esempio n. 7
0
    def __init__(self):
        self.strategy = config.strategy
        self.platform = const.BINANCE
        self.symbol = config.symbol

        plt.ion()
        plt.figure(1)

        Market(const.MARKET_TYPE_ORDERBOOK, self.platform, self.symbol,
               self.on_event_orderbook_update)
Esempio n. 8
0
    def create_gateway(self, **kwargs):
        """ 创建一个交易网关.

        Args:
            strategy: 策略名称,由哪个策略发起
            platform: 交易平台
            databind: 这个字段只有在platform等于datamatrix或backtest的时候才有用,代表为矩阵操作或策略回测提供历史数据的交易所
            symbols: 策略需要订阅和交易的符号
            account: 交易所登陆账号,如果为空就只是订阅市场公共行情数据,不进行登录认证,所以也无法进行交易等
            access_key: 登录令牌
            secret_key: 令牌密钥

            enable_kline_update: 是否启用`K线数据回调函数`(市场公共数据)
            enable_orderbook_update: 是否启用`深度数据通知回调函数`(市场公共数据)
            enable_trade_update: 是否启用`市场最新成交数据通知回调函数`(市场公共数据)
            enable_ticker_update: 是否启用`tick行情通知回调函数`(市场公共数据)
            enable_order_update: 是否启用`用户挂单通知回调函数`(用户私有数据)
            enable_fill_update: 是否启用`用户挂单成交通知回调函数`(用户私有数据)
            enable_position_update: 是否启用`用户仓位通知回调函数`(用户私有数据)
            enable_asset_update: 是否启用`用户资产通知回调函数`(用户私有数据)

            direct_kline_update: 直连交易所获取行情数据or订阅自己搭建的消息队列服务器获取行情数据
            direct_orderbook_update: 直连交易所获取行情数据or订阅自己搭建的消息队列服务器获取行情数据
            direct_trade_update: 直连交易所获取行情数据or订阅自己搭建的消息队列服务器获取行情数据
            direct_ticker_update: 直连交易所获取行情数据or订阅自己搭建的消息队列服务器获取行情数据

        Returns:
            交易网关实例
        """
        #如果配置了回测模式参数或者数据矩阵参数就替换底层接口进入相应模式
        if config.backtest:
            kwargs["databind"] = kwargs["platform"]
            kwargs["platform"] = const.BACKTEST
        elif config.datamatrix:
            kwargs["databind"] = kwargs["platform"]
            kwargs["platform"] = const.DATAMATRIX

        class CB(ExchangeGateway.ICallBack):
            async def on_kline_update_callback(self, kline: Kline):
                pass

            async def on_orderbook_update_callback(self, orderbook: Orderbook):
                pass

            async def on_trade_update_callback(self, trade: Trade):
                pass

            async def on_ticker_update_callback(self, ticker: Ticker):
                pass

            async def on_asset_update_callback(self, asset: Asset):
                pass

            async def on_position_update_callback(self, position: Position):
                pass

            async def on_order_update_callback(self, order: Order):
                pass

            async def on_fill_update_callback(self, fill: Fill):
                pass

            async def on_state_update_callback(self, state: State, **kwargs):
                pass

        cb = CB()
        cb.on_kline_update_callback = None
        cb.on_orderbook_update_callback = None
        cb.on_trade_update_callback = None
        cb.on_ticker_update_callback = None
        cb.on_asset_update_callback = None
        cb.on_position_update_callback = None
        cb.on_order_update_callback = None
        cb.on_fill_update_callback = None
        cb.on_state_update_callback = None

        #设置`状态变化`通知回调函数
        cb.on_state_update_callback = self.on_state_update_callback

        #如果启用,就设置相对应的通知回调函数
        if kwargs["enable_kline_update"]:
            #直连交易所获取数据还是订阅自己搭建的消息队列服务器获取数据
            if kwargs[
                    "direct_kline_update"] or config.backtest or config.datamatrix:
                cb.on_kline_update_callback = self.on_kline_update_callback
            else:
                #从自己搭建的消息队列服务器订阅相对应的行情数据
                for sym in kwargs["symbols"]:
                    Market(const.MARKET_TYPE_KLINE, kwargs["platform"], sym,
                           self.on_kline_update_callback)

        #如果启用,就设置相对应的通知回调函数
        if kwargs["enable_orderbook_update"]:
            #直连交易所获取数据还是订阅自己搭建的消息队列服务器获取数据
            if kwargs[
                    "direct_orderbook_update"] or config.backtest or config.datamatrix:
                cb.on_orderbook_update_callback = self.on_orderbook_update_callback
            else:
                #从自己搭建的消息队列服务器订阅相对应的行情数据
                for sym in kwargs["symbols"]:
                    Market(const.MARKET_TYPE_ORDERBOOK, kwargs["platform"],
                           sym, self.on_orderbook_update_callback)

        #如果启用,就设置相对应的通知回调函数
        if kwargs["enable_trade_update"]:
            #直连交易所获取数据还是订阅自己搭建的消息队列服务器获取数据
            if kwargs[
                    "direct_trade_update"] or config.backtest or config.datamatrix:
                cb.on_trade_update_callback = self.on_trade_update_callback
            else:
                #从自己搭建的消息队列服务器订阅相对应的行情数据
                for sym in kwargs["symbols"]:
                    Market(const.MARKET_TYPE_TRADE, kwargs["platform"], sym,
                           self.on_trade_update_callback)

        #如果启用,就设置相对应的通知回调函数
        if kwargs["enable_ticker_update"]:
            #直连交易所获取数据还是订阅自己搭建的消息队列服务器获取数据
            if kwargs[
                    "direct_ticker_update"] or config.backtest or config.datamatrix:
                cb.on_ticker_update_callback = self.on_ticker_update_callback
            else:
                #从自己搭建的消息队列服务器订阅相对应的行情数据
                for sym in kwargs["symbols"]:
                    Market(const.MARKET_TYPE_TICKER, kwargs["platform"], sym,
                           self.on_ticker_update_callback)

        #如果启用,就设置相对应的通知回调函数
        if kwargs["enable_order_update"]:
            cb.on_order_update_callback = self.on_order_update_callback

        #如果启用,就设置相对应的通知回调函数
        if kwargs["enable_fill_update"]:
            cb.on_fill_update_callback = self.on_fill_update_callback

        #如果启用,就设置相对应的通知回调函数
        if kwargs["enable_position_update"]:
            cb.on_position_update_callback = self.on_position_update_callback

        #如果启用,就设置相对应的通知回调函数
        if kwargs["enable_asset_update"]:
            cb.on_asset_update_callback = self.on_asset_update_callback

        #下列参数已经没用,清除它们
        kwargs.pop("enable_kline_update")
        kwargs.pop("enable_orderbook_update")
        kwargs.pop("enable_trade_update")
        kwargs.pop("enable_ticker_update")
        kwargs.pop("enable_order_update")
        kwargs.pop("enable_fill_update")
        kwargs.pop("enable_position_update")
        kwargs.pop("enable_asset_update")
        kwargs.pop("direct_kline_update")
        kwargs.pop("direct_orderbook_update")
        kwargs.pop("direct_trade_update")
        kwargs.pop("direct_ticker_update")

        kwargs["cb"] = cb

        t = Trader(**kwargs)
        self._gw_list.append(t)
        return t
Esempio n. 9
0
    def __init__(self):
        """ 初始化
        """
        self.strategy = config.strategy
        self.platform = const.BINANCE
        self.account = config.accounts[0]["account"]
        self.access_key = config.accounts[0]["access_key"]
        self.secret_key = config.accounts[0]["secret_key"]
        self.symbol = config.symbol

        self.buy_open_order_no = None  # 开仓做多订单号
        self.buy_open_price = 0
        self.buy_open_quantity = "0.003"  # 开仓数量(USD)
        self.sell_close_order_no = None  # 多仓平仓订单号
        self.sell_close_time_down = 0  # 平仓倒计时
        self.bsud_usdt_price = 0
        self.btc_busd_relative = {}
        self.highest_price = 0
        self.lowest_price = 999999
        self.threshold = 1.002
        self.six_price = [0, 0, 0, 0, 0, 0]
        self.six_amount = [0, 0, 0, 0, 0, 0]
        #self.six_usdt_amount = [0, 0, 0, 0, 0, 0]
        self.actions = []
        self.limit_usdt = 10.0
        self.trader = {}
        # self.current_price = None  # 当前盘口价格,为了方便,这里假设盘口价格为 卖一 和 买一 的平均值

        # 交易模块
        cc = {
            "strategy": self.strategy,
            "platform": self.platform,
            "symbol": 'BUSD/USDT',
            "account": self.account,
            "access_key": self.access_key,
            "secret_key": self.secret_key,
            "order_update_callback": self.on_event_order_update,
            "position_update_callback": self.on_event_position_update
        }
        cc1 = {
            "strategy": self.strategy,
            "platform": self.platform,
            "symbol": 'BTC/USDT',
            "account": self.account,
            "access_key": self.access_key,
            "secret_key": self.secret_key,
            "order_update_callback": self.on_event_order_update,
            "position_update_callback": self.on_event_position_update
        }
        cc2 = {
            "strategy": self.strategy,
            "platform": self.platform,
            "symbol": 'BTC/BUSD',
            "account": self.account,
            "access_key": self.access_key,
            "secret_key": self.secret_key,
            "order_update_callback": self.on_event_order_update,
            "position_update_callback": self.on_event_position_update
        }
        self.trader['BUSD/USDT'] = Trade(**cc)
        self.trader['BTC/USDT'] = Trade(**cc1)
        self.trader['BTC/BUSD'] = Trade(**cc2)
        # 订阅行情

        Market(const.MARKET_TYPE_ORDERBOOK, 'binance',
               'BUSD/USDT', self.on_event_orderbook_update)
        Market(const.MARKET_TYPE_ORDERBOOK, 'binance',
               'BTC/USDT', self.on_event_orderbook_update)
        Market(const.MARKET_TYPE_ORDERBOOK, 'binance',
               'BTC/BUSD', self.on_event_orderbook_update)
Esempio n. 10
0
    def create_gateway(self, **kwargs):
        """ 创建一个交易网关.

        Args:
            strategy: 策略名称,由哪个策略发起
            platform: 交易平台
            symbols: 策略需要订阅和交易的币种
            account: 交易所登陆账号,如果为空就只是订阅市场公共行情数据,不进行登录认证,所以也无法进行交易等
            access_key: 登录令牌
            secret_key: 令牌密钥

            enable_kline_update: 是否启用`K线数据回调函数`(市场公共数据)
            enable_orderbook_update: 是否启用`深度数据通知回调函数`(市场公共数据)
            enable_trade_update: 是否启用`市场最新成交数据通知回调函数`(市场公共数据)
            enable_ticker_update: 是否启用`tick行情通知回调函数`(市场公共数据)
            enable_order_update: 是否启用`用户挂单通知回调函数`(用户私有数据)
            enable_fill_update: 是否启用`用户挂单成交通知回调函数`(用户私有数据)
            enable_position_update: 是否启用`用户仓位通知回调函数`(用户私有数据)
            enable_asset_update: 是否启用`用户资产通知回调函数`(用户私有数据)

            direct_kline_update: 直连交易所获取行情数据or订阅自己搭建的消息队列服务器获取行情数据
            direct_orderbook_update: 直连交易所获取行情数据or订阅自己搭建的消息队列服务器获取行情数据
            direct_trade_update: 直连交易所获取行情数据or订阅自己搭建的消息队列服务器获取行情数据
            direct_ticker_update: 直连交易所获取行情数据or订阅自己搭建的消息队列服务器获取行情数据

        Returns:
            交易网关实例
        """
        class CB(ExchangeGateway.ICallBack):
            async def on_kline_update_callback(self, kline: Kline):
                pass

            async def on_orderbook_update_callback(self, orderbook: Orderbook):
                pass

            async def on_trade_update_callback(self, trade: Trade):
                pass

            async def on_ticker_update_callback(self, ticker: Ticker):
                pass

            async def on_asset_update_callback(self, asset: Asset):
                pass

            async def on_position_update_callback(self, position: Position):
                pass

            async def on_order_update_callback(self, order: Order):
                pass

            async def on_fill_update_callback(self, fill: Fill):
                pass

            async def on_init_success_callback(self, success: bool,
                                               error: Error, **kwargs):
                pass

        cb = CB()
        cb.on_kline_update_callback = None
        cb.on_orderbook_update_callback = None
        cb.on_trade_update_callback = None
        cb.on_ticker_update_callback = None
        cb.on_asset_update_callback = None
        cb.on_position_update_callback = None
        cb.on_order_update_callback = None
        cb.on_fill_update_callback = None
        cb.on_init_success_callback = None

        #设置`初始化是否成功`回调通知函数
        cb.on_init_success_callback = self.on_init_success_callback

        #如果启用,就设置相对应的通知回调函数
        if kwargs["enable_kline_update"]:
            #直连交易所获取数据还是订阅自己搭建的消息队列服务器获取数据
            if kwargs["direct_kline_update"]:
                cb.on_kline_update_callback = self.on_kline_update_callback
            else:
                #从自己搭建的消息队列服务器订阅相对应的行情数据
                for sym in kwargs["symbols"]:
                    Market(const.MARKET_TYPE_KLINE, kwargs["platform"], sym,
                           self.on_kline_update_callback)

        #如果启用,就设置相对应的通知回调函数
        if kwargs["enable_orderbook_update"]:
            #直连交易所获取数据还是订阅自己搭建的消息队列服务器获取数据
            if kwargs["direct_orderbook_update"]:
                cb.on_orderbook_update_callback = self.on_orderbook_update_callback
            else:
                #从自己搭建的消息队列服务器订阅相对应的行情数据
                for sym in kwargs["symbols"]:
                    Market(const.MARKET_TYPE_ORDERBOOK, kwargs["platform"],
                           sym, self.on_orderbook_update_callback)

        #如果启用,就设置相对应的通知回调函数
        if kwargs["enable_trade_update"]:
            #直连交易所获取数据还是订阅自己搭建的消息队列服务器获取数据
            if kwargs["direct_trade_update"]:
                cb.on_trade_update_callback = self.on_trade_update_callback
            else:
                #从自己搭建的消息队列服务器订阅相对应的行情数据
                for sym in kwargs["symbols"]:
                    Market(const.MARKET_TYPE_TRADE, kwargs["platform"], sym,
                           self.on_trade_update_callback)

        #如果启用,就设置相对应的通知回调函数
        if kwargs["enable_ticker_update"]:
            #直连交易所获取数据还是订阅自己搭建的消息队列服务器获取数据
            if kwargs["direct_ticker_update"]:
                cb.on_ticker_update_callback = self.on_ticker_update_callback
            else:
                #从自己搭建的消息队列服务器订阅相对应的行情数据
                for sym in kwargs["symbols"]:
                    Market(const.MARKET_TYPE_TICKER, kwargs["platform"], sym,
                           self.on_ticker_update_callback)

        #如果启用,就设置相对应的通知回调函数
        if kwargs["enable_order_update"]:
            cb.on_order_update_callback = self.on_order_update_callback

        #如果启用,就设置相对应的通知回调函数
        if kwargs["enable_fill_update"]:
            cb.on_fill_update_callback = self.on_fill_update_callback

        #如果启用,就设置相对应的通知回调函数
        if kwargs["enable_position_update"]:
            cb.on_position_update_callback = self.on_position_update_callback

        #如果启用,就设置相对应的通知回调函数
        if kwargs["enable_asset_update"]:
            cb.on_asset_update_callback = self.on_asset_update_callback

        #下列参数已经没用,清除它们
        kwargs.pop("enable_kline_update")
        kwargs.pop("enable_orderbook_update")
        kwargs.pop("enable_trade_update")
        kwargs.pop("enable_ticker_update")
        kwargs.pop("enable_order_update")
        kwargs.pop("enable_fill_update")
        kwargs.pop("enable_position_update")
        kwargs.pop("enable_asset_update")
        kwargs.pop("direct_kline_update")
        kwargs.pop("direct_orderbook_update")
        kwargs.pop("direct_trade_update")
        kwargs.pop("direct_ticker_update")

        kwargs["cb"] = cb

        return Trader(**kwargs)