金字塔决策交易系统

用户名  找回密码
 

微信登录

微信扫一扫,快速登录

帖子
查看: 956|回复: 8

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

[复制链接]

95

主题

244

帖子

254

积分

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

主题

5261

帖子

5261

积分

Rank: 8Rank: 8

等级: 超级版主

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

举报

95

主题

244

帖子

254

积分

Rank: 4

等级: 专业版

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

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

举报

2

主题

5261

帖子

5261

积分

Rank: 8Rank: 8

等级: 超级版主

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

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

[Python] 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# 本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
    
回复

举报

95

主题

244

帖子

254

积分

Rank: 4

等级: 专业版

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

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

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

举报

95

主题

244

帖子

254

积分

Rank: 4

等级: 专业版

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

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

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

举报

2

主题

5261

帖子

5261

积分

Rank: 8Rank: 8

等级: 超级版主

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

举报

95

主题

244

帖子

254

积分

Rank: 4

等级: 专业版

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

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

举报

2

主题

5261

帖子

5261

积分

Rank: 8Rank: 8

等级: 超级版主

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

举报

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

本版积分规则

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

GMT+8, 2025-8-17 00:25 , Processed in 0.149001 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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