3.17K 浏览
0

重写函数用法就很简单了,id=buy(价格,数量) 一句话就可以下单了,并返回id,适合懒人,并实现不成功自动撤单 实际上价格也是无效的,自动获取最新价+5跳 哈哈,这个是为了实盘避免撤单模拟对价成交

def buy(price, volume):
    global order_list, quote, deadline
    order = api.insert_order(symbol=SYMBOL, direction="BUY", offset="OPEN", limit_price=quote.ask_price1 + 5,
                             volume=volume)
    while True:
        api.wait_update(deadline=deadline)

        if api.is_changing(order, "status"):
            print(order.status == "FINISHED", order.status != "FINISHED")

            if order.status == "FINISHED":

                return order.order_id
                break

            else:
                print('已撤单')
                api.cancel_order(order.order_id)

def sell(price, volume):
    global order_list, deadline
    order = api.insert_order(symbol=SYMBOL, direction="SELL", offset="CLOSE",
                             limit_price=quote.bid_price1 - 5,
                             volume=volume)
    while True:
        api.wait_update(deadline=deadline)

        if api.is_changing(order, "status"):

            print(order.status == "FINISHED", order.status != "FINISHED")

            if order.status == "FINISHED":

                return order.order_id
                break

            else:
                print('已撤单')
                api.cancel_order(order.order_id)

def short(price, volume):
    global order_list, quote, deadline
    order = api.insert_order(symbol=SYMBOL, direction="SELL", offset="OPEN", limit_price=quote.bid_price1 - 5,
                             volume=volume)
    while True:
        api.wait_update(deadline=deadline)

        if api.is_changing(order, "status"):

            print(order.status == "FINISHED", order.status != "FINISHED")

            if order.status == "FINISHED":

                return order.order_id
                break

            else:
                print('已撤单')
                api.cancel_order(order.order_id)

def cover(price, volume):
    global order_list, deadline
    order = api.insert_order(symbol=SYMBOL, direction="BUY", offset="CLOSE",
                             limit_price=quote.ask_price1 + 5,
                             volume=volume)
    while True:
        api.wait_update(deadline=deadline)

        if api.is_changing(order, "status"):

            print(order.status == "FINISHED", order.status != "FINISHED")

            if order.status == "FINISHED":

                return order.order_id
                break

            else:
                print('已撤单')
                api.cancel_order(order.order_id)
chengxiaohui321 未选择答案 2021年2月1日
0

谢谢大佬分享,,想请教下,这个里面用了while True: api.wait_update(deadline=deadline)

这样的话,还能把这个buy函数放到一个大的循环里去吗?大的循环就是while True:wait_update

在这个buy里不是会阻塞吗?

xuansuokeji 发表新评论 2021年2月1日

关于wait_update这里我也不是特别的熟悉,回测时候是没有问题的不会阻塞,实盘的时候不清楚到底是多个update只更新一次还是有一个就更新一次

要是官方把发送数据和接收行情分开就好了。又不是一直要发送。。。