金字塔决策交易系统

用户名  找回密码
 

微信登录

微信扫一扫,快速登录

帖子
查看: 827|回复: 1

Python代码范例

[复制链接]

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2025-5-7 13:24 | 显示全部楼层 |阅读模式
本帖最后由 技术009 于 2025-5-7 14:54 编辑

本帖通过范例展示一些python相关的代码思路,具体落实到客户策略中的使用,建议先行理解其中的逻辑和思路,不宜生搬硬套。

1#
追撤单
结算价(分时均价)

时间类型转换





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

举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
 楼主| 发表于 2025-5-7 13:25 | 显示全部楼层
本帖最后由 资深技术05 于 2025-5-12 13:05 编辑

追撤单

通过对未成交属性的获取,直接拼接出追单函数名称,从全局环境中直接获取到这个函数。代码更加简洁~
[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
43
44
45
# 本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()
            #10秒未成交,追撤单
            if seconds_difference>=10:
                Chase_withdraw(context,order)
                             
     
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
     
         
         
         
         
        



结算价

注意该函数是一个生成器函数,返回结果是一个生成器,不是直接的数值列表.

[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
# 该Python代码用于模块定义,供其他Python代码或VBA调用。
import pandas as pd
from PythonApi import *
import datetime
import numpy as np
 
 
def calculate_settle(stklabel,datalen):
    dt = history_bars(stklabel,datalen,'1m',['datetime','close','volume'])
    if dt is None:
        return
        #Point是最小变动价位的小数位      
    point = round(get_dynainf(stklabel,208),7)      
    if int(point)>0:
        point = 0          
    else:
        point = len(str(point).split(".")[1]) 
    #对close做 指定到小数位的四舍五入处理,降低累计的浮点误差值
    dt[:, 1] = np.around(dt[:, 1], decimals=point)   
    sum_cmulv = 0
    sum_v = 0
    currentdate = 0
    for item in dt:
        datetime,close,volume = item
        if (datetime // 1000000)*1000000 != currentdate:
            currentdate = (datetime // 1000000)*1000000
            sum_cmulv = 0
            sum_v = 0       
        sum_cmulv = sum_cmulv + close*volume
        sum_v = sum_v + volume
        yield (datetime,round(sum_cmulv/sum_v,point))

时间类型转换

系统默认的数据接口返回的 日期数值类型都是float类型(numpy数组值类型必须一致),因此我们经常需要做一些类型转换。
但是需要注意,不建议大批量的进行这种日期类型转换,只在需要使用的地方进行即可。

[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
import pandas as pd
from PythonApi import *
import datetime
import itertools
import numpy as np
 
 
# float类型转为datetime类型
def convert_to_datetime(date):
    int_value = int(date)   
    year = int_value // 10000000000
    month = (int_value % 10000000000) // 100000000
    day = (int_value % 100000000) // 1000000
    hour = (int_value % 1000000) // 10000
    minute = (int_value % 10000) // 100
    second = int_value % 100
    return datetime.datetime(year,month ,day, hour, minute, second)
# float类型转为datetime.time类型
def convert_to_time(date):
    int_value = int(date)   
    hour = (int_value % 1000000) // 10000
    minute = (int_value % 10000) // 100
    second = int_value % 100
    return datetime.time(hour, minute, second)
# float类型转为格式化的str类型
def convert_to_str(timestamp):
    timestamp_str = str(int(timestamp))
    formatted_date = f"{timestamp_str[:4]}-{timestamp_str[4:6]}-{timestamp_str[6:8]} {timestamp_str[8:10]}:{timestamp_str[10:12]}:{timestamp_str[12:14]}"
    return formatted_date


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

举报

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

本版积分规则

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

GMT+8, 2025-8-14 22:15 , Processed in 0.102573 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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