金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 268|回复: 8

python追撤单问题。不知道下面的代码对嘛?

[复制链接]

93

主题

240

帖子

250

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
发表于 2025-3-16 15:20 | 显示全部楼层 |阅读模式
from PythonApi import *
import time
import datetime



def init(context):
    # 初始化策略
    context.stock_list = ["RB00", ]  # 10只标的
    context.order_timeout = 10  # 10秒钟(单位:秒)
    context.order_retry_count = 1  # 最大追单次数
    context.order_retry_dict = {}  # 存储每只标的的追单次数
    context.amount = {}

def getallorders():
    orders = get_orders(stock_list,0)
    if orders!=None:
        for ord in orders:
            if ord.status=='submitted':
                if (datetime.datetime.now()-ord.datetime).seconds>10:
                    cancel_order(ord.order_id)
def getalltraders():
    traders=get_traders(stock_list) #获取成交单
    if traders!=None:
        for ord in traders:
        pass

def handle_bar(context):# 每根K线触发一次
    for stock in context.stock_list:# 检查是否有未成交订单
        ask_price = get_dynainf(stock, 7)  # 买一价
        if context.position_effect == "open":#开仓
            price = ask_price + 1  # 卖一价加一跳
            order_id = buy_open(stock, "Limit", price, volume=100,serial_id = 1)
        elif context.position_effect == "close":#平仓
            price = ask_price - 1  # 买一价减一跳
            order_id = sell_close(stock, "Limit", price, volume=100,serial_id = 2)  

回复

使用道具 举报

2

主题

4903

帖子

4903

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2025-3-17 09:07 | 显示全部楼层
getallorders 这个函数的实现逻辑上 至少是没有什么问题的。
回复

使用道具 举报

93

主题

240

帖子

250

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2025-3-18 10:21 | 显示全部楼层
资深技术05 发表于 2025-3-17 09:07
getallorders 这个函数的实现逻辑上 至少是没有什么问题的。

我在想会不会有个问题:如果10手,只成交了3手,那cancel之后会不会追单是追的10手而不是7手?  如果是的话是不是要获取未成交手数?
回复

使用道具 举报

2

主题

4903

帖子

4903

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2025-3-18 10:31 | 显示全部楼层
对,有可能有部分成交。  一般是要需要读取下的。

我有个范例,你可以单独试下。不过这个范例是针对所有未成交操作的,你可以增加一些条件逻辑,或者取用其中的代码逻辑。

[Python] 复制代码
# 本Python代码主要用于策略交易
# 可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。
from PythonApi import *
import datetime
import sys


def init(context):
    pass
    

def handle_bar(context):
    order_list = get_orders("all", 0)
    current_time = datetime.datetime.now()
    if order_list:
        for order in order_list:
            seconds_difference = (current_time - order.datetime ).total_seconds()
            #5秒未成交,追撤单
            if seconds_difference>=10:
                Chase_withdraw(context,order)
                            
def order_status(context, order):
    pass   
    
def Chase_withdraw(context,order):
    vol = order.unfilled_quantity
    order_id = order.order_id
    book_id  = order.order_book_id
    side = order.side  # 订单方向 "buy"买:"sell"卖
    #拼接函数名称
    position_effect = order.position_effect  # 开平标志 "open"开仓 "close"平仓
    
    #撤单语句
    cancel_order(order_id)
    function_name = side+"_"+position_effect
    # 从全局环境中直接获取到 具体的函数,这样就可以避免写四条不同的追单语句
    function_object = getattr(sys.modules[__name__], function_name)
    try:
        function_object(book_id,"Market",volume = vol)
    except Exception as ex:
        raise
    
        
回复

使用道具 举报

93

主题

240

帖子

250

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2025-3-18 12:35 | 显示全部楼层
资深技术05 发表于 2025-3-18 10:31
对,有可能有部分成交。  一般是要需要读取下的。

我有个范例,你可以单独试下。不过这个范例是针对所有 ...

这个号,有没有【代码案例集绵】,发我学习下,我准备python和pel一起搞
回复

使用道具 举报

93

主题

240

帖子

250

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2025-3-18 12:38 | 显示全部楼层
资深技术05 发表于 2025-3-18 10:31
对,有可能有部分成交。  一般是要需要读取下的。

我有个范例,你可以单独试下。不过这个范例是针对所有 ...

这么写的话,如果我手动下单的订单  如果自己撤单了,而且这笔撤单被系统读取了,是不是也会追了?
回复

使用道具 举报

2

主题

4903

帖子

4903

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2025-3-18 13:03 | 显示全部楼层
你撤掉了,就已经不在未成交里了。我上面取订单时候 只取了未成交单。
回复

使用道具 举报

93

主题

240

帖子

250

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2025-3-19 10:50 | 显示全部楼层
资深技术05 发表于 2025-3-18 13:03
你撤掉了,就已经不在未成交里了。我上面取订单时候 只取了未成交单。

对,因为我们程序化是“系统撤单后+追单”的模式,如果手动撤单就不会被记录了吧?
回复

使用道具 举报

2

主题

4903

帖子

4903

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2025-3-19 10:54 | 显示全部楼层
手工撤单不会追单的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2025-5-1 22:53 , Processed in 0.132928 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表