金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 102|回复: 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] 复制代码
# 本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] 复制代码
# 该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] 复制代码
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-5-20 04:21 , Processed in 0.162457 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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