金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
楼主: 代人发帖

可否帮忙用PYTHON写一段

[复制链接]

41

主题

183

帖子

183

积分

Rank: 4

等级: 专业版

注册:
2021-10-19
曾用名:
发表于 2025-1-13 10:26 | 显示全部楼层
技术006 发表于 2025-1-10 17:26
从日志中看,这个策略在盘中没有执行过一次,怀疑连接行情服务器。(目前的信息和代码无关)
你明天盘中在 ...

日志上有执行,但是隔夜没有委托成功,我文件路径改了四个地方,帮我看下是不是改错了
bdb2ffb19a46b453dee6807ba3ac1f54_102636myn3nzioe3511af2.png
回复

使用道具 举报

41

主题

183

帖子

183

积分

Rank: 4

等级: 专业版

注册:
2021-10-19
曾用名:
发表于 2025-1-13 10:29 | 显示全部楼层
105190 发表于 2025-1-13 10:26
日志上有执行,但是隔夜没有委托成功,我文件路径改了四个地方,帮我看下是不是改错了

这是触发执行的日志
843ad04fdb28c3937da10c34a0b6504.jpg
回复

使用道具 举报

41

主题

183

帖子

183

积分

Rank: 4

等级: 专业版

注册:
2021-10-19
曾用名:
发表于 2025-1-13 13:04 | 显示全部楼层
技术009 发表于 2024-6-27 16:08
文件名字随便改下就行了呀。

这样改对吗?
904f7a344f53846e2f70f1a0a3313b0.png
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2025-1-13 13:10 | 显示全部楼层
本帖最后由 技术009 于 2025-1-13 13:12 编辑

最初给你的版本应该是没有出现这种问题的吧。改回之前的版本就行了。
没明白你自己修改那些地方是做啥的。原则上我们只维护金字塔的py接口,你这种早就超出了技术支持范畴了。前面给了完整范例已经是最大程度的支持了。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

41

主题

183

帖子

183

积分

Rank: 4

等级: 专业版

注册:
2021-10-19
曾用名:
发表于 2025-1-13 14:02 | 显示全部楼层
技术009 发表于 2025-1-13 13:10
最初给你的版本应该是没有出现这种问题的吧。改回之前的版本就行了。
没明白你自己修改那些地方是做啥的。 ...

改动的目的是为了解决做国债品种时,委托次日不生效问题,原来的版本只要有夜盘品种的,都没有出现问题,楼上给我的建议时修改文件路径,无夜盘品种的单独运行这个策略就可以了,如果不是PYTHON语言不懂,实盘交易没法等我慢慢学这语言来应急,我也不敢老是麻烦各位版主啊
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2025-1-13 14:17 | 显示全部楼层
是收盘时间不一样导致的。我看下怎么区分下,只改路径应该是不够的。

金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2025-1-13 15:04 | 显示全部楼层
这个只针对国债有效,如果以后还有其他品种收盘时间不一样,那同样需要新建一个策略来单独处理。我还没测试,你可以用模拟先试下。
注意 基准合约必须选择国债。
[Python] 复制代码
from PythonApi import *
import sys
import os
import numpy as np

#指定好文件名称
file_name = "order2.txt"
#  在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。--(必须实现)
def init(context):
    context.finish_pending_orders = None

# 你选择的品种的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新。--(必须实现)
def handle_bar(context):   
    if context.finish_pending_orders is None:
        file_exists = os.path.exists(file_name)
        file_not_empty = file_exists and os.path.getsize(file_name) > 0
        if file_not_empty:
            place_order()
            context.finish_pending_orders = 1
            
                    
# 收盘后触发这个方法,因此不能在收盘后立刻退出交易账户或者停止python程序
def after_trading(context):
    write_pending_orders_to_file()
    context.finish_pending_orders = None
    print('after_trading 已经触发')

# 把未成交单写入到软件根目录下的一个txt里
def  write_pending_orders_to_file():
    order_list = get_orders("all", 0)
    if not order_list is None:
        for order in order_list:
                book_id  = order.order_book_id # 品种代码
                #过滤品种代码中的数值             
                stk = ''.join(c for c in book_id if not c.isdigit())
                #市场代码
                MARKETLABEL = stk[:2]
                stk = stk[2:]
                #只处理国债品种
                if not stk in ('T','TF','TL','TS'):
                    continue
                point = round(get_dynainf(book_id,208),7) # Point是最小变动价位的小数位
                if int(point)>0:
                    point = 0
                else:
                    point = len(str(point).split(".")[1])                
                
                side = order.side  # 订单方向 "buy"买:"sell"卖
                position_effect = order.position_effect  # 开平标志 "open"开仓 "close"平仓
                price = str(np.around(order.price,decimals=point+1)) # 委托价格,仅对限价有效
                unfilled_quantity =  str(order.unfilled_quantity) # 未成交的数量
                lines = [book_id,side,position_effect,price,unfilled_quantity]                
                with open(file_name, "a") as file:
                    file.writelines(' '.join(lines)+'\n')    
                    
# 执行下单,并清空历史的未成交单记录        
def place_order():                
    with open(file_name, "r") as file:
        for line in file:
            if not line.strip():
                continue
            book_id,side,position_effect,price,unfilled_quantity =  line.split()
            point = round(get_dynainf(book_id,208),7) # Point是最小变动价位的小数位
            if int(point)>0:
                point = 0
            else:
                point = len(str(point).split(".")[1]) 
                
            function_name = side+"_"+position_effect
                # 从全局环境中直接获取到 具体的函数
            function_object = getattr(sys.modules[__name__], function_name)
            try:
                function_object(book_id,"Limit",price = np.around(float(price),decimals=point+1),volume = int(unfilled_quantity))
            except Exception as ex:
                raise
        # 下完单直接清空内容
        with open(file_name, "w") as file:
            pass
                    
                
                
    

金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

41

主题

183

帖子

183

积分

Rank: 4

等级: 专业版

注册:
2021-10-19
曾用名:
发表于 2025-1-14 09:44 | 显示全部楼层
技术009 发表于 2025-1-13 15:04
这个只针对国债有效,如果以后还有其他品种收盘时间不一样,那同样需要新建一个策略来单独处理。我还没测试 ...

好的 谢谢!!!
回复

使用道具 举报

41

主题

183

帖子

183

积分

Rank: 4

等级: 专业版

注册:
2021-10-19
曾用名:
发表于 2025-6-24 10:01 | 显示全部楼层
请问下 执行国债隔夜委托时失败,提示以下这段话如何解决?
8ef07f33eae01adbbba32acf243304d.png
3148efcada156dbc16a515ef63dc396.png
812646a1f6cf523d9c40c010ad04754.png
回复

使用道具 举报

3

主题

790

帖子

831

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-10
曾用名:
发表于 2025-6-25 13:43 | 显示全部楼层
105190 发表于 2025-6-24 10:01
请问下 执行国债隔夜委托时失败,提示以下这段话如何解决?

交易柜台没有开盘,直接被拒单了。这种现象一般多出现在模拟交易柜台中。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-30 12:27 , Processed in 0.183120 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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