IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> 数字货币高频盘口策略 -> 正文阅读

[区块链]数字货币高频盘口策略

数字货币高频盘口策略

策略描述:订阅数字货币WEBSOCKET盘口和成交信息,随价格变动一直挂买8单,只能有人砸市价单才能成交,成交后在卖1价格卖出,吃盘口毛刺和手续返佣。
所有逻辑均基于python 协程异步实现
``

class ASYNC_STR(Strategy):
    def __init__(self):
        super(ASYNC_STR, self).__init__()
        self.strategy = config.strategy
        # ======================引入配置文件信息=================
        self.platform = config.platforms[0]["platform"]
        self.account = config.platforms[0]["account"]
        self.access_key = config.platforms[0]["access_key"]
        self.secret_key = config.platforms[0]["secret_key"]
        self.passphrase = config.platforms[0]["passphrase"]
        self.symbols = config.platforms[0]["symbols"]
        # ======================引入启动配置参数=================
        params = {
            "strategy": self.strategy,
            "platform": self.platform,
            "symbols": self.symbols,
            "account": self.account,
            "access_key": self.access_key,
            "secret_key": self.secret_key,
            "passphrase": self.passphrase,

            "enable_kline_update": False,
            "enable_orderbook_update": True,
            "enable_trade_update": False,     # 逐笔成交
            "enable_ticker_update": False,
            "enable_order_update": True,      # 订单更新回调
            "enable_fill_update": True,       # 订单成交回调
            "enable_position_update": False,  # 合约持仓回调
            "enable_asset_update": False,     # 资产更新回调
            "direct_kline_update": False,     # false 为自建rabbitMQ引入
            "direct_orderbook_update": True,  # true  为直连交易所websocket
            "direct_trade_update": False,
            "direct_ticker_update": False
        }
        # 加载配置,订阅websocket的行情信息和私有信息,但私有信息一定要添加access和secret key信息
        self.grid = self.create_gateway(**params)
        # 注册定时器
        self.enable_timer()  # 每隔3秒执行一次心跳
        self._count = 0
        # ======================引入本地策略参数=================
        self.bids = None
        self.asks = None
        self.sell_order_id = None
        self.buy_order_id = None
        self.buy_price = None
        self.sell_price = None
        self.buy_status = None
        self.sell_status = None
        self.amount = None
        # 引入step,划分各阶段,策略将更清楚
        # step = 1 ,买入阶段,循环挂单撤单直到买单成交
        # step = 2 , 买单已成交,开始挂卖单,循环挂单直到卖单成交
        self.step = 1


    # 每3秒打印一次心跳,服务器输出#是绿色,所以用#方便查看
    async def on_time(self):
        self._count += 3
        print("######################__heart beat__######################", self._count)

    '''
    策略写在回调函数中,开平仓等注意要加协程锁从而忽略多次得到的信息,先完成一次操作才能再得到相关信息
    '''
    # 主逻辑
    @async_method_locker("ASYNC_STR.main.locker", False)
    async def main(self):
        print('#'*50)
        if self.step == 1:
            if self.buy_order_id:
                if self.buy_price > self.bids[6][0] or self.buy_price < self.bids[8][0]:
                    s, e = await self.revoke_order(self.grid, self.symbols[0])
                    if e == None:
                        self.buy_order_id = None
                        self.buy_price = None
                        return
                else:
                    return
            price = self.bids[7][0]
            amount = 0.1
            s,e = await self.create_order(self.grid,self.symbols[0],ORDER_ACTION_BUY,price,amount)
            if e == None:
                self.buy_order_id = s
                self.buy_price = price
            await asyncio.sleep(0.5)

        if self.step == 2:
            if self.sell_order_id:
                if self.sell_price > self.asks[0][0]:
                    s, e = await self.revoke_order(self.grid, self.symbols[0])
                    if e == None:
                        self.sell_order_id = None
                        self.sell_price = None
                        return
                else:
                    return

            price = self.asks[0][0]
            if price < self.buy_price:
                return
            s,e = await self.create_order(self.grid,self.symbols[0],ORDER_ACTION_SELL,price,self.amount)
            if e == None:
                self.sell_order_id = s
                self.sell_price = price

    # 盘口策略都加入此orderbook更新回调中执行,结合订单的成交情况
    async def on_orderbook_update_callback(self, orderbook: Orderbook):
        # logger.info("order_book:",orderbook,caller=self)
        self.asks = orderbook.asks[:10]
        self.bids = orderbook.bids[:10]
        await self.main()

    # 订单信息返回有先后,可能rest先拿到,所以订单状态只从此回调函数中获取
    async def on_order_update_callback(self, order: Order):

        logger.info("order:",order,caller=self)
        # if order.status == 'NEW' and order.action == "BUY":
        #     self.buy_order_id = order.order_no
        #     self.buy_price = order.price
        # if order.status == "CANCELED" and order.action == "BUY":
        #     self.buy_order_id = None
        #     self.buy_price = None
        # if order.status == 'NEW' and order.action == "SELL":
        #     self.sell_order_id = order.order_no
        #     self.sell_price = order.price
        # if order.status == "CANCELED" and order.action == "SELL":
        #     self.sell_order_id = None
        #     self.sell_price = None
        if order.status == "FILLED" and order.action == "BUY":
            print('挂买单已成交')
            self.step = 2
            self.buy_price = order.price
            self.amount = order.quantity

        elif order.status == "FILLED" and order.action == "SELL":
            print('本次套利完成')
            self.step = 1
            self.sell_price = order.price
            pro = float(self.sell_price) - float(self.buy_price)
            logger.info("本次套利:",pro*self.amount*6.4,caller=self)
            self.buy_price = None
            self.buy_order_id = None
            self.sell_price = None
            self.sell_order_id = None
            #quant.stop()


if __name__ == '__main__':
    default_main(ASYNC_STR)


  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2021-08-25 12:15:18  更:2021-08-25 12:16:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/8 18:33:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码